Ogni comando è una funzione, ma non tutte le funzioni sono anche un comando. 1
Un comando include una chiamata a interactive
; ecco perché i comandi sono comunemente chiamati "funzioni interattive". I comandi possono essere invocati tramite M-x name-of-command
RETe possono anche essere associati a una sequenza di tasti. Le funzioni regolari non includono una chiamata a interactive
, non possono essere chiamate utilizzando M-xe non è possibile associarle a una sequenza di tasti. Per eseguire una funzione non interattiva, è possibile premere M-:( eval-expression
), immettere il nome della funzione seguito dai valori per tutti gli argomenti che devono essere racchiusi tra parentesi e premere RET:
M-: (name-of-function arg1 arg2 arg3)
RET
Se la funzione non deve funzionare sul buffer corrente, è anche possibile inserire
(name-of-function arg1 arg2 arg3)
nel *scratch*
buffer e premere C-x C-e( eval-last-sexp
) con il punto posizionato dopo la parentesi di chiusura.
Per rendere bar
disponibile una funzione come comando, puoi inserirla in una funzione interattiva personalizzata ( foo
) come segue:
(defun foo ()
(interactive)
(bar))
Naturalmente, se bar
accetta uno o più argomenti, dovrai fornirli per far foo
funzionare correttamente.
Se vedi persone che usano i termini "funzione" e "comando" in modo intercambiabile, ciò potrebbe indicare (a seconda del contesto) che non sono a conoscenza delle differenze tra i concetti sottostanti.
1 Nota che sto parlando di defun
s qui. Come sottolinea @Stefan nei commenti, le macro della tastiera sono un caso speciale: possono essere considerate comandi , ma non sono funzioni.
C-h i
, scegli il manuale di Elisp ,i command
- ti mette nel nodoWhat is a function?
, il che rende tutto questo cristallino. Aiuta gli utenti a imparare a chiedere a Emacs. (Solo un'opinione.)