mintty下启动emacs shell mode后,垃圾字符问题

十年以后,重回emacs怀抱,会了。

在mintty下启动emacs的shell mode以后,总会在提示符之前显示几个固定的垃圾字符。

term和ansi-term也一样,网上搜索了很久也没有解决办法。


仔细分析以后发现,系统home下面的.bashrc里PS1变量最前面一段

\[\e]0;\w\a\]

其实是给xterm或者说给mintty修改title用的,下面是我用MSYS2系统的时候完整的PS1变量

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ '

当我们启动emacs的shell mode以后,无法解析到最前面这几个字符。所以这几个字符就无情的显示在emacs的shell中了。

于是我想到了在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还可以继续显示用户的当前目录




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值