Spec-Zone.ru › Elisp

Классификация событий

Каждое событие имеет тип события, который классифицирует событие для целей привязки клавиш. Для события клавиатуры тип события равен значению события; таким образом, тип события для символа — это символ, а тип события для символа функциональной клавиши — сам символ. Для событий, которые представляют собой списки, тип события — это символ в 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

Spec-Zone.ru

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