我的所有键绑定(bind)都处于单独的次要模式中 - 首先,确保我认为强制的键绑定(bind)不会被某些主要模式覆盖;其次,能够在一个命令中禁用所有这些功能,以防我也需要。
到目前为止,我一直在扩展前缀键,如下所示:
(define-key my-minor-mode-map (kbd "M-g f") 'my-goto-file-func)
但后来我意识到有前缀键映射这样的东西,对于M-g
键来说它是goto-map
。所以我宁愿扩展这个键映射而不是硬编码前缀键,所以它会像:
(define-key goto-map (kbd "f") 'my-goto-file-func)
但在这种情况下,我的次要模式与它无关,因此我失去了使用它的所有优势。
一种方法是确定哪个键绑定(bind)到该特定前缀键映射,然后在绑定(bind)中使用该键。但它有一个缺点 - 如果我在加载次要模式后重新映射前缀键,则不会为我的次要模式重新映射前缀键。
那么有没有更好的方法来做到这一点?
最佳答案
按照您的方式扩展 key 非常好,因为它可以将复杂性降至最低。因此,虽然当然可以在次要模式下修改键盘映射,但这并不一定更好。
为了在次要模式下使用修改后的键盘映射而不覆盖原始键盘映射,只需将原始键盘映射设置为您的父级,例如
(defvar my-goto-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map goto-map)
map))
然后您可以在次要模式中使用修改后的版本:
(define-key my-goto-map "f" 'find-file)
(define-key my-mode-map (kbd "M-g") my-goto-map)
但是原始的 goto-map
仍然存在并且正在运行,修改它将会反射(reflect)在您的 my-goto-map
中:
(define-key goto-map "i" 'info)
请参阅 elisp 手册中的“继承和键盘映射”。
关于emacs - 为特定模式定义前缀键映射中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524710/