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

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

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

答え2

こんにちは、日当たりの良いアテネから来ました。 Font_sizeやさまざまなフォントなどのようなものは、残念ながらハードウェア用のグラフィックドライバをロードしてグラフィック環境に適用することに関連しています。 Linuxのグラフィック環境ではなく、Linuxのグラフィック環境を使用している場合にのみ可能です。その時のみロードされます。いずれの場合も、コンソール(英数字モードのみ)またはCTRL + Tを使用してWindowsセッション中に端末を有効にします。さまざまなフォントサイズを使用できる唯一の方法はncursesですが、POSIX標準によるとこれは不可能です。どのような状況でも、さまざまなフォントサイズを適用するには、さまざまな環境があります。処理javaサポート、これは解決策を提供します。アテネからご挨拶 コスタス・ベルギディス

関連情報