13

Я занимаюсь программированием на компьютере коллеги. У него есть версия emacs (23.1.1), которую я раньше не использовал. Моя проблема в том, что когда я перехожу в режим оболочки, моя подсказка bash выглядит так:

^[]0;jay@socrates:~^G[jay@socrates]$ 

У меня PS1 установлен на '[\u@\h]\$ ' в моем .bashrc . Это должно выглядеть так:

[jay@socrates]$

Вот как это выглядит в обычной оболочке. Я также проверил, что для PS1 установлено правильное значение в оболочке emacs, так что теперь у меня нет идей. Как я могу заставить мой запрос выглядеть так, как я хочу?

Я видел несколько предложений использовать term или eshell вместо shell . term есть та же самая проблема с подсказкой, что и выше, и eshell полностью игнорирует мою PS1 так что это не поможет.

4 ответа4

13

Ваша оболочка пытается установить заголовок / заголовок XTerm (или другой консоли). Есть несколько способов сделать это.

Сначала убедитесь, что PS1 действительно то, что вы думаете

echo $PS1 | less -E

Это скажет вам, если в приглашении есть управляющие символы, меньше заставит их выглядеть смешно. Предполагая, что ваше приглашение точно такое, как вы говорите, это, вероятно, переменная среды PROMPT_COMMAND. Вы можете посмотреть на это так же ...

echo $PROMPT_COMMAND | less -E

Если проблема в командной строке, вы можете просто сбросить ее. В любом случае эти переменные где-то устанавливаются, и их не следует устанавливать для обновления заголовка XTerm, если вы не в XTerm!

Вы можете посмотреть в "стандартном" bashrc (/etc/bashrc). Вы должны увидеть код, который проверяет итеративную оболочку (установлена PS1), а затем проверяет xterm (смотрит на переменную $ TERM) и делает там что-то отличное от других типов терминалов.

Я подозреваю, что где-то в инициализации bash есть жестко запрограммированная установка, которая должна выполняться только на xterm-совместимых консольных программах. Прочитайте man bash, чтобы найти полный список файлов, которые вы можете найти и просмотреть.

Если все вышеперечисленное не помогло, попробуйте

printenv | less

И посмотрите, сможете ли вы найти там что-нибудь подозрительное, а затем отследить, где это происходит. Отправьте это здесь, если вы не можете решить это.

5

Я столкнулся с точно такой же проблемой, и это связано с PROMPT_COMMAND. Мне нравится название xterm. Поэтому я добавил следующую строку в ~/.emacs_bash

export PROMPT_COMMAND=""
2

Это может быть связано с типом терминала оболочки emacs против вашей обычной оболочки. Проверьте, какая переменная среды TERM установлена в обеих оболочках. Если они отличаются, то вы сможете изменить тип терминала оболочки emacs или использовать другое определение PS1 для типа терминала emacs в .bashrc .

Вы также можете попробовать M-x ansi-termansi-color-for-comint-mode-on если у вас есть цветовые подсказки).

1

На этот вопрос очень хорошо ответили на сайте stackoverflow. Дэниел По.

Вот его ответ.

Вы можете использовать AnsiTerm, который поддерживает цвета, или вы можете включить AnsiColor для обычной оболочки:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .