Sie können dies tun, indem Sie eine process filter function verwenden.
Eine Prozessfilterfunktion ist eine Funktion, die den Standardausgang des zugehörigen Prozesses empfängt. Wenn ein Prozess über einen Filter verfügt, wird die gesamte Ausgabe dieses Prozesses an den Filter übergeben. Der Prozess Puffer wird direkt für die Ausgabe aus dem Prozess verwendet, nur wenn kein Filter vorhanden ist.
[...]
Viele Filterfunktionen manchmal (oder immer) legen Sie die Ausgabe in den Puffer des Prozess, die Aktionen von Emacs imitiert, wenn kein Filter ist.
start-process
ein Prozessobjekt zurückgibt, die für den neuen Subprozess in Lisp steht, die Sie in einer Variablen speichern können, sagen proc
. Sie können eine einfache Filterfunktion schreiben, die nur die Ausgabe des Prozesses in den zugehörigen Ausgabepuffer einfügt und dadurch point
an das Ende des Puffers verschiebt.
Verwenden Sie set-process-filter
, um diese Filterfunktion Ihrem Prozess zuzuweisen.
(set-process-filter proc 'my-insertion-filter)
Alternativ, wenn es ausreichend ist, nur bis zum Ende des Puffers zu springen, sobald der Prozess abgeschlossen ist, möchten Sie vielleicht ein sentinel verwenden.
Verfahren Sentinel ist eine Funktion, die, wann immer der zugehörigen Prozessstatusänderungen aus irgendeinem Grund genannt wird, einschließlich Signale (ob durch den Prozess des eigenen Handlungen von Emacs oder verursacht gesendet), dass beenden, beenden oder fortsetzen der Prozess. Der Prozess Sentinel wird auch aufgerufen, wenn der Prozess beendet wird.
(defun my-sentinel (proc event)
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
(end-of-buffer))))
(Beachten Sie, dass diese Funktion scrollt bis zum Ende des Prozesses jedes Mal, puffern sie genannt wird, die am Ende nicht nur des Prozesses passieren kann. Wenn Sie wirklich wollen es nur das zu tun, Wenn der Prozess beendet wurde, überprüfen Sie, ob event
die Zeichenfolge "finished\n"
ist.)
Verwenden Sie set-process-sentinel
, um diese Sentinel Ihrem Prozess zuzuweisen.
(set-process-sentinel proc 'my-sentinel)
Ich habe eine Variante dieser Frage. Ich verwende einen Global-Set-Schlüssel in meiner .emacs, um eine bestimmte Tastenkombination einen Shell-Befehl auszuführen (über die Shell-Befehl-Funktion).Ich habe das gleiche Problem wie das OP; Ich sehe nur die Spitze von * Shell Command Output *, nicht die Unterseite. Ich tippte blind die oben genannten Prozess-Filter Sachen in meine .emacs-Datei und ich erhalte eine Warnung „Symbols Wert als Variable ungültig ist: proc“ kommt von dem Set-Prozess-Filter-Befehl. Ich nehme an, dass proc der Name des Prozesses sein soll, der dem Puffer der Shell zugeordnet ist, aber ich habe Lisp-Wissen. Soll ich dascmdvia M-x laufen lassen? –
@KevinBuzzard Ihr Problem zu komplex ist, in einem Kommentar zu beantworten, sollten Sie eine richtige Frage zu stellen für aufwändigere Antworten zu ermöglichen. – Thomas