Думаю, вы, как и я, не можете позволить себе пользоваться только английской раскладкой клавиатуры. Так или иначе для работы приходится использовать обе: и русскую, и английскую. В целом это не доставляет никаких проблем, пока дело не касается Emacs.
Не знаю почему, но в нём горячие клавиши в русской раскладке просто перестают работать. Видимо, сказывается страшное наследие «ASCII — единственно возможный набор символов для всех языков мира». Возможно, есть какие‑то другие причины.
Тем не менее в Emacs есть свой довольно странный способ переключения раскладок (Input Method в терминах Emacs): C-\. Я никогда не находил этот вариант приемлемым и переключался на английскую раскладку каждый раз. Но я всё‑таки нашёл способ, как избежать этого и заставить горячие клавиши работать вне зависимости от раскладки клавиатуры.
Этот сниппет взят с небольшими изменениями из поста, написанного Владимиром «Горячие клавиши Emacs в русской раскладке».
Чтобы использовать его, вставьте код в конфигурационный файл вашего Emacs:
(defun reverse-input-method (input-method)
"Build the reverse mapping of single letters from INPUT-METHOD."
(interactive
(list (read-input-method-name "Use input method (default current): ")))
(if (and input-method (symbolp input-method))
(setq input-method (symbol-name input-method)))
(let ((current current-input-method)
(modifiers '(nil (control) (meta) (control meta))))
(when input-method
(activate-input-method input-method))
(when (and current-input-method quail-keyboard-layout)
(dolist (map (cdr (quail-map)))
(let* ((to (car map))
(from (quail-get-translation
(cadr map) (char-to-string to) 1)))
(when (and (characterp from) (characterp to))
(dolist (mod modifiers)
(define-key local-function-key-map
(vector (append mod (list from)))
(vector (append mod (list to)))))))))
(when input-method
(activate-input-method current))))
(reverse-input-method 'russian-computer)
Если вы пользуетесь Spacemacs, то вставьте следующий код в список dotspacemacs-configuration-layers в вашем файле .spacemacs:
(reverse-input-method
:location (recipe
:fetcher github
:repo "avkorablev/reverse-input-method-layer"))
)
И этот код — в тело функции dotspacemacs/user-config:
(reverse-input-method 'russian-computer)
Работает идеально. Единственный недостаток обнаружился при пересчёте формулы в таблицах Org Table: для этой операции используется хоткей C-c-*, а на моём Mac клавиша * меняет своё положение в русской раскладке.