Переопределить Ctrl-TAB в EMACS org.mode - PullRequest
13 голосов
/ 02 декабря 2010

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

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

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

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

Ответы [ 3 ]

22 голосов
/ 02 декабря 2010

Связывание ключей, которое вы описываете, определяется в org.el следующим образом:

(org-defkey org-mode-map [(control tab)] 'org-force-cycle-archived)

Это означает, что оно действительно только в org-mode-map, одной из локальных таблиц ключей режима org.Следующий код добавляет hook , который запускается при запуске режима org.Он просто удаляет эту привязку ключа из org-mode-map.

(add-hook 'org-mode-hook
          '(lambda ()
             (define-key org-mode-map [(control tab)] nil)))

Добавьте этот код в файл .emacs и затем перезапустите emacs.

5 голосов
/ 03 декабря 2010

Более надежный способ установить комбинации клавиш, которые вы хотите применить везде независимо от основного режима, - это определить глобальный второстепенный режим с помощью пользовательской таблицы ключей.

Незначительные режимы также могут иметь локальные раскладки клавиш; всякий раз, когда действует второстепенный режим, определения в его таблице ключей переопределяют как локальную карту ключей основного режима, так и глобальную таблицу ключей

(http://www.gnu.org/software/emacs/manual/html_node/emacs/Local-Keymaps.html)

Таким образом, вам не нужно связываться с локальной картой ключей основного режима каждый раз, когда вы сталкиваетесь с режимом, который блокирует связывание клавиш.

См. Этот Q & A для деталей:
Глобальное связывание ключей в Emacs

2 голосов
/ 02 декабря 2010

Это не работает, потому что, как вы сказали, org-mode использует собственную привязку клавиш для C-TAB. Другими словами, даже если вы определите глобальную привязку клавиш, как только вы вызовете org-mode, она перезапишет эту привязку своими локальными привязками клавиш.

Однако вы можете добавить функцию обратного вызова, которая вызывается всякий раз, когда вы запускаете режим org, и в этой функции обратного вызова вы сбрасываете C-TAB для вызова режима переключения:

(add-hook 'org-mode-hook (lambda () (local-set-key [(control tab)] 'switch-view)))

Поместите вышеприведенную строку в ваш файл .emacs, и в следующий раз, когда вы запустите новый Emacs, вам будет хорошо.

...