Spec-Zone.ru › Elisp

Обзор цикла команд

Первое, что должен сделать цикл команд, — это прочитать последовательность клавиш, которая представляет собой последовательность событий ввода, переводящихся в команду. Для этого используется функция read-key-sequence. Программы Lisp также могут вызвать эту функцию (см. Ввод последовательности клавиш). Они также могут читать ввод на более низком уровне с помощью read-key или read-event (см. Чтение одного события), или отбросить ожидаемый ввод с помощью discard-input (см. Разное по вводу событий).

Последовательность клавиш преобразуется в команду с помощью активных в данный момент раскладок. Подробности см. в Поиске клавиш. Результатом должно быть макрос клавиатуры или интерактивно вызываемая функция. Если нажата клавиша M-x, то читается имя другой команды, которая затем вызывается. Это выполняется с помощью команды execute-extended-command (см. Интерактивный вызов).

Перед выполнением команды Emacs запускает undo-boundary для создания границы отмены. См. Поддержание отмены.

Для выполнения команды Emacs сначала считывает ее аргументы, вызывая command-execute (см. Интерактивный вызов). Для команд, написанных на Lisp, спецификация interactive описывает, как читать аргументы. Это может использовать аргумент префикса (см. Аргументы команд префикса) или может читать с запросом в минибуфере (см. Минибуферы). Например, у команды find-file есть спецификация interactive, которая описывает чтение имени файла с помощью минибуфера. Функциональное тело find-file не использует минибуфер, поэтому, если вы вызываете find-file как функцию из кода Lisp, вы должны предоставить строку имени файла как обычный аргумент функции Lisp.

Если команда является макросом клавиатуры (т.е., строкой или вектором), Emacs выполняет ее с помощью execute-kbd-macro (см. Макросы клавиатуры).

Переменная: pre-command-hook

Эта обычная функция вызывается циклом команд редактора перед выполнением каждой команды. В этот момент this-command содержит команду, которая будет выполнена, а last-command описывает предыдущую команду. См. Информация о цикле команд.

Переменная: post-command-hook

Эта обычная функция вызывается циклом команд редактора после выполнения каждой команды (включая команды, преждевременно прерванные выходом или ошибками). В этот момент this-command ссылается на только что выполненную команду, а last-command — на команду перед ней.

Эта функция также вызывается, когда Emacs впервые входит в цикл команд (в этот момент this-command и last-command оба являются nil).

Выход подавляется во время выполнения pre-command-hook и post-command-hook. Если при выполнении одной из этих функций произойдет ошибка, она не прервет выполнение функции; вместо этого ошибка будет проигнорирована, а функция, в которой произошла ошибка, будет удалена из функции.

Запрос, поступающий в сервер Emacs (см. Сервер Emacs в Руководстве пользователя GNU Emacs), запускает эти две функции так же, как и команда клавиатуры.

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/Command-Overview.html

Spec-Zone.ru

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