22.7.1 键盘事件

从键盘可以获取两种输入:普通按键和功能键。 普通按键对应(可能带修饰的)字符;它们产生的事件在 Lisp 中以字符表示。 字符事件(character event) 的事件类型就是字符本身(一个整数),其中可能设置了某些修饰位; 参见 事件分类

输入字符事件由一个介于 0 到 524287 之间的 基础编码(basic code), 以及下列任意或全部 修饰位(modifier bits) 组成:

meta

字符编码中的 2**27 位表示输入字符时按住了 Meta 键。

control

字符编码中的 2**26 位表示非 ASCII 控制字符。

ASCII 控制字符(如 C-a)有自己专用的基础编码, 因此 Emacs 不需要用特殊位来表示它们。 于是,C-a 的编码就是 1。

但如果你输入 ASCII 中没有的控制组合, 比如按住 Control 键再按 %, 得到的数值就是 % 的编码加上 2**26 (前提是终端支持非 ASCII 控制字符), 也就是第 27 位被置位。

shift

字符事件编码中的 2**25 位(第 26 位)表示输入 ASCII 控制字符时按住了 Shift 键。

对于字母,基础编码本身就区分大小写; 对于数字和标点,Shift 键会选择具有不同基础编码的完全不同字符。 为了尽可能保持在 ASCII 字符集内, Emacs 对这类字符事件避免使用 2**25 位。

但是 ASCII 无法区分 C-AC-a, 因此 Emacs 在 C-A 中使用 2**25 位,而在 C-a 中不使用。

hyper

字符事件编码中的 2**24 位表示输入字符时按住了 Hyper 键。

super

字符事件编码中的 2**23 位表示输入字符时按住了 Super 键。

alt

字符事件编码中的 2**22 位表示输入字符时按住了 Alt 键。 (大多数键盘上标为 Alt 的按键实际上被当作 Meta 键,而非此键。)

程序中最好避免提及具体的位编号。 要检测字符的修饰位,请使用函数 event-modifiers(see 事件分类)。 使用 keymap-set 设置按键绑定时, 你可以改用类似 ‘C-H-x’ 这样的字符串来指定这些事件(表示“Control+Hyper+x”) (see 修改按键绑定)。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike