Я полагаю, что два описанных вами подхода менее различны, чем вы думаете.
Обратите внимание, что local-set-key
на самом деле оценивает (define-key map key command)
, где map
- это значение (current-local-map)
, которое обычноустанавливается основным режимом.
Таким образом, хотя они могут делать разные вещи;Большую часть времени единственное реальное отличие будет в том, что функция ловушки с помощью вызова local-set-key
будет устанавливать тот же ключ повторно / избыточно, тогда как другой подход устанавливает его только один раз.
Вы можете продемонстрировать этосамостоятельно, используя local-set-key
в перехватчике режима, удаляя эту функцию перехвата после ее использования, а затем создавая новый буфер в том же основном режиме и проверяя привязку.
менее подверженпорвать с новыми версиями emacs
Полагаю, вы могли бы утверждать, что имя раскладки клавиатуры может измениться в будущем, и поэтому не нужно знать, что это имя является преимуществом, но вы могли бы также сказать, что имяХук режима может измениться.Я не думаю, что этого достаточно для беспокойства.
Следует отметить, что local-set-key
будет работать, даже если основной режим не установил current-local-map
, что, я думаю, делает егонемного более устойчивый, чем обобщенные подходы.
менее подвержен беспокойству / потревоженным активными второстепенными режимами
Нет никакой разницы.Все второстепенные комбинации клавиш имеют приоритет над всеми основными клавишами режима, и ни один из подходов не окажет никакого влияния на порядок minor-mode-map-alist
(который определяет приоритет второстепенных комбинаций клавиш).
более идиоматический/ readable / поделиться с другими
Они оба полностью читаемы, на мой взгляд, поэтому я не могу различить их и в этом аспекте.
Я говорю, просто используйте тот подход, который кажетсялучшее для вас в каждом контексте.Я думаю, что хорошо иметь стандартный подход для большинства вещей для согласованности в вашем коде, но я сомневаюсь, что имеет значение, какой из них вы выберете.Очевидно, что можно сэкономить несколько циклов ЦПУ, если не оценивать один и тот же код без необходимости, но это должно иметь столь малое значение, чтобы вообще не волноваться.
Я думаю, что наиболее очевидный случай для одного над другим - это тот, который вы уже упомянули - если вы хотите применить одну и ту же привязку к нескольким режимам, используя общий хук (но не к all режимы - для этого я настоятельно рекомендую создать собственный второстепенный режим ), тогда local-set-key
в этом хуке - определенно правильный путь.