Automatycznie aktualizuj katalog domyślny, gdy PWD zmieni się w trybie powłoki i trybie termicznym


12

Czy są jakieś opcje lub pakiety, które powodują default-directoryaktualizację, jeśli katalog roboczy zmienia się w shell-modei term-mode? Tzn. Przy użyciu cd, ale rozwiązanie musiałoby być bardziej niezawodne niż po prostu szukanie tego konkretnego polecenia i być może kilku innych - pomyślałbym, że powinien faktycznie sprawdzać wartość $PWDpo każdym poleceniu.

Co ważniejsze, powinien on również działać podczas łączenia się ze zdalnym komputerem z poziomu bufora shell-modelub, term-modektóry został utworzony default-directoryjako katalog lokalny. Tak naprawdę jest to funkcja, której naprawdę potrzebuję: móc programowo powiedzieć, czy polecenia, które wpisuję do takich terminali, są uruchamiane na zdalnym komputerze. Chciałbym uzyskać tę informację w postaci poprawnie ustawionego zestawu default-directoryi rysunku, jeśli istnieje sposób, aby to uzyskać, to narzędzie, które to robi, działałoby również lokalnie, jak opisano powyżej.


Zajrzałeś do dirtrack-mode? Ma hak, który może robić, co chcesz.
J David Smith

Odpowiedzi:


12

Myślę, że pierwszą część twojego pytania można rozwiązać dirtrack-mode. Najpierw ustaw monit powłoki, aby zawierał obecny katalog roboczy. Następnie ustaw dirtrack-listwyrażenie regularne, które mówi, dirtrack-modejak je wyodrębnić. Przykład: ustawiłem PS1w Bash na:

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

aw Emacsie ustawiam dirtrack-listi włączam dirtrack-mode:

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

(Zaczerpnięte z tego świetnego posta na blogu .)

Następnie mogę dowolnie zmieniać katalogi i default-directoryzmieniać je z biegiem czasu. Działa to również wtedy, gdy w powłoce przesyłam SSH do zdalnego komputera, na którym ustawiłem monit w ten sam sposób - cd /etc/apache2na zdalnym komputerze zmienia się default-directoryna /etc/apache2. Należy jednak pamiętać, że jest to lokalny - w przypadku zdalnego komputera, default-directorynadal będzie ustawiony /etc/apache2na lokalnym komputerze.

Jeśli rozumiem drugą część twojego pytania, chcesz default-directoryustawić coś takiego jak remote-machine:/etc/apache2SSHing na innym komputerze. Korzystając z ssh-el , możesz uruchomić, ssh-directory-tracking-modeaby to zadziałało. Na przykład, jeśli uruchomię M-x ssh, cd do /etc/apache2, a następnie uruchom C-x C-f, pojawi się monit:

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

Możesz uruchomić tryb Mx ssh-directory-tracking-mode ręcznie, ale wygodniej jest ustawić go jako hak dla trybu ssh:

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

Więcej informacji:


2
Doskonała odpowiedź, dzięki! Tak naprawdę jestem tym zainteresowany, ponieważ napisany przeze mnie pakiet ma funkcje, które sprawią, że będzie to pożądane. To with-editorbędzie używane w następnej wersji Magit. Sam Magit nie korzysta z with-editor„s shell-mode/ term-mode-support, więc prawdopodobnie nie będzie integrować to przed wydaniem. Ale informacje, które podałeś, znacznie ułatwią to, gdy skończę z wydaniem Magit i znów będę mógł skupić się na innych rzeczach.
tarsjusz

Oto jak zacząć od with-editorspoza Magit: emacs.stackexchange.com/questions/27/… . I problem Magit, który skłonił mnie do zadania tego pytania: github.com/magit/magit/issues/1638 .
tarsius
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.