2010-08-18 6 views
4

При использовании eshell или ANSI-термы и Баш Emacs изменяют переменные по умолчанию-каталоги в зависимости от того, в какой каталоге вы находитесь.Как я могу иметь term.el (ANSI-термин) отслеживать каталоги при использовании anyhting кроме Баша

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

Thanks

ответ

1

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

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

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

+1

Я не уверен, что это решение применимо к этой конкретной проблеме - shell-mode и term-mode - совершенно разные звери. –

8

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

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

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

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

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

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

+1

Это работало отлично для меня с одним изменением: сначала проверьте, находитесь ли вы внутри emacs. 'if [-n" $ INSIDE_EMACS "]; Затем chpwd() {Печать -P "\ 033AnSiTc% d"} печати -P "\ 033AnSiTu% п" печати -P "\ 033AnSiTc% d" fi' – bengineerd

+0

Ах, хороший вызов. Он работает для меня так же, как и за пределами Emacs, но он печатает эти последовательности всякий раз, когда вы открываете терминал за пределами Emacs, что может раздражать. – ior3k