Как я могу установить привязку ключа, которая глобально переопределяет и имеет приоритет над всеми другими привязками для этого ключа? Я хочу переопределить все карты основного / второстепенного режима и убедиться, что моя привязка всегда действует.
Это, конечно, не работает:
(global-set-key "\C-i" 'some-function)
Он работает text-mode
, но когда я использую lisp-mode
, C-i
он восстанавливается lisp-indent-line
.
Я могу пройти и переопределить эту привязку в lisp-mode
каждом другом режиме индивидуально, но должен быть более простой способ. Каждый раз, когда я устанавливаю новый режим для нового типа файла, мне приходилось возвращаться и проверять, не отменяются ли все мои привязки клавиш в новом режиме.
Я хочу сделать это, потому что хочу имитировать привязки, которые я уже изучил и усвоил у других редакторов.
источник
В дополнение к ответу scottfrazer я написал следующее, чтобы мои привязки клавиш сохраняли приоритет, даже если впоследствии загруженные библиотеки вводят новые собственные таблицы клавиш.
Поскольку раскладки клавиатуры могут быть сгенерированы во время компиляции,
load
мне показалось, что это лучшее место для этого.источник
Установите
use-package
, оцените, и все готово:источник
use-package
:Install package: use-package [No Match]
Я нашел этот вопрос при поиске «emacs undefine org mode keybindings», потому что я хотел отвязать существующее поведение Cc Cb, чтобы моя глобальная карта для скрытого буфера работала в организационном буфере.
Это оказалось для меня самым простым решением:
источник
Хотя ответ Скоттфразера - это именно то, о чем вы просили, я упомяну для потомков другое решение.
Из руководства Emacs :
Если вы привязываете свои личные глобальные привязки к копии с буквой, тогда вы «должны» быть в безопасности. Однако это всего лишь соглашение, и любой режим все еще может переопределить ваши привязки.
источник
Если вы хотите «всегда использовать привязки клавиш на карте, если я явно не переопределяю их для конкретной карты режимов» и предполагая, что вы используете подход Скоттфразье , вам нужно:
Так
должен удалить привязку "\ Ci" только из второстепенного режима в текущем буфере. Предупреждение: это полностью непроверено, но похоже на правильный подход. Точка установки родителя, а не просто копирование глобального значения my-keys-minor-mode-map заключается в том, чтобы любые последующие изменения глобального значения автоматически отражались в локальном значении.
источник
Я не думаю, что ты сможешь. Это примерно эквивалентно тому, что вы хотите определить глобальную переменную, которую нельзя скрыть с помощью объявлений локальных переменных в функциях. Сфера просто так не работает.
Однако может быть способ написать функцию elisp для просмотра списка режимов и переназначения ее для каждого отдельного пользователя.
источник
overriding-local-map
специально разработана для отмены всех других карт. Однако пользоваться им опасно.Если вы действительно не хотите сделать это самостоятельно, вам следует проверить, не делал ли это кто-нибудь еще.
Для Emacs есть пакет, который дает вашим Windows-подобным сочетаниям клавиш. Вы сможете найти его через Google.
источник
cua-mode
.