Определение команд
Специальная форма interactive превращает функцию Lisp в команду. Форма interactive должна располагаться на верхнем уровне в теле функции, обычно как первый элемент тела; это относится как к выражениям лямбда (см. Выражения лямбда), так и к формам defun (см. Определение функций). Эта форма ничего не делает во время фактического выполнения функции; её присутствие служит флагом, сообщая циклу команд Emacs, что функцию можно вызвать интерактивно. Аргумент формы interactive определяет, как следует читать аргументы для интерактивного вызова.
В качестве альтернативы, форма interactive может быть указана в свойстве символа функции interactive-form. Значение этого свойства, отличное от nil, имеет приоритет над любой формой interactive в теле самой функции. Эта функция используется редко.
Иногда функция предназначена только для интерактивного вызова, а не для прямого вызова из Lisp. В этом случае функции присваивают свойство interactive-only отличное от nil, либо напрямую, либо через declare (см. Форму объявления). Это заставит байт-компилятор выдать предупреждение, если команда вызывается из Lisp. Вывод describe-function будет включать аналогичную информацию. Значение свойства может быть: строкой, которую байт-компилятор будет использовать напрямую в своём предупреждении (она должна заканчиваться точкой и не начинаться с заглавной буквы, например, "use (system-name) instead."); t; любым другим символом, который должен быть альтернативной функцией для использования в коде Lisp.
Общефункции (см. Общефункции) нельзя превратить в команды, добавив форму interactive к ним.
| • Использование интерактивного | Общие правила для interactive. |
|
| • Интерактивные коды | Стандартные буквенные коды для чтения аргументов различными способами. | |
| • Интерактивные примеры | Примеры того, как читать интерактивные аргументы. | |
| • Режимы команд | Указание того, что команды предназначены для определенного режима. | |
| • Общие команды | Выбор среди альтернативных команд. |
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/Defining-Commands.html