Глобальное переопределение сочетаний клавиш Emacs - PullRequest
9 голосов
/ 17 марта 2011

Есть ли команда для глобального переопределения привязки клавиш, чтобы она перекрывала даже локальные настройки основных режимов?global-set-key переопределяется привязками основного режима, как указано здесь: http://www.gnu.org/software/emacs/manual/html_node/emacs/Rebinding.html

Ответы [ 2 ]

6 голосов
/ 17 марта 2011

Нет, нет (встроенного) способа настроить привязку клавиш, которая переопределяет все остальные.Посмотрите, как Emacs ищет карту ключей, прочитав «Поиск активных таблиц ключей» .

Вы можете установить overriding-terminal-local-map или overriding-local-map для таблицы ключей, содержащей желаемую привязку, но это 'd) чтобы ваш буфер не имел каких-либо таблиц ключей буфера / оверлея / второстепенного режима, в значительной степени отключая большинство Emacs.

Следующая область, в которой Emacs ищет привязку, находится в свойстве символа в текущей точке - что, вероятно,не используется повсеместно, но это один из способов, которым ваша привязка будет переопределена (если только вы не перебираете свойства символа, чтобы определить свой ключ везде, действительно странно).

Следующее место, которое Emacs ищет, находится в переменнойemulation-mode-map-alists, что, вероятно, является вашей лучшей ставкой.Он был настроен для использования пакетами в тех случаях, когда требуется несколько комбинаций клавиш вспомогательного режима, которые он хочет жонглировать.

Сделать глобальный второстепенный режим (см. Определение второстепенных режимов ), поместите туда связывание ключей, добавьте свой второстепенный режим и раскладку ключей в emulation-mode-map-alists и включите свой второстепенный режим.

Ваша привязка клавиш теперь будет иметь приоритет над всеми остальными, кроме ранеесписок emulation-mode-map-alist, или в свойствах персонажа, или в overriding-local-map ...

Я считаю, что это лучшее, что вы можете сделать, без взлома источника Emacs.

5 голосов
/ 18 марта 2011

В случае незначительных комбинаций клавиш режима, переопределяющих мои личные глобальные привязки, мне повезло, используя add-hook + local-unset-key

(add-hook 'undo-tree-mode (лямбда () (локальная клавиша unset "C - /")))

...