Русская раскладка для Mac-клавиатуры в Emacs

18 June 2019

Последний месяц моим основным редактором является Emacs. Использую его активно и постоянно.

Для переключения раскладок клавиатуры используется встроенное средство, и для русского языка представлены несколько различных раскладок клавиатуры:

  1. cyrillic-jis-russian
  2. russian-computer
  3. cyrillic-jcuken
  4. russian-typewriter

Обычно использовал второй вариант, russian-computer, который соответствует стандартной PC-клавиатуре. Проблема заключается в том, что уже много лет использую Mac, раскладка клавиатуры которого отличается от стандартной. В результате когда работаешь в других программах, у тебя используется одна раскладка, а когда переключаешься в Emacs на русский язык, совершенно другая. Начинаешь допускать ошибки, пока ментально не переключишься на новую раскладку. Но проходит время и все повторяется вновь.

Используемая раскладка для russian-computer:

1! 2" 3№ 4; 5% 6: 7? 8* 9( 0) -_ =+ \/ ёЁ
 Й  Ц  У  К  Е  Н  Г  Ш  Щ  З  Х  Ъ
  Ф  Ы  В  А  П  Р  О  Л  Д  Ж  Э
   Я  Ч  С  М  И  Т  Ь  Б  Ю  .,

Раскладки для Mac-клавиатуры я так и не нашел, потому решил создать свою. Результат представлен в репозитории juev/russian-mac. Использовать просто, достаточно разместить файл russian-mac.el в load-path и загрузить его:

(load-file "~/.emacs.d/russian-mac.el")
(set-input-method "russian-mac")

Либо, если вы используете straigth:

(use-package russian-mac
  :straight (:host github :repo "juev/russian-mac")
  :config
  (setq-default default-input-method "russian-mac"))

Данный кусочек кода загрузит модуль и установит новую раскладку клавиатуры, которая будет выглядеть так:

1! 2" 3№ 4% 5: 6, 7. 8; 9( 0) -_ =+
 Й  Ц  У  К  Е  Н  Г  Ш  Щ  З  Х  Ъ
  Ф  Ы  В  А  П  Р  О  Л  Д  Ж  Э  ёЁ
   Я  Ч  С  М  И  Т  Ь  Б  Ю  /?

Сначала возникла мысль отправить патч разработчикам Emacs, но потом передумал. Людей, использующих Emacs в работе мало, а тех кто им пользуется с Mac-клавиатурой еще меньше. И судя по тому, что никто не задавался этим вопросом, не так актуален вопрос. В результате решил оставить пакет в виде стороннего решения. Буду рад, если это немного облегчит вашу жизнь.