Chaque commande est une fonction, mais chaque fonction n'est pas également une commande. 1
Une commande inclut un appel à interactive
; C'est pourquoi les commandes sont communément appelées "fonctions interactives". Les commandes peuvent être appelées via M-x name-of-command
RET, et elles peuvent également être liées à une séquence de touches. Les fonctions standard n'incluent pas d' appel à interactive
, ne peuvent pas être appelées à l'aide M-xet vous ne pouvez pas les lier à une séquence de touches. Pour exécuter une fonction qui n’est pas interactive, vous pouvez appuyer sur M-:( eval-expression
), saisir le nom de la fonction suivi des valeurs pour tous les arguments dont il a besoin entre parenthèses, puis appuyer sur RET:
M-: (name-of-function arg1 arg2 arg3)
RET
Si la fonction n'est pas censée fonctionner sur le tampon actuel, vous pouvez également entrer
(name-of-function arg1 arg2 arg3)
dans le *scratch*
tampon et appuyez sur C-x C-e( eval-last-sexp
) avec le point positionné après la parenthèse fermante.
Pour rendre une fonction bar
disponible sous forme de commande, vous pouvez l'envelopper dans une fonction interactive personnalisée ( foo
) comme suit:
(defun foo ()
(interactive)
(bar))
Bien sûr, si bar
prend un ou plusieurs arguments, vous devrez les fournir afin de faire foo
fonctionner correctement.
Si vous voyez des personnes utiliser les termes "fonction" et "commande" de manière interchangeable, cela peut indiquer (en fonction du contexte) qu'elles ne sont pas conscientes des différences entre les concepts sous-jacents.
1 Notez que je parle de defun
s ici. Comme @Stefan le fait remarquer dans les commentaires, les macros de clavier constituent un cas particulier: elles peuvent être considérées comme des commandes mais ne sont pas des fonctions.
C-h i
, choisissez le manuel Elisp ,i command
- vous place correctement dans le noeudWhat is a function?
, ce qui rend tout cela clair. Aidez les utilisateurs à apprendre à demander à Emacs. (Juste un avis.)