Führen Sie Befehle in Emacs asynchron aus, zeigen Sie die Ausgabe jedoch inkrementell an

Ich habe eine Utility-Funktion:

(defun execute-in-buffer (command-with-args buffer)
  "Execute a string COMMAND-WITH-ARGS representing a shell command with arguments,
inserting the results in BUFFER."
  (switch-to-buffer buffer)
  (insert (format ">>> %s\n" command-with-args))
  (let* ((command-args-list (s-split " " command-with-args))
         (command (car command-args-list))
         (args (cdr command-args-list)))
    (apply 'call-process command nil buffer t args)))

Dies ermöglicht mir Dinge wie(execute-in-buffer "ls /" (get-buffer-create "*my-output*"). Es ist jedoch nicht gut für langsame Befehle geeignet. Wenn ich eine Reihe langsamer Befehle aufrufe, erhalte ich bis zum Ende keine Ausgabe:

(let ((buf (get-buffer-create "*my-output")))
  (execute-in-buffer "sleep 10" buf)
  (execute-in-buffer "ls /" buf))

Ich möchte in der Lage sein, synchron aufzurufen, sodass der nächste Befehl erst ausgeführt wird, nachdem der vorherige beendet wurde. Ich möchte jedoch die Ausgabe meiner Befehle sehen, während sie ausgeführt werden. Wie würde ich das machen?

(Der Beispielcode ist nur zur Veranschaulichung gedacht. Ich bin froh, ihn zugunsten von etwas anderem fallen zu lassen.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage