22.7.15 访问鼠标事件

本节描述用于访问鼠标按键或移动事件中数据的便捷函数。键盘事件数据也可通过 相同函数访问,但不适用于键盘事件的数据元素将返回 0 或 nil

以下两个函数返回鼠标位置列表(see 点击事件),用于指定鼠标事件 的位置。

Function: event-start event

该函数返回 event 的起始位置。

event 是点击或按键按下事件,返回该事件的发生位置;若 event 是拖拽事件,返回拖拽的起始位置。

Function: event-end event

该函数返回 event 的结束位置。

event 是拖拽事件,返回用户释放鼠标按键的位置;若 event 是点击或按键按下事件,返回值实际为起始位置(此类事件仅包含该位置信息)。

Function: posnp object

object 是符合 点击事件 中记录格式的鼠标位置列表, 该函数返回非 nil 值;否则返回 nil

以下函数接收鼠标位置列表作为参数,并返回其各个组成部分:

Function: posn-window position

返回 position 所在的窗口。若 position 表示的位置位于触发事件 的框架之外,则返回该框架。

Function: posn-area position

返回 position 中记录的窗口区域。当事件发生在窗口的文本区域时,返回 nil;否则返回一个标识事件发生区域的符号。

Function: posn-point position

返回 position 对应的缓冲区位置。当事件发生在窗口的文本区域、边距区域 或边缘区域(fringe)时,返回一个表示缓冲区位置的整数;否则返回值未定义。

Function: posn-x-y position

以 cons 单元 (x . y) 的形式返回 position 中基于像素的 x 和 y 坐标。这些坐标相对于 posn-window 返回的窗口。

以下示例展示如何将窗口文本区域中相对于窗口的坐标转换为相对于框架的坐标:

(defun frame-relative-coordinates (position)
  "Return frame-relative coordinates from POSITION.
POSITION is assumed to lie in a window text area."
  (let* ((x-y (posn-x-y position))
         (window (posn-window position))
         (edges (window-inside-pixel-edges window)))
    (cons (+ (car x-y) (car edges))
          (+ (cdr x-y) (cadr edges)))))
Function: posn-col-row position &optional use-window

该函数返回一个 cons 单元 (col . row),包含 position 所描述的缓冲区位置对应的估算列号和行号。返回值以框架的默认 字符宽度和默认行高(含间距)为单位,由 position 对应的 xy 值计算得出。(因此,若实际字符尺寸非默认值,实际行号和列号可能与 这些计算值不同。)若可选参数 use-window 为非 nil,则使用 position 所指窗口的默认字符宽度(而非框架的)进行计算。(例如,当该 窗口显示的缓冲区使用非默认缩放级别时,此参数会影响计算结果。)

注意,row 从文本区域顶部开始计数。若 position 所指窗口包含 标题行(see 窗口标题栏)或标签行,这些行**不**计入 row 计数。

Function: posn-actual-col-row position

以 cons 单元 (col . row) 的形式返回 position 中的实际行号和列号。返回值为 position 所指窗口中的实际行列数。 详情参见 See 点击事件。若 position 未包含实际位置值,该函数 返回 nil;此时可使用 posn-col-row 获取近似值。

注意,该函数未考虑显示字符的视觉宽度(如制表符或图片占用的视觉列数)。若需 获取规范字符单位的坐标,请改用 posn-col-row

Function: posn-string position

返回 position 所描述的字符串对象:若 position 描述缓冲区文本, 返回 nil;否则返回 cons 单元 (string . string-pos)

Function: posn-image position

返回 position 中的图片对象:若 position 位置无图片,返回 nil;否则返回图片规格 (image …)

Function: posn-object position

返回 position 所描述的图片或字符串对象:若 position 描述缓冲区 文本,返回 nil;否则返回图片 (image …) 或 cons 单元 (string . string-pos)

Function: posn-object-x-y position

以 cons 单元 (dx . dy) 的形式返回相对于 position 所描述对象左上角的、基于像素的 x 和 y 坐标。若 position 描述缓冲区文本,则返回距离该位置最近的缓冲区文本字符的相对坐标。

Function: posn-object-width-height position

以 cons 单元 (width . height) 的形式返回 position 所描述对象的像素宽度和高度。若 position 描述缓冲区位置, 则返回该位置字符的尺寸。

Function: posn-timestamp position

返回 position 中的时间戳。该值为事件发生的时间(以毫秒为单位),其基准 时间点取决于所使用的窗口系统(无固定基准)。例如,在 X Window System 中,该值 表示自 X 服务器启动以来经过的毫秒数。

以下函数可根据指定的缓冲区位置或屏幕位置计算出位置列表,你可通过上文描述的 函数访问该位置列表中的数据。

Function: posn-at-point &optional pos window

该函数返回 window 中位置 pos 对应的位置列表。pos 默认值为 window 中的当前点(point);window 默认值为选中的窗口。

pos 未在 window 中显示,posn-at-point 返回 nil

Function: posn-at-x-y x y &optional frame-or-window whole

该函数返回指定框架/窗口 frame-or-window 中像素坐标 xy 对应的位置信息,frame-or-window 默认值为选中的窗口。坐标 xy 相对于选中窗口的文本区域。若可选参数 whole 为非 nil, 则 x 坐标相对于整个窗口区域(含滚动条、边距和边缘区域)。

User Option: mouse-prefer-closest-glyph

若该变量为非 nil,鼠标位置列表的 posn-point 将被设置为“最左侧边缘 距离鼠标点击位置最近”的字形(glyph)位置,而非鼠标指针正下方的字形位置。例如, 若调用 posn-at-x-yx 设为 9(该位置落在显示于第 0 列、 宽度为 10 的字符范围内),则鼠标位置列表中保存的点(point)将位于该字符 之后, 而非该字符 之前


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike