2011-07-23 61 views
5

特別是,當我加載dired-x時,它將M-o設置爲切換省略次要模式。我使用M-o作爲其他窗口,所以我想改變dired-x綁定到其他的鍵。我試圖在模式加載後如下設置密鑰:如何覆蓋/更改elisp中的模式鍵綁定?

(add-hook 'dired-mode-hook 
    (lambda() 
    (dired-omit-mode 1) 
    (global-set-key (kbd "M-o") 'other-window) 
    )) 

但無濟於事。

+1

試過看着http://stackoverflow.com/questions/3773820/emacs-shortcuts-specific-for-a-file-type/3773856#3773856? – huitseeker

+0

沒有找到那個,謝謝。這與下面接受的答案是一樣的。 – Loren

+1

我愛堆棧溢出:不僅僅是這正是我想要的,這也正是我想要的鍵綁定... – Shep

回答

7

略比添加自定義的另一個副本,全局綁定到本地模式地圖更好,會刪除本地綁定,以便它不再陰影的全局綁定。在你做這件事之前,你也可以給這個功能一個新的鑰匙。

(eval-after-load "dired-x" 
    '(progn 
    ;; Add an alternative local binding for the command 
    ;; bound to M-o 
    (define-key dired-mode-map (kbd "C-c o") 
     (lookup-key dired-mode-map (kbd "M-o"))) 
    ;; Unbind M-o from the local keymap 
    (define-key dired-mode-map (kbd "M-o") nil))) 
5

dired-mode綁定「影子」全局的,所以你的「全局設置鍵」沒有幫助。你想要做的是覆蓋dired模式結合:

(add-hook 'dired-mode-hook 
    (lambda() 
    (dired-omit-mode 1) 
    (define-key dired-mode-map (kbd "M-o") 'other-window) 
    )) 
+0

謝謝!對於有這個問題的其他人來說,沒有必要把define-key放在鉤子裏面。 – Loren

+3

但是,使用它時有必要使用'dired-mode-map'。 – phils