Автоматично оновлювати каталог за замовчуванням, коли PWD змінюється в режимі оболонки та режимі терміна


12

Чи є якісь параметри або пакети, які викликають default-directoryоновлення, якщо робочий каталог зміниться в shell-modeта term-mode? Тобто при використанні cd, але рішення повинно бути більш надійним, ніж просто шукати цю конкретну команду і, можливо, кілька інших - вона, власне, повинна перевірити значення $PWDпісля кожної команди, я думаю.

Що ще важливіше, хоча він також повинен працювати при підключенні до віддаленої машини зсередини shell-modeабо term-modeбуфера, який був створений вперше за default-directoryдопомогою локального каталогу. Це насправді функція, яка мені справді потрібна: вміння програмно сказати, чи виконуються команди, які я набираю у такі термінали, виконуються на віддаленій машині. Я хотів би отримати цю інформацію у вигляді правильно встановленої форми default-directoryта фігури, якщо є спосіб її отримати, то інструмент, що робить це, також буде працювати локально, як описано вище.


Ви заглядали dirtrack-mode? У ньому є гачок, який може робити те, що ви хочете.
Дж. Девід Сміт

Відповіді:


12

Я думаю, що першу частину вашого питання можна виконати dirtrack-mode. По-перше, ви встановите підказку для оболонки, щоб включити даний робочий каталог. Далі ви встановлюєте dirtrack-listрегулярний вираз, який розповідає, dirtrack-modeяк його витягти. Приклад: Я задав PS1у Bash такий:

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на локальній машині.

Якщо я розумію другу частину вашого запитання, ви хочете default-directoryвстановити щось на зразок, remote-machine:/etc/apache2коли SSHing на іншій машині. Використовуючи 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-режиму:

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

Більше інформації:


2
Відмінна відповідь, дякую! Мене насправді це цікавить, тому що написаний нами пакет отримав такі функції, які роблять це бажаним. Це те, with-editorщо буде використано наступним випуском Magit. Magit сам не використовує with-editor's shell-mode/ term-mode-support, тому я, ймовірно, не буду інтегрувати це до випуску. Але надана вами інформація зробить це набагато простіше, як тільки я закінчу з випуском Magit і знову зможу зосередитись на інших речах.
Тарсій

Ось як почати роботу з with-editorзовнішньої Magit: emacs.stackexchange.com/questions/27 / ... . І питання про Magit, яке змусило мене задати це питання: github.com/magit/magit/isissue/1638 .
Тарсій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.