22.7.14 事件分类

每个事件都有一个 事件类型(event type),该类型用于按键绑定目的对事件进行分类。 对于键盘事件,事件类型等于事件值;因此,字符的事件类型就是该字符, 功能键符号的事件类型就是符号本身。对于列表形式的事件,事件类型是列表 CAR 位置的符号。因此,事件类型始终是一个符号或一个字符。

就按键绑定而言,同一类型的两个事件是等价的;因此,它们总是执行相同的命令。 但这并不意味着它们做同样的事情,因为某些命令会查看整个事件来决定行为。 例如,某些命令会使用鼠标事件的位置来决定在缓冲区中的操作位置。

有时,更宽泛的事件分类会很有用。例如,你可能想知道某个事件是否使用了 META 键,而不管同时使用了哪个其他按键或鼠标按钮。

Emacs 提供了 event-modifiersevent-basic-type 函数 来方便地获取这类信息。

Function: event-modifiers event

此函数返回 event 所带有的修饰符列表。修饰符是符号, 包括 shiftcontrolmetaalthypersuper。此外,鼠标事件符号的修饰符列表总会包含 clickdragdown 中的一个。 对于双击或三击事件,还会包含 doubletriple

参数 event 可以是完整的事件对象,也可以只是事件类型。 如果 event 是一个在当前 Emacs 会话中从未作为输入事件被读取过的符号, 那么即使 event 实际上带有修饰符,event-modifiers 也可能返回 nil

以下是一些示例:

(event-modifiers ?a)
     ⇒ nil
(event-modifiers ?A)
     ⇒ (shift)
(event-modifiers ?\C-a)
     ⇒ (control)
(event-modifiers ?\C-%)
     ⇒ (control)
(event-modifiers ?\C-\S-a)
     ⇒ (control shift)
(event-modifiers 'f5)
     ⇒ nil
(event-modifiers 's-f5)
     ⇒ (super)
(event-modifiers 'M-S-f5)
     ⇒ (meta shift)
(event-modifiers 'mouse-1)
     ⇒ (click)
(event-modifiers 'down-mouse-1)
     ⇒ (down)

点击事件的修饰符列表会显式包含 click,但事件符号名本身 并不包含 ‘click’。类似地,ASCII 控制字符 (如 ‘C-a’)的修饰符列表包含 control, 即使通过 read-char 读取这类事件会返回已去掉控制修饰符位的数值 1。

Function: event-basic-type event

此函数返回 event 所描述的按键或鼠标按钮,已去掉所有修饰符。 参数 eventevent-modifiers 中的用法相同。例如:

(event-basic-type ?a)
     ⇒ 97
(event-basic-type ?A)
     ⇒ 97
(event-basic-type ?\C-a)
     ⇒ 97
(event-basic-type ?\C-\S-a)
     ⇒ 97
(event-basic-type 'f5)
     ⇒ f5
(event-basic-type 's-f5)
     ⇒ f5
(event-basic-type 'M-S-f5)
     ⇒ f5
(event-basic-type 'down-mouse-1)
     ⇒ mouse-1
Function: mouse-movement-p object

如果 object 是鼠标移动事件,则此函数返回非 nil。 See 移动事件.


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike