23.14 命令重映射

一种特殊的键绑定可用于 重映射(remap) 一个命令 至另一个命令,而无需引用绑定到 原命令的键序列。要使用此功能,需为一个 以虚拟事件 remap 开头的键序列创建键绑定, 后跟你想要重映射的命令名;对于该绑定, 指定新的定义(通常为命令名,但也可以是键绑定的任何其他有效定义)。

例如,假设 My 模式提供了一个特殊命令 my-kill-line,该命令应当替代 kill-line 被调用。要实现这一点,其模式键盘映射应包含 如下重映射:

(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)

此后,每当 my-mode-map 处于激活状态时,若用户按下 C-kkill-line默认的全局键序列),Emacs 将转而运行 my-kill-line

注意,重映射仅通过激活的键盘映射生效; 例如,将重映射放入 ctl-x-map 这类前缀键盘映射 通常无效,因为此类映射本身并非激活状态。 此外,重映射仅生效于单一层级;在以下示例中,

(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)
(keymap-set my-mode-map "<remap> <my-kill-line>" 'my-other-kill-line)

kill-line不会被重映射至 my-other-kill-line。 实际效果是,若普通键绑定指向 kill-line, 会被重映射为 my-kill-line;若普通绑定指向 my-kill-line,则会被重映射为 my-other-kill-line

要撤销一个命令的重映射,可将其重映射至 nil,例如:

(keymap-set my-mode-map "<remap> <kill-line>" nil)
Function: command-remapping command &optional position keymaps

该函数返回当前激活键盘映射下,command (一个符号) 对应的重映射结果。若 command 未被重映射 (通常情况)或不是符号,函数返回 nilposition 可用于指定缓冲区位置或事件位置, 以确定使用哪些键盘映射,用法与 key-binding相同。

若可选参数 keymapsnil, 则指定一组待搜索的键盘映射列表。 若 positionnil,此参数将被忽略。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike