Xterm 不显示一个 uni-code 字符

Mar*_*ter 6 terminal xfce xterm unicode xfce4-terminal

我的xterm支持单码。例如,它显示欧元符号:

echo -e '\xe2\x82\xac'
Run Code Online (Sandbox Code Playgroud)

但它不显示一个特定的字符:

PL_BRANCH=$'\ue0a0'
echo $PL_BRANCH
Run Code Online (Sandbox Code Playgroud)

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

可能是什么原因,我该如何解决?

Tho*_*key 6

该字符实际上不是您指定的字体。你可以看到这个使用xfd

xfd -fa inconsolata
Run Code Online (Sandbox Code Playgroud)

这表明最后一个代码点是 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 的库中找到类似(但不同)的内容。


int*_*ika 1

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

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

xterm -fa 'Inconsolata for Powerline'
Run Code Online (Sandbox Code Playgroud)

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

xterm -fa 'Inconsolata for Powerline' -fs 16
Run Code Online (Sandbox Code Playgroud)

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

XTerm*faceName: Inconsolata for Powerline
Run Code Online (Sandbox Code Playgroud)

链接:1、2、3、4、56​