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