События щелчка
Когда пользователь нажимает кнопку мыши и отпускает её в том же месте, генерируется событие щелчка. В зависимости от того, как оконная система сообщает о событиях колеса мыши, его прокрутка может генерировать либо щелчок мышью, либо событие колеса мыши. Все события мыши имеют одинаковый формат:
(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-edgetop-edgeright-edgebottom-edge-
Щелчок пришёлся на соответствующую границу на расстоянии не менее одного канонического символа от ближайшего к ней угла.
top-left-cornertop-right-cornerbottom-right-cornerbottom-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