Sí, todos los comandos de Emacs son funciones, pero no todas las funciones son comandos de Emacs. Usted puede hacer una función arbitraria elisp un comando accesible a través de M-x
usando (interactive)
:
(defun my-command()
"This is the docstring"
(interactive)
(do-foo)
(do-bar))
Ahora que ha definido como my-command
interactiva, se puede acceder de forma inmediata con M-x my-command
. Emacs hace toda la contabilidad con el nombre automáticamente.
Esto es todo que tiene que hacer para agregar un nuevo comando! Entonces se puede asociar a una tecla con algo como:
(global-set-key (kbd "C-c f") 'my-command)
Por otra parte, cada llave-unión se asocia con una función interactiva de esta manera. Puede encontrar la función a la que se llama mediante qué tecla usando C-h k
e ingresando la secuencia de teclas. Esto le dará la documentación de la función que se invocará en esa secuencia de teclas. Si ha ejecutado el código que te di, haciendo C-h k C-c f
le daría un tampón que contiene (entre otras cosas) el doc-string:
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
Por lo tanto: todos los comandos de Emacs son sólo funciones definidas con (interactive)
. (En realidad, también hay algunas funciones primitivas del núcleo C de Emacs, pero eso no es muy importante.)
Esta relación simple y elegante entre comandos y funciones, que es fácil de seguir en cualquier dirección, es parte de lo que hace que Emacs sea tan fácil de personalizar. Si alguna vez se pregunta qué funciones llaman sus acciones normales, puede buscarlas fácilmente y, si desea agregar más comandos, solo tiene una línea adicional en su función.
M-x no es una función, es una secuencia de teclas que está vinculada a una función. Como sucede, está ligado a una función que toma un comando como parámetro; cuando se llama de forma interactiva, su forma 'interactive' hace que solicite un nombre de comando. – tripleee