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