23.16 按键绑定相关命令

本节介绍一些便捷的交互式界面,用于修改按键绑定。 它们通过调用 keymap-set 实现(see 修改按键绑定)。 在交互式使用时,这些命令会提示输入参数 key,并要求用户输入合法的按键序列; 同时也会提示输入该按键序列的 binding,并要求输入一个命令名称 (即满足 commandp 的符号,see 交互式调用)。 当从 Lisp 代码中调用时,这些命令要求 key 是满足 key-valid-p 的字符串 (see 按键序列),而 binding 可以是按键映射中任何有意义的 Lisp 对象 (see 按键查找)。

用户常在初始化文件中使用 keymap-global-set 进行简单的自定义配置 (see The Init File)。例如:

(keymap-global-set "C-x C-\\" 'next-line)

会将 C-x C-\ 重新绑定为向下移动一行。

(keymap-global-set "M-<mouse-1>" 'mouse-set-point)

会将配合 Meta 键使用的第一个(最左侧)鼠标按键,重新绑定为在点击位置设置光标。

在 Lisp 代码中指定需要绑定的按键时,若使用非 ASCII 文本字符需格外谨慎。 如果这些字符按多字节文本读取(Lisp 文件中通常如此,see 加载非 ASCII 字符), 你也必须以多字节形式输入对应按键。例如,若你使用如下代码:

(keymap-global-set "ö" 'my-function) ; bind o-umlaut

且你的语言环境为多字节 Latin-1,这些命令实际绑定的是编码为 246 的多字节字符, 而非 Latin-1 终端发送的字节码 246(M-v)。 要使用该绑定,你需要通过合适的输入法让 Emacs 正确解码键盘输入 (see Input Methods in The GNU Emacs Manual)。

Command: keymap-global-set key binding

该函数在当前全局映射中将 key 的绑定设置为 binding

(keymap-global-set key binding)
≡
(keymap-set (current-global-map) key binding)
Command: keymap-global-unset key

该函数从当前全局映射中移除 key 的绑定。

该函数的一种用途是为定义更长的按键序列做准备,该序列以 key 作为前缀— 若 key 已有非前缀绑定,则不允许进行此类定义。例如:

(keymap-global-unset "C-l")
    ⇒ nil
(keymap-global-set "C-l C-l" 'redraw-display)
    ⇒ nil
Command: keymap-local-set key binding

该函数在当前局部按键映射中将 key 的绑定设置为 binding

(keymap-local-set key binding)
≡
(keymap-set (current-local-map) key binding)
Command: keymap-local-unset key

该函数从当前局部映射中移除 key 的绑定。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike