Ответ 1
Да, все команды Emacs являются функциями, но не все функции являются командами Emacs. Вы можете сделать произвольную функцию elisp командой, доступной через M-x
, используя (interactive)
:
(defun my-command ()
"This is the docstring"
(interactive)
(do-foo)
(do-bar))
Теперь, когда вы определили my-command
как интерактивный, вы можете немедленно получить к нему доступ с помощью M-x my-command
. Emacs автоматически выполняет всю учетную запись с именем для вас.
Это все, что вам нужно сделать, чтобы добавить новую команду! Затем вы можете привязать его к ключу с чем-то вроде:
(global-set-key (kbd "C-c f") 'my-command)
Кроме того, каждое связывание ключей связано с такой интерактивной функцией. Вы можете найти, какая функция вызывается с помощью клавиши C-h k
и ввода вашей последовательности клавиш. Это даст вам документацию для функции, которая будет вызываться в этой последовательности клавиш. Если вы запустили код, который я вам дал, то C-h k C-c f
предоставит вам буфер, содержащий (помимо прочего) вашу doc-строку:
C-c f runs the command my-command, which is an interactive Lisp
function.
It is bound to C-c f.
(my-command)
This is the docstring
Итак: все команды Emacs - это просто функции, определенные с помощью (interactive)
. (На самом деле, есть также некоторые примитивные функции ядра Emacs C, но это не очень важно.)
Эта простая и элегантная связь между командами и функциями, которые легко отслеживать в любом направлении, является частью того, что делает Emacs настолько легко настраиваемым. Если вы когда-нибудь задавались вопросом о том, какие функции вы вызываете, вы можете легко просмотреть их, и если вы хотите добавить дополнительные команды, у вас будет только одна дополнительная строка в вашей функции.