Emacs重新绑定所有模式的密钥

时间:2014-09-15 10:21:47

标签: emacs elisp

我正在尝试创建一个新的键绑定,但是我发现了重新定义此键的模式的冲突。

经过一段时间的谷歌搜索后,我想我想做的是:

(eval-after-load ANY_MODE
    (define-key (current-global-map) (kbd "C-M-h") 'shrink-window-horizontally))

有没有办法做到这一点?甚至还有像ANYMODE这样的东西吗?或者还有另一种方式吗?

3 个答案:

答案 0 :(得分:1)

在现代Emacs版本中,所有编程模式都来自prog-mode,来自text-mode的文本相关模式以及来自special-mode的其他模式。您可以添加一个钩子函数(将本地键设置(或解除绑定))添加到prog-mode-hooktext-mode-hookspecial-mode-hook,这样就可以为大多数主要模式执行它。您可以根据具体情况管理其余的。

答案 1 :(得分:1)

您可以将全局次要模式用于此目的。 次模式设置优先于全局模式设置。

(define-minor-mode my-overriding-minor-mode
  "Most superior minir mode"
  t  ;; default is enable
  "" ;; Not display mode-line
  `((,(kbd "C-M-h") . shrink-window-horizontally)))

答案 2 :(得分:0)

我认为你所尝试的内容可以通过after-load-functions来实现。

(defun my-keyboard-hook (file)
  "Add this to `after-load-functions' to fix up keymap."
  (define-key (current-global-map) (kbd "C-M-h") #'shrink-window-horizontally)) )

(add-hook 'after-load-functions #'my-keyboard-hook)

这是未经测试的;特别是,我不确定current-global-map在加载过程中是否包含您想要或期望的内容。

正确修复是不使用您使用的某些模式所采用的键绑定。通常,绑定C-c键盘映射中的某些内容,或者使用Emacs未使用的修饰键,例如Super或你有什么。