询问终端字形是由字体定义还是直接在其自己的源代码中定义?

询问终端字形是由字体定义还是直接在其自己的源代码中定义?

许多现代终端模拟器直接在其自己的源代码中包含方框图字形的定义,并在渲染显示时忽略字体提供的版本。在终端中运行的程序是否有通用方法来检测以这种方式呈现的字形?具体来说,如果程序使用可能未得到广泛支持的附加框字形,那么检查它们是否可用的最佳方法是什么?也许在terminfo

我当前的用例是一个用 Python 编写的小型个人使用项目,用于ncurses图形组件,因此与这些组件配合良好的东西会加分,但我对所有解决方案都感兴趣。


编辑:作为示例,这里是由提供的一组字符kitty;源代码中的注释表明它们用于电力线集成:

在此输入图像描述

但是,如果我们尝试在 Konsole 中渲染相同的字形,我们会得到:

在此输入图像描述

Kitty 显示的字形由终端本身定义,而 Konsole 显示的字形则由其配置使用的任何字体提供。是否有一种通用方法可以让在任意终端中运行的程序检测我们是否会看到前者与后者之类的东西?

答案1

显然,您使用的字符属于 Unicode 1.0.1 私人使用区域的一部分。该领域的方框图字符并未真正标准化,但由编辑器、某些 shell 和其他命令行工具的powerline插件使用。vim

Superuser.SE 上的这个问题了解更多信息。

看来 KiTTY 的开发者可能是这些插件的用户powerline,并且已经在终端仿真器中直接实现了对其方框图字符的支持。

据我所知,没有标准的编程方法来测试powerline方框图字符的可用性:您需要检查终端仿真器的功能列表,如果它不包括直接powerline支持,请使用powerline-修补过的字体。

在 Unix 风格的终端(和终端仿真器)上使用画线字符的经典方法将依赖于 terminfo smacs/rmacsacsc值。smacsrmacs是切换到和退出画线模式的控制代码,并acsc描述了要使用的字符。某些软件也可能使用 PC 默认代码页 #437 的方框图字符,但这通常需要字体切换功能和具有正确字符集的字体。

现代方法是使用 Unicode 标准方框图字符,范围为​​ 0x2500-0x257f。无论这些是由字体提供还是直接由终端仿真器提供,都应该是对应用程序没有任何意义的实现细节。


就我个人而言,我发现powerline类似的终端配置黑客是 Unix/Linux 高级用户某个发展阶段的典型产品,类似于幼虫阶段行话文件中描述的程序员。

一旦接触到作为一组系统管理员维护数十或数百个系统的现实,强烈定制终端环境的愿望往往会消失,取而代之的是能够无缝地使用任何标准或工厂默认设置的能力。您最常遇到的系统。人们可能仍然有某些首选的定制,但它们往往会被削减为重要功能的核心,而牺牲了华丽的外观。

也许这可以帮助您理解为什么有些人可能不认为powerline类似的精美终端显示非常重要。

相关内容