2015-03-22 18 views
11

This Stack Overflow answer powiedziano mi, że mogę ustawić rozmiar czcionki Emacsa jest z set-face-attribute:Dlaczego niektóre funkcje Emacsa są niedostępne za pośrednictwem `M-x`?

(set-face-attribute 'default nil :height 100) 

Te komentarze pokazują, że nie można uruchomić set-face-attribute z Mx:

M-x set-face-attribute [No match]

Zamiast tego musisz uruchomić go pod numerem M-::

Eval: (set-face-attribute 'default nil :height 100)

Dlaczego niektóre polecenia, podobnie jak set-face-attribute, nie dostępne za pośrednictwem M-x?

+0

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). –

Odpowiedz

21
  • 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 interactivecode 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.

+1

Dobra inicjatywa, aby umieścić to w innym pytaniu. Technicznie twoja odpowiedź jest świetna, ale dla kompletności dodałbym, że z punktu widzenia doświadczenia użytkownika nierozsądne jest ujawnianie wszystkich funkcji jako poleceń - to zaśmieca przestrzeń nazw i sprawia, że ​​automatyczne uzupełnianie jest mniej użyteczne. Dlatego większość funkcji nie jest dostępna przez M-x (moim zdaniem wciąż jest zbyt wiele poleceń, aby człowiek mógł tam coś zapamiętać;)) – Vasiliy

Powiązane problemy