模式特定的键绑定

时间:2010-04-18 13:47:47

标签: emacs elisp keymapping

我有一个辅助模式,也带有全局模式。该模式有一些键绑定,我希望用户能够指定哪种绑定应该适用于每种模式。

(my-minor-mode-bindings-for-mode 'some-mode '(key1 key2 ...))
(my-minor-mode-bindings-for-mode 'some-other-mode '(key3 key4 ...))

所以我需要某种模式/缓冲区本地键映射。缓冲本地是一个 因为用户可以改变主要模式,所以有点问题。

我尝试了一些既无效的解决方案。

  1. 始终绑定所有可能的密钥,当用户键入密钥时,检查密钥是否应在该模式下处于活动状态。如果为真,则执行操作,否则退回。
  2. 与前一种情况一样,只是没有键绑定。相反,我使用预命令挂钩并检查按下的键是否应该执行任何操作。
  3. 对于每个缓冲区更新(无论这意味着什么),运行一个首先清除密钥映射的函数,然后使用该特定模式的绑定对其进行更新。
  4. 我尝试过这些方法,但我发现了所有问题。你知道解决这个问题的好方法吗?

    谢谢!

2 个答案:

答案 0 :(得分:0)

你可以添加键绑定是一个钩子我想:

(add-hook 'some-mode-hook
 (lambda ()
 (define-key some-mode-map (kbd "C-c w") 'something)
 ...
 )
)

匿名功能当然可能更复杂,你可以做任何你想做的检查。当然,如果您需要以交互方式更改绑定,您只需使用一些交互式功能......

答案 1 :(得分:0)

some-mode-map变量缓冲区设为本地,并且在启用some-mode时,它将检查要安装哪些密钥绑定集。因为some-mode-map是缓冲本地的,所以键绑定应该是该缓冲区的本地(并且不会影响其他缓冲区)。