Finden Sie die Größe des offenen Terminals heraus

13

In DE können wir die Größe des Terminals ändern (z. B. Gnome-Terminal). Wie kann ich die Größe des Terminals in Pixeln oder der Anzahl von Spalten und Zeilen ermitteln?

Edward Torvalds
quelle

Antworten:

19

Wenn Sie den Befehl ausgeben

stty size

Es gibt die Größe des aktuellen Terminals in Zeilen und Spalten zurück. Beispiel:

$ stty size
24 80

Sie können die Zeilen und Spalten wie folgt in Variablen einlesen (dank Janis 'Kommentar ):

$ read myrows mycols < <(stty size)

Um die Größe in Pixeln zu erhalten, müssen Sie die Auflösung Ihres Bildschirms kennen, und ich glaube, Sie haben keinen sttydirekten Zugriff auf solche Informationen.

Joseph R.
quelle
Sir, ist es nicht möglich, eine Ausgabe in Pixeln zu erhalten?
Edward Torvalds
Beachten Sie, dass in bashdem echoin dieser Antwort Befehl wird die Variablen nicht sehen, da die readin der Pipeline in einer Subshell ausgeführt wird. (Es funktioniert jedoch in ksh.) Für bashSie möchten vielleicht verwenden, zB read myrows mycols < <( stty size ).
Janis
1

In einer Desktop-Umgebung verwenden Sie X, und das xwininfoDienstprogramm kann die Größe des Fensters in Pixel anzeigen. Wenn Sie auf dem Desktop ausgeführt werden (und beispielsweise keine Remoteverbindung haben), stellt der Terminalemulator eine Variable zur Verfügung, $WINDOWIDdie Sie als Parameter verwenden können xwininfo, um z.

xwininfo -id $WINDOWID

und erhalten eine Auflistung dieser:

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 diesem Beispiel haben die Zeilen mit Widthund Heightdie Größe in Pixel . Die letzte Zeile mit -geometrygibt die Größe in Zeichen (sowie die Position der linken oberen Ecke - in Pixel) an.

Apropos Ändern der Größe des Fensters, das resizezeigt Programm die Anzahl der Zeilen und Spalten. In diesem Beispiel wird gezeigt

$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;

In der Frage wurde nicht angegeben, wie die Informationen verwendet werden könnten. Da es sich bei der Ausgabe jedoch um Text in einem vorhersehbaren Format handelt, können Skripte erstellt werden. Hier ist ein einfaches Beispiel mit 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

welche druckt

577x624 pixels, 103x42 chars
Thomas Dickey
quelle