这是一个复杂的问题,但这里什么都没有! 我最近更新了我的bash提示符,出现在此主题的最后一篇文章中的漂亮版本:Bash: custom PS1 with nice working directory path。 相关的bash代码(从该线程后)在这里被复制:emacs终端bash(PS1)提示重复
# define the awk script using heredoc notation for easy modification
MYPSDIR_AWK=$(cat << 'EOF'
BEGIN { FS = OFS = "/" }
{
if (length($0) > 16 && NF > 4)
print $1,$2,".." NF-4 "..",$(NF-1),$NF
else
print $0
}
EOF
)
# my replacement for \w prompt expansion
export MYPSDIR='$(echo -n "${PWD/#$HOME/~}" | awk "$MYPSDIR_AWK")'
# the fancy colorized prompt: [0 [email protected] ~]%
# return code is in green, [email protected] is in bold/white
export PS1='[\[\033[1;32m\]$?\[\033[0;0m\] \[\033[0;1m\]\[email protected]\h\[\033[0;0m\] $(eval "echo ${MYPSDIR}")]% '
# set x/ssh window title as well
export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*} $(eval "echo ${MYPSDIR}")\007"'
此提示看起来大致是这样(在非emacs的终端):
[0 [email protected] ~/my_dir]%
其中“0”以上绿色和“用户@主机”为粗体。 (注意“0”可以是各种数字,并且表示最后一个命令的返回值。)
我遇到的问题特定于在emacs中运行的shell(对于大多数变体emacs中的终端交互:'term','ansi-term','shell'和'eshell')。 提示出现两次(和稍微打破)在emacs的终端,像这样:
0;[email protected] ~/my_dir[0 [email protected] ~/my_dir]%
提示,所述的“第二”版本从开始并包括“[”看起来就好了。 这是前面的文字,它没有任何样式(即没有绿色和没有粗体)。 因此,emacs必须将提示的某些部分解释为输入,并且我的猜测是连接到提示的“0”和“user @ host”部分的颜色或粗体转义指示符?
任何人都知道如何告诉emacs正确解释转义? 或者,或者,如何修改提示设置命令,使两个emacs不会讨厌它,它仍然可以在非emacs终端工作? 也许甚至有另一种选择:如何使用emacs友好的已修改字符串为终端类型添加测试(emacs中的'eterm-color')?
如果您禁用'PROMPT_COMMAND',这会停止吗? –
是的。万分感谢! 好吧,我只是试着添加一个钩子来清除shell的环境变量。 (或者只是住在没有窗口标题更新功能的地方。) 再次感谢! – mmuurr
有可能让emacs理解控制顺序,但我甚至不知道从哪里开始。我使用vim。 =) –