Ось загальний спосіб встановлення специфічних для буфера прив’язок ключів.
- Створіть тимчасовий другорядний режим (збережіть фрагмент нижче
temp-mode.el
та require
його у своєму init.el
.
- Увімкніть цей
temp-mode
мінорний режим та визначте мапу клавіш мінорного режиму лише у потрібних буферах.
Помістіть Local Variables
фрагмент нижче в буфер, де потрібно прив’язати спеціальний ключ. Нижче наведено приклади org-mode
файлів.
У буфері ONE
# Local Variables:
# eval: (temp-mode 1)
# eval: (define-key temp-mode-map (kbd "<f10>") 'function-ONE)
# End:
Якщо якийсь інший буфер перевизначає те саме прив'язування ключа, використовуючи,
У буфері ДВА
# Local Variables:
# eval: (temp-mode 1)
# eval: (define-key temp-mode-map (kbd "<f10>") 'function-TWO)
# End:
тоді нова прив'язка набуває чинності при виконанні M-x revert-buffer
.
Це я б робив, якщо мені потрібно дуже часто перемикатися між цими двома буферами, і якщо мені доведеться використовувати F10зв'язування в обох:
- Працюйте в буфері ОДНО,
C-x C-s
(збережіть) і перейдіть на буфер ДВОЙ
revert-buffer
(оновіть прив’язки), працюйте в буфері ДВОЕ C-x C-s
і перейдіть на буфер ОДНО
revert-buffer
(оновіть прив’язки), працюйте в буфері ONE C-x C-s
і перейдіть на буфер ДВОЙ
Але я б швидше прив’язував різні команди, характерні для буфера, до різних клавіш.
Тимчасовий другорядний режим
;; temp-mode.el
;; Temporary minor mode
;; Main use is to enable it only in specific buffers to achieve the goal of
;; buffer-specific keymaps
(defvar temp-mode-map (make-sparse-keymap)
"Keymap while temp-mode is active.")
;;;###autoload
(define-minor-mode temp-mode
"A temporary minor mode to be activated only specific to a buffer."
nil
:lighter " Temp"
temp-mode-map)
(provide 'temp-mode)