我的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
来查看它实际打开的字体文件。
例如,使用 、 进行一些探索strace
,konsole
并且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