connaître la taille du terminal ouvert

13

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?

Edward Torvalds
la source

Réponses:

20

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 sttyavoir un accès direct à ces informations.

Joseph R.
la source
monsieur n'est-il pas possible d'obtenir une sortie en termes de pixels?
Edward Torvalds
Notez que dans bashla echocommande de cette réponse ne verra pas les variables, car le readdans le pipeline sera exécuté dans un sous-shell. (Il fonctionne ksh, cependant.) Pour bashvous pouvez utiliser, par exemple, read myrows mycols < <( stty size ).
Janis
1

Dans un environnement de bureau , vous utilisez X et l' xwininfoutilitaire 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 $WINDOWIDque 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 Widthet Heightsont la taille en pixels . La dernière ligne, avec -geometrydonne la taille en caractères (ainsi que la position du coin supérieur gauche - en pixels).

En parlant de redimensionner la fenêtre, le resizeprogramme 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
Thomas Dickey
la source