由global-set-key掩盖的ido-mode绑定

时间:2012-03-26 18:23:18

标签: emacs elisp

计算器!在过去的几天里,我试图稍微调整我的emacs,我遇到了一个我不知道如何处理的问题。

我要做的是定义一个全局键绑定和一个ido-mode键绑定,它将使用相同的键来执行不同的操作。

Ido-mode keybinding以这种方式定义:

(defun ido-my-keys ()
  "Add my keybindings for ido."
  (define-key ido-completion-map (kbd "M-<return>") 
    'ido-invoke-in-vertical-split)
  )

(add-hook 'ido-setup-hook 'ido-my-keys)

它可以正常工作,直到我将以下行放在我的.emacs文件中:

(global-set-key (kbd "M-<return>") 'insert-newline-and-indent)

使用此行存在M-return甚至从ido-switch-buffer调用insert-newline-and-indent。有趣的是,当我以交互方式使用global-set-key时(即不是来自init-file而是来自M-x调用),一切都按预期工作。

感谢您的帮助。抱歉我的英文。


问题原来是我打开的ergoemacs模式。此模式定义了导致此效果的global-set-key的建议。

我通过在ergoemacs初始化之上移动global-set-key调用来解决问题。不是最好的解决方案,而是一个简单的解决方案。

1 个答案:

答案 0 :(得分:3)

问题是由ergoemacs-keybindings包引起的,或者更具体地说,是由ergoemacs-mode.el

引起的。

该软件包定义了global-set-key的建议,实际上,它是用自己的ergoemacs-global-set-key替换它的。但由于ergoemacs是次要模式,因此其键映射的优先级高于全局映射,从而覆盖了ido次模式的键绑定。

我看到了解决该问题的三种方法:

  1. ergoemacs-mode.el中的评论建议。
  2. 在打开ergoemacs-mode之前使用global-set-key。
  3. 等待ergoemacs作者修复错误;)