Spec-Zone.ru › Elisp

События щелчка

Когда пользователь нажимает кнопку мыши и отпускает её в том же месте, генерируется событие щелчка. В зависимости от того, как оконная система сообщает о событиях колеса мыши, его прокрутка может генерировать либо щелчок мышью, либо событие колеса мыши. Все события мыши имеют одинаковый формат:

(event-type position click-count)
event-type

Это символ, указывающий, какая кнопка мыши была использована. Это один из символов 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.

position

Это список позиции мыши, указывающий, где произошло событие мыши; подробности см. ниже.

click-count

Это количество быстрых повторных нажатий той же кнопки мыши или количество повторных прокруток колеса на данный момент. См. Повторяющиеся события.

Чтобы получить содержимое списка позиции мыши в слоте position события мыши, обычно следует использовать функции, описанные в разделе Доступ к событиям мыши.

Точный формат списка зависит от места, где произошло событие. Для щелчков в текстовой области, строке режима, строке заголовка, строке вкладок, а также в области между текстом и краем окна или на полях, список позиции мыши имеет следующий вид:

(window pos-or-area (x . y) timestamp
 object text-pos (col . row)
 image (dx . dy) (width . height))

Элементы этого списка имеют следующие значения:

window

Окно, в котором произошло событие мыши.

pos-or-area

Позиция в буфере символа, по которому щёлкнули в текстовой области; если же событие произошло за пределами текстовой области — область окна, в которой оно произошло. Это один из символов mode-line, header-line, tab-line, vertical-line, left-margin, right-margin, left-fringe или right-fringe.

В одном особом случае pos-or-area — это список, содержащий символ (один из перечисленных выше), а не сам символ. Это происходит после того, как Emacs регистрирует воображаемые префиксные клавиши для события. См. Ввод последовательности клавиш.

x, y

Относительные координаты события в пикселях. Для событий в текстовой области окна за начало координат (0 . 0) принимается верхний левый угол текстовой области. См. Размеры окон. Для событий в строке режима, строке заголовка или строке вкладок за начало координат принимается верхний левый угол самого окна. Для областей между текстом и краем окна, полей и вертикальной границы x не имеет осмысленного значения. Для областей между текстом и краем окна и полей y отсчитывается от нижнего края строки заголовка. Во всех случаях координаты x и y увеличиваются соответственно вправо и вниз.

timestamp

Время события в миллисекундах, прошедших с начального момента, зависящего от системы.

object

Либо nil, что означает, что событие произошло на тексте буфера, либо конс-ячейка вида (string . string-pos), если в позиции события есть строка из свойства текста или оверлея.

string

Строка, по которой щёлкнули, со всеми её свойствами.

string-pos

Позиция в строке, в которой произошёл щелчок.

text-pos

Для щелчков на поле или в области между текстом и краем окна это позиция в буфере первого видимого символа соответствующей строки в окне. Для щелчков в строке режима, строке заголовка или строке вкладок это nil. Для остальных событий это позиция в буфере, ближайшая к месту щелчка.

col, row

Это фактические координаты столбца и строки глифа под позицией x, y. Если x выходит за последний столбец фактического текста в строке, значение col вычисляется с добавлением фиктивных дополнительных столбцов стандартной ширины символа. Строкой 0 считается строка заголовка, если она есть в окне; если в окне также есть строка вкладок — строка 1; в противном случае — самая верхняя строка текстовой области. Столбцом 0 считается самый левый столбец текстовой области для щелчков в текстовой области окна либо самый левый столбец строки режима или строки заголовка для щелчков в них. Для щелчков в областях между текстом и краем окна или на вертикальных границах эти значения не имеют осмысленного значения. Для щелчков на полях col отсчитывается от левого края области поля, а row — от её верхнего края.

image

Если в месте щелчка есть изображение, это объект изображения, возвращаемый функцией find-image (см. Определение изображений); в противном случае это nil.

dx, dy

Это смещения щелчка в пикселях относительно верхнего левого угла ближайшего к щелчку глифа объекта object. Соответствующими объектами object могут быть буфер, строка или изображение; см. выше. Если object — nil или строка, координаты отсчитываются от верхнего левого угла глифа символа, по которому щёлкнули. Обратите внимание: в текстовых кадрах смещения всегда равны нулю, когда object — nil, поскольку каждый глиф считается имеющим размер ровно 1x1 пиксель.

width, height

Если щелчок пришёлся на символ из текста буфера, оверлея или строки отображения, это ширина и высота глифа символа в пикселях; в противном случае это размеры объекта object, по которому щёлкнули.

Для щелчков по полосе прокрутки position имеет следующий вид:

(window area (portion . whole) timestamp part)
window

Окно, по полосе прокрутки которого щёлкнули.

area

Это символ vertical-scroll-bar.

portion

Расстояние в пикселях от верхнего края полосы прокрутки до места щелчка. В некоторых инструментариях, включая GTK+, Emacs не может получить эти данные, поэтому значение всегда равно 0.

whole

Полная длина полосы прокрутки в пикселях. В некоторых инструментариях, включая GTK+, Emacs не может получить эти данные, поэтому значение всегда равно 0.

timestamp

Время события в миллисекундах. В некоторых инструментариях, включая GTK+, Emacs не может получить эти данные, поэтому значение всегда равно 0.

part

Часть полосы прокрутки, по которой щёлкнули. Это один из символов handle (ползунок полосы прокрутки), above-handle (область над ползунком), below-handle (область под ползунком), up (стрелка вверх на одном конце полосы прокрутки) или down (стрелка вниз на одном конце полосы прокрутки).

Для щелчков по внутренней границе кадра (см. Компоновка кадра), панели инструментов кадра (см. Панели инструментов), панели вкладок или строки меню position имеет следующий вид:

 (frame part (X . Y) timestamp object)
frame

Кадр, по внутренней границе, панели инструментов, панели вкладок или строке меню которого щёлкнули.

part

Часть кадра, по которой щёлкнули. Это может быть одно из следующих значений:

tool-bar

У кадра есть панель инструментов, и событие произошло в области панели инструментов.

tab-bar

У кадра есть панель вкладок, и событие произошло в области панели вкладок.

menu-bar

Событие произошло в области строки меню кадра. Событие щелчка такого типа может возникнуть только в текстовых кадрах или в X-кадрах в сборке Emacs без инструментария. (В сборках Emacs с инструментарием щелчки по строке меню обрабатываются инструментарием и не видны Emacs как события щелчка.)

left-edge
top-edge
right-edge
bottom-edge

Щелчок пришёлся на соответствующую границу на расстоянии не менее одного канонического символа от ближайшего к ней угла.

top-left-corner
top-right-corner
bottom-right-corner
bottom-left-corner

Щелчок пришёлся на соответствующий угол внутренней границы.

nil

У кадра нет внутренней границы, а событие произошло не на панели вкладок и не на панели инструментов. Обычно это происходит в текстовых кадрах. Это также может произойти в графических кадрах с внутренней границей, если для кадра не задан параметр drag-internal-border (см. Параметры перетаскивания мышью) со значением, отличным от nil.

object

Этот элемент присутствует только для щелчков по панели вкладок и содержит строку со свойствами и сведениями о нажатой кнопке.

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/Click-Events.html

Spec-Zone.ru

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