2014-02-09 40 views
1

我想使用撤消树模式,并且我已经成功设置了撤销/重做密钥绑定。Emacs - 密钥重新绑定不起作用

但是,当我尝试用我写的注释函数覆盖默认值的绑定时,组合仍然被绑定到undo-tree-undo。

这里是我的尝试:

(eval-after-load 'my-functions 
    '(eval-after-load 'undo-tree 
    '(define-key global-map (kbd "C-/") 'my-commenting-function))) 

我有它后,我的函数加载所以我-注释功能可以被调用。

尝试此,与撤销树模式启用后,C-/仍难免撤销树,撤销,而不是我的,评论功能。

如何将我想要的功能更改为C-/的撤消树模式键绑定?

回答

4

这样做是为了定义一个全局绑定:

(global-set-key (kbd "C-/") 'my-commenting-function) 

这样做是为了从覆盖它阻止未成年人模式:

(define-key undo-tree-map (kbd "C-/") nil) 
1

正如@ ABO血型ABO已经提到的问题是订单在其中评估键绑定。如果你读Emacs的文档(http://www.gnu.org/software/emacs/manual/html_node/elisp/Active-Keymaps.html#Active-Keymaps),你会看到键盘布局顺序进行搜索:

keymap, minor mode maps, local keymap, global keymap 

有两种方法避免那种走样你描述的。可以直接修改任何冲突或设置缓冲区键盘映射的小模式键盘映射(例如使用钩子函数)。此外还有一个约定,C-c'字母'保留给用户映射,理论上不应该被任何其他模式覆盖,因此您可以考虑使用其中一种绑定。

+1

还有另一种方法,就是为您的所有keymappings创建您自己的次要模式键盘映射。我正在使用用户* scottfrazer *在这里解释的那个(71 + upvotes当我键入这个),它工作正常(并且似乎很好地覆盖C// *撤消树地图* OP在他的问题中提到):http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs – TacticalCoder