Terminal

找出打開終端的大小

  • September 15, 2021

在 DE 上,為了方便起見,我們可以調整終端(例如 gnome-terminal)的大小,我怎樣才能知道終端的大小(以像素或列數和行數計)?

如果你發出命令

stty size

它以行和列的形式返回目前終端的大小。例子:

$ stty size
24 80

您可以將行和列讀入這樣的變數中(感謝Janis 的評論):

$ read myrows mycols < <(stty size)

獲取以像素為單位的大小需要了解您的螢幕解析度,我認為無法stty直接訪問此類資訊。

桌面環境中,您使用的是 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的大小。最後一行,with給出了字元的大小(以及左上角的位置——以像素為單位)。-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

引用自:https://unix.stackexchange.com/questions/197160