scopri le dimensioni del terminale aperto


13

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:


20

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.


signore, non è possibile ottenere un output in termini di pixel?
Edward Torvalds,

Si noti che 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 ).
Janis,

1

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.