Как мне исправить мою подсказку в режиме оболочки emacs?

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так что это не помогает.

Джей Конрод
источник

Ответы:

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

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

Питер
источник
1
PROMPT_COMMAND была проблема. Я не уверен, где он устанавливается, но я добавил строку в мой ~ / .bashrc, чтобы сбросить его, и это работает. Благодарность!
Джей Конрод
PROMPT_COMMAND меня тоже убивал. Я использую MobaXTerm, и он имеет особенно сложное приглашение bash, которое представляло собой комбинацию PS1 и PROMPT_COMMAND.
Стив Броберг
5

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

export PROMPT_COMMAND=""
SG1
источник
2

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

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

luapyad
источник
1
ANSI-color-for-comint-mode-on помог мне!
User1
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)
Сообщество
источник