Next: , Previous: , Up: Shell   [Contents][Index]


38.2 対話的なサブシェル

対話的にサブシェルを実行するには、M-x shellとタイプします。これは*shell*という名前のバッファーを作成(または再使用)して、そのバッファーにたいして入出力を行なう、シェルのサブプロセスを実行します。つまりサブシェルからの端末出力はポイントの後に挿入されてポイントを進め、サブシェルにたいする端末入力はそのバッファーのテキストになります。サブシェルにたいして入力を与えるには、バッファーの最後に移動して入力をタイプし、RETで終了します。

デフォルトでは、サブシェルが対話的に呼び出された際、カレントウィンドウですでに*shell*バッファーを表示していない場合は、新たなウィンドウに*shell*バッファーが表示されます。この動作はdisplay-buffer-alist(Window Choiceを参照)を通じてカスタマイズできます。

サブシェルがコマンドの実行を待つ間、ウィンドウまたはバッファーを切り替えてEmacsで他の編集を行なうことができます。Emacsはそれを処理するときがきたら(たとえばキーボード入力待ちになったとき)、サブシェルからの出力をShellバッファーに挿入します。

Shellバッファーでは、プロンプトはフェイスcomint-highlight-promptで表示され、サブミットされた入力行はフェイスcomint-highlight-inputで表示されます。これにより入力行とシェル出力を容易に区別することができます。Facesを参照してください。

複数のサブシェルを作成するには、(C-u M-x shell)のように)プレフィクス引数を指定してM-x shellを呼び出します。その後、このコマンドはバッファー名を読み取り、そのバッファーでサブシェルを作成(または再使用)します。M-x rename-uniquelyを使用して*shell*バッファーをリネームしてから、M-x shellで新しい*shell*バッファーを作成することもできます。異なるバッファーのサブシェルは、並行して独立に実行されます。

M-x shellによりシェルファイル名を指定するには、変数explicit-shell-file-nameをカスタマイズします。これがnil(デフォルト)の場合、もし存在すればEmacsは環境変数ESHELLを使用します。そうでない場合は通常、変数shell-file-nameを使用します(Single Shellを参照してください)。しかしデフォルトディレクトリーがリモートの場合(Remote Filesを参照してください)、シェルファイル名の入力を求めます。リモートファイル名を正しくタイプする方法に関するヒントは、Minibuffer Fileを参照してください。

Emacsは新しいシェルにたいする入力として、もしそれが存在すればファイル~/.emacs_shellnameの内容を送ります。ここでshellnameは、そのシェルがロードされたファイルの名前です。たとえばbashを使う場合、送られるファイルは~/.emacs_bashになります。ファイルが見つからない場合、Emacsは~/.emacs.d/init_shellname.shの使用を試みます。

シェルにたいしてコーディングシステムを指定するには、M-x shellの直前にコマンドC-x RET cを使用します。C-x RET pとタイプすることにより、実行されているサブシェルにたいするコーディングシステムを変更することもできます。Communication Codingを参照してください。

サブシェルでは、Emacsは環境変数INSIDE_EMACSに‘version,comint’をセットします。ここでversionは、Emacsのバージョン(たとえば‘24.1’)です。プログラムはこの変数をチェックして、Emacsの内部で実行されているかを判断することができます。