端末行と列単位のサイズを考慮して対応するピクセル数を計算する方法

端末行と列単位のサイズを考慮して対応するピクセル数を計算する方法

ターミナル出力(この場合は6ピクセルの画像)の「行」と「列」に、希望の幅と高さの2つのシェル変数とを$width提供するプログラムがあります。$height

$heightと$widthの値を行/列単位からピクセル単位に変換するにはどうすればよいですか?

#!/bin/bash
pixelsperrow=# How
pixelspercolumn=# How
heightpixels=$(($height*$pixelsperrow))
widthpixels=$(($width*$pixelspercolumn))

footまた、私の端末エミュレータ()が端末ウ​​ィンドウで現在利用可能な列数である$ COLUMNS環境変数を提供していることも確認しました。river関連がある場合(Waylandタイリングウィンドウマネージャ)をWMとして使用しています。

答え1

おそらく、ioctl端末のサイズをピクセル単位で取得することができます。

$ cat termsize.c
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
    struct winsize w;
    ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
    printf("%d,%d %d,%d\n", w.ws_row, w.ws_col, w.ws_ypixel, w.ws_xpixel);
    return 0;
}
$ make termsize
cc     termsize.c   -o termsize
$ ./termsize
24,80 388,644

関連情報