两种Emacs次要模式中的键盘快捷键冲突

时间:2012-03-10 16:46:47

标签: emacs keyboard-shortcuts elisp

我全局启用了ErgoEmacs辅助模式,它定义了许多用于基本编辑的自定义键盘快捷键。但是,当我打开任何lisp文件时,slime-mode会自动打开并使用自己的命令覆盖 M-p M-n 。但是我希望 M-p M-n 始终由ergoemacs-mode定义。如何设置次模式加载和定义键绑定的顺序?或者我如何提高ergoemacs-mode keybindings优先级?

2 个答案:

答案 0 :(得分:3)

  

如何设置次要模式加载和定义键绑定的顺序?或者我如何提高ergoemacs-mode keybindings优先级?

我认为您需要确保ErgoEmacs在变量minor-mode-map-alist中的slime-mode之前出现。可能有更好的方法,但下面的代码应该实现这一点。如果它符合您的要求,请告诉我。

(require 'cl)

(add-hook
 'slime-mode-hook
 (lambda ()
    (let ((elem (first
         (remove-if-not
          (lambda (item) (equal 'ergoemacs-mode (car item)))
          minor-mode-map-alist))))
      (setq minor-mode-map-alist (remove elem minor-mode-map-alist))
      (add-to-list 'minor-mode-map-alist elem))))

答案 1 :(得分:2)

也许更简单的解决方案是删除Slime的绑定:

(add-hook 'slime-mode-hook
  (lambda ()
    (define-key slime-mode-map [?\M-p] nil)
    (define-key slime-mode-map [?\M-n] nil)))

注意:Guaranted 100%未经测试,变量的名称可能与sli​​me-mode-map不同(并且它可能仅在加载粘液模式后才存在)。