我该如何修复 emacs shell 模式中的提示符?

我该如何修复 emacs shell 模式中的提示符?

我在同事的机器上进行编程。他有一个我以前没用过的 emacs 版本 (23.1.1)。我的问题是,当我进入 shell 模式时,我的 bash 提示符如下所示:

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

我已在我的 中PS1设置为。它应该看起来像这样:'[\u@\h]\$ '.bashrc

[jay@socrates]$

这是它在常规 shell 中的样子。我还检查了 PS1 在 emacs shell 中是否设置为正确的值,所以现在我没有主意了。我怎样才能让我的提示符看起来像我想要的那样?

我看到过一些建议使用termeshell代替shellterm有与上述相同的提示问题,并且eshell完全忽略了我的,PS1所以这并没有真正的帮助。

答案1

您的 shell 正在尝试设置 XTerm(或其他控制台)的标题/标头。有多种方法可以完成此操作。

首先确保 PS1 确实是你认为的那样

echo $PS1 | less -E

这将告诉您提示符中是否有控制字符,less 会使它们看起来很奇怪。假设您的提示符与您所说的完全一样,那么它可能是 PROMPT_COMMAND 环境变量。您可以以同样的方式查看它...

echo $PROMPT_COMMAND | less -E

如果问题出在提示命令上,那么您可以取消设置它。无论哪种情况,这些变量都在某处设置,如果您不在 XTerm 中,则不应将其设置为更新 XTerm 标头!

您可以查看“标准”bashrc(/etc/bashrc)。您应该看到代码检查迭代 shell(是否设置了 PS1),然后检查 xterm(查看 $TERM 变量),并在那里执行与其他终端类型不同的操作。

我怀疑 bash 初始化中的某个地方有一个硬编码设置,这应该只在与 xterm 兼容的控制台程序上完成。阅读man bash以找到您可以查找和浏览的文件的完整列表。

如果以上方法均失败,请尝试

printenv | less

看看你是否能在其中找到可疑的东西,然后追踪它被设置在哪里。如果你不能解决,请在这里发布。

答案2

我遇到了完全相同的问题,这是由于 PROMPT_COMMAND 造成的。我喜欢 xterm 标题。所以我在 ~/.emacs_bash 中添加了以下行

export PROMPT_COMMAND=""

答案3

这可能与 emacs shell 和常规 shell 的终端类型有关。检查TERM两个 shell 中的环境变量设置为何。如果它们不同,那么您应该能够更改 emacs shell 终端类型或在 中使用不同的 PS1 定义来定义 emacs 终端类型.bashrc

您也可以尝试M-x ansi-termansi-color-for-comint-mode-on如果您有颜色提示)。

答案4

Daniel Poe 在 stackoverflow 网站上对此进行了很好的回答。

以下是他的回答。

您可以使用支持颜色的 AnsiTerm,或者可以为普通 shell 启用 AnsiColor:

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

相关内容