有时我想,像我这样花如此多的时间在选择、比较、配置一个terminal上面的人,应该算是很少见了吧。但我相信我不是一个人,应该还有其他跟我类似的geek在某个地方默默地搜索着,尝试着。
我是根本不考虑gnome-terminal/konsole之类依赖gnome/gtk/qt的库的终端的,在剩下选择中,我所知支持UTF8的就这两个,这就是我现在要对他们作出比较的原因。他们都不是完美的,各有各的好处,各有各的让我恼火的地方。目前,我用的是自己打过补丁的rxvt-unicode。
- 单单从简单命令诸如ls/cd/pwd而言,xterm稍稍快过urxvt,毕竟xterm的功能要简单一些嘛。但是xterm有一个bug,它不缓冲本地的stdout,用下面的命令就可以看出来
time seq -f "test %g" 10000
- 比较一下直接执行,ssh localhost后执行,和在urxvt下执行,大家就明白了。值得注意的是,我在网上查到,这个bug已经有12年的历史了!这能不让人恼火吗?
- xterm支持256色,urxvt支持88色。在数年前就有人提交了urxvt的256色补丁,那时候urxvt还是8.x的版本,现在都9.5了……可是开发组那边也没把这部分直接加入源码。这个补丁在urxvt的源码包里面就包含了,可以自己打。我用的就是打过这个补丁的,没感觉速度上面受到任何影响。
- 两个都支持utf-8,很好。urxvt的字体选择模式更为灵活,可以有多个备选字体,所以可以同时显示中文日文韩文等等毫无问题,比较一下下面的内容
xterm*faceName: Monaco:antialias=True:pixelsize=15
xterm*faceNameDoublesize: wenquanyi bitmap song:pixelsize=16:antialias=True
URxvt.font: xft:Monaco:medium:antialias=True:pixelsize=15, \
xft:DejaVu Sans Mono:book:antialias=True:pixelsize=15, \
xft:wenquanyi bitmap song:medium:pixelsize=16:antialias=True
URxvt.boldFont: xft:Monaco:bold:antialias=True:pixelsize=15, \
xft:DejaVu Sans Mono:bold:antialias=True:pixelsize=15, \
xft:wenquanyi bitmap song:bold:pixelsize=16:antialias=True
- 两个都支持,但是xterm的似乎更加方便。我一直在找如何在urxvt中把粘贴定义成M-V的方法,一直没有找到,更不用说鼠标选中自动复制了(也许需要perl扩展来做orz)。尽管urxvt的manpage说得貌似很容易的,其实一点都不。
urxvt*keysym.sym: string
- xterm没有扩展功能,urxvt有perl扩展,这点上urxvt胜出。但是urxvt的perl扩展似乎没有多少人用,我就从来没有用过,也许将来会用到pastebin,matcher之类吧。xterm虽然没有扩展,但是可以通过类似print -Pn “”的语法来动态控制标题,背景色等等,也很不错。我甚至曾经看到过有人让xterm在vim切换命令和编辑模式的时候动态改变光标的颜色。有一个叫做xterm-control的软件,专门就是用来做这样的事情的。所以,总的来说,没有扩展功能,xterm并不比urxvt差到哪里去,甚至某些方面更灵活。
- 无疑是urxvt胜出,它支持真透明伪透明以及背景图,xterm只支持换背景色。但是,urxvt令我极为不爽的是,它在新版本中,去掉了libxpm的依赖,而改用libAfterImage。其结果是除了xpm以外,现在背景图可以用更多种图片格式了,但是坏处也相当明显,内存消耗直接加倍了!这也是很多发行版的urxvt编译的时候没有加-enable-afterimage的原因之一。为什么要换这个依赖,其实是因为aterm的一个开发人员加入了urxvt的开发。就我看来,从libxpm换到libAfterImage是一种退步:libxpm在哪个发行版里面都有,但是libAfterImage不然,作为个通用的终端,应该尽量让依赖的库大众化简单化的;他们换用libAfterImage的结果是,现在urxvt的用户都不想用背景图了……话说回来,xterm也依赖libxpm,但是就是没有背景图的功能,只能说开发人员比较那个啥了。
- xterm小巧毋庸置疑。urxvt虽然大一些,但是它有贴心的client/server模式,你可以用urxvtd启动daemon,然后以后开新的终端就用urxvtc,这样的话,在终端开得多的情况下不比xterm用得多——当然,前提是你没有启用libAfterImage支持。
- 这是我对urxvt最不满意的地方了。urxvt的里面的xft字体会比xterm里面的要宽大约10%。不是很容易看出来,我是用了它大约2年后才发现。urxvt的开发人员早就知道这个了,不过他们说这不是他们的问题,所以他们什么都没做。我不懂里面的太多细节,但是我只知道xterm是没问题的。具体可以看这里。xterm和urxvt的字体渲染对比,可以见下面的两个附图。
rxvt-unicode

xterm

结论:选择不多的情况下,两个都算是很不错的了,功能很丰富,够你挖上一阵子。但是如果很挑剔的话,恐怕只有自己去改代码了。
通过google找到您的这篇文章,挺好玩的,你的结论偶经常有同感,呵呵。
Comment by xy117 — March 29, 2009 @ 12:54 pm
在Google上胡乱搜索时发现阁下的这篇文章,相当不错。
关于urxvt字体宽度的问题,有一个补丁可以(至少是部分地)解决,参考:
http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg642952.html
我用了这个补丁之后,对于某些英文字体两者的显示效果基本上一致了。
Comment by Eirika — August 11, 2009 @ 8:04 pm