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?
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.
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
.