按键序列(key sequence)(简称按键(key))是由一个或多个输入事件构成的整体单元。输入事件包括字符、功能键、鼠标操作,或 Emacs 之外的系统事件,例如 iconify-frame(see 输入事件)。
Emacs Lisp 中按键序列的表示形式为字符串或向量。除非另有说明,所有接受按键序列作为参数的 Emacs Lisp 函数均可处理这两种表示形式。
在字符串表示形式中,字母与数字字符通常表示自身;例如 "a" 代表 a,
"2" 代表 2。控制字符事件以子串 "\C-" 为前缀,Meta 字符以
"\M-" 为前缀;例如 "\C-x" 代表按键 C-x。
此外,TAB、RET、ESC 和 DEL 事件分别由
"\t"、"\r"、"\e" 和 "\d" 表示。完整按键序列的字符串形式
是其各组成事件字符串形式的拼接;因此 "\C-xl" 代表按键序列 C-x l。
包含功能键、鼠标按键事件、系统事件,或非ASCII字符(如 C-= 或 H-a)的按键序列无法用字符串表示,必须使用向量表示。
在向量表示形式中,向量的每个元素以其 Lisp 形式表示一个输入事件。See 输入事件。
例如,向量 [?\C-x ?l] 代表按键序列 C-x l。
如需查看字符串与向量形式的按键序列示例,可参考 Init Rebinding in The GNU Emacs Manual。
该函数将文本 keyseq-text(字符串常量)转换为按键序列(字符串或向量常量)。
keyseq-text 的内容所使用的语法,与 C-x C-k RET(kmacro-edit-macro)
命令所打开的缓冲区中的语法一致;特别地,功能键名称必须用 ‘<…>’ 包裹。
See Edit Keyboard Macro in The GNU Emacs Manual。
(kbd "C-x") ⇒ "\C-x" (kbd "C-x C-f") ⇒ "\C-x\C-f" (kbd "C-x 4 C-f") ⇒ "\C-x4\C-f" (kbd "X") ⇒ "X" (kbd "RET") ⇒ "^M" (kbd "C-c SPC") ⇒ "\C-c " (kbd "<f1> SPC") ⇒ [f1 32] (kbd "C-M-<down>") ⇒ [C-M-down]
kbd 函数兼容性极强,即便所用语法不完全规范,也会尽量返回合理结果。
若要检查语法是否真正有效,可使用 key-valid-p 函数。