Доступ к событиям мыши
В этом разделе описаны удобные функции для доступа к данным события нажатия кнопки мыши или перемещения мыши. Данные события клавиатуры можно получить с помощью тех же функций, но элементы данных, неприменимые к событиям клавиатуры, равны нулю или nil.
Следующие две функции возвращают список позиции мыши (см. События щелчка), задающий положение события мыши.
- Функция: event-start event
-
Возвращает начальную позицию event.
Если event — событие щелчка или нажатия кнопки, функция возвращает место возникновения события. Если event — событие перетаскивания, функция возвращает начальную позицию перетаскивания.
- Функция: event-end event
-
Возвращает конечную позицию event.
Если event — событие перетаскивания, функция возвращает позицию, в которой пользователь отпустил кнопку мыши. Если event — событие щелчка или нажатия кнопки, значение фактически является начальной позицией — единственной позицией для таких событий.
- Функция: posnp object
Эта функция возвращает значение, отличное от
nil, если object — список позиции мыши в формате, описанном в разделе События щелчка); в противном случае возвращаетсяnil.
Эти функции принимают список позиции мыши в качестве аргумента и возвращают его различные части:
- Функция: posn-window position
Возвращает окно, в котором находится position. Если position обозначает место за пределами рамки, в которой было инициировано событие, функция возвращает эту рамку.
- Функция: posn-area position
Возвращает область окна, сохранённую в position. Если событие произошло в текстовой области окна, функция возвращает
nil; в противном случае возвращается символ, обозначающий область, в которой произошло событие.
- Функция: posn-point position
Возвращает позицию в буфере, указанную в position. Если событие произошло в текстовой области окна, в области полей или на краевой полосе, это целое число, задающее позицию в буфере. В противном случае значение не определено.
- Функция: posn-x-y position
-
Возвращает координаты 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)))))
- Функция: posn-col-row position &optional use-window
-
Эта функция возвращает конс-ячейку
(col . row)с приблизительными номером столбца и номером строки, соответствующими позиции в буфере, описанной в position. Возвращаемое значение задаётся в единицах ширины символа по умолчанию и высоты строки по умолчанию для рамки (включая интервалы) и вычисляется по значениям x и y, соответствующим position. (Поэтому, если фактические символы имеют нестандартные размеры, фактические номера строки и столбца могут отличаться от вычисленных значений.) Если необязательный аргумент window отличен отnil, вместо рамки используется ширина символа по умолчанию для окна, указанного в position. (Например, это имеет значение, если в этом окне отображается буфер с нестандартным уровнем масштабирования.)Обратите внимание, что отсчёт row ведётся от верхнего края текстовой области. Если у окна, заданного position, есть строка заголовка (см. Строки заголовка окна) или строка вкладок, они не учитываются при подсчёте row.
- Функция: posn-actual-col-row position
-
Возвращает фактические номер строки и номер столбца из position в виде конс-ячейки
(col . row). Значения представляют собой фактические номера строки и столбца в окне, заданном position. Подробности см. в разделе События щелчка. Функция возвращаетnil, если position не содержит фактических значений позиции; в этом случае для получения приблизительных значений можно использоватьposn-col-row.Обратите внимание, что эта функция не учитывает визуальную ширину отображаемых символов, например число визуальных столбцов, занимаемых символом табуляции или изображением. Если нужны координаты в стандартных символьных единицах, используйте вместо неё
posn-col-row.
- Функция: posn-string position
Возвращает строковый объект, описанный в position: либо
nil(что означает, что position описывает текст буфера), либо конс-ячейку(string . string-pos).
- Функция: posn-image position
Возвращает объект изображения из position: либо
nil(если в position нет изображения), либо спецификацию изображения(image …).
- Функция: posn-object position
Возвращает объект изображения или строковый объект, описанный в position: либо
nil(что означает, что position описывает текст буфера), изображение(image …)или конс-ячейку(string . string-pos).
- Функция: posn-object-x-y position
Возвращает координаты x и y в пикселях относительно верхнего левого угла объекта, описанного в position, в виде конс-ячейки
(dx . dy). Если position описывает текст буфера, возвращает относительные координаты ближайшего к этой позиции символа текста буфера.
- Функция: posn-object-width-height position
Возвращает ширину и высоту объекта, описанного в position, в пикселях в виде конс-ячейки
(width . height). Если position описывает позицию в буфере, возвращает размер символа в этой позиции.
- Функция: posn-timestamp position
Возвращает временную метку из position. Это время возникновения события в миллисекундах. Такая временная метка отсчитывается от произвольного начального момента, который зависит от используемой оконной системы. Например, в X Window System это число миллисекунд с момента запуска X-сервера.
Эти функции вычисляют список позиции по заданной позиции в буфере или на экране. Получить данные из этого списка позиции можно с помощью описанных выше функций.
- Функция: posn-at-point &optional pos window
-
Эта функция возвращает список позиции для позиции pos в window. По умолчанию pos равна точке в window; по умолчанию window — выбранное окно.
posn-at-pointвозвращаетnil, если pos не видна в window.
- Функция: posn-at-x-y x y &optional frame-or-window whole
Эта функция возвращает сведения о позиции, соответствующие координатам в пикселях x и y в указанной рамке или окне frame-or-window; по умолчанию используется выбранное окно. Координаты x и y отсчитываются относительно текстовой области выбранного окна. Если whole отлично от
nil, координата x отсчитывается относительно всей области окна, включая полосы прокрутки, поля и краевые полосы.
- Пользовательский параметр: mouse-prefer-closest-glyph
Если значение этой переменной отлично от
nil,posn-pointв списке позиции мыши будет установлена в позицию глифа, левый край которого ближе всего к щелчку мыши, а не в позицию глифа непосредственно под указателем мыши. Например, еслиposn-at-x-yвызывается с x, равным9, которое находится внутри символа шириной 10, отображаемого в столбце 0, точка, сохранённая в списке позиции мыши, будет находиться после этого символа, а не перед ним.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Accessing-Mouse.html