如何获取终端中当前字体的尺寸?

如何获取终端中当前字体的尺寸?

我正在开发一个 ncurses 应用程序,该应用程序使用字母字符创建一些非常块状的图形。我希望能够检测字体字形的尺寸(特别是长宽比),以便我可以通过更改渲染图形的方式来纠正它(使得正方形始终看起来像正方形)。

我能够使用

void getmaxyx(WINDOW *win, int y, int x);

ncurses 中的函数可以获取屏幕/窗口的大小,但是由于许多窗口可以自由调整大小,因此它并不可靠。是否有类似的函数(或外部机制)用于检索字体尺寸?

答案1

xterm或兼容且提供的字体操作转义序列尚未禁用:

$ xtermcontrol --get-font
DejaVu Sans Mono

这会发送<ESC>]50;?<ESC>\转义序列,终端会回复<ESC>]50;font-name<ESC>\。看参考

因此,您还可以使用zsh以下方式查询它:

$ IFS=$';\e' read -rsd'\' -t0.2 $'font?\e]50;?\e\\' font font rest
$ typeset font
font='DejaVu Sans Mono'

allowFontOps不过,通常默认情况下禁用。您可以将*allowFontOps: true资源设置为启用它们,或者最好将其禁用,但设置*disallowedFontOps: SetFont为允许GetFont但不允许SetFont

对于尺寸,设置:

*disallowedWindowOps: 1,2,3,4,5,6,7,8,9,11,13,19,20,21,GetSelection,SetSelection,SetWinLines,SetXprop

资源,即不允许除 和 之外的所有资源GetWinSizeCharsGetWinSizePixels然后是zsh

$ IFS=';t' read -rsdt -t0.2 $'x?\e[18t' cy cx rest
$ IFS=';t' read -rsdt -t0.2 $'x?\e[14t' y x rest
$ echo ${x}x${y} ${cx}x${cy}
1916x1012 147x38

\e[18t请求以单元格数量和像素数为单位的窗口大小,\e[14t以便您可以通过以下方式获取单元格的大小:

$ printf '%gx%g\n' '1.*x/cx' '1.*y/cy'
13x26

答案2

来自阳光明媚的雅典,你好。不幸的是,像 font_size 或各种字体或类似的东西,不幸的是与加载硬件的图形驱动程序并将其应用为图形环境有关,只有当您使用来自 Linux 的图形环境而不是来自 Linux 的图形环境时才会加载它。在任何情况下,控制台(仅限字母数字模式)或使用 CTRL+T 在 Windows 会话期间启用终端。使用不同字体大小的唯一可能性是通过 ncurses,但根据 POSIX 标准,这是不可能的。如果您想在任何情况下应用不同的字体大小,有很多环境,例如加工java支持,这会给你一个解决方案。来自雅典的问候 Kostas Vergidis

相关内容