22.7.7 重复事件

如果你在不移动鼠标的情况下快速连续按下同一鼠标按键多次, Emacs 会为第二次及后续的按下操作生成特殊的 重复(repeat)鼠标事件。

最常见的重复事件是 双击(double-click)事件。 当你快速点击某一按键两次时,Emacs 会产生双击事件; 该事件在你释放按键时触发(与所有点击事件的规则一致)。

双击事件的事件类型包含前缀 ‘double-’。 因此,按住 meta 键对鼠标按键 2 进行双击, 在 Lisp 程序中会表现为 M-double-mouse-2。 如果双击事件没有绑定,Emacs 会使用对应普通点击事件的绑定来执行。 因此,除非你确实需要,否则不必关注双击功能。

当用户执行双击时,Emacs 先生成一个普通点击事件,然后生成双击事件。 因此,你在设计双击事件的命令绑定时,必须假定单击命令已经运行。 它必须在单击结果的基础上,产生双击所需的效果。

如果双击的含义建立在单击含义之上,这种设计会非常方便— 这也是推荐的双击用户界面设计实践。

如果你点击一次按键,再次按下并按住拖动鼠标, 最终释放按键时会得到一个 双击拖拽(double-drag)事件。 其事件类型包含 ‘double-drag’,而非仅仅 ‘drag’。 如果双击拖拽事件没有绑定,Emacs 会寻找对应普通拖拽事件的绑定。

在双击或双击拖拽事件之前,当用户第二次按下按键时, Emacs 会生成一个 双击按下(double-down)事件。 其事件类型包含 ‘double-down’,而非仅仅 ‘down’。 如果双击按下事件没有绑定,Emacs 会寻找对应普通按键按下事件的绑定。 如果仍然找不到绑定,该双击按下事件会被忽略。

总而言之,当你点击一个按键并立即再次按下时, Emacs 会为第一次点击生成按下事件和点击事件, 在你再次按下时生成双击按下事件, 最后生成双击事件或双击拖拽事件。

如果你连续快速点击按键两次后再次按下, Emacs 会生成 三击按下(triple-down)事件, 随后是 三击(triple-click)事件或 三击拖拽(triple-drag)事件。 这些事件的类型包含 ‘triple’,而非 ‘double’。 如果任何三击事件没有绑定,Emacs 会使用对应双击事件的绑定。

如果你点击按键三次或更多次后再次按下, 超过三次的按下操作所产生的事件均为三击事件。 Emacs 不为四击、五击等事件提供单独的事件类型。 不过,你可以查看事件列表来精确获知按键被按下的次数。

Function: event-click-count event

该函数返回触发 event 的连续按键按下次数。 如果 event 是双击按下、双击或双击拖拽事件,返回值为 2。 如果 event 是三击事件,返回值为 3 或更大。 如果 event 是普通鼠标事件(非重复事件),返回值为 1。

User Option: double-click-fuzz

要生成重复事件,连续的鼠标按键按下必须位于大致相同的屏幕位置。 double-click-fuzz 的值指定了两次连续点击之间 鼠标允许移动的最大像素数(水平或垂直),超出则不视为双击。

该变量同时也是判断鼠标移动是否算作拖拽的阈值。

User Option: double-click-time

要生成重复事件,连续按键按下之间的毫秒间隔必须小于 double-click-time 的值。 将 double-click-time 设置为 nil 会完全禁用多击检测。 将其设置为 t 则移除时间限制;Emacs 仅通过位置判断多击。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike