Можно ли установить привязки клавиш, специфичные для буфера?
В одном из моих файлов org есть следующее:
# Local Variables:
# eval: (local-set-key (kbd "<f10>") 'some-custom-defun-specific-to-this-buffer)
# End:
Но эта привязка сохраняется и для других файлов режима org. Если я открываю файл с другим основным режимом, то начинает действовать моя привязка ключа по умолчанию.
Похоже, local-set-key
устанавливает привязки, специфичные для основного режима, а не для буфера.
Как я могу иметь привязки, которые активируются только в определенном буфере?
key-bindings
keymap
file-local-variables
Каушал Моди
источник
источник
local-unset-key
зацепка»org-mode-hook
может сработать, если она будет выполнена до того, как будет созданLocal Variables:
раздел.Local Variables:
Ответы:
Для завершения, вот ответ, который расширяет мой комментарий. Я определяю второстепенный режим с необходимой привязкой клавиш и переключаю его в нужный буфер, используя локальные переменные файла.
Вы можете включить его в необходимые файлы, установив раздел локальных переменных в конце файла следующим образом. Вы также можете изменить или добавить связывание клавиш здесь. Вам все равно нужно будет определить разные второстепенные режимы для каждого буфера, который отображает одну и ту же последовательность клавиш на разные команды.
источник
eval-buffer: Symbol's value as variable is void: my-org-buffer-local-mode-map
когда я пытаюсь запустить это(define-minor-mode my-org-buffer-local-mode "Minor mode to simulate buffer local keybindings." :init-value nil) (define-key my-org-buffer-local-mode-map (kbd "<f10>") 'some-custom-defun-specific-to-this-buffer)
:keymap
ключевым словом, проверьте nullprogram.com/blog/2013/02/06Вот общий способ установки привязок клавиш для конкретного буфера.
temp-mode.el
и добавьтеrequire
его в свойinit.el
.temp-mode
второстепенный режим и определите раскладку этого второстепенного режима только в нужном вам буфере.Поместите приведенный ниже
Local Variables
фрагмент в буфер, где вы хотите, чтобы пользовательская привязка ключа. Ниже приведены примерыorg-mode
файлов.В буфере ОДИН
Если какой-то другой буфер переопределяет ту же привязку ключа, используя
В буфере ДВА
тогда новая привязка вступает в силу
M-x revert-buffer
.Это то, что я сделал бы, если бы мне нужно было очень часто переключаться между этими двумя буферами и использовать F10привязку в обоих:
C-x C-s
(сохранить) и переключиться в буфер ДВАrevert-buffer
(обновить привязки), работать в буфере TWOC-x C-s
и переключиться в буфер ONErevert-buffer
(обновить привязки), работать в буфере ONEC-x C-s
и переключиться в буфер TWOНо я бы предпочел привязать разные специфичные для буфера команды к разным клавишам.
Временный второстепенный режим
источник