Ejecute los comandos en Emacs de forma asíncrona, pero muestre la salida de forma incremental

Tengo una función de utilidad:

(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)))

Esto me permite hacer cosas como(execute-in-buffer "ls /" (get-buffer-create "*my-output*"). Sin embargo, no es adecuado para comandos lentos. Si llamo a una serie de comandos lentos, no obtengo ninguna salida hasta el final:

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

Quiero poder llamar de forma sincrónica, por lo que el siguiente comando solo se ejecuta después de que finalice el anterior. Sin embargo, quiero ver la salida de mis comandos mientras se ejecutan. ¿Cómo haría esto?

(El código de ejemplo es solo para mostrar, estoy feliz de dejarlo a favor de otra cosa).

Respuestas a la pregunta(2)

Su respuesta a la pregunta