Terminal

Xterm 不顯示一個 uni-code 字元

  • June 21, 2020

我的xterm支持 uni-code。例如,它顯示歐元符號:

echo -e '\xe2\x82\xac'

但它不顯示一個特定的字元:

PL_BRANCH=$'\ue0a0'
echo $PL_BRANCH

該字元在另一個終端(終止符)中正確顯示。我在兩個終端(Inconsolata)中使用相同的字型。

可能是什麼原因,我該如何解決?

當字元未知xterm 僅使用單一字型時,現代終端應用程序使用預設字型以外的其他字型(雙寬字元的特殊情況除外)

所需的 char$'\ue0a0'echo $'\ue0a0'OpenSymbol 字型的一部分,我們可以使用它,xterm但由於該字型不包含普通字元,這將使其無法使用,因此一種解決方案是使用包含所需特殊字元的修補字型並使用下列的

xterm -fa 'Inconsolata for Powerline'

我們也可以設置字型的大小如下

xterm -fa 'Inconsolata for Powerline' -fs 16

~/.Xresources通過將以下內容廣泛添加到或系統上,可以將此設置應用於目前使用者/etc/X11/app-defaults/XTerm

XTerm*faceName: Inconsolata for Powerline

連結:123456

該字元實際上不是您指定的字型。你可以看到這個使用xfd

xfd -fa inconsolata

這表明最後一個程式碼點是 U+2423。進一步閱讀,事實證明該字元位於 Unicode專用區域中,並且(儘管某些字型可能提供它)沒有標準含義。

2018 年底以來,xterm 可以載入多種 TrueType 字型,但手頭的字型都沒有 U+E0A0。

如果您可以辨識實際使用的字型,那麼有人可以指出哪些版本的 xterm 可以處理它。

解決關於terminator(我碰巧沒有安裝)的評論,terminator不使用與 xterm 相同的庫介面,這會影響字型搜尋(兩者都沒有很好的文件記錄)。您可以使用strace它來查看它實際打開的字型檔。

例如,用strace,konsolepterm在我的 Debian/testing 中對此進行一些探索,都為此字元打開了一種 OpenOffice 字型:

2600 openat(AT_FDCWD,“/users/tom/foo”,O_RDONLY 
2600 ) = 3 
2586 openat(AT_FDCWD,“/usr/share/fonts/truetype/openoffice/opens___.ttf”,O_R>
2601 openat(AT_FDCWD,“/etc/ld.so.cache”,O_RDONLY|O_CLOEXEC 
2601 ) = 4 

(這是“OpenSymbol”系列的文件)。

另一方面,我看到它rxvt-unicode不顯示字元,儘管在其搜尋列表中添加了幾個字型模式以(嘗試)解決諸如此類的問題(這最終反映了 fontconfig 中的問題)。您很可能會在支持 konsole 和 pterm 的庫中找到類似(但不同)的內容。

引用自:https://unix.stackexchange.com/questions/548594