Как исправить приглашение в режиме оболочки emacs?

Как исправить приглашение в режиме оболочки emacs?

Я программирую на машине коллеги. У него версия 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так что это на самом деле не помогает.

решение1

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

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

echo $PS1 | less -E

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

echo $PROMPT_COMMAND | less -E

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

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

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

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

printenv | less

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

решение2

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

export PROMPT_COMMAND=""

решение3

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

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

решение4

На этот вопрос очень хорошо ответил Дэниел По на сайте 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)

Связанный контент