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 sttyabbia accesso diretto a tali informazioni.
bashnel echocomando in questa risposta non vedrà le variabili, dal momento che la readin cantiere verrà eseguito in una subshell. (Funziona ksh, però.) Perché bashpotresti voler usare, ad es read myrows mycols < <( stty size ).
In un ambiente desktop , stai usando X e l' xwininfoutilità 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 $WINDOWIDche è 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 Widthe Heightsono le dimensioni in pixel . L'ultima riga, con -geometryindica la dimensione in caratteri (così come la posizione dell'angolo in alto a sinistra - in pixel).
Parlando di ridimensionare la finestra, il resizeprogramma 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