2012-03-10 61 views
3

我有一個全局打開的ErgoEmacs次要模式,它定義了許多用於基本編輯的自定義鍵盤快捷鍵。但是,當我打開任何lisp文件時,粘液模式將自動打開並覆蓋M-pM-n及其自己的命令。但是我想要M-pM-n始終由ergoemacs-mode定義。如何設置次要模式加載和定義鍵綁定的順序?或者我該如何提高ergoemacs-mode keybindings的優先級?在兩個Emacs次要模式下衝突的鍵盤快捷鍵

回答

2

也許一個簡單的解決方法是刪除煤泥的綁定:

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

當心:guarantedd 100%未經測試,該變量的名稱可能是從泥模地圖不同的(很可能將只存在加載粘液模式後)。

3

如何設置次要模式加載和定義鍵綁定的順序?或者我該如何提高ergoemacs-mode keybindings的優先級?

我想你需要確保ErgoEmacs在變量minor-mode-map-alist的slime模式之前出現。有可能有更好的方法,但下面的代碼應該實現這一點。讓我知道它是否做到了你想要的。

 
(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)))) 

+0

它的工作,謝謝!解決方案還是有點怪異。如何確定小模式的加載順序?也許對這種機制的理解可能會產生更優雅的解決方案。 – 2012-03-10 18:52:21

+0

大多數庫都是通過'autoload'機制按需加載的,或者通過'require'顯式加載,並且通常應該將加載順序視爲完全任意的,儘管您可以控制它通過顯式加載你的init文件,只需重新排序該文件的內容即可。您可能會發現以下有用的:http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 – phils 2012-03-11 10:30:10

+0

let綁定相當於更簡潔/清晰'(assoc' ergomacs-mode minor-mode-map-alist)',儘管在這種情況下你可以使用'assq'而不是'assoc' – Felipe 2016-10-31 10:21:16