Spec-Zone.ru › Elisp

Доступ к событиям мыши

В этом разделе описаны удобные функции для доступа к данным события нажатия кнопки мыши или перемещения мыши. Данные события клавиатуры можно получить с помощью тех же функций, но элементы данных, неприменимые к событиям клавиатуры, равны нулю или 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API