Jiggling & Wiggling

2008/10/23

xterm和rxvt-unicode的详细对比

Filed under: Software — roylez @ 3:48 上午

有时我想,像我这样花如此多的时间在选择、比较、配置一个terminal上面的人,应该算是很少见了吧。但我相信我不是一个人,应该还有其他跟我类似的geek在某个地方默默地搜索着,尝试着。

我是根本不考虑gnome-terminal/konsole之类依赖gnome/gtk/qt的库的终端的,在剩下选择中,我所知支持UTF8的就这两个,这就是我现在要对他们作出比较的原因。他们都不是完美的,各有各的好处,各有各的让我恼火的地方。目前,我用的是自己打过补丁的rxvt-unicode。

  • 速度
    1. 单单从简单命令诸如ls/cd/pwd而言,xterm稍稍快过urxvt,毕竟xterm的功能要简单一些嘛。但是xterm有一个bug,它不缓冲本地的stdout,用下面的命令就可以看出来

    time seq -f "test %g" 10000

      比较一下直接执行,ssh localhost后执行,和在urxvt下执行,大家就明白了。值得注意的是,我在网上查到,这个bug已经有12年的历史了!这能不让人恼火吗?
  • 色彩
    1. xterm支持256色,urxvt支持88色。在数年前就有人提交了urxvt的256色补丁,那时候urxvt还是8.x的版本,现在都9.5了……可是开发组那边也没把这部分直接加入源码。这个补丁在urxvt的源码包里面就包含了,可以自己打。我用的就是打过这个补丁的,没感觉速度上面受到任何影响。
  • 中文支持
    1. 两个都支持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

  • 键盘定义
    1. 两个都支持,但是xterm的似乎更加方便。我一直在找如何在urxvt中把粘贴定义成M-V的方法,一直没有找到,更不用说鼠标选中自动复制了(也许需要perl扩展来做orz)。尽管urxvt的manpage说得貌似很容易的,其实一点都不。

    urxvt*keysym.sym: string

  • 扩展功能
    1. xterm没有扩展功能,urxvt有perl扩展,这点上urxvt胜出。但是urxvt的perl扩展似乎没有多少人用,我就从来没有用过,也许将来会用到pastebin,matcher之类吧。xterm虽然没有扩展,但是可以通过类似print -Pn “”的语法来动态控制标题,背景色等等,也很不错。我甚至曾经看到过有人让xterm在vim切换命令和编辑模式的时候动态改变光标的颜色。有一个叫做xterm-control的软件,专门就是用来做这样的事情的。所以,总的来说,没有扩展功能,xterm并不比urxvt差到哪里去,甚至某些方面更灵活。
  • 视觉效果
    1. 无疑是urxvt胜出,它支持真透明伪透明以及背景图,xterm只支持换背景色。但是,urxvt令我极为不爽的是,它在新版本中,去掉了libxpm的依赖,而改用libAfterImage。其结果是除了xpm以外,现在背景图可以用更多种图片格式了,但是坏处也相当明显,内存消耗直接加倍了!这也是很多发行版的urxvt编译的时候没有加-enable-afterimage的原因之一。为什么要换这个依赖,其实是因为aterm的一个开发人员加入了urxvt的开发。就我看来,从libxpm换到libAfterImage是一种退步:libxpm在哪个发行版里面都有,但是libAfterImage不然,作为个通用的终端,应该尽量让依赖的库大众化简单化的;他们换用libAfterImage的结果是,现在urxvt的用户都不想用背景图了……话说回来,xterm也依赖libxpm,但是就是没有背景图的功能,只能说开发人员比较那个啥了。
  • 小巧性
    1. xterm小巧毋庸置疑。urxvt虽然大一些,但是它有贴心的client/server模式,你可以用urxvtd启动daemon,然后以后开新的终端就用urxvtc,这样的话,在终端开得多的情况下不比xterm用得多——当然,前提是你没有启用libAfterImage支持。
  • 字体渲染
    1. 这是我对urxvt最不满意的地方了。urxvt的里面的xft字体会比xterm里面的要宽大约10%。不是很容易看出来,我是用了它大约2年后才发现。urxvt的开发人员早就知道这个了,不过他们说这不是他们的问题,所以他们什么都没做。我不懂里面的太多细节,但是我只知道xterm是没问题的。具体可以看这里。xterm和urxvt的字体渲染对比,可以见下面的两个附图。

    rxvt-unicode
    rxvt-unicode

    xterm
    xterm

    结论:选择不多的情况下,两个都算是很不错的了,功能很丰富,够你挖上一阵子。但是如果很挑剔的话,恐怕只有自己去改代码了。

    Advertisements

    2条评论 »

    1. 通过google找到您的这篇文章,挺好玩的,你的结论偶经常有同感,呵呵。

      条评论 由 xy117 — 2009/03/29 @ 12:54 下午

    2. 在Google上胡乱搜索时发现阁下的这篇文章,相当不错。

      关于urxvt字体宽度的问题,有一个补丁可以(至少是部分地)解决,参考:
      http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg642952.html

      我用了这个补丁之后,对于某些英文字体两者的显示效果基本上一致了。

      条评论 由 Eirika — 2009/08/11 @ 8:04 下午


    RSS feed for comments on this post. TrackBack URI

    发表评论

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / 更改 )

    Twitter picture

    You are commenting using your Twitter account. Log Out / 更改 )

    Facebook photo

    You are commenting using your Facebook account. Log Out / 更改 )

    Google+ photo

    You are commenting using your Google+ account. Log Out / 更改 )

    Connecting to %s

    在WordPress.com的博客.

    %d 博主赞过: