Запускать команды в Emacs асинхронно, но отображать вывод постепенно
У меня есть функция полезности:
(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)))
Это позволяет мне делать такие вещи, как(execute-in-buffer "ls /" (get-buffer-create "*my-output*")
, Тем не менее, он не очень подходит для медленных команд. Если я вызываю серию медленных команд, я не получаю вывод до самого конца:
(let ((buf (get-buffer-create "*my-output")))
(execute-in-buffer "sleep 10" buf)
(execute-in-buffer "ls /" buf))
Я хочу иметь возможность вызывать синхронно, поэтому следующая команда запускается только после завершения предыдущей. Тем не менее, я хочу видеть вывод моих команд во время их выполнения. Как бы я это сделал?
(Пример кода просто для галочки, я с радостью опущу его в пользу чего-то другого.)