端末で現在のフォントのサイズを取得するには?

端末で現在のフォントのサイズを取得するには?

私は、アルファベット文字を使用して非常に平滑なグラフィックを作成する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

GetWinSizeCharsリソース、つまりGetWinSizePixels以下を除くすべてのリソースは許可されません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

おすすめ記事