一种特殊的键绑定可用于 重映射(remap) 一个命令
至另一个命令,而无需引用绑定到
原命令的键序列。要使用此功能,需为一个
以虚拟事件 remap 开头的键序列创建键绑定,
后跟你想要重映射的命令名;对于该绑定,
指定新的定义(通常为命令名,但也可以是键绑定的任何其他有效定义)。
例如,假设 My 模式提供了一个特殊命令
my-kill-line,该命令应当替代 kill-line
被调用。要实现这一点,其模式键盘映射应包含
如下重映射:
(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)
此后,每当 my-mode-map 处于激活状态时,若用户按下
C-k(kill-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)
该函数返回当前激活键盘映射下,command (一个符号)
对应的重映射结果。若 command 未被重映射
(通常情况)或不是符号,函数返回 nil。
position 可用于指定缓冲区位置或事件位置,
以确定使用哪些键盘映射,用法与 key-binding相同。
若可选参数 keymaps 非 nil,
则指定一组待搜索的键盘映射列表。
若 position非 nil,此参数将被忽略。