Spec-Zone.ru › Elisp

Специальные события

Некоторые специальные события обрабатываются на очень низком уровне — сразу после считывания. Функция 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

Spec-Zone.ru

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