在mintty下启动emacs的shell mode以后,总会在提示符之前显示几个固定的垃圾字符。
term和ansi-term也一样,网上搜索了很久也没有解决办法。
仔细分析以后发现,系统home下面的.bashrc里PS1变量最前面一段
\[\e]0;\w\a\]
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ '
于是我想到了在emacs中重新定义PS1这个变量,也就是把seten的函数饮用一下放到emacs的启动elisp中,
(setenv "PS1" "XXXX")不过很悲惨地,你可以在emacs中通过M-x getenv看到这个变量,但是无法应用在emacs的shell中。于是,,,于是郁闷很久。
一天我上网突然看到有人在.bashrc中通过判断term的类型来重新定义PS1,感觉曙光就在眼前了。我把之前的PS1变量的设置方法重新写了一下
case $TERM in (xterm*) set_title='\[\e]0;\w\a\]' (*) set_title= esac PS1=$set_title'\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ '
也就是说,如果我当前执行的term不时xterm这类的,我就把之前设定title的字符移除。
结论当然是肯定的,从此以后emacs的shell,term,ansi-term都干净了。而且原来mintty的title还可以继续显示用户的当前目录