![为什么使用 Xft 字体时 xterm 不支持双倍大小的字符?](https://linux22.com/image/1580498/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%20Xft%20%E5%AD%97%E4%BD%93%E6%97%B6%20xterm%20%E4%B8%8D%E6%94%AF%E6%8C%81%E5%8F%8C%E5%80%8D%E5%A4%A7%E5%B0%8F%E7%9A%84%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
每当我配置xterm
使用核心 X11 字体:
*.vt100.renderFont: False
*.vt100.locale: False
*.vt100.font: -monotype-courier new-medium-r-normal--*-120-*-*-m-*-koi8-r
它呈现双倍大小的字符适当地:
但是当我将其配置为使用客户端字体时:
*.vt100.renderFont: True
*.vt100.faceName: Courier New:antialias=false
*.vt100.faceSize: 12
*.vt100.utf8: 1
*.vt100.utf8Fonts: True
*.vt100.utf8Title: True
它无法渲染双倍大小的字符,可以通过以下方式确认vttest
公用事业:
两个都油灰(在视窗) 和konsole
做使用客户端字体并仍然正确呈现双倍大小的文本。
我是否错误地配置了我的xterm
,或者这是一个已知问题?
答案1
这是一个已知的限制,(见变更日志)已于 2019 年末得到解决。从补丁 #350 开始,绘制 VT100 样式双倍字符的能力是默认编译的功能。配置选项总结一下:
--disable-doublechars 禁用对双倍字符的支持 不要编译支持字体操作的代码 实现 vt100 风格的双倍大小字符。
而补丁#349的变更日志与这个问题相关:
重新组织文本绘制,以便能够研究使用 Xft 实现 VT100 样式的双倍字符。在执行此操作时,针对明显的 Xft 错误找到了解决方法,该错误在从 132 列切换到 80 列时会丢失其可绘制状态。
这手册页说(请注意省略TrueType来自讨论的字体):
Although xterm attempts to derive a bold font for other
font selections, the font server may not cooperate. Since
X11R6, bitmap fonts have been scaled. The font server claims
to provide the bold font that xterm requests, but the
result is not always readable. XFree86 introduced a feature
which can be used to suppress the scaling. In the X server's
configuration file (e.g., “/etc/X11/XFree86” or
“/etc/X11/xorg.conf”), you can add “:unscaled” to the end of
the directory specification for the “misc” fonts, which
comprise the fixed-pitch fonts that are used by xterm. For
example
FontPath "/usr/lib/X11/fonts/misc/"
would become
FontPath "/usr/lib/X11/fonts/misc/:unscaled"
Depending on your configuration, the font server may have its
own configuration file. The same “:unscaled” can be added to
its configuration file at the end of the directory
specification for “misc”.
The bitmap scaling feature is also used by xterm to
implement VT102 double-width and double-height characters.
使用以下方法处理双倍宽度/双倍高度字符TrueType字体的实现方式不同,它使用双倍大小的字体一次绘制/剪切一个字符。当然,使用字体配置的度量(通常会忽略标称边界框),不能保证结果看起来不错。
不管怎样,PuTTY 和 konsole 在这个测试中也存在各自的问题:
PuTTY 无法处理测试中的线条绘制部分,而 Konsole 通常会产生一些奇怪的窗口大小。此外,如果仔细观察,你会发现单倍宽度文本和双倍宽度文本的对齐方式存在细微差异(ymmv)。