Каждая команда является функцией, но не каждая функция также является командой. 1
Команда включает в себя вызов interactive; Вот почему команды обычно называют «интерактивными функциями». Команды могут быть вызваны через M-x name-of-command RET, и они также могут быть связаны с последовательностью клавиш. Обычные функции не включают вызов interactive, не могут быть вызваны с помощью M-x, и вы не можете связать их с последовательностью клавиш. Чтобы запустить функцию, которая не является интерактивной, вы можете нажать M-:( eval-expression), ввести имя функции, а затем значения для всех необходимых аргументов, заключенные в скобки, и нажать RET:
M-: (name-of-function arg1 arg2 arg3) RET
Если функция не должна работать с текущим буфером, вы также можете ввести
(name-of-function arg1 arg2 arg3)
в *scratch*буфере и нажмите C-x C-e( eval-last-sexp) с точкой, расположенной после закрывающей скобки.
Чтобы сделать функцию barдоступной как команду, вы можете обернуть ее в пользовательскую интерактивную функцию ( foo) следующим образом:
(defun foo ()
(interactive)
(bar))
Конечно, если barпринимает один или несколько аргументов, вам нужно будет предоставить их для fooправильной работы.
Если вы видите, что люди используют термины «функция» и «команда» взаимозаменяемо, это может указывать (в зависимости от контекста), что они не знают о различиях между основными понятиями.
1 Обратите внимание, что я говорю о defunс здесь. Как отмечает @Stefan в комментариях, клавиатурные макросы являются особым случаем: их можно рассматривать как команды , но они не являются функциями.
C-h i, выберите руководство Elisp ,i command- помещает вас прямо в узелWhat is a function?, который делает все это кристально чистым. Помогите пользователям научиться спрашивать Emacs. (Только одно мнение.)