全局覆盖emacs键绑定

时间:2011-03-16 21:47:30

标签: emacs elisp key-bindings

是否有一个全局覆盖键绑定的命令,以便它甚至覆盖主要模式的本地设置? global-set-key被主要模式绑定覆盖,如下所述:http://www.gnu.org/software/emacs/manual/html_node/emacs/Rebinding.html

2 个答案:

答案 0 :(得分:6)

不,没有(内置)方法来设置覆盖所有其他键的绑定。查看Emacs如何通过阅读"Searching the Active Keymaps"来搜索键映射。

您可以将overriding-terminal-local-mapoverriding-local-map设置为包含所需绑定的键盘映射,但这会阻止您的缓冲区使用任何缓冲区/覆盖/次模式键盘映射,几乎会阻止大多数Emacs。

Emacs查找绑定的下一个区域位于当前点的character属性中 - 可能并未在整个地方使用,但它是覆盖绑定的一种方式(除非您使用字符属性进行定义)你的钥匙到处都是,非常icky)。

Emacs看起来的下一个地方是变量emulation-mode-map-alists,这可能是你最好的选择。它设置用于在需要处理多个小模式键盘映射的情况下使用的包。

制作全球次要模式(请参阅Defining Minor Modes),将您的密钥绑定放入其中,将次要模式和键盘映射添加到emulation-mode-map-alists,然后启用您的未成年人模式。

现在,您的密钥绑定优先于所有其他密钥,但emulation-mode-map-alist列表中较早的密钥绑定或字符属性中的密钥绑定或overriding-local-map中的密钥绑定...

我相信这是你能做的最好的事情,不用黑客攻击Emacs来源。

答案 1 :(得分:5)

在小模式键绑定覆盖我的个人全局绑定的情况下,我有幸使用add-hook + local-unset-key

(add-hook'undo-tree-mode   (lambda()     (local-unset-key“C - /”)))