Memperbarui direktori default secara otomatis ketika PWD berubah dalam mode-shell dan mode-term

12

Apakah ada opsi atau paket yang menyebabkan default-directorypembaruan jika direktori kerja berubah shell-modedan term-mode? Yaitu ketika menggunakan cd, tetapi solusinya harus lebih kuat daripada hanya mencari perintah khusus ini dan mungkin beberapa lainnya - itu benar-benar harus memeriksa nilai $PWDsetelah setiap perintah, saya akan berpikir.

Lebih penting lagi meskipun itu juga harus bekerja ketika menghubungkan ke mesin remote dari dalam shell-modeatau term-modebuffer yang pertama kali dibuat dengan default-directorymenjadi direktori lokal. Itu sebenarnya fitur yang benar-benar saya butuhkan: bisa memberi tahu secara terprogram apakah perintah yang saya ketik ke terminal seperti itu dijalankan pada mesin jarak jauh. Saya ingin mendapatkan informasi itu dalam bentuk set default-directorydan gambar yang benar jika ada cara untuk mendapatkannya, maka alat yang melakukan ini juga akan bekerja secara lokal seperti dijelaskan di atas.

tarsius
sumber
Sudahkah Anda melihat ke dalam dirtrack-mode? Memiliki kait yang dapat melakukan apa yang Anda inginkan.
J David Smith

Jawaban:

12

Saya pikir bagian pertama dari pertanyaan Anda dapat dilakukan dirtrack-mode. Pertama, Anda mengatur prompt shell Anda untuk memasukkan direktori kerja saat ini. Selanjutnya, Anda mengatur dirtrack-listke regex yang memberi tahu dirtrack-modecara mengekstraknya. Contoh: Saya menetapkan PS1Bash menjadi ini:

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

dan di Emacs saya mengatur dirtrack-listdan menghidupkan dirtrack-mode:

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

(Diambil dari posting blog yang luar biasa ini .)

Setelah itu, saya dapat mengubah direktori sesuka hati, dan default-directoryberubah seiring berjalannya waktu. Ini juga berfungsi jika, dalam sebuah shell, saya SSH ke mesin jarak jauh di mana saya telah mengatur prompt dengan cara yang sama - cd /etc/apache2, pada mesin jarak jauh, berubah default-directorymenjadi /etc/apache2. Perhatikan, bagaimanapun, bahwa ini adalah lokal - dalam kasus mesin jarak jauh, default-directorymasih akan diatur ke /etc/apache2pada mesin lokal .

Jika saya memahami bagian kedua dari pertanyaan Anda, Anda ingin default-directorydisetel ke sesuatu seperti remote-machine:/etc/apache2ketika SSHing ke komputer lain. Saat menggunakan ssh-el , Anda dapat menjalankan ssh-directory-tracking-modeuntuk membuat ini berfungsi. Misalnya, jika saya menjalankan M-x ssh, cd to /etc/apache2, kemudian jalankan C-x C-f, prompt yang saya lihat adalah:

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

Anda dapat menjalankan 'Mx ssh-directory-tracking-mode` dengan tangan, tetapi lebih mudah untuk mengaturnya sebagai pengait untuk ssh-mode:

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

Informasi lebih lanjut:

Saint Aardvark the Carpeted
sumber
2
Jawaban yang bagus, terima kasih! Saya benar-benar tertarik dengan ini karena paket yang saya tulis telah mengembangkan fitur yang akan membuat ini diinginkan. Itu with-editoryang akan digunakan oleh rilis Magit berikutnya. Magit sendiri tidak menggunakan with-editor's shell-mode/ term-mode-dukungan, jadi saya mungkin tidak akan mengintegrasikan ini sebelum rilis. Tetapi informasi yang Anda berikan akan membuatnya lebih mudah untuk melakukannya, setelah saya selesai dengan rilis Magit dan dapat kembali fokus pada hal-hal lain.
tarsius
Berikut ini cara memulai dengan di with-editorluar Magit: emacs.stackexchange.com/questions/27/… . Dan masalah Magit yang membuat saya menanyakan pertanyaan ini: github.com/magit/magit/issues/1638 .
tarsius