虽然正在努力通过将功能转移到用户空间来有效地杀死 Linux 虚拟终端“VT”控制台,但它还没有消亡,周三发布的新补丁系列旨在增强 Linux VT 的现代 Unicode 处理。
开源开发人员 Nicolas Pitre 昨天发布了一个补丁系列,用于改进 Linux VT 中的 Unicode 支持。Pitre 解释说:
“Linux VT 控制台在正确处理 Unicode 方面存在许多问题:
– 自 Unicode 5.0 以来引入的所有新的双倍角 Unicode 码位都无法识别(我们现在使用的是 Unicode 16.0)。
– 零宽度码位根本无法识别。如果您尝试编辑包含大量表情符号的文件,您将看到渲染问题。当有很多零宽度字符(如 “变体选择器”) 时,长行会被换行,但任何支持 Unicode 的编辑器都认为内容已正确呈现,并且其呈现逻辑开始以非常糟糕的方式工作。将其与 tmux 或 screen 相结合,终端中会发生一团糟。
– 此外,使用组合变音符号的文本与零宽度字符的文本具有相同的效果,因为程序希望字符占用的列数少于它们实际的列数。
有些人可能会争辩说 Linux VT 控制台没有维护和/或不再使用太多,应该考虑使用用户空间终端的替代方案。但是,每个维护不亚于 Linux VT 控制台的此类替代方案确实需要一个完整、繁重的图形环境,这与 Linux 控制台的本质完全相反。
此外,还有一个重要的 Linux 控制台用户群,以盲人用户(我是其中的一员)为代表,对他们来说,其他选择使用起来要麻烦得多,从而降低了我们的生产力。因此,它必须留下来,并尽我们所能进行维护。
话虽如此……
此补丁系列旨在修复上述所有问题。这是通过一些 Python 脚本利用 Python 的 unicodedata 模块来生成带有适合内核的查找表的 C 代码来实现的。总结:
– 双倍宽度代码点表已更新为最新的 Unicode 版本,并且表本身已优化以减小其大小。
– 创建一个零宽度代码点表,并修改控制台代码以正确使用它。
– 创建一个包含基本字符 + 组合标记对的表格,以便在遇到它们时将它们转换为预组合的等效项。默认情况下,生成的表仅包含最常用的拉丁语、希腊语和西里尔语重组对,但可以使用 –full 参数执行提供的脚本,以创建涵盖所有可能性的表。表中未列出的组合标记将简单地视为零宽度代码点,并正确忽略。
– 所有这些表格加上相关的查找代码需要大约 3500 字节的额外文本,这在现在并不是很重要。然而,如果需要,你仍然可以设置 CONFIG_CONSOLE_TRANSLATIONS=n 来配置这一切。
转自 https://www.phoronix.com/news/Modern-Unicode-For-Linux-VT