Xresources和urxvt


#Linux#


2013-09-01

感谢西城的投稿。

在linux下工作,我们用的最多的,也是最重要的工具自然是终端模拟器。因为我们几乎可以在里面做任何事情。所以选择一个好用的终端模拟器是一个很重要的事情。linux桌面发展到现在,自然有很多种不同的终端模拟器可供选择,首先大多数桌面环境都会提供一个自己的终端实现,kde的konsole,gnome的gnome-terminal,xfce的xfcr-terminal(Terminal),lxde的lxterminal,e17的terminology,下拉式终端里有kde的yakuake,gnome有guake,tilda。其他的有复古风格的vinterm,轻量级的vilvte等。当然,还有最古老的xterm和urxvt。 linux上的软件大都具有很大的相似性。为了尽可能地给用户以选择和定制的自由,默认情况下几乎都是一个基本的框架,没有什么附加的东西在上面,所有的一切都需要我们自己根据喜好去配置。vim和emacs便是如此,默认的emacs几乎看起来让人难以忍受。xterm和urxvt也如此,没有配置的话看起来就像是五六十年代的东西。但配置过后,其功能和易用性确是任何现有的终端都无法比拟的。下面是从afterstep Wiki上摘的一幅配置过后的效果图:

而urxvt和xterm的配置,则要用到用户的Xresources配置。

在X系统中,X resources是指一些应用程序的参数,和命令行参数,程序级配置文件一同用来配置程序的表现效果。这些参数在X server那里只是一些无意义的字符串,具体的语法和含义是由客户端应用程序或库来解释的。

每一个X resources指定了一个应用程序或其组件的一项参数。一个完全的resource定义如下:

application.component.subcomponent.subcomponent.attribute: value

其意义是很明确的,可以把一个应用程序的组件看作一层一层的树形结构。这些组件的名字序列形成了一条可以唯一定位一个组件的路径。这个resource的值就是这个组件的某个属性的值。比如说背景颜色等。

值得注意的是,Xresources允许通过简单的正则表达式来使一个参数对应于多个applications或者其component。比如说下面的resource:

xmail*background: red

它指定了所有的xmail的compoent的背景颜色均为红色。目前仅支持的正则表达式字符为"?" 和 "*",可分别用来匹配一个或者任意个组件名。需要注意的是attritube(resource最后一项)不能用正则表达式表示(这是不言而喻的)。

当启动一个X sessions时,X server会使用xrdb程序读取用户目录的.Xresources文件以获取其内容(.Xdefaults也能起到相同的作用,但已不推荐使用,所以尽量使用.Xresources文件)。各个应用程序启动时就不需要再去读取该文件,而是直接从X server得到。另外,因为其内容存在于X server端,所以也可以在其他电脑上的程序也可以通过远程访问获取参数。 关于xrdb的一些常见参数如下:

  • -query 查询当前的X resources内容
  • ~/.Xresources 重新读取X resources的内容。
  • -merge ~/.Xresources 重新读取内容,同时保留老的resources。

所以我们可以在~/.Xresources文件中写入很多application的配置,常见的有xclock,xpdf,xterm,urxvt-unicode等。而最常见的自然是两个terminal——xterm和urxvt的配置。 同为上古神器,xterm与urxvt之争简直和vim与emacs之争一样激烈。二者都具有极强的可配置性,且各有各的强项。本人常用的是urxvt,对xterm并不是很熟,所以只简单介绍一下urxvt的特点:

  • 多标签功能。很多其他terminal也提供了多标签功能,但urxvt的功能强大,操作便捷是无出其右的。
  • 提供CS模式以节省系统资源(从很多方面来看,xterm类似与vim,而urxvt类似于emacs)
  • 多语言多字体支持
  • 支持perl扩展
  • 其他常见terminal支持的功能,点击打开url,半透明等

其中最常见也最使用的就是其标签功能。可以说,urxvt的多标签已经可以让tmux等分屏软件无存在的必要。而且,其各个tab会根据其输出改变其名字的状态。这样,我们可以紧根据其名字就可判断该tab下的程序是否在正常运行。另外有一个很使用的功能是,如果我们配置了mutt的bell,我们在一个tab里面打开mutt,然后切换到其他tab时,如果有新邮件到达,mutt的tab就会被高亮以提醒。与tab有关的快捷键操作也是极为便捷和快速的,远远好于普通的terminal.具体可自行查阅。

perl扩展为urxvt提供了很多有用的功能。比如使用鼠标或者不使用鼠标打开url等。具体的扩展可根据自己需要加载。

下面提供一个配置实例,仅供参考:

!select url
URxvt.perl-ext-common: default,clipboard,url-select,keyboard-select,tabbed
URxvt.url-select.launcher: /usr/bin/firefox
URxvt.url-select.underline: true
URxvt.keysym.M-u: perl:url-select:select_next
URxvt.keysym.M-Escape: perl:keyboard-select:activate
URxvt.keysym.M-s: perl:keyboard-select:search
URxvt.colorUL: #4682B4

!general
Rxvt.geometry:100x40
Rxvt.fullScreen:false

!colors trans
URxvt.depth: 32
URxvt.background: rgba:1111/1111/1111/FFFF
URxvt.shading:130
URxvt.title:urxvrt
Rxvt.background:black
Rxvt.foreground:green
Rxvt.colorBD:white
Rxvt.colorIT:magenta
Rxvt.colorUL:yellow
Rxvt.underlineColor:cyan
Rxvt.tintColor:gray
Rxvt.cursorColor:wite

!!$HOME/.Xdefaults
URxvt.preeditType:Root

!!!input method
URxvt.inputMethod:ibus

!!!scrollbar
URxvt.scrollBar:True
URxvt.scrollBar_right:True
URxvt.scrollBar_floating:False
URxvt.scrollstyle:plain

!!!滚屏设置
URxvt.mouseWheelScrollPage:True
URxvt.scrollTtyOutput:False
URxvt.scrollWithBuffer:True
URxvt.scrollTtyKeypress:True

!!!光标闪烁
URxvt.cursorBlink:True
URxvt.saveLines:10000

!!!边框
URxvt.borderLess:False

!!!字体设置
Xft.dpi:96
URxvt.font:xft:Monospace:size=9:style=Regular:antialias=true,xft:WenQuanYi Bitmap Song:size=9:style=Regular:antialias=true
URxvt.boldfont:xft:Monospace:size=10:style=Bold:antialias=true,xft:WenQuanYi Bitmap Song:size=10:style=Bold:antialias=true

!icons
URxvt.iconFile: /usr/share/icons/Mint-X/apps/32/terminal.png

!login shell
URxvt.loginShell: false
!tabs
URxvt.tabbed.tabbar-fg: 5
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 6
URxvt.tabbed.tab-bg: 0

!bell
URxvt.urgentOnBell: True


( 本文完 )