Tự động cập nhật thư mục mặc định khi PWD thay đổi ở chế độ shell và chế độ hạn


12

Có bất kỳ tùy chọn hoặc gói nào default-directoryđược cập nhật nếu thư mục làm việc thay đổi trong shell-modeterm-modekhông? Tức là khi sử dụng cd, nhưng giải pháp sẽ phải mạnh mẽ hơn là chỉ tìm kiếm lệnh đặc biệt này và có thể một vài thứ khác - tôi thực sự nên kiểm tra giá trị của $PWDmỗi lệnh, tôi nghĩ vậy.

Quan trọng hơn mặc dù nó cũng sẽ hoạt động khi kết nối với một máy từ xa từ bên trong shell-modehoặc term-modebộ đệm được tạo lần đầu tiên với default-directorymột thư mục cục bộ. Đó thực sự là tính năng tôi thực sự cần: có thể nói theo chương trình xem các lệnh tôi nhập vào các thiết bị đầu cuối như vậy có chạy trên một máy từ xa không. Tôi muốn có được thông tin đó dưới dạng một tập hợp default-directoryvà hình chính xác nếu có cách nào để có được thông tin đó, thì công cụ làm việc này cũng sẽ hoạt động cục bộ như được mô tả ở trên.


Bạn đã nhìn vào dirtrack-mode? Nó có một cái móc có thể làm những gì bạn muốn.
J David Smith

Câu trả lời:


12

Tôi nghĩ rằng phần đầu tiên của câu hỏi của bạn có thể được thực hiện với dirtrack-mode. Đầu tiên, bạn đặt dấu nhắc shell của bạn để bao gồm thư mục làm việc hiện tại. Tiếp theo, bạn đặt dirtrack-listthành một biểu thức chính cho biết dirtrack-modecách giải nén nó. Ví dụ: Tôi đặt PS1trong Bash là:

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

và trong Emacs tôi đặt dirtrack-listvà bật dirtrack-mode:

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

(Lấy từ bài đăng blog tuyệt vời này .)

Sau đó, tôi có thể thay đổi thư mục theo ý muốn và default-directorythay đổi khi tôi đi. Điều này cũng hoạt động nếu, trong một trình bao, tôi SSH đến một máy từ xa nơi tôi đã đặt lời nhắc theo cùng một cách - cd /etc/apache2, trên máy từ xa, thay đổi default-directorythành /etc/apache2. Tuy nhiên, lưu ý rằng đây là cục bộ - trong trường hợp máy từ xa, default-directoryvẫn sẽ được đặt thành /etc/apache2trên máy cục bộ .

Nếu tôi hiểu phần thứ hai của câu hỏi của bạn, bạn muốn default-directoryđược đặt thành một cái gì đó giống như remote-machine:/etc/apache2khi SSH sang máy khác. Khi sử dụng ssh-el , bạn có thể chạy ssh-directory-tracking-modeđể thực hiện công việc này. Ví dụ: nếu tôi chạy M-x ssh, cd đến /etc/apache2, sau đó chạy C-x C-f, lời nhắc tôi thấy là:

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

Bạn có thể chạy 'Mx ssh-thư mục theo dõi-mode` bằng tay, nhưng sẽ thuận tiện hơn khi đặt nó làm móc cho chế độ ssh:

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

Thêm thông tin:


2
Câu trả lời tuyệt vời, cảm ơn! Tôi thực sự quan tâm đến điều này bởi vì một gói tôi đã viết có các tính năng phát triển sẽ làm cho điều này trở nên đáng mong đợi. Nó with-editorsẽ được sử dụng trong phiên bản tiếp theo của Magit. Magit tự nó không sử dụng with-editor's shell-mode/ term-mode-Hỗ trợ, vì vậy tôi có thể sẽ không tích hợp này trước khi phát hành. Nhưng thông tin bạn cung cấp sẽ giúp bạn làm điều đó dễ dàng hơn nhiều, một khi tôi đã hoàn thành việc phát hành Magit và một lần nữa có thể tập trung vào những thứ khác.
tarsius

Đây là cách bắt đầu với with-editorbên ngoài Magit: emacs.stackexchange.com/questions/27/ . Và vấn đề Magit dẫn tôi đặt câu hỏi này: github.com/magit/magit/issues/1638 .
tarsius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.