シェルモードでは、シェルバッファのデフォルトディレクトリ(ファイル名を参照)をシェルの作業ディレクトリと同じに保つため、サブシェルに与えられた ‘cd’、‘pushd’、および ‘popd’ コマンドを追跡します。シェルは、送信された入力行を解析することで、これらのコマンドを認識します。
これらのコマンドにエイリアスを使用する場合、変数 shell-pushd-regexp、shell-popd-regexp、shell-cd-regexp に適切な正規表現を設定することで、Emacs
にそれらも認識させることができます(正規表現の構文を参照)。例えば、shell-pushd-regexp がシェルコマンドラインの先頭にマッチした場合、その行は pushd コマンドとして扱われます。これらのコマンドは、シェルコマンドラインの先頭でのみ認識されます。
Emacsがサブシェルの作業ディレクトリの変更を認識できなくなった場合は、M-x dirs と入力してください。このコマンドはシェルに作業ディレクトリを問い合わせ、それに応じてデフォルトディレクトリを更新します。一般的なコマンド構文をサポートするシェルでは動作しますが、特殊なシェルでは動作しない場合があります。
また、シェルの作業ディレクトリを追跡する代替手法を実装したバッファローカルなマイナーモードである Dirtrack
モードも利用できます。この手法を使用するには、シェルプロンプトに常に作業ディレクトリが含まれている必要があり、さらにプロンプトのどの部分に作業ディレクトリが含まれているかを識別するための正規表現を指定する必要があります。詳細は変数
dirtrack-list のドキュメントを参照してください。Dirtrack
モードを使用するには、シェルバッファに M-x dirtrack-mode と入力するか、dirtrack-mode を shell-mode-hook に追加してください(Hooks を参照)。