当用户按下鼠标按键并在同一位置释放时, 会产生一个 点击(click) 事件。根据窗口系统报告 鼠标滚轮事件的方式,转动鼠标滚轮可能产生 鼠标点击事件或鼠标滚轮事件。所有鼠标事件 都使用相同的格式:
(event-type position click-count)
这是一个符号,表示使用了哪个鼠标按键。它是
符号 mouse-1、mouse-2、… 之一,
按键从左到右编号。对于鼠标滚轮事件,它可以是
wheel-up 或 wheel-down。
你也可以使用前缀 ‘A-’、‘C-’、‘H-’、‘M-’、 ‘S-’ 和 ‘s-’ 分别表示 Alt、Control、Hyper、Meta、Shift 和 Super 修饰键,用法与功能键相同。
该符号同时也作为事件的事件类型。按键绑定通过类型
描述事件;因此,如果存在针对 mouse-1 的按键绑定,
该绑定将应用于所有 event-type 为 mouse-1 的事件。
这是一个 鼠标位置列表(mouse position list),指定鼠标事件发生的位置; 详细说明见下文。
这是同一鼠标按键到目前为止快速重复按下的次数, 或滚轮重复转动的次数。See 重复事件。
要访问鼠标事件的 position 字段中 鼠标位置列表的内容,通常应使用 访问鼠标事件 中描述的函数。
该列表的显式格式取决于事件发生的位置。 对于在文本区域、模式行、标题行、标签行、 或边栏与边缘区域中的点击,鼠标位置列表的格式为:
(window pos-or-area (x . y) timestamp object text-pos (col . row) image (dx . dy) (width . height))
这些列表元素的含义如下:
发生鼠标事件的窗口。
在文本区域中被点击的字符对应的缓冲区位置;
或者,如果事件发生在文本区域之外,则为事件发生的窗口区域。
它是符号 mode-line、
header-line、tab-line、vertical-line、
left-margin、right-margin、left-fringe 或
right-fringe 之一。
有一种特殊情况:pos-or-area 是一个包含符号 (上述符号之一)的列表,而不只是符号本身。 这种情况发生在 Emacs 注册了事件的虚拟前缀键之后。 See 读取按键序列。
事件的相对像素坐标。对于窗口文本区域中的事件,
坐标原点 (0 . 0) 取为文本区域的左上角。
See Window Sizes。对于模式行、标题行或标签行中的事件,
坐标原点是窗口本身的左上角。对于边栏、边缘区域
和垂直边框,x 没有有效数据。
对于边栏和边缘区域,y 相对于标题行的下边缘。
在所有情况下,x 和 y 坐标分别向右和向下递增。
事件发生的时间,以从系统相关的初始时间开始 计算的毫秒整数表示。
可以是 nil(表示事件发生在缓冲区文本上),
或者是格式为 (string . string-pos) 的 cons 单元
(如果事件位置存在来自文本属性或覆盖层的字符串)。
被点击的字符串,包含所有属性。
点击发生在字符串中的位置。
对于在边缘区域或边栏上的点击,这是窗口中对应行
第一个可见字符的缓冲区位置。对于在模式行、标题行
或标签行上的点击,该值为 nil。对于其他事件,
它是距离点击位置最近的缓冲区位置。
这是 x、y 位置下方字形的实际列号和行号。 如果 x 超出所在行实际文本的最后一列, col 会通过添加具有默认字符宽度的虚拟额外列来计算。 如果窗口有标题行,则第 0 行为标题行; 如果窗口还有标签行,则第 1 行为标题行; 否则为文本区域的最顶行。 对于窗口文本区域上的点击,第 0 列为文本区域的最左列; 对于模式行或标题行上的点击,则为对应区域的最左列。 对于边栏或垂直边框上的点击,这些值无有效数据。 对于边缘区域上的点击,col 从边缘区域左边缘开始计算, row 从边缘区域顶部开始计算。
如果点击位置有图像,则为 find-image 返回的图像对象
(see Defining Images);否则为 nil。
点击位置相对于距离最近的 object 字形
左上角的像素偏移。相关的 object 可以是缓冲区、
字符串或图像,见上文。如果 object 为 nil 或字符串,
坐标相对于被点击字符字形的左上角。
注意,在文本模式框架中,当 object 为 nil 时,
偏移始终为 0,因为那里每个字形都被视为恰好 1×1 像素大小。
如果点击在某个字符上(来自缓冲区文本、覆盖层或显示字符串), 则为该字符字形的像素宽度和高度;否则为被点击的 object 的尺寸。
对于在滚动条上的点击,position 具有以下格式:
(window area (portion . whole) timestamp part)
被点击滚动条所属的窗口。
该值为符号 vertical-scroll-bar。
从滚动条顶部到点击位置的像素数。
在某些工具包(包括 GTK+)中,Emacs 无法提取此数据,
因此该值始终为 0。
滚动条的总长度(以像素为单位)。
在某些工具包(包括 GTK+)中,Emacs 无法提取此数据,
因此该值始终为 0。
事件发生的时间,以毫秒为单位。
在某些工具包(包括 GTK+)中,Emacs 无法提取此数据,
因此该值始终为 0。
点击发生在滚动条的哪个部分。
它是以下符号之一:handle(滚动条滑块)、
above-handle(滑块上方区域)、
below-handle(滑块下方区域)、
up(滚动条一端的上箭头)或
down(滚动条一端的下箭头)。
对于在框架内部边框(see Frame Layout)、 框架工具栏(see 工具栏)、标签栏或菜单栏上的点击, position 具有以下格式:
(frame part (X . Y) timestamp object)
被点击的内部边框、工具栏、标签栏或菜单栏所属的框架。
被点击的框架部分。可以是以下之一:
tool-bar ¶框架有工具栏,且事件发生在工具栏区域。
tab-bar ¶框架有标签栏,且事件发生在标签栏区域。
menu-bar ¶事件发生在框架的菜单栏区域。此类点击事件 仅在纯文本框架或非工具包编译的 X 框架上发生。 (在工具包编译的 Emacs 中,菜单栏点击由工具包处理, 不会以点击事件形式暴露给 Emacs。)
left-edgetop-edgeright-edgebottom-edge点击发生在对应边框上,且距离边框最近角点 至少一个标准字符的偏移量。
top-left-cornertop-right-cornerbottom-right-cornerbottom-left-corner点击发生在内部边框的对应角点。
nil框架没有内部边框,且事件不在标签栏或工具栏上。
这通常发生在文本模式框架。
在带有内部边框的 GUI 框架上,如果框架的
drag-internal-border 参数(see Mouse Dragging Parameters)
未设置为非 nil 值,也可能出现此情况。
该成员仅在标签栏上的点击时存在, 它是包含被点击按钮信息的带属性字符串。