
Я программирую на машине коллеги. У него версия 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-term
(и ansi-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)