Shellモードは、Shellバッファーのデフォルトディレクトリー(ファイルの名前を参照してください)をシェルの作業ディレクトリーと同一に保つために、サブシェルに与えられる‘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モードを使用するには、ShellバッファーでM-x
dirtrack-modeとタイプするか、shell-mode-hook
にdirtrack-mode
を追加します(フックを参照してください)。