Когда пользователь нажимает кнопку мыши и отпускает её в том же месте, генерируется событие щелчка. В зависимости от того, как ваша оконная система сообщает о событиях колесика мыши, вращение колесика мыши может генерировать либо щелчок мыши, либо событие колесика мыши. Все события мыши имеют одинаковый формат:
(тип-события позиция количество-щелчков)
Это символ, указывающий, какая кнопка мыши была использована. Это один из символов mouse-1, mouse-2, …, где кнопки нумеруются слева направо. Для события колесика мыши это может быть wheel-up или wheel-down.
Вы также можете использовать префиксы ‘A-’, ‘C-’, ‘H-’, ‘M-’, ‘S-’ и ‘s-’ для модификаторов alt, control, hyper, meta, shift и super, как и для функциональных клавиш.
Этот символ также служит типом события. Привязки клавиш описывают события по их типам; таким образом, если есть привязка клавиш для mouse-1, эта привязка будет применяться ко всем событиям, чей тип-события равен mouse-1.
Это список позиции мыши, указывающий, где произошло событие мыши; подробности см. ниже.
Это количество быстрых повторных нажатий той же кнопки мыши или количество повторных поворотов колесика. См. Повторяющиеся события.
Для доступа к содержимому списка позиции мыши в слоте позиция события мыши обычно следует использовать функции, описанные в Доступ к событиям мыши.
Явный формат списка зависит от того, где произошло событие. Для щелчков в текстовой области, строке режима, строке заголовка, строке вкладок, а также в боковых полях или краевых областях список позиции мыши имеет вид
(окно позиция-или-область (x . y) время объект текстовая-позиция (колонка . строка) изображение (dx . dy) (ширина . высота))
Значения этих элементов списка следующие:
Окно, в котором произошло событие мыши.
Позиция в буфере символа, по которому щелкнули в текстовой области; или, если событие произошло вне текстовой области, область окна, где оно произошло. Это один из символов mode-line, header-line, tab-line, vertical-line, left-margin, right-margin, left-fringe или right-fringe.
В одном особом случае позиция-или-область является списком, содержащим символ (один из перечисленных выше символов), а не просто символом. Это происходит после регистрации мнимых префиксных клавиш для события в Emacs. См. Ввод последовательности клавиш.
Относительные пиксельные координаты события. Для событий в текстовой области окна начало координат (0 . 0) считается верхним левым углом текстовой области. См. Размеры окон. Для событий в строке режима, строке заголовка или строке вкладок начало координат — верхний левый угол самого окна. Для краевых областей, полей и вертикальной границы x не содержит осмысленных данных. Для краевых областей и полей y отсчитывается от нижнего края строки заголовка. Во всех случаях координаты x и y увеличиваются соответственно вправо и вниз.
Время возникновения события в виде целого числа миллисекунд от системно-зависимого начального момента.
Либо nil, что означает, что событие произошло на тексте буфера, либо ячейка cons вида (строка . позиция-в-строке), если в позиции события есть строка из текстового свойства или оверлея.
Строка, по которой щелкнули, включая все свойства.
Позиция в строке, где произошёл щелчок.
Для щелчков в области поля или на краевой области это позиция в буфере первого видимого символа в соответствующей строке окна. Для щелчков на строке режима, строке заголовка или строке вкладок это nil. Для других событий это ближайшая к щелчку позиция в буфере.
Это фактические номера колонки и строки глифа под позицией x, y. Если x выходит за последнюю колонку фактического текста в строке, колонка сообщается с добавлением фиктивных дополнительных колонок шириной в символ по умолчанию. Строка 0 считается строкой заголовка, если окно имеет её, или строкой 1, если окно также имеет строку вкладок, или самой верхней строкой текстовой области в противном случае. Колонка 0 считается самой левой колонкой текстовой области для щелчков в текстовой области окна или самой левой колонкой строки режима или заголовка для щелчков там. Для щелчков на краевых областях или вертикальных границах эти данные не имеют смысла. Для щелчков в полях колонка отсчитывается от левого края области поля, а строка — от верхней части области поля.
Если в месте щелчка есть изображение, это объект изображения, возвращаемый find-image (см. Определение изображений); в противном случае это nil.
Это пиксельные смещения щелчка относительно верхнего левого угла глифа объекта, который находится ближе всего к щелчку. Соответствующими объектами могут быть буфер, строка или изображение, см. выше. Если объект — nil или строка, координаты отсчитываются от верхнего левого угла глифа символа, по которому щелкнули. Обратите внимание, что смещения всегда равны нулю на текстовых фреймах, когда объект равен nil, поскольку каждый глиф там считается имеющим размер ровно 1x1 пиксель.
Если щелчок выполнен по символу, будь то текст буфера или строка оверлея или отображения, это пиксельные ширина и высота глифа этого символа; в противном случае это размеры объекта, по которому щелкнули.
Для щелчков на полосе прокрутки позиция имеет следующий вид:
(окно область (часть . целое) время элемент)
Окно, на полосе прокрутки которого щелкнули.
Это символ vertical-scroll-bar.
Количество пикселей от верхнего края полосы прокрутки до позиции щелчка. В некоторых наборах инструментов, включая GTK+, Emacs не может извлечь эти данные, поэтому значение всегда равно 0.
Общая длина полосы прокрутки в пикселях. В некоторых наборах инструментов, включая GTK+, Emacs не может извлечь эти данные, поэтому значение всегда равно 0.
Время возникновения события в миллисекундах. В некоторых наборах инструментов, включая GTK+, Emacs не может извлечь эти данные, поэтому значение всегда равно 0.
Часть полосы прокрутки, на которой произошёл щелчок. Это один из символов handle (ползунок полосы прокрутки), above-handle (область над ползунком), below-handle (область под ползунком), up (стрелка вверх на одном конце полосы прокрутки) или down (стрелка вниз на одном конце полосы прокрутки).
Для щелчков на внутренней границе фрейма (см. Расположение фрейма), панели инструментов фрейма (см. Панели инструментов), панели вкладок или строке меню позиция имеет следующий вид:
(фрейм часть (X . Y) время объект)
Фрейм, на внутренней границе, панели инструментов, панели вкладок или строке меню которого щелкнули.
Часть фрейма, по которой щелкнули. Это может быть одно из следующих значений:
tool-barФрейм имеет панель инструментов, и событие произошло в области панели инструментов.
tab-barФрейм имеет панель вкладок, и событие произошло в области панели вкладок.
menu-barСобытие произошло в области строки меню фрейма. Такой вид события щелчка может произойти только на текстовых фреймах или на X-фреймах в сборке Emacs без использования наборов инструментов. (В сборках с наборами инструментов щелчки на строке меню обрабатываются набором инструментов и не видны Emacs как события щелчка.)
left-edgetop-edgeright-edgebottom-edgeЩелчок произошёл на соответствующей границе на расстоянии не менее одного канонического символа от ближайшего угла границы.
top-left-cornertop-right-cornerbottom-right-cornerbottom-left-cornerЩелчок произошёл на соответствующем углу внутренней границы.
nilФрейм не имеет внутренней границы, и событие произошло не на панели вкладок и не на панели инструментов. Это обычно происходит на текстовых фреймах. Это также может произойти на GUI-фреймах с внутренней границей, если у фрейма не задан параметр drag-internal-border (см. Параметры перетаскивания мышью) в значение, отличное от nil.
Этот элемент присутствует только для щелчков на панели вкладок и представляет собой строку со свойствами, содержащую информацию о нажатой кнопке.