Kann Emacs einen Befehl im Hintergrund ausführen

7

Ich habe einen Emacs Befehl wie folgt:

%Vor%

Die Operation query ist eine zeitaufwendige Operation. Wenn dieser Befehl ausgeführt wird, blockiert Emacs den gesamten Rahmen. Gibt es eine Möglichkeit, Emacs dazu zu bringen, diesen Befehl im Hintergrund auszuführen oder nur ein einzelnes Fenster wie den Minipuffer zu blockieren?

    
DouO 28.12.2011, 08:12
quelle

3 Antworten

8

Emacs hat keine Threads. Bei langen Operationen können Sie die Aufgabe in Abschnitte aufteilen und die Abschnitte in Leerlaufzeiten , so dass Emacs auf Benutzereingaben zwischen den Chunks reagieren können.

Die andere Möglichkeit besteht darin, es als externen Prozess auszuführen, von dem emacs die Ausgabe akzeptiert.

    
Tom 28.12.2011, 08:21
quelle
10

Wenn Sie einen externen Prozess verwenden möchten (den Sie in einem Kommentar zu einer anderen Frage angegeben haben), können Sie Folgendes verwenden:

%Vor%

Dies wird ein Prozess -Objekt zurückgeben. Sie können die Ausgabe entweder an einen Puffer senden oder eine Filterfunktion an den Prozess anhängen. Im letzteren Fall ist dies eine Funktion, die jedes Mal aufgerufen wird, wenn Ihr Prozess eine Ausgabe ausgibt.

Zusätzlich können Sie eine Sentinel-Funktion an Ihren Prozess anhängen. Diese Funktion wird jedes Mal aufgerufen, wenn sich der Status Ihres Prozesses ändert. Dies ist nützlich, um herauszufinden, wann der Prozess beendet wurde.

Es gibt mehrere Beispiele für das oben genannte im Quellcode von Emacs, ein Beispiel ist compile.el .

    
Lindydancer 28.12.2011 11:39
quelle
4

Sie können beispielsweise so etwas verwenden

%Vor%

Das Ergebnis wird in *Async Shell Command* buffer angezeigt.

    
Taras 28.12.2011 11:19
quelle

Tags und Links