如何在elisp中覆盖/更改模式键绑定?

时间:2011-07-23 20:14:38

标签: emacs elisp

特别是,当我加载dired-x时,它设置M-o以切换省略次模式。我使用M-o作为其他窗口,所以我想更改dired-x绑定到其他东西的键。我试图在模式加载后设置密钥:

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

但无济于事。

2 个答案:

答案 0 :(得分: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)))

答案 1 :(得分:5)

dired-mode绑定“遮蔽”全局绑定,因此你的“全局设置键”没有帮助。你想要做的是覆盖dired-mode绑定:

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