- M-x jest związany z poleceniem
execute-extended-command
, która pozwala wpisać nazwę polecenia i uruchamia go.
- M-: jest związany z poleceniem
eval-expression
, która pozwala wpisać dowolną S-wyrażenie zawierające funkcyjnych połączenia i ocenia je.
Funkcje, które można nazwać z M-:, są wykorzystywane do realizacji funkcji dostosowania Emacs (takich jak w .emacs
) oraz wtyczek. Argumenty funkcji są zwykle przekazywane przez wywołanie funkcji w S-wyrażeniu.
Dowolna funkcja może również być poleceniem, jeśli ma w swojej definicji formularz interactive
. Formularz interactive
opisuje, w jaki sposób funkcja powinna uzyskać swoje argumenty, gdy zostanie wywołana jako polecenie. Na przykład, jeśli funkcja ma w swojej definicji (interactive "bGive me a buffer: ")
, funkcja będzie mogła być wywoływana za pomocą M-x. Gdy użytkownik wywoła funkcję za pomocą M-x, Emacs poprosi użytkownika o nazwę bufora (z powodu b
), a nazwa, którą wpisano, zostanie przekazana jako argument do funkcji.
Celem tworzenia funkcji jest ułatwienie użytkownikom końcowym, nie tylko programistów Emacs Lisp. Polecenia (uruchom z M-x) są łatwiejsze do uruchomienia interaktywnie w następujący sposób:
- Nie musisz otoczyć nazwę polecenia z
()
aby to ważne S-wyrażenie.
- Argumenty mogą być przekazywane automatycznie (np. Pozycja kursora) lub możesz zostać poproszony o ich podanie, abyś nie musiał pamiętać, jakie argumenty są potrzebne.
- Po wyświetleniu pytania o argument można go automatycznie uzupełnić, ponieważ formularz
interactive
code characters (np. b
) określa, jakiego rodzaju danych wejściowych oczekiwać.
Powodem nie można wywołać funkcję set-face-attribute
z M-x jest to, że jego definicja nie zawiera formularz interactive
, a więc set-face-attribute
nie jest poleceniem. Musisz to nazwać prostą funkcją w wyrażeniach S. Możesz to zrobić z minibufora z M-: lub z innych miejsc z innymi ways of evaluating code.
Emacs Mini Manual → Concepts → Command ma krótki, różnie sformułowane wyjaśnienia różnic między normalnych funkcji i poleceń. Relationship between Emacs functions and commands objaśnia niektóre szczegóły nie w tej odpowiedzi.
To pytanie zostało rozszerzone z pytania [DavidS] (http://stackoverflow.com/users/201891/davids) w [this comment] (http://stackoverflow.com/questions/294664/how-to -set-the-size-size-in-emacs # comment46074287_296316). –