XTerm 僅顯示部分 unicodes 而 Urxvt 不顯示任何內容
就我而言,(U)XTerm 確實顯示了一些 unicode,但只是部分顯示。
例如:對於字母是:
𝒫φϕ𝒟
.這里分別是 UXTerm 和 Urxvt 的截圖
似乎問題與字母空間或字母長度有關。
順便說一句,gnome-terminal 一切都很好。
我目前的
.Xresources
文件是:Xft.dpi: 120 Xft.antialias: true Xft.hinting: true Xft.rgba: rgb Xft.autohint: false Xft.hintstyle: hintslight Xft.lcdfilter: lcddefault XTerm*faceName: Fixed XTerm*faceSize: 14 XTerm*reverseVideo: false XTerm*selectToClipboard: true UXTerm.vt100*faceName: Fixed UXTerm.vt100*faceSize: 14 UXTerm.vt100*reverseVideo: false UXTerm*selectToClipboard: true URxvt.font: xft:Fixed:pixelsize=18 URxvt.depth: 32 URxvt.background: #222D31 URxvt*scrollBar: false URxvt*mouseWheelScrollPage: false URxvt*cursorBlink: true URxvt*background: black URxvt*foreground: grey URxvt*saveLines: 5000
如何讓 XTerm 和 Urxvt 正確顯示這些字元?可能嗎?
對於 xterm,問題在於第一個/最後一個字元超出了 xterm 從 fontconfig 度量中讀取的邊界框。xterm 通常使用系統的
wcwidth
功能來獲得(更)正確估計單個字元寬度,以及在繪製字元剪輯時,錯誤的像素會失去。順便說一句,“fixed”可能不是 fc-list 輸出中的條目。fontconfig 為此靜默使用其預設字型。對於 urxvt - 它可能只是忽略字形,因為它不遵循字型度量。有些字型比其他字型差;fontconfig 在這方面沒有幫助。在某些情況下,系統
wcwidth
無法處理某些特殊字元,xterm 會不必要地截斷單元格。樣本𝒫φφ𝒟
使用**
U+1D4AB
**andU+1D49F
,xterm 和系統同意應該佔據螢幕上的一個單元格。UnicodeData.txt 提供以下資訊:1D4AB;數學腳本大寫 P;Lu;0;L; 0050;;;;N;;;;; 1D49F;數學腳本大寫 D;Lu;0;L; 0044;;;;N;;;;
但請參考EastAsianWidth.txt文件的實際寬度。EastAsianWidth.txt (參見TR11-38)包含以下資訊:
1D4A9..1D4AC;N # Lu [4] 數學腳本大寫 N..數學腳本大寫 Q 1D49E..1D49F;N # Lu [2] 數學腳本大寫 C..數學腳本大寫 D
這**
N
**意味著中性:如果在東亞語境中使用字元,則實現可以將它們視為“全形”(雙角的誤導性術語)。它們不在那種情況下使用。然而,一些字型(不出所料)是由東亞人開發的,並且使這些字型中的大多數中性字元都變成了雙倍寬度。這會帶來驚喜。如果終端(如 xterm)剪輯字元,使用者會不高興。如果終端使用字型寬度,使用者會感到困惑(因為終端程序是為固定間距的行/列網格編寫的)。糾正這個問題(並使字型對每個人都有用)是 fontconfig 應該做的。從 xterm 的角度來看,問題可能出在 fontconfig 指標中。
xterm 確實有辦法適應寬度不明確的字元的窄/寬選擇,但改變中性字元的寬度不是 xterm 的功能。
這是一個螢幕截圖,顯示 gnome-terminal 不會剪切字元,也不會將它們解釋為雙倍寬度。它只是用錯誤的像素覆蓋相鄰的字元:
建議的連結為什麼 xterm 在使用 Xft 字型時不支持雙倍大小的字元?是針對不同的問題。