shell-command
と call-process-shell-command
の違いを調べていて発見したのだけど、Emacs 23.2 あたりから async-shell-command
が本体に搭載されてたんだねぇ。
M-x async-shell-command
で起動。デフォルトだと M-&
にキーバインドされている。
例えば M-x shell-command
で、find / -type f
とかすると、コマンド実行が終了するまで Emacs の操作が全くできない状態になる。
それを M-x async-shell-command
で、同じように find / -type f
すると、*Async Shell Command*
バッファにコマンドの出力を入力しつつ、キー入力可能な状態に戻ってくる。
まー、普段のコマンド実行は iTerm2 とかの Emacs とは別のシェルを使って行なっているので、M-x でわざわざ起動して使うかというとそうでも無いんだけど、Emacs Lisp プログラム内部から使うなら可能性は広がりそうな気がする。
【追記】
help を見てたら、shell-command
のコマンドの最後に &
を付けるのでも同じ挙動になるのか。どうも「自動的に & を付けた状態にする」のが async-shell-command
みたいだ。