如何使用键和弦组合作为前缀绑定?

时间:2014-08-24 16:11:28

标签: emacs

key-chord-mode允许我同时按下两个键来命令。这很棒,但我希望同时按下某些键组合进入一种模式,其中需要一个额外的键(或键),类似于按C-c或{{1 }}

基本上,我想将函数绑定到类似C-xab l的内容,同时按下ab w的行为类似于修饰符ab或{ {1}}确定要调用的最终函数。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

虽然我并不熟悉key-cord,但通常的解决方案只是用键映射替换命令。来自documentation

  

21.8.1键序列输入

     

命令循环通过调用一次读取输入键序列   读取键序列。 Lisp程序也可以调用这个函数;对于   例如,describe-key使用它来读取要描述的键。 - 功能:   read-key-sequence提示符和可选的continue-echo dont-downcase-last   switch-frame-ok命令循环

This function reads a key sequence and returns it as a string or vector. It keeps reading events until it has accumulated a complete
     

键序列;也就是说,足以指定使用的非前缀命令   当前活动的键盘映射。 (请记住一个关键序列   使用缓冲区的键映射读取鼠标事件开始   鼠标所在的窗口,而不是当前缓冲区。)

您可以通过创建新的稀疏键映射并在其中定义键来创建前缀键映射:

(let ((sub-keymap (make-sparse-keymap)))
  (define-key sub-keymap "a" (lambda () (interactive) (message "my nested subcommand a")))
  (define-key sub-keymap "b" (lambda () (interactive) (message "my nested subcommand b")))
  (global-set-key [C-f9] sub-keymap))

当您按[C-f9]时,您将进入“子键映射”,您可以按“a”或“b”查看结果。

所以我希望你可以用以下代码替换我示例中的最后一行来实现你想要的目标:

(key-chord-define-global "ab"   sub-keymap)