Gibt es Optionen oder Pakete, die default-directory
aktualisiert werden, wenn sich das Arbeitsverzeichnis in shell-mode
und ändert term-mode
? Dh bei der Verwendung cd
, aber die Lösung müsste robuster sein, als nur nach diesem bestimmten Befehl und vielleicht ein paar anderen zu suchen - es sollte tatsächlich der Wert $PWD
nach jedem Befehl überprüft werden , würde ich denken.
Wichtiger ist jedoch, dass dies auch funktionieren sollte, wenn eine Verbindung zu einem Remote-Computer über einen shell-mode
oder einen term-mode
Puffer hergestellt wird, der zuerst default-directory
als lokales Verzeichnis erstellt wurde. Das ist eigentlich die Funktion, die ich wirklich brauche: Programmgesteuert feststellen zu können, ob die Befehle, die ich in solche Terminals eingebe, auf einem Remote-Computer ausgeführt werden. Ich möchte diese Informationen in Form einer richtigen Menge default-directory
und Figur erhalten, wenn es einen Weg gibt, dies zu erreichen, dann würde das Tool, das dies tut, auch lokal funktionieren, wie oben beschrieben.
quelle
dirtrack-mode
? Es hat einen Haken, der machen kann, was Sie wollen.Antworten:
Ich denke, der erste Teil Ihrer Frage kann erledigt werden
dirtrack-mode
. Zunächst legen Sie fest, dass Ihre Shell-Eingabeaufforderung das aktuelle Arbeitsverzeichnis enthält. Als Nächstes legen Siedirtrack-list
einen regulären Ausdruck fest, der angibt,dirtrack-mode
wie er extrahiert werden soll. Beispiel: Ich habePS1
in Bash folgendes eingestellt:und in Emacs stelle ich ein
dirtrack-list
und schalte eindirtrack-mode
:(Aus diesem großartigen Blog-Beitrag entnommen .)
Danach kann ich die Verzeichnisse nach Belieben
default-directory
wechseln und ich ändere sie nach Belieben . Dies funktioniert auch , wenn in einer Schale, ich SSH zu einem Remote - Computer , auf dem ich die Eingabeaufforderung auf die gleiche Weise festgelegt haben -cd /etc/apache2
, auf dem entfernten Rechner, ändert sichdefault-directory
zu/etc/apache2
. Beachten Sie jedoch, dass dies lokal ist - im Fall des Remotecomputersdefault-directory
wird dies weiterhin/etc/apache2
auf dem lokalen Computer festgelegt.Wenn ich den zweiten Teil Ihrer Frage verstehe, möchten Sie
default-directory
auf so etwas wieremote-machine:/etc/apache2
SSHing auf einem anderen Computer festgelegt werden. Wenn Sie ssh-el verwenden , können Sie ausführenssh-directory-tracking-mode
, damit dies funktioniert. Wenn ich zum Beispiel "M-x ssh
CD to"/etc/apache2
und dann "Run" ausführeC-x C-f
, wird folgende Eingabeaufforderung angezeigt:Sie können den "Mx ssh-directory-tracking-mode" von Hand ausführen, aber es ist bequemer, ihn als Hook für den ssh-mode festzulegen:
Mehr Informationen:
quelle
with-editor
wird in der nächsten Version von Magit verwendet. Magit selbst verwendetwith-editor
denshell-mode
/term-mode
-support nicht, daher werde ich diesen wahrscheinlich nicht vor der Veröffentlichung einbinden. Aber die Informationen, die Sie uns gegeben haben, werden es viel einfacher machen, wenn ich mit der Magit-Veröffentlichung fertig bin und mich wieder auf andere Dinge konzentrieren kann.with-editor
außerhalb von Magit an: emacs.stackexchange.com/questions/27/… . Und die Magit-Ausgabe, die mich dazu brachte, diese Frage zu stellen: github.com/magit/magit/issues/1638 .