対話的にシェルを実行し,その入出力をEmacsバッファを通して行なうには M-x shellを使います.このコマンドは,バッファ`*shell*'を作成 (あるいは再使用)して,サブシェルを走らせ入力はそのバッファからとり,出力 はそのバッファへ挿入するようにします.つまり,すべてのサブシェルからの" 端末出力"は,そのバッファへ挿入され,サブシェルへの"端末入力"もすべて, そのバッファのテキストから取ることになります.サブシェルへ入力を送るには, バッファの最後へいって入力を打ちRETを押します.
Emacsはサブシェルの実行を待ちません.シェルの待機中あるいはコマンドの 実行中に,ウィンドウやバッファを切替えて別の編集ができます.サブシェルの 出力は,その出力をEmacsが処理する時間があくまで待っています.これは, Emacsがキーボード入力や経過時間を待っているときにはいつも起こっているこ とです.
サブシェルをいくつも走らせたいときには,M-x rename-bufferを使っ てバッファ`*shell*'の名前を変えてください.このあとM-x shell を入力すると,新しいサブシェルを伴った新しいシェルバッファ`*shell*' が作られます.このバッファの名前も変えれば,3つ目のシェルバッファも作れ ます.すべてのサブシェルは独立にかつ並行して走ります.
サブシェルをロードする際に用いるファイル名は,(それがnil
でなけ
れば)変数explicit-shell-file-name
の値です.さもなければ,環境変数
ESHELL
が使われ,ESHELL
もなければ,環境変数SHELL
を使
います.ファイル名が相対的に指定されていれば,リストexec-path
の中
のディレクトリを探します(see section シングルシェルコマンド).
サブシェルが起動すると,`~/.emacs_shellname'ファイルがあれ
ば,それが入力として送られます.ここでshellnameはロードされたシェ
ルファイルの名前です.たとえば,csh
を使っているときは,送られるファ
イルは`~/.emacs_csh'です.
サブシェルに送られるcd
,pushd
,popd
コマンドは
Emacsによって監視されています.これにより,Emacsは`*shell*'バッファ
のデフォルトのディレクトリをシェルのワーキングディレクトリと同じにするこ
とができます.送られる入力行を調べ,これらのコマンドを文字列で認識します.
これらのコマンドにエイリアス(別名:alias)を使っている場合にも,Emacsがそれを認
識するようにできます.たとえば,変数shell-pushd-regexp
の値がシェ
ルコマンド行の先頭とマッチした場合は,その行はpushd
コマンドとみな
されます.`pushd'のエイリアスを使っているときは,この変数を変えてく
ださい.同様に,変数shell-popd-regexp
とshell-cd-regexp
は
`popd'と`cd'を意味するコマンドを認識するのに使われます.これら
のコマンドはシェルコマンド行の先頭に現われたときだけ認識されます.
Emacsが,`cd',`pushd',`popd'にあたるコマンドを実行し
ようとしたときにエラーを起こしたら,変数
shell-set-directory-error-hook
にnil
でない値が存在するとき,
引数なしでこれを評価します.