Cada comando es una función, pero no todas las funciones son también un comando. 1
Un comando incluye una llamada a interactive
; Es por eso que los comandos se conocen comúnmente como "funciones interactivas". Los comandos se pueden invocar mediante M-x name-of-command
RET, y también se pueden vincular a una secuencia de teclas. Las funciones regulares no incluyen una llamada a interactive
, no se puede llamar usando M-x, y no puede vincularlas a una secuencia de teclas. Para ejecutar una función que no es interactiva, puede presionar M-:( eval-expression
), ingresar el nombre de la función seguido de valores para cualquier argumento que necesite encerrado entre paréntesis y presionar RET:
M-: (name-of-function arg1 arg2 arg3)
RET
Si no se supone que la función opere en el búfer actual, también puede ingresar
(name-of-function arg1 arg2 arg3)
en el *scratch*
búfer y presione C-x C-e( eval-last-sexp
) con el punto posicionado después del paréntesis de cierre.
Para que una función bar
esté disponible como comando, puede envolverla en una función interactiva personalizada ( foo
) de la siguiente manera:
(defun foo ()
(interactive)
(bar))
Por supuesto, si bar
toma uno o más argumentos, deberá proporcionarlos para que foo
funcione correctamente.
Si ve personas que usan los términos "función" y "comando" indistintamente, esto podría indicar (según el contexto) que no son conscientes de las diferencias entre los conceptos subyacentes.
1 Tenga en cuenta que estoy hablando de defun
s aquí. Como @Stefan señala en los comentarios, las macros de teclado son un caso especial: pueden considerarse comandos , pero no son funciones.
C-h i
, elija el manual de Elisp , loi command
coloca directamente en el nodoWhat is a function?
, lo que aclara todo esto. Ayuda a los usuarios a aprender a preguntar a Emacs. (Solo una opinión.)