Переопределение Ctrl-TAB в EMACS org.режим
Я хотел бы использовать Ctrl + Tab в EMACS для моего собственного использования, но режим Emacs org уже имеет эту привязку. Как я могу использовать свою собственную привязку вместо привязки в режиме организации?
В моем .emacs файл, который я использую:
(global-set-key (kbd "<C-tab>") 'switch-view )
И он работает везде, кроме орг-режима
3 ответа:
Ключевая привязка, которую вы описываете, определяется в
org.el
следующим образом:(org-defkey org-mode-map [(control tab)] 'org-force-cycle-archived)
Это означает, что он действителен только в
org-mode-map
, одной из локальных карт ключей org-mode. Следующий код добавляет крюк , который запускается при запуске режима org. Он просто удаляет эту привязку ключа изorg-mode-map
.(add-hook 'org-mode-hook '(lambda () (define-key org-mode-map [(control tab)] nil)))
Добавьте этот код к своему .файл emacs, а затем перезагрузите emacs.
Более надежный способ задать привязки клавиш, которые вы хотите применитьвезде независимо от основного режима, - это определить глобальный второстепенный режим с пользовательской привязкой клавиш.
Второстепенные режимы также могут иметь локальные ключевые карты; всякий раз, когда второстепенный режим действует, определения в его ключевой карте переопределяют как локальную ключевую карту основного режима, так и глобальную ключевую карту
( http://www.gnu.org/software/emacs/manual/html_node/emacs/Local-Keymaps.html )
Что таким образом, вам не нужно возиться с локальной клавиатурой основного режима каждый раз, когда вы сталкиваетесь с режимом, который ударяет по вашей связке клавиш.
Смотрите этот вопрос и ответ Подробнее:
глобально переопределить привязку ключей в Emacs
Это не работает, потому что, как вы сказали, org-mode использует свою собственную привязку клавиш для C-TAB. Другими словами, даже если вы определяете глобальную привязку ключей, как только вы вызываете org-mode, он перезапишет эту привязку своими локальными привязками ключей.
Однако вы можете добавить функцию обратного вызова, которая вызывается при каждом запуске org-mode, и в этой функции обратного вызова вы сбрасываете C-TAB для вызова switch-view:(add-hook 'org-mode-hook (lambda () (local-set-key [(control tab)] 'switch-view)))
Поместите вышеуказанную строку в свой .файл emacs и в следующий раз, когда вы начнете новые Emacs вы должны быть хороши, чтобы пойти.