2012-09-21 88 views
4

即使在遵循 Globally override key binding in Emacs 給出的所有內容後,我仍然無法使其正常工作。Emacs鍵綁定:(dired)模式會覆蓋小模式鍵映射?

我勢必M-O到其他窗口在我的全球鍵映射是這樣的:

(defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.") 
(define-key my-keys-minor-mode-map "\M-o" 'other-window) 

(define-minor-mode my-keys-minor-mode 
    "A minor mode so that my key settings override annoying major modes." 
    t " my-keys" 'my-keys-minor-mode-map) 

(my-keys-minor-mode 1) 

(defun my-minibuffer-setup-hook() 
    (my-keys-minor-mode 0)) 
(add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook) 

;; Maintain the above keymap even after loading a new library 
(defadvice load (after give-my-keybindings-priority) 
    "Try to ensure that my keybindings always have priority." 
    (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode)) 
     (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist))) 
     (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist) 
     (add-to-list 'minor-mode-map-alist mykeys)))) 
(ad-activate 'load) 

但是dired模式將覆蓋這一點,它重新映射到dired-omit-mode

我錯過了什麼?

+0

該配置適用於我(在Emacs 24.2中)。如果我在加載庫dired-x中得到'dired-omit-mode'綁定(在評估上面的代碼之前或之後),那麼我仍然可以在dired中看到你對'Mo'的綁定(除非我禁用' my-keys-minor-mode',在這種情況下,我會看到'dired-omit-mode')。 – phils

回答

3

您的次要模式被定義爲緩衝區本地。您可以定義它是全球性的,就像這樣:

(define-minor-mode my-keys-minor-mode 
    "A minor mode so that my key settings override annoying major modes." 
    :global t 
    :lighter " my-keys") 

但後來你會my-minibuffer-setup-hook關閉它在全球也是如此。此外,如果它是全球性的,並且基本上始終開啓,則可能不希望提供:lighter " my-keys",因此未充分填充模式行。

+0

我不明白爲什麼你不希望在minibuffer中這樣做。 –