22.16 Клавиатурные макросы

Клавиатурный макрос — это заранее заданная последовательность событий ввода, которая может рассматриваться как команда и определять нажатие клавиши. Lisp-представление клавиатурного макроса — это строка или вектор, содержащий события. Не путайте клавиатурные макросы с макросами Lisp (см. Макросы).

Функция: execute-kbd-macro kbdmacro &optional count loopfunc

Эта функция выполняет kbdmacro как последовательность событий. Если kbdmacro является строкой или вектором, то события в нем выполняются точно так же, как если бы они были введены пользователем. Последовательность не должна представлять собой одну последовательность нажатий клавиш; обычно определение клавиатурного макроса состоит из нескольких последовательностей нажатий клавиш, соединенных вместе.

Если kbdmacro является символом, то используется его определение функции вместо kbdmacro. Если это другой символ, этот процесс повторяется. В конечном итоге результат должен быть строкой или вектором. Если результат не является символом, строкой или вектором, сигнализируется об ошибке.

Аргумент count — это количество повторений; kbdmacro выполняется столько раз. Если count опущен или равен nil, kbdmacro выполняется один раз. Если он равен 0, kbdmacro выполняется снова и снова до тех пор, пока не возникнет ошибка или неудачный поиск.

Если loopfunc не равен nil, это функция, которая вызывается без аргументов перед каждой итерацией макроса. Если loopfunc возвращает nil, то выполнение макроса останавливается.

См. Чтение одного события для примера использования execute-kbd-macro.

Переменная: executing-kbd-macro

Эта переменная содержит строку или вектор, определяющие клавиатурный макрос, который в данный момент выполняется. Она равна nil, если в данный момент макрос не выполняется. Команда может проверить эту переменную, чтобы вести себя по-разному при запуске из выполняющегося макроса. Не устанавливайте эту переменную самостоятельно.

Переменная: defining-kbd-macro

Эта переменная не равна nil тогда и только тогда, когда определяется клавиатурный макрос. Команда может проверить эту переменную, чтобы вести себя по-разному во время определения макроса. Значение равно append при добавлении к определению существующего макроса. Команды start-kbd-macro, kmacro-start-macro и end-kbd-macro устанавливают эту переменную — не устанавливайте ее самостоятельно.

Переменная всегда локальна для текущего терминала и не может быть локальной для буфера. См. Несколько терминалов.

Переменная: last-kbd-macro

Эта переменная содержит определение последнего определенного клавиатурного макроса. Ее значение — строка или вектор, или nil.

Переменная всегда локальна для текущего терминала и не может быть локальной для буфера. См. Несколько терминалов.

Переменная: kbd-macro-termination-hook

Этот обычный хук выполняется, когда клавиатурный макрос завершается, независимо от того, что вызвало его завершение (достижение конца макроса или ошибка, которая преждевременно завершила макрос).