Sur DE, nous pouvons redimensionner le terminal (gnome-terminal par exemple) pour notre commodité, comment puis-je connaître la taille du terminal en termes de pixels ou de nombre de colonnes et de lignes?
Sur DE, nous pouvons redimensionner le terminal (gnome-terminal par exemple) pour notre commodité, comment puis-je connaître la taille du terminal en termes de pixels ou de nombre de colonnes et de lignes?
Réponses:
Si vous exécutez la commande
stty size
il renvoie la taille du terminal actuel en lignes et colonnes. Exemple:
$ stty size
24 80
Vous pouvez lire les lignes et les colonnes dans des variables comme celle-ci (grâce au commentaire de Janis ):
$ read myrows mycols < <(stty size)
L'obtention de la taille en pixels nécessite une connaissance de la résolution de votre écran et je ne pense pas stty
avoir un accès direct à ces informations.
bash
la echo
commande de cette réponse ne verra pas les variables, car le read
dans le pipeline sera exécuté dans un sous-shell. (Il fonctionne ksh
, cependant.) Pour bash
vous pouvez utiliser, par exemple, read myrows mycols < <( stty size )
.
Dans un environnement de bureau , vous utilisez X et l' xwininfo
utilitaire peut afficher la taille de la fenêtre en pixels. De plus, si vous exécutez sur le bureau (et non, par exemple, connecté à distance), l'émulateur de terminal fournit une variable $WINDOWID
que vous pouvez utiliser comme paramètre pour xwininfo
, par exemple,
xwininfo -id $WINDOWID
et obtenez une liste de liste ceci:
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
Dans cet exemple, les lignes avec Width
et Height
sont la taille en pixels . La dernière ligne, avec -geometry
donne la taille en caractères (ainsi que la position du coin supérieur gauche - en pixels).
En parlant de redimensionner la fenêtre, le resize
programme affiche le nombre de lignes et de colonnes. Pour cet exemple, il montre
$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;
La question n'indiquait pas comment les informations pourraient être utilisées, mais comme la sortie est du texte, dans un format prévisible, elle est facilement scriptée. Voici un exemple simple utilisant 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
qui imprime
577x624 pixels, 103x42 chars