Każde polecenie jest funkcją, ale nie każda funkcja jest także poleceniem. 1
Polecenie obejmuje połączenie z interactive
; dlatego polecenia są powszechnie nazywane „funkcjami interaktywnymi”. Polecenia można wywoływać za pomocą M-x name-of-command
RET, a także można je przypisać do sekwencji klawiszy. Zwykłe funkcje nie zawierają wywołania interactive
, nie można ich wywołać za pomocą M-xi nie można ich przypisać do sekwencji klawiszy. Aby uruchomić funkcję, która nie jest interaktywna, możesz nacisnąć M-:( eval-expression
), wprowadzić nazwę funkcji, a następnie wartości argumentów, które muszą być zawarte w nawiasach, i nacisnąć RET:
M-: (name-of-function arg1 arg2 arg3)
RET
Jeśli funkcja nie powinna działać na bieżącym buforze, możesz również wprowadzić
(name-of-function arg1 arg2 arg3)
w *scratch*
buforze i naciśnij C-x C-e( eval-last-sexp
) z punktem umieszczonym po nawiasie zamykającym.
Aby funkcja była bar
dostępna jako polecenie, możesz ją owinąć w niestandardową funkcję interaktywną ( foo
) w następujący sposób:
(defun foo ()
(interactive)
(bar))
Oczywiście, jeśli bar
przyjmiesz jeden lub więcej argumentów, będziesz musiał je podać, aby foo
działać poprawnie.
Jeśli zobaczysz, że ludzie używają terminów „funkcja” i „komenda” zamiennie, może to oznaczać (w zależności od kontekstu), że nie są świadomi różnic między podstawowymi pojęciami.
1 Zauważ, że mówię o defun
s tutaj. Jak wskazuje @Stefan w komentarzach, makra klawiaturowe są szczególnym przypadkiem: można je traktować jako polecenia , ale nie są funkcjami.
C-h i
, wybierz instrukcję Elisp ,i command
- ustawia cię prosto w węźleWhat is a function?
, dzięki czemu wszystko jest krystalicznie czyste. Pomóż użytkownikom nauczyć się pytać Emacsa. (Tylko jedna opinia.)