Специальные события
Некоторые специальные события обрабатываются на очень низком уровне — сразу после считывания. Функция read-event сама обрабатывает эти события и никогда не возвращает их. Вместо этого она продолжает ожидать первое неспециальное событие и возвращает его.
Специальные события не отображаются, никогда не объединяются в последовательности клавиш и никогда не появляются в значении last-command-event или (this-command-keys). Они не отбрасывают числовой аргумент, их нельзя вернуть во входной поток с помощью unread-command-events, они не могут появляться в макросе клавиатуры и не записываются в макрос клавиатуры во время его определения.
Однако специальные события появляются в last-input-event сразу после считывания, и именно так определение события может найти фактическое событие.
Типы событий iconify-frame, make-frame-visible, delete-frame, drag-n-drop, language-change, а также пользовательские сигналы, такие как sigusr1, обычно обрабатываются таким образом. Карта клавиш, в которой определено, как обрабатывать специальные события и какие события являются специальными, хранится в переменной special-event-map (см. Управление активными картами клавиш). Дополнительные сведения об этих и других специальных событиях см. в разделе Различные системные события.
- Функция: insert-special-event event
-
Эта функция помещает специальное событие event в очередь входных событий. Допускаются только типы событий, содержащиеся в карте клавиш
special-event-map. В результате вызывается обработчик, указанный в карте клавиш.Функция возвращает
nil. Пример:(defun my-event-handler (event) (interactive "e") (message "Event arrived: %S" event)) ⇒ my-event-handler (keymap-set special-event-map "<sleep-event>" #'my-event-handler) ⇒ my-event-handler (insert-special-event '(sleep-event pre-sleep)) ⇒ nil ⇒ "Event arrived: (sleep-event pre-sleep)"
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/Special-Events.html