我有一個效用函數:運行命令異步,但顯示輸出逐步
(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))
我希望能夠同步調用,所以前一結束之後的下一個命令只運行。但是,我想在運行命令時看到命令的輸出。我將如何做到這一點?
(示例代碼是作秀,我很高興地放棄它贊成別的東西。)
你不應該用'with-current-buffer'或者'set-buffer'而不是'switch-to-buffer'? – sds
這是設計 - 我想讓我的輸出緩衝區可見。在其他情況下,我肯定會使用'with-current-buffer'或'set-buffer'。 –
在這種情況下,你需要使用'set-buffer'和display-buffer'。 – sds