Подтвердить что ты не робот

Переопределить Ctrl-TAB в EMACS org.mode

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

В моем файле .emacs я использую:

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

и работает везде, кроме org-mode

4b9b3361

Ответ 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, вам должно быть хорошо идти.