Emacs 中安靜地執行 async-shell-command
December 27, 2017
安靜地在 Emacs 中執行 async-shell-command 有兩種方式:
1. display-buffer-alist
如果你想要對所有的 async-shell-command
都安靜執行,可以透過:
(add-to-list 'display-buffer-alist
'("\\*Async Shell Command\\*.*" display-buffer-no-window))
在 Spacemacs 中可以把上面兩行加入在 dotspacemacs/user-config
裡面
缺點是所有的 async shell command 都會被安靜執行,有時候有些 async shell command 我們還是希望跳出視窗提醒
例如執行一些執行 local server 的 command ,不然再開一個可能會開新的 port 所以我推薦第二個方法
2. call-process-shell-command
使用 call-process-shell-command
要留意指令後需要添加 nil 0
參數:
(call-process-shell-command
(async-shell-command
... ;; 做你想做的事情
) nil 0)
這種方式對個別 async-shell-command 可以分別操作,但是缺點是他會問你要不要開新的 buffer
如果你是有透過 after-save-hook 之類的會高頻率地呼叫 asnc-shellc-ommand,那這個方法會很煩
可能就要選第一個方法
3. shell-command + kill-buffer
如果你的 shell-command 跑起來很快就結束,又會高頻率地呼叫到的話
可以考慮使用 shell-command 而非 async 然後搭配 kill-buffer 來解決一堆 shell command buffer 的問題
也就是說,把 call-process-shell-command 中換成:
(call-process-shell-command
(shell-command
... ;; 做你想做的事情
)
(kill-buffer "*Shell Command Output*" nil 0)
這樣即可,就留意可能會頓一下因為是在執行 shell-command