Классификация событий
Каждое событие имеет тип события, который классифицирует событие для целей привязки клавиш. Для события клавиатуры тип события равен значению события; таким образом, тип события для символа — это символ, а тип события для символа функциональной клавиши — сам символ. Для событий, которые представляют собой списки, тип события — это символ в CAR списка. Таким образом, тип события всегда является символом или символом.
Два события одного типа эквивалентны с точки зрения привязки клавиш; следовательно, они всегда выполняют одну и ту же команду. Однако это не обязательно означает, что они выполняют одни и те же действия, поскольку некоторые команды анализируют все событие, чтобы решить, что делать. Например, некоторые команды используют положение события мыши, чтобы определить, где в буфере выполнить действие.
Иногда полезны более широкие классификации событий. Например, вы можете захотеть узнать, участвовало ли событие в нажатии клавиши META, независимо от того, какая еще клавиша или кнопка мыши использовались.
Функции event-modifiers и event-basic-type предоставляются для удобства получения такой информации.
- Функция: event-modifiers event
-
Эта функция возвращает список модификаторов, имеющихся у события event. Модификаторы — это символы; они включают
shift,control,meta,alt,hyperиsuper. Кроме того, список модификаторов символа события мыши всегда содержит один изclick,drag, иdown. Для событий двойного или тройного нажатия он также содержитdoubleилиtriple.Аргумент event может быть полным объектом события или только типом события. Если event — это символ, который никогда не использовался в событии, считавшемся вводом в текущей сессии Emacs, то
event-modifiersможет вернутьnil, даже когда event фактически имеет модификаторы.Вот несколько примеров:
(event-modifiers ?a) ⇒ nil (event-modifiers ?A) ⇒ (shift) (event-modifiers ?\C-a) ⇒ (control) (event-modifiers ?\C-%) ⇒ (control) (event-modifiers ?\C-\S-a) ⇒ (control shift) (event-modifiers 'f5) ⇒ nil (event-modifiers 's-f5) ⇒ (super) (event-modifiers 'M-S-f5) ⇒ (meta shift) (event-modifiers 'mouse-1) ⇒ (click) (event-modifiers 'down-mouse-1) ⇒ (down)Список модификаторов для события клика явным образом содержит
click, но само имя символа события не содержит ‘click’. Аналогично, список модификаторов для символа управления ASCII, например ‘C-a’, содержитcontrol, хотя чтение такого события черезread-charвернёт значение 1 с удаленным битом модификатора управления.
- Функция: event-basic-type event
-
Эта функция возвращает клавишу или кнопку мыши, которую описывает event, со всеми модификаторами удалены. Аргумент event такой же, как в
event-modifiers. Например:(event-basic-type ?a) ⇒ 97 (event-basic-type ?A) ⇒ 97 (event-basic-type ?\C-a) ⇒ 97 (event-basic-type ?\C-\S-a) ⇒ 97 (event-basic-type 'f5) ⇒ f5 (event-basic-type 's-f5) ⇒ f5 (event-basic-type 'M-S-f5) ⇒ f5 (event-basic-type 'down-mouse-1) ⇒ mouse-1
- Функция: mouse-movement-p object
Эта функция возвращает не-
nilесли object является событием перемещения мыши. См. События перемещения.
- Функция: event-convert-list list
-
Эта функция преобразует список имён модификаторов и базового типа события в тип события, который указывает все из них. Базовый тип события должен быть последним элементом списка. Например,
(event-convert-list '(control ?a)) ⇒ 1 (event-convert-list '(control meta ?a)) ⇒ -134217727 (event-convert-list '(control super f1)) ⇒ C-s-f1
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Classifying-Events.html