我想检查当前终端是否能够正确显示斜体。
手动检查很容易:
echo -e "\e[3mfoo\e[23m"
如果输出是foo
,终端(模拟器)支持斜体。但是,我想测试一下.zshrc
是否以编程方式支持斜体。
这样做的最佳做法是什么?
如果(完全)可能的话,我希望我的标准 Linux 控制台也能够使用斜体。问题是,手动测试失败,有什么想法如何使斜体在那里成为可能吗?
(这不是原始问题的一部分。不过,作为一个独立的问题来问它太模糊且毫无意义。)
答案1
这有几个问题:
- 如果 Linux 控制台支持斜体,则将使用不同的字体或使用某种技术,例如倾斜字符来模仿斜体。
- 假设它做到了这一点,您将需要一个可以转储控制台上显示内容的图像的工具,以便在程序中看到它。但 Linux 控制台屏幕转储仅提供文本,没有图像。转储中没有可用的字体信息(甚至没有粗体或颜色)。
- 两者
setterm
都screendump
打开原始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 控制台在可预见的将来是否支持斜体。