如何设置全局覆盖并优先于该键的所有其他绑定的键绑定?我想覆盖所有的主/次模式映射,并确保我的绑定始终有效。
这当然不起作用:
(global-set-key "\C-i" 'some-function)它在text-mode中工作,但当我使用lisp-mode时,C-i被重新绑定到lisp-indent-line。
我可以分别在lisp-mode和其他所有模式中遍历和覆盖此绑定,但必须有一种更简单的方法。每次我为一个新的文件类型安装一个新的模式时,我必须回去检查,以确保我所有的键绑定都没有被新的模式覆盖。
我之所以这样做,是因为我想模仿我已经从其他编辑器那里学到并根深蒂固的绑定。
发布于 2009-03-25 21:36:11
我对所有的"override“键绑定都使用了次要模式:
(defvar my-keys-minor-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-i") 'some-function)
map)
"my-keys-minor-mode keymap.")
(define-minor-mode my-keys-minor-mode
"A minor mode so that my key settings override annoying major modes."
:init-value t
:lighter " my-keys")
(my-keys-minor-mode 1)这还有一个额外的好处,那就是可以一下子关闭我的所有修改(只需禁用次要模式),以防其他人在操作键盘,或者我需要查看默认的键绑定是做什么的。
请注意,您可能需要在minibuffer中将其关闭:
(defun my-minibuffer-setup-hook ()
(my-keys-minor-mode 0))
(add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)发布于 2011-03-17 22:56:12
作为对scottfrazer's answer的补充,我编写了以下代码,以便我的键绑定保持优先级,即使随后加载的库引入了它们自己的新键映射。
因为键映射可以在编译时生成,所以load似乎是做这件事的最佳位置。
(add-hook 'after-load-functions 'my-keys-have-priority)
(defun my-keys-have-priority (_file)
"Try to ensure that my keybindings retain priority over other minor modes.
Called via the `after-load-functions' special hook."
(unless (eq (caar 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))))发布于 2014-12-12 18:39:42
安装use-package,eval,你就完成了:
(require 'bind-key)
(bind-key* "C-i" 'some-function)https://stackoverflow.com/questions/683425
复制相似问题