Кожна команда - це функція, але не кожна функція також є командою. 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
тут про s. Як в коментарях зазначає @Stefan, макроси клавіатури є особливим випадком: їх можна вважати командами , але вони не є функціями.
C-h i
, виберіть посібник Elisp ,i command
- ви поставите прямо у вузолWhat is a function?
, що зробить все це кристально чистим. Допоможіть користувачам навчитися запитувати Emacs. (Лише одна думка.)