1

我有一个带有全局模式的次要模式。该模式有一些键绑定,我希望用户能够指定每种模式应该使用哪些绑定。

(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 回答 2

1

您可以添加键绑定是我猜的一个钩子:

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

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

于 2010-04-18T14:49:47.703 回答
0

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

于 2010-04-20T16:52:57.823 回答