Ich habe einige Funktionen zum Ausführen eines asynchronen Hintergrundprozesses async-shell-command
in meinen .emacs definiert, aber jedes Mal, wenn ich die Befehle ausführe, wird ein neues Fenster (kein Frame) erstellt und der Puffer des Prozesses wird dort angezeigt. Wie könnte ich den Befehl ohne den "Popup" -Puffer ausführen?
23
start-process
für einen Sudo-Befehl zu verwenden? Ich habe versucht , meinen Ruf zu Einwickelnstart-process
in ,(let ((default-directory "/sudo::")) ... )
aber es funktioniert nicht für mich zu arbeiten."program"
In diesem Fall ist nur der Programmname (z. B. Nautilus, Caja, Firefox) und"arg1 arg2 ..."
sollte in der vierten Position Argument seinstart-process
. Ich habe das durch Lesen der Dokumentation herausgefunden :)Wie Tikhon schon sagte,
(start-process)
ist der Weg zu gehen. Wenn Sie keinen Puffer anlegen möchten, aber dennoch auf den Status des Hintergrundprozesses reagieren möchten, können Sie auch verwenden(set-process-sentinel)
. Hier ist ein modifiziertes Beispiel aus meinemprojector
Paket:Aus der Emacs-Funktionsbeschreibung:
Die GNU-Handbuchseiten zu Prozessen sind ziemlich gut für weitere Informationen.
quelle
set-process-sentinel
ein bisschen genauer geht? Ich habe eine allgemeine Vorstellung von einer Funktion, die den Prozess verwaltet, verstehe aber nicht alle Details. Vielen Dank!M-x describe-function
und eingeben, erhaltenset-process-sentinel
Sie die kurze Antwort aus der Emacs-Dokumentation: (set-process-sentinel PROCESS SENTINEL) Geben Sie PROCESS den Sentinel SENTINEL. Null für Standard. Der Sentinel wird als Funktion aufgerufen, wenn der Prozess den Status ändert. Es erhält zwei Argumente: den Prozess und eine Zeichenfolge, die die Änderung beschreibt.C-h f
Sie müssen die Ausführung eines asynchronen Befehls nicht ändern. Emacs verfügt über eine generische Funktion, mit der Sie steuern können, wo oder ob ein Puffer angezeigt wird, indem Sie eine einzelne Datenstruktur ändern
display-buffer-alist
.In der folgenden Lösung können Sie sehen, dass die Aktionsfunktion
display-buffer-no-window
(dh kein Popup) so eingestellt ist, dass sie mit jedem Puffer verknüpft ist, dessen Name beginnt*Asynchronous Shell Command*
(emacs fügt ein inkrementelles Suffix hinzu, wenn mehr als eines erstellt werden soll).Um die Liste der anderen verfügbaren Anzeigeoptionen anzuzeigen, geben Sie
C-h f display-buffer
die Liste der "Aktionsfunktionen" ein und suchen Sie danach.quelle