DEでは、便宜上ターミナル(gnome-terminalなど)のサイズを変更できますが、ピクセルまたは列と行の数でターミナルのサイズを知るにはどうすればよいですか?
DEでは、便宜上ターミナル(gnome-terminalなど)のサイズを変更できますが、ピクセルまたは列と行の数でターミナルのサイズを知るにはどうすればよいですか?
回答:
コマンドを発行する場合
stty size
現在の端末のサイズを行と列で返します。例:
$ stty size
24 80
行と列をこのような変数に読み込むことができます(Janisのコメントのおかげです)):
$ read myrows mycols < <(stty size)
サイズをピクセル単位で取得するには、画面の解像度に関する知識が必要であり、stty
そのような情報に直接アクセスできるとは思わない。
bash
のecho
コマンドでは変数が表示されないことに注意してくださいread
。(ksh
ただし、で動作します。)たとえばbash
、を使用する場合がありますread myrows mycols < <( stty size )
。
でデスクトップ環境には、Xを使用している、とxwininfo
ユーティリティはピクセル単位でウィンドウのサイズを表示することができます。また、デスクトップで実行している場合(たとえば、リモートで接続されていない場合)、ターミナルエミュレーターは変数$WINDOWID
を提供しますxwininfo
。
xwininfo -id $WINDOWID
リストリストを取得します。
xwininfo: Window id: 0xc00025 "uxterm"
Absolute upper-left X: 65
Absolute upper-left Y: 167
Relative upper-left X: 0
Relative upper-left Y: 22
Width: 624
Height: 577
Depth: 24
Visual: 0x22
Visual Class: TrueColor
Border width: 1
Class: InputOutput
Colormap: 0x21 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +65+167 -589+167 -589-256 +65-256
-geometry 103x42+65+145
この例では、ある行Width
とHeight
で大きさの画素。最後の行は、文字-geometry
のサイズを示します(および左上隅の位置—ピクセル単位)を示しています。
ウィンドウのサイズ変更といえば、resize
プログラムは行と列の数を表示します。この例では、
$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;
質問は、情報の使用方法を示していませんでしたが、出力は予測可能な形式のテキストであるため、簡単にスクリプト化できます。awkを使用した簡単な例を次に示します。
#!/bin/sh
if [ -n "$WINDOWID" ]
then
xwininfo -id $WINDOWID | awk '
BEGIN { px = 0; py = 0; chars = "?x?"; }
/Height:/ { py = $2; }
/Width:/ { px = $2; }
/-geometry/ { chars = $2; sub("+.*","",chars); }
END { printf "%dx%d pixels, %s chars\n", py, px, chars; }'
else
printf '? no WINDOWID found\n'
fi
印刷する
577x624 pixels, 103x42 chars