Xterm 不显示一个 uni-code 字符

Xterm 不显示一个 uni-code 字符

我的xterm支持uni-code。例如,它显示欧元符号:

echo -e '\xe2\x82\xac'

但它不显示某一特定字符:

PL_BRANCH=$'\ue0a0'
echo $PL_BRANCH

该字符在另一个终端(终止符)中正确显示。我在两个终端中使用相同的字体(Inconsolata)。

可能是什么原因以及如何解决?

答案1

该字符实际上不是您指定的字体。您可以使用以下命令查看此内容xfd

xfd -fa inconsolata

这表明最后一个代码点是 U+2423。再读一点,原来这个字符是在Unicode中的私人使用面积,并且(尽管事实上一些字体可能提供它)没有标准含义。

自从2018年底,xterm可以加载多种TrueType字体,但是手头的字体都没有U+E0A0。

如果您可以识别实际使用的字体,有人可以指出哪些版本的 xterm 可以处理它。

解决有关的评论terminator(我碰巧没有安装),terminator不使用与 xterm 相同的库接口,这会影响字体搜索(两者都没有详细记录)。您可以使用它strace来查看它实际打开的字体文件。

例如,使用 、 进行一些探索stracekonsole并且pterm在我的 Debian/testing 上都打开该字符的 OpenOffice 字体之一:

第2600章               
2600) = 3                                     
第2586章
第2601章   
第2601章)=4                 

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

另一方面,我发现rxvt-unicode尽管有几个字符,但没有显示该字符字体样式添加到其搜索列表中以(尝试)解决此类问题(最终反映了 fontconfig 中的问题)。您很可能会发现类似的东西(但是不同的)在支持 konsole 和 pterm 的库中。

答案2

当字符未知时,现代终端应用程序使用默认字体以外的其他字体xterm 仅使用单一字体(双角字符的特殊情况除外)

所需的 char是 OpenSymbol 字体的一部分$'\ue0a0'echo $'\ue0a0'我们可以使用它,xterm但由于该字体不包含普通字符,这将使其无法使用,因此一种解决方案是使用包含所需特殊字符的修补字体,并使用下列的

xterm -fa 'Inconsolata for Powerline'

我们还可以设置字体的大小,如下

xterm -fa 'Inconsolata for Powerline' -fs 16

~/.Xresources通过将以下内容添加到或广泛应用于系统,可以将此设置应用于当前用户/etc/X11/app-defaults/XTerm

XTerm*faceName: Inconsolata for Powerline

链接:1,2,3,4,56

相关内容