Emacs: Wie speichern Sie den letzten vom Benutzer angegebenen Parameter als Standard?

8

Ich schreibe eine interaktive Funktion, die ich gerne an das letzte vom Benutzer angegebene Argument erinnern und es als Standard verwenden würde.

%Vor%

Beim ersten Aufruf der Funktion möchte ich, dass sie sich an das vom Benutzer angegebene Argument erinnert, damit sie beim nächsten Aufruf der Funktion einfach die Eingabetaste drücken und den Wert verwenden, den sie beim letzten Mal angegeben haben.

Ich kann das nicht in der Dokumentation finden - wie macht man das in elisp?

    
Kyle Burton 28.09.2008, 15:22
quelle

3 Antworten

5

Sie können sehen, wie der Befehl compile dies tut. Rufen Sie den Hilfstext für den Kompilierbefehl mit C-h f compile auf, bewegen Sie den Cursor über den Namen der Datei, die die Funktion enthält, und drücken Sie RETURN . Dies öffnet die Quelldatei für compile .

Grundsätzlich gibt es eine dynamische / globale Variable compile-command , die den letzten Kompilierbefehl enthält. Emacs ist ein Single-User-System mit einem Thread, so dass wirklich nicht viel mehr benötigt wird. Bedenken Sie auch, dass Elisp eine sehr alte Schule Lisp ist, und Variablen haben dynamische (Call-Stack), nicht lexikalisch, Umfang. In dieser Art von System ist es natürlich:

%Vor%

Wenn Sie vom compile -Befehl sprechen, haben Sie versucht, ihn anstelle Ihrer eigenen run-rake -Funktion zu verwenden?

    
jfm3 28.09.2008, 16:22
quelle
8
%Vor%

ist, was Sie verwenden möchten. Es hat einen Punkt für eine History-Variable.

Hier ist ein Beispielcode:

%Vor%

Offensichtlich an Ihre Bedürfnisse anpassen. Der 'run-rake-history' ist einfach eine Variable, die verwendet wird, um den Verlauf für diesen Aufruf von 'read-from-minibuffer' zu speichern. Eine andere Möglichkeit wäre, 'completing-read' zu verwenden - aber das setzt voraus, dass Sie eine Liste mit Optionen haben, auf die Sie den Benutzer beschränken möchten (was bei Shell-ähnlichen Befehlen normalerweise nicht der Fall ist).

    
Trey Jackson 29.09.2008 19:52
quelle
0

Ich habe herausgefunden, wie man das manuell unter Verwendung einer Defvar (global) macht, aber das fühlt sich an, als ob die Core-Bibliothek (wie der make-Parameter eines ähnlichen Schemas) bereits vorhanden wäre. Dies scheint nur mehr Code und mehr manuell als es sein sollte:

%Vor%     
Kyle Burton 28.09.2008 15:55
quelle

Tags und Links