在EMACS org.mode中覆盖Ctrl-TAB

时间:2010-12-02 09:32:34

标签: emacs keyboard-shortcuts org-mode

我想在EMACS中使用 Ctrl + Tab 供我自己使用,但是Emacs组织模式已经有了此限制。我如何使用自己的绑定而不是org-mode绑定。

在我的 .emacs 文件中,我使用:

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

除了org-mode

外,它可以在任何地方使用

3 个答案:

答案 0 :(得分:22)

您描述的键绑定在org.el中定义如下:

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

这意味着它仅在org-mode-map中有效,这是org-mode的本地键盘映射之一。以下代码添加了在org-mode启动时运行的 hook 。它只是从org-mode-map中删除了该键绑定。

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

将此代码添加到.emacs文件中,然后重新启动emacs。

答案 1 :(得分:5)

设置要在无处不在生效的键绑定的更健壮的方法,无论主要模式如何,都是使用自定义键映射定义全局次要模式。

  

次要模式也可以有本地键盘图;每当辅助模式生效时,其键映射中的定义都会覆盖主模式的本地键映射和全局键映射

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

这样,每次遇到破坏键绑定的模式时,您都不需要乱用主模式的本地键盘映射。

有关详细信息,请参阅此问答:
Globally override key binding in Emacs

答案 2 :(得分:2)

这不起作用,因为正如你所说,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时,您应该好好去。