PWDがシェルモードおよび用語モードで変更されたときに、デフォルトディレクトリを自動的に更新する


12

およびでdefault-directory作業ディレクトリが変更された場合に更新されるオプションまたはパッケージはshell-modeありterm-modeますか?cdつまり、を使用する場合、ソリューションはこの特定のコマンドや他のいくつかのコマンドを探すよりも堅牢である必要があります- $PWDコマンドごとに値を実際にチェックする必要があると思います。

さらに重要なことは、ローカルディレクトリとして最初に作成されたバッファshell-modeまたはterm-modeバッファ内からリモートマシンに接続するときにも動作するはずdefault-directoryです。これは実際に私が本当に必要とする機能です。そのような端末に入力したコマンドがリモートマシンで実行されているかどうかをプログラムで判断できることです。その情報を適切に設定しdefault-directory、図の形式で取得したい場合、それを取得する方法があれば、これを行うツールも上記のようにローカルで機能します。


調べましたdirtrack-modeか?それはあなたが望むことをするかもしれないフックを持っています。
Jデビッド・スミス

回答:


12

あなたの質問の最初の部分はでできると思いますdirtrack-mode。最初に、現在の作業ディレクトリを含めるようにシェルプロンプトを設定します。次に、抽出方法をdirtrack-list指示する正規表現を設定しますdirtrack-mode。例:PS1Bashでこれを設定しました:

export PS1="[\h:\w] $ "

そして、Emacsでは設定dirtrack-listしてオンにしdirtrack-modeます:

(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)

この素晴らしいブログ投稿から引用。)

その後、私は自由にディレクトリを変更することができ、default-directory行くにつれて変更します。これは、シェルで、同じ方法でプロンプトを設定したリモートマシンにSSHで接続した場合にも機能します。cd /etc/apache2リモートマシンでは、に変更さdefault-directory/etc/apache2ます。注意は、しかし、これがあると、ローカル -リモートマシンの場合には、default-directoryまだに設定されます/etc/apache2上のローカルマシン。

質問の2番目の部分を理解default-directoryしているremote-machine:/etc/apache2場合は、別のマシンにSSHで接続するときなどに設定する必要があります。ssh-elを使用する場合 、実行ssh-directory-tracking-modeしてこの作業を行うことができます。たとえば、を実行しM-x ssh、cdを /etc/apache2実行しC-x C-f、実行した場合、表示されるプロンプトは次のとおりです。

Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2

「Mx ssh-directory-tracking-mode」を手動で実行できますが、ssh-modeのフックとして設定する方が便利です。

(setq ssh-mode-hook 'ssh-directory-tracking-mode)

詳しくは:


2
素晴らしい回答、ありがとう!私が実際にこれに興味を持っているのは、私が書いたパッケージがこれを望ましいものにする機能を成長させたからです。それはだwith-editorMagitの次のリリースで使用されます。Magit自体はwith-editorshell-mode/ -supportを使用しないためterm-mode、リリース前にこれを統合することはおそらくないでしょう。しかし、Magitのリリースが完了し、他のことに再び集中できるようになったら、提供された情報を使用すると、はるかに簡単になります。
メガネザル

with-editorMagit以外で始める方法は、emacs.stackexchange.com / questions / 27 / です。そして、この質問をするために私を導くMagit問題:github.com/magit/magit/issues/1638を
メガネザル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.