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

lis*_*szt 4 emacs

key-chord-mode允许我将同时按下两个键绑定到一个命令。这很棒,但我希望同时按下某个组合键以进入需要额外键(或多个键)的模式,类似于我按下C-cC-x

基本上,我想将一个函数绑定到类似ab lor 的东西ab w,其中同时按下 的ab行为就像一个修饰符和lw确定要调用的最终函数。

我怎样才能做到这一点?

eal*_*nso 6

虽然我不是特别熟悉key-cord,但通常的解决方案是将命令替换为键映射。从文档

21.8.1 按键顺序输入

命令循环通过调用 read-key-sequence 一次读取输入的键序列。Lisp 程序也可以调用这个函数;例如,describe-key 使用它来读取要描述的密钥。— 功能:read-key-sequence prompt &optional continue-echo dont-downcase-last switch-frame-ok command-loop

This function reads a key sequence and returns it as a string or vector. It keeps reading events until it has accumulated a complete
Run Code Online (Sandbox Code Playgroud)

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

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

(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))
Run Code Online (Sandbox Code Playgroud)

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

因此,我希望您可以通过将示例中的最后一行替换为以下内容来实现您想要的:

(key-chord-define-global "ab"   sub-keymap)
Run Code Online (Sandbox Code Playgroud)