23.13 底层按键绑定

历史上,Emacs 支持多种不同的按键定义语法。如今文档推荐的按键绑定方式,是使用 key-valid-p 所支持的语法,这也是 keymap-setkeymap-lookup 等函数所支持的语法。本节介绍旧式语法与接口函数;新代码中不应使用这些内容。

define-key(以及其他用于重新绑定按键的底层函数)可识别多种按键语法。

包含按键列表的向量

可以使用一个由修饰键名称加一个基础事件(字符或功能键名称)组成的列表。 例如 [(control ?a) (meta b)] 等价于 C-a M-b[(hyper control left)] 等价于 C-H-left

带修饰符的字符字符串

在内部,按键序列常使用针对 Shift、Control、Meta 修饰键的特殊转义序列表示为字符串(see 字符串类型), 用户在重新绑定按键时也可使用这种表示形式。像 "\M-x" 这样的字符串会被解析为单个 M-x"\C-f" 被解析为单个 C-f,而 "\M-\C-x""\C-\M-x" 均会被解析为单个 C-M-x

字符与按键符号组成的向量

这是按键序列的另一种内部表示形式。它比字符串形式支持更丰富的修饰键,同时也支持功能键。 例如 ‘[?\C-\H-x home] 代表按键序列 C-H-x home。 See 字符类型.

Function: define-key keymap key binding &optional remove

该函数与 keymap-set 类似(see 修改按键绑定), 但仅支持旧式按键语法。

此外,该函数还有一个 remove 参数。若其为非nil,则会移除该按键定义。 这与将定义设为 nil 效果基本相同,但在 keymap 存在父映射、且 key 遮蔽了父映射中同名绑定时会产生差异。使用 remove 时,后续查找会返回父映射中的绑定; 而设为 nil 定义时,查找会直接返回 nil

以下是其他旧式按键定义函数与命令,并列出新代码中应替代使用的现代函数。

Command: global-set-key key binding

该函数将当前全局映射中 key 的绑定设为 binding。 请改用 keymap-global-set

Command: global-unset-key key

该函数从当前全局映射中移除 key 的绑定。 请改用 keymap-global-unset

Command: local-set-key key binding

该函数将当前局部按键映射中 key 的绑定设为 binding。 请改用 keymap-local-set

Command: local-unset-key key

该函数从当前局部映射中移除 key 的绑定。 请改用 keymap-local-unset

Function: substitute-key-definition olddef newdef keymap &optional oldmap

该函数将 keymap 中所有绑定到 olddef 的按键,替换为绑定到 newdef。 换言之,olddef 出现的所有位置都会被替换为 newdef。函数返回 nil。 请改用 keymap-substitute

Function: define-key-after map key binding &optional after

map 中为 key 定义值为 binding 的绑定,用法与 define-key 一致, 但会将该绑定放置在 map 中事件 after 的绑定之后。参数 key 长度应为 1—即仅含一个元素的向量或字符串。而 after 应为单个事件类型—符号或字符,而非序列。 新绑定会位于 after 绑定之后。若 aftert 或被省略, 则新绑定放在按键映射的最后面。不过,新绑定会添加在任何继承的按键映射之前。 请改用 keymap-set-after 替代此函数。

Function: keyboard-translate from to

该函数修改 keyboard-translate-table,将字符编码 from 转换为字符编码 to。 如有必要,它会创建键盘转换表。请改用 key-translate

Function: key-binding key &optional accept-defaults no-remap position

该函数根据当前生效的按键映射返回 key 的绑定。若 key 在映射中未定义,结果为 nil。 参数 accept-defaults 控制是否检查默认绑定,规则与 lookup-key 一致(see 按键查找函数)。 若 no-remap 为非nilkey-binding 会忽略命令重映射(see 命令重映射), 直接返回为 key 指定的绑定。可选参数 position 应为缓冲区位置或类似 event-start 返回值的事件位置;它指定函数基于该位置查询对应的映射。

key 不是字符串或向量,Emacs 会抛出错误。

请改用 keymap-lookup 替代此函数。

Function: lookup-key keymap key &optional accept-defaults

该函数返回 keykeymap 中的定义。若字符串或向量 key 并非 keymap 中前缀按键所指定的有效按键序列,则说明其过长,末尾存在不属于单个按键序列的多余事件。 此时返回值为一个数字,表示 key 前端可构成完整按键的事件数量。

accept-defaults 为非nillookup-key 会同时考虑默认绑定与 key 中具体事件的绑定;否则仅报告 key 对应序列的绑定,忽略默认绑定,除非显式指定。

请改用 keymap-lookup 替代此函数。

Function: local-key-binding key &optional accept-defaults

该函数返回 key 在当前局部按键映射中的绑定,若未定义则返回 nil

参数 accept-defaults 控制是否检查默认绑定,规则与 lookup-key(见上文)一致。

请改用 keymap-local-lookup 替代此函数。

Function: global-key-binding key &optional accept-defaults

该函数返回 key 在当前全局按键映射中的绑定,若未定义则返回 nil

参数 accept-defaults 控制是否检查默认绑定,规则与 lookup-key(见上文)一致。

请改用 keymap-global-lookup 替代此函数。

Function: event-convert-list list

该函数将由修饰键名称与基础事件类型组成的列表,转换为包含全部修饰信息的事件类型。 基础事件类型必须是列表的最后一个元素。例如:

(event-convert-list '(control ?a))
     ⇒ 1
(event-convert-list '(control meta ?a))
     ⇒ -134217727
(event-convert-list '(control super f1))
     ⇒ C-s-f1

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike