Em um ambiente de área de trabalho , você está usando o X, e o utilitário xwininfo
pode mostrar o tamanho da janela em pixels. Além disso, se você estiver executando na área de trabalho (e não, por exemplo, conectado remotamente), o emulador de terminal fornece uma variável $WINDOWID
que você pode usar como um parâmetro para xwininfo
, por exemplo,
xwininfo -id $WINDOWID
e obtenha uma lista de listagem:
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
Neste exemplo, as linhas com Width
e Height
são o tamanho em pixels . A última linha, com -geometry
, dá o tamanho em caracteres (assim como a posição do canto superior esquerdo - em pixels).
Falando em redimensionar a janela, o programa resize
mostra o número de linhas e colunas. Para este exemplo, mostra
$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;
A pergunta não indica como a informação pode ser usada, mas como a saída é texto, em um formato previsível, ela é prontamente roteirizada. Aqui está um exemplo simples usando o 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
que imprime
577x624 pixels, 103x42 chars