如何以编程方式检查终端是否支持斜体?

如何以编程方式检查终端是否支持斜体?

我想检查当前终端是否能够正确显示斜体。

手动检查很容易:

echo -e "\e[3mfoo\e[23m"

如果输出是foo,终端(模拟器)支持斜体。但是,我想测试一下.zshrc是否以编程方式支持斜体。

这样做的最佳做法是什么?


如果(完全)可能的话,我希望我的标准 Linux 控制台也能够使用斜体。问题是,手动测试失败,有什么想法如何使斜体在那里成为可能吗?

(这不是原始问题的一部分。不过,作为一个独立的问题来问它太模糊且毫无意义。)

答案1

这有几个问题:

  • 如果 Linux 控制台支持斜体,则将使用不同的字体或使用某种技术,例如倾斜字符来模仿斜体。
  • 假设它做到了这一点,您将需要一个可以转储控制台上显示内容的图像的工具,以便在程序中看到它。但 Linux 控制台屏幕转储仅提供文本,没有图像。转储中没有可用的字体信息(甚至没有粗体或颜色)。
  • 两者settermscreendump打开原始vcsa设备(尽管screendump作为替代方案,使用 ioctl 的默认值TIOCLINUX,它具有相同的内容)
  • 可以编写一个合适的工具来转储属性,例如颜色以及是否使用粗体,使用这个过时的 ioctl(即,您的内核非常旧):

    TIOCLINUX, 子代码=8
    转储屏幕宽度和高度、光标位置以及所有字符属性对。 (内核 1.1.67 通过91.1.1仅有的。对于内核 1.1.92 或更高版本,请改为从 /dev/vcsa* 读取。)

  • 简而言之,没有受支持的机制来查找 Linux 控制台屏幕上的内容。

除了没有解决办法之外以编程方式确定是否实现斜体,除了使用一些特殊功能来提高分辨率之外,几乎没有理由期望 Linux 控制台字体将以斜体绘制。这终点站字体页面(这是相关的,因为它试图在 X 中提供与 Linux 控制台字体相同的效果)在其经常问的问题部分:

问:斜体版本?

答:不会。质量明显较低,并且保留字体宽度需要重叠字符,X11/Xft 对此处理得不太好。无论如何,现代 GUI 支持自动倾斜;如果您对它不满意,请尝试 FreeBSD 中的 mkitalic 或 Debian 中的 bdfslant。

问:可扩展版本?

答:长话短说,当平均显示分辨率至少达到 150 DPI 时。最好是200。

进一步阅读:

答案2

无法可靠地测试终端是否确实支持斜体。您可以通过检查tput sitm或 的输出来tput ritm测试 的值$TERM及其对应的终端描述是否成立索赔支持它——但声明和实际行为可能很容易在任何一个方向上不同步。

我真的怀疑 Linux 控制台在可预见的将来是否支持斜体。

相关内容