Переопределение Ctrl-TAB в EMACS org.режим


Я хотел бы использовать Ctrl + Tab в EMACS для моего собственного использования, но режим Emacs org уже имеет эту привязку. Как я могу использовать свою собственную привязку вместо привязки в режиме организации?

В моем .emacs файл, который я использую:

(global-set-key (kbd "<C-tab>") 'switch-view )

И он работает везде, кроме орг-режима

3 13

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 вы должны быть хороши, чтобы пойти.