emacs で shell バッファを複数使う方法

emacs で M-x shell を実行すると、*shell* という名前のバッファが作られ、そこで shell が起動する。私はもっぱらそこで作業している。GNU screen や tmux などの端末多重化ツールを使っていれば、それらが端末に出力されたものの履歴を見たり、カット&ペーストをしたりする機能を提供しているが、shell バッファがあればおなじみの emacs 環境の中で完結するので便利(な人には便利)。

で、shell バッファが二つ欲しくなることがある。もう一度 M-x shell を実行しても、すでに開いている *shell* に飛んでしまう。そういうときには、*shell* を開いた状態で M-x rename-buffer を実行し、shell バッファの名前を *shell* から別のもの、たとえば *sh2* に変更してしまうとよい。その上で改めて M-x shell を実行すると、再び *shell* という名前で shell バッファが作られる。これにより、*sh2* と *shell*、二つの shell バッファが使えるようになる。三つ以上の場合も同様。

ときどき、使っていた shell バッファを誤って exit してしまうことがある。できることならそのバッファを再利用したい、と思うことがある。あると思いねえ。少なくとも私にはある。たとえば、*sh2* で誤って exit してしまったとする。普通に M-x shell を実行しても、*shell* バッファに飛ぶだけ。*sh2* を rename-buffer しても意味がない。

そんなときには M-: (M-x eval-expression) で (shell "*sh2*") と shell 関数にバッファ名を渡せばよい。