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

12

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

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

Tarsius
источник
Вы смотрели в 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/apache2SSHing на другую машину. При использовании ssh-el вы можете запустить ssh-directory-tracking-modeэту работу. Например, если я запускаю M-x sshcd to /etc/apache2, затем запускаю C-x C-f, я вижу следующее приглашение:

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

Вы можете запустить 'Mx ssh-directory-tracking-mode` вручную, но удобнее установить его в качестве ловушки для ssh-mode:

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

Дополнительная информация:

Святой Аардварк Ковровое покрытие
источник
2
Отличный ответ, спасибо! Я действительно заинтересован в этом, потому что пакет, который я написал, имеет расширенные возможности, которые сделают это желательным. Это with-editorбудет использоваться в следующем выпуске Magit. Сам Magit не использует with-editor«s shell-mode/ term-mode-поддержка, так что я , вероятно , не будет интегрировать это до выхода. Но информация, которую вы предоставили, сделает это намного проще, когда я закончу с выпуском Magit и снова смогу сосредоточиться на других вещах.
tarsius
Вот как начать работать with-editorза пределами Magit: emacs.stackexchange.com/questions/27/… . И проблема Magit, которая побудила меня задать этот вопрос: github.com/magit/magit/issues/1638 .
tarsius