這是一個複雜的問題,但這裏什麼都沒有! 我最近更新了我的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。 =) –