我正在尝试创建一个新的键绑定,但是我发现了重新定义此键的模式的冲突。
经过一段时间的谷歌搜索后,我想我想做的是:
(eval-after-load ANY_MODE
(define-key (current-global-map) (kbd "C-M-h") 'shrink-window-horizontally))
有没有办法做到这一点?甚至还有像ANYMODE这样的东西吗?或者还有另一种方式吗?
答案 0 :(得分:1)
在现代Emacs版本中,所有编程模式都来自prog-mode
,来自text-mode
的文本相关模式以及来自special-mode
的其他模式。您可以添加一个钩子函数(将本地键设置(或解除绑定))添加到prog-mode-hook
,text-mode-hook
和special-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或你有什么。