rxvt / xterm + freetype + 中文顯示 (Chinese)

.Xresources

1
2
3
4
5
6
7
8
9
10
11
12
13
XTerm*faceName: Ubuntu Mono
XTerm*faceNameDoublesize: WenQuanYi Micro Hei Mono:minspace=true
XTerm*faceSize: 12
XTerm*faceSize1: 8
XTerm*faceSize2: 10
XTerm*faceSize3: 12
XTerm*faceSize4: 14
XTerm*faceSize5: 16
XTerm*faceSize6: 24

Rxvt.font: xft:Ubuntu Mono:size=12,xft:WenQuanYi Micro Hei Mono:pixelsize=18:minspace=true
Rxvt.letterSpace: -1
Rxvt.lineSpace: 2

xterm 比較討厭的地方是 freetype 的 failover 做不是很好,顯示一些 unicode 的字型時在 faceName/faceNameDoubleSize 裡頭找不到的話,就會放棄變成方塊;為了避免,只好裝 rxvt-unicode。後來因為太喜歡 rxvt fading 的功能,就決定換用了。

其中 rxvt 的 letterSpace 是要配合第一字型(在此是 Ubuntu Mono)的特性去調整的,Ubuntu Mono 間距比較寬,所以用 -1 來減少,這樣在我筆電 X220 上垂直分為左右二欄還可以有清楚的 80 欄寬。lineSpace 則是因為 Ubuntu Mono 比較寬而高度不夠,會導致文泉驛 render 出來的字太小,而且整個螢幕都是字時閱讀起來很吃力,所以加一些高度給他。麻煩的是,高度好了以後,仍然有時會跑出方塊,urxvt 顯示錯誤是

1
2
3
urxvt: unable to calculate font width for 'WenQuanYi Micro Hei 
Mono:slant=0:weight=200:pixelsize=19:minspace=True', ignoring.
...

size 轉到 pixelsize 是由螢幕解析度決定的,所以是否會有這情況,以及這情況發生時出來的數字,都不一定。我的情況是 pixelsize=19 出問題,由於字體大小是由第一個字型,也就是 Ubuntu Mono 決定,所以增加 pixelsize 沒用,只能試減少。減到 18 時剛剛好,字型漂亮,欄寬也夠。

xrdb -merge ~/.Xresources 可以直接讀入改好的 .Xresources,這樣下一個開的 x-terminal-emulator 就會套用新的設定。