ansi-term
しばらく前に、私はEmacsがすべてのバッファの現在のディレクトリを追跡できるようにする次の貴重なコードを見つけました。
より具体的には、cd <some/path>
Emacs内の端末で押すとC-x C-f
Emacsがすぐに実行されます。find-file
これ<some/path>
は非常に便利です。
if [ -n "$INSIDE_EMACS" ]; then
chpwd() { print -P "\033AnSiTc %d" }
print -P "\033AnSiTu %n"
print -P "\033AnSiTc %d"
fi
ssh
ただし、シェルからリモートシステムにアクセスすると、上記のトリックは機能しません。理想的には、この状況で私がキーを押すと、Emacsは私が特定のシステムにsshedしたことを認識し、Trapmpを使用してそのシステムとC-x C-f
リモートパスで実行する必要があります。find-file
これにより、次の2つの質問が発生します。
- 上記のコードスニペットはどのようにして、なぜ動作しますか?
- 別のコンピュータにSSHを接続した後にリモートパスを追跡できるように拡張するにはどうすればよいですか?
答え1
まず、Robertのコメントで述べたように、コードスニペットは無効です。前には少なくともセミコロンまたは改行文字が必要です}
。印刷ドアが正しくない可能性があります。
しかし、ここでは何が起こっているのかを推測するのに十分なので説明します。
これを実行すると、ansi-term
環境変数が設定されたシェルが呼び出されます$INSIDE_EMACS
。その後、シェルコードは他のタスクを実行します。デフォルトでは、関数をオーバーライドして、chpwd
現在の作業ディレクトリを含む他のジョブを印刷します。各コマンドで最後のコマンドが正しく完了した後、プロンプト領域のどこかに現在のディレクトリが表示されることを確認すると、簡単に確認できます。
ansi-term は、行の先頭でディレクトリのようなものを見ると、その内容を追跡します。したがって、その意味では、コードは特別ではありません。\w
プロンプトに追加された環境変数を設定するなど、さまざまな方法でディレクトリを表示できますPS1
。
#2については「emacs ansi-term バッファ/ウィンドウからリモートファイルを開く: ansi-term + Trapp」