Su DE possiamo ridimensionare il terminale (ad esempio gnome-terminal) per nostra comodità, come posso sapere la dimensione del terminale in termini di pixel o numero di colonne e righe?
Su DE possiamo ridimensionare il terminale (ad esempio gnome-terminal) per nostra comodità, come posso sapere la dimensione del terminale in termini di pixel o numero di colonne e righe?
Risposte:
Se si emette il comando
stty size
restituisce la dimensione del terminale corrente in righe e colonne. Esempio:
$ stty size
24 80
Puoi leggere le righe e le colonne in variabili come questa (grazie al commento di Janis ):
$ read myrows mycols < <(stty size)
Ottenere le dimensioni in pixel richiede la conoscenza della risoluzione del tuo schermo e non credo che stty
abbia accesso diretto a tali informazioni.
bash
nel echo
comando in questa risposta non vedrà le variabili, dal momento che la read
in cantiere verrà eseguito in una subshell. (Funziona ksh
, però.) Perché bash
potresti voler usare, ad es read myrows mycols < <( stty size )
.
In un ambiente desktop , stai usando X e l' xwininfo
utilità può mostrare la dimensione della finestra in pixel. Inoltre, se si è in esecuzione sul desktop (e non, ad esempio, connesso in remoto), l'emulatore di terminale fornisce una variabile $WINDOWID
che è possibile utilizzare come parametro per xwininfo
, ad es.
xwininfo -id $WINDOWID
e ottenere un elenco di questo:
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
In questo esempio, le linee con Width
e Height
sono le dimensioni in pixel . L'ultima riga, con -geometry
indica la dimensione in caratteri (così come la posizione dell'angolo in alto a sinistra - in pixel).
Parlando di ridimensionare la finestra, il resize
programma mostra il numero di righe e colonne. Per questo esempio, mostra
$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;
La domanda non indicava come le informazioni potevano essere utilizzate, ma poiché l'output è di testo, in un formato prevedibile, viene prontamente scritto. Ecco un semplice esempio usando 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
quale stampa
577x624 pixels, 103x42 chars