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?
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?
Antworten:
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 stty
direkten Zugriff auf solche Informationen.
bash
dem echo
in dieser Antwort Befehl wird die Variablen nicht sehen, da die read
in der Pipeline in einer Subshell ausgeführt wird. (Es funktioniert jedoch in ksh
.) Für bash
Sie möchten vielleicht verwenden, zB read myrows mycols < <( stty size )
.
In einer Desktop-Umgebung verwenden Sie X, und das xwininfo
Dienstprogramm 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, $WINDOWID
die 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 Width
und Height
die Größe in Pixel . Die letzte Zeile mit -geometry
gibt die Größe in Zeichen (sowie die Position der linken oberen Ecke - in Pixel) an.
Apropos Ändern der Größe des Fensters, das resize
zeigt 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