Пользовательские привязки клавиш для конкретного режима emacs: local-set-key vs define-key

После нескольких лет настройки моего .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. использование ключа определения(часто в сочетании с 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 хотите, технически они очень разные, настройка привязки клавиш в разные раскладки в разное время.Итак, мой вопрос: среди этих двух конструкции, есть ли «предпочтительный/лучший» способ сделать что-то? (Или, может быть, «лучший» является третьей, о которой я не знаю?)

Под «предпочтительнее/лучше» я имею в виду такие вещи, как:

  1. менее склонны ломаться с новыми версиями emacs
  2. менее склонны беспокоить/быть беспокоят активные второстепенные лады
  3. более идиоматичны / читабельны / доступны другим
22
задан ffevotte 22 March 2012 в 07:51
поделиться