Через несколько лет, настроив мой файл .emacs
, я обнаружил, что использовал два разных
типы конструкций для установки привязок ключевых привязок к основному режиму:
1. с помощью крючка и local-set-key
. Например:
(defun my/bindkey-recompile ()
"Bind <F5> to `recompile'."
(local-set-key (kbd "<f5>") 'recompile))
(add-hook 'c-mode-common-hook 'my/bindkey-recompile)
Я бы сказал, что эта конструкция упрощает использование тех же ключевых привязок для различные основные режимы, добавив одну и ту же функцию ко всем соответствующим основным режимам крючки (другими словами, "какие ключевые привязки я хочу" четко разделены из "для каких режимов я их хочу" ). Однако мне не нравится тот факт, что такие настройки выполняются на уровне буфера, тогда как я бы думаю, что они принадлежат к основному режиму.
2., используя define-key
(часто в сочетании с eval-after-load
для задержки до тех пор, пока не будет загружена соответствующая карта клавиатуры). Например:
(eval-after-load "cc-mode"
'(progn
(define-key c-mode-map (kbd "C-c o") 'ff-find-other-file)
(define-key c++-mode-map (kbd "C-c o") 'ff-find-other-file)))
В отличие от этого, эта конструкция настраивает сам основной режим, но меньше
гибкий: если я хочу использовать те же привязки клавиш для другого режима, у меня будет
найти правильные имена файлов и клавиатур для этого режима и почти дублировать
выражение eval-after-load
(хотя это, вероятно, можно было бы автоматизировать с помощью
функция/макрос).
Вопрос:, хотя оба типа конструкций работают хорошо и дают результат I хотят, они технически очень разные, настраивая ключевые привязки в различные раскладки клавиатуры в разное время. Поэтому мой вопрос: среди этих двух конструкций, есть ли "предпочтительный/лучший" способ сделать что-то? (Или, может быть, "лучший" конструкция является третьей, о которой я не знаю?)
Под "предпочтительным/лучшим" я имею в виду такие вещи, как:
- менее подвержен перерыву с новыми версиями emacs
- менее подвержен нарушению/нарушению активными второстепенными режимами
- более идиоматический/читаемый/доступный с другими