linux · terminal xterm urxvt · 2013-09-24 · yuex

早就听说 xterm 和 urxvt 是轻量高可配置,所以想利用周末的时间把某现在在用的 terminator 切换到 xterm 或者 urxvt。结果放弃了。倒不是因为配置太过复杂,而是某觉得,在进行了一定配置之后,对比需求 / 成本 / 收益觉得,这样的配置不能称之为有效。某认为将这些东西总结一下,可能有助于有同样切换初衷的同学少走一些弯路。

某切换 terminal 的初始需求 :

  1. 可全屏
  2. 支持 solarized 的颜色设置
  3. 支持 inconsolata-g 和 wenquanyi 中文
  4. 支持 tab
  5. 可以和 tmux 和 powerline 和谐相处
  6. 轻量化
  7. copy and paste

因为 urxvt 的初衷就是取代 xterm。而 terminator,konsole,gnome-terminal,xfce4-terminal 的设置都是大同小异。所以下面的讨论主要以 urxvt 和 terminator 为例。

第一条

urxvt 需要使用 wmctrl 来进行全屏控制,需要对 urxvt 进行 perl 扩展,可以参考 AUR 中的 urxvt-fullscreen1。xterm 内建支持 fullscreen,只不过绑定键位是 Alt-Enter

第二条

urxvt 和 xterm 的颜色设置都是通过 .Xresources 或者 .Xdefaults 来进行的 ( 为个简便,以下仅用 .Xresources 进行指代 )。可以通过 *color 的通位方式来让 xterm 和 urxvt 来使用相同的位置。但是一旦设置了 foreground color,那么在 vim 当中,就没 reverse video 的效果了。光标不会再根据当前 text 的语法高亮情况来变换光标颜色了 .。

第三条

urxvt 和 xterm 都可以设置两种字体。不同的是二者在 .Xresources 中的资源名是不同的。urxvt 通过 URxvt.font: xft:*,xft:* 来指定,而 xterm 要分别使用 xterm.faceNamexterm.faceNameDoubleSize 来指定英文和中文字体。不过要注意的是,像某这样使用 inconsolata-g 有 - 符号的,fc-list 会显示实际的名字要使用 "Inconsolata-g",这个用法在 urxvt -fn 的选项中是没有问题的。但如果要将这个配置写入到 .Xresources 当中,要将 \ 再 escape 一次,变成 URxvt.font:xft:Inconsolata\\-g

第四条

xterm 不支持。urxvt 要通过 perl 扩展。可以参考 tabbed 和 tabbedex2。tabbed 是 urxvt 自带的扩展。不同的是 tabbed 只支持新建 tab 和 tab 之间的切换,而 tabbedex 还额外支持 tab 重命名和 tab 位置的相互调换。tabbedex 可以参考 AUR 中的,但是要注意的是 tabbedex 的实现目前有 bug,要手动注释掉其代码中的 on_user_command 函数,这个并不影响 tabbedex 的功能,只是一个留给用户进行键位绑定的 hook,可以 man urxvtperl 确认。其实如果是配合 tmux 使用的话,tab 支持可以不考虑,可以用 tmux 的 window 来模拟 tab。

第五条

xterm 不能显示 powerline 中的 fancy symbol,即使将字体 patch 过也不行。urxvt 可以正常使用 powerline。但二者在配合 tmux 使用时,在使用 manpage 的时候,less 会的 reverse video 有问题,需要做一个 hack3。但是做完这个 hack 之后,会使得二者的可移植性大大降低。甚至在 urxvt 中使用 tmux 后,做 sudo 的时候都会提示,root 下没有做这个 hack,更别说将这些配置直接拷贝到其它机器上了。需要将这个 hack 一同拷贝。

第六条

不可否认 xterm 和 urxvt 都是轻量级的 terminal emulator,对系统资源占用较少。某粗略测算 urxvt 是 terminaotr 的 1/5,xterm 是 terminator 的 1/10。但考虑到目前笔电的硬件配置,系统资源占用少已经不能算是一个 killer feature 了。而且就算考虑到系统资源占用,完全可以换装 xfce4-terminal,它的资源使用和 urxvt 和 xterm 完全是可比的。再者说,也没有人会在高负载的 server 上使用图形介面吧 ? 如果还要使用 VNC 来连接 server 的话,这个做法本身就有问题了。

第七条

xterm 和 urxvt 都需要进行额外的配置。因为做到这一步,某已经决定就到这里了,所以就没有再继续进行这一项的具体配置了。

这上面几条来看,虽然 urxvt 和 xterm 可以在经过配置后达到这些目的,但是对应的移植性和维护性都要有所降低,与 terminaotr 这些 terminal 相比,已经不具有即装即用性了。当然,urxvt 也并非全然没有它的特点。比如,在 urxvt 中通过 perl 扩展,可以开启 url 选择模式,完全通过键盘就可以选择 url 并在 browser 中打开。还可以通过 URxvt.colorUL 来让有下划线的 text 有不同的样式,这个在 manpage 中还是蛮方便的。

上所述,某最后决定还是继续使用 terminator 好了。正如一些同学批评的那样

有这个时间还不如多写现行代码