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