Как я могу отслеживать каталоги term.el (ansi-term), если использую что-либо, кроме bash

При использовании eshell или ansi-term и bash emacs изменяет переменную каталога по умолчанию в зависимости от того, в каком каталоге вы находитесь.

Поэтому, если я перейду к /home/user/code/project, а затем использую ido-find-file, чтобы открыть файл, он запустит ido с CWD. Если я использую ksh (моя обычная оболочка) или zsh (пробовал для тестирования), это не работает. Есть ли настройка или это просто поддерживается в bash?

Спасибо


person Adam    schedule 18.08.2010    source источник


Ответы (2)


Поместите это в свой .zshrc:

chpwd() { print -P "\033AnSiTc %d" }

print -P "\033AnSiTu %n"
print -P "\033AnSiTc %d"

Функция chpwd() запускается каждый раз при изменении pwd. Строка, оканчивающаяся на %d, позволяет отслеживать текущий каталог — я повторяю ее вне функции, чтобы убедиться, что она запускается при первой инициализации zsh. Но Emacs требует, чтобы мы сначала сказали ему, кто является текущим пользователем (строка, заканчивающаяся на %n).

На самом деле это объясняется в файле term.el, который должен находиться внутри /usr/share/emacs//lisp, если вы используете Ubuntu.

Надеюсь это поможет.

person ior3k    schedule 04.11.2010
comment
Это отлично сработало для меня с одним изменением: сначала проверьте, находитесь ли вы внутри emacs. if [ -n "$INSIDE_EMACS" ]; then chpwd() { print -P "\033AnSiTc %d" } print -P "\033AnSiTu %n" print -P "\033AnSiTc %d" fi - person bengineerd; 10.04.2012
comment
О, хороший звонок. У меня это работает так же и вне Emacs, но печатает эти последовательности всякий раз, когда вы открываете терминал вне Emacs, что может раздражать. - person ior3k; 13.04.2012

Есть несколько решений этой проблемы. Я предпочитаю свою реализацию, которая изменяет приглашение, чтобы оно содержало текущий путь, который Emacs распознает и использует для получения желаемого поведения. Кроме того, мое решение скрывает часть приглашения, содержащую путь, потому что я нахожу это некрасивым.

Мое решение можно найти в сообщении блога: Совет Emacs #25. Shell Dirtrack By Prompt.

Однако есть ряд других решений, которые можно найти на Emacs Wiki или в других местах:

person Trey Jackson    schedule 18.08.2010
comment
Я не уверен, что это решение применимо к этой конкретной проблеме - режим оболочки и режим термина - совершенно разные звери. - person Bozhidar Batsov; 18.08.2010