Каждое событие имеет тип события, который классифицирует событие для целей привязки клавиш. Для события клавиатуры тип события равен значению события; таким образом, тип события для символа — это сам символ, а тип события для символа функциональной клавиши — это сам символ. Для событий, которые являются списками, тип события — это символ в CAR списка. Следовательно, тип события всегда является символом или символом-символом (character).
Два события одного типа эквивалентны с точки зрения привязки клавиш; таким образом, они всегда выполняют одну и ту же команду. Однако это не обязательно означает, что они делают одно и то же, поскольку некоторые команды смотрят на всё событие, чтобы решить, что делать. Например, некоторые команды используют местоположение события мыши, чтобы решить, в каком месте буфера действовать.
Иногда полезны более общие классификации событий. Например, вы можете захотеть узнать, участвовала ли в событии клавиша META, независимо от того, какая другая клавиша или кнопка мыши была использована.
Функции event-modifiers и event-basic-type предоставлены для удобного получения такой информации.
Эта функция возвращает список модификаторов, которые имеет событие. Модификаторы — это символы; они включают shift, control, meta, alt, hyper и super. Кроме того, список модификаторов символа события мыши всегда содержит один из click, drag и down. Для двойных или тройных событий он также содержит double или triple.
Аргумент событие может быть целым объектом события или просто типом события. Если событие — это символ, который никогда не использовался в событии, считанном как ввод в текущем сеансе Emacs, то event-modifiers может вернуть nil, даже если событие на самом деле имеет модификаторы.
Вот несколько примеров:
(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 с удалённым битом модификатора control.
Эта функция возвращает клавишу или кнопку мыши, которые описывает событие, с удалёнными всеми модификаторами. Аргумент событие такой же, как в 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
Эта функция возвращает не nil, если объект является событием движения мыши. См. События движения.