我的xterm
支持 uni-code。例如,它显示欧元符号:
echo -e '\xe2\x82\xac'
但它不显示一个特定的字符:
PL_BRANCH=$'\ue0a0'
echo $PL_BRANCH
该字符在另一个终端(终止符)中正确显示。我在两个终端(Inconsolata)中使用相同的字体。
可能是什么原因,我该如何解决?
我的xterm
支持 uni-code。例如,它显示欧元符号:
echo -e '\xe2\x82\xac'
但它不显示一个特定的字符:
PL_BRANCH=$'\ue0a0'
echo $PL_BRANCH
该字符在另一个终端(终止符)中正确显示。我在两个终端(Inconsolata)中使用相同的字体。
可能是什么原因,我该如何解决?
该字符实际上不是您指定的字体。你可以看到这个使用
xfd
:这表明最后一个代码点是 U+2423。进一步阅读,事实证明该字符位于 Unicode专用区域中,并且(尽管某些字体可能提供它)没有标准含义。
自2018 年底以来,xterm 可以加载多种 TrueType 字体,但手头的字体都没有 U+E0A0。
如果您可以识别实际使用的字体,那么有人可以指出哪些版本的 xterm 可以处理它。
解决关于
terminator
(我碰巧没有安装)的评论,terminator
不使用与 xterm 相同的库接口,这会影响字体搜索(两者都没有很好的文档记录)。您可以使用strace
它来查看它实际打开的字体文件。例如,用
strace
,konsole
和pterm
在我的 Debian/testing 中对此进行一些探索,都为此字符打开了一种 OpenOffice 字体:(这是“OpenSymbol”系列的文件)。
另一方面,我看到它
rxvt-unicode
不显示字符,尽管在其搜索列表中添加了几个字体模式以(尝试)解决诸如此类的问题(这最终反映了 fontconfig 中的问题)。您很可能会在支持 konsole 和 pterm 的库中找到类似(但不同)的内容。当字符未知但xterm 仅使用单一字体时,现代终端应用程序使用默认字体以外的其他字体(双宽字符的特殊情况除外)
所需的 char
$'\ue0a0'
是echo $'\ue0a0'
OpenSymbol 字体的一部分,我们可以使用它,xterm
但由于该字体不包含普通字符,这将使其无法使用,因此一种解决方案是使用包含所需特殊字符的修补字体并加载它下列的我们也可以设置字体的大小如下
~/.Xresources
通过将以下内容广泛添加到或系统上,可以将此设置应用于当前用户/etc/X11/app-defaults/XTerm
链接:1、2、3、4、5和6