Si vous cherchez un moyen de vérifier à partir d'un script, vous pouvez effectuer l'une des opérations suivantes:
- Courez
tput cols
et tput lines
, comme le suggère la manœuvre
- vérifier les valeurs de $ LINES et $ COLUMNS
Mais si vous voulez les détails, c'est parti:
Pour les terminaux virtuels (xterm, et al), il existe un ioctl()
appel système qui vous indiquera la taille de la fenêtre. Si c'est le cas, less
utilise cet appel. De plus, lorsque vous modifiez la taille de la fenêtre, tout ce qui s'exécute dans cette fenêtre reçoit un SIGWINCH
signal qui indique less
qu'il doit vérifier la nouvelle taille de la fenêtre. Par exemple, j'ai commencé une less
exécution (en tant qu'ID de processus 16663) , je me suis connecté avec strace
et j'ai redimensionné la fenêtre. Voici ce que j'ai vu:
$ strace -p 16663
Process 16663 attached - interrupt to quit
read(3, 0xbfb1f10f, 1) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
rt_sigaction(SIGWINCH, {0x805cf10, [WINCH], SA_RESTART}, {0x805cf10, [WINCH], SA_RESTART}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(2, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
C'est aussi ce qu'ils font tput cols
et ce qu'ils tput lines
font en coulisses, s'ils le peuvent. Pour plus d'informations sur cette méthode, consultez man tty-ioctl
et recherchez TIOCGWINSZ.
Pour d'autres terminaux tels que ceux connectés aux ports série, il n'y a aucun moyen d'obtenir directement ces informations. Dans ce cas, less
commence à rechercher des indices dans les variables d'environnement.
LINES
et COLUMNS
sera souvent réglé aux dimensions du terminal. En fait, si bash
ou zsh
peut trouver les dimensions du terminal, il définira automatiquement ces variables lui-même, pour permettre aux programmes pas si intelligents de voir la taille du terminal. Cependant, la plupart des autres shells, y compris dash
et tcsh
, ne définissent pas ces variables.
TERM
est généralement défini sur le type de terminal, auquel cas la base de données terminfo peut contenir la taille attendue du terminal. Si tput rows
vous ne pouvez pas utiliser l'IOCTL (par exemple, si vous êtes connecté sur un port série), il reviendra aux valeurs enregistrées ici. Pour un terminal dont la taille peut changer, ce n'est qu'une supposition et il est probable que ce soit faux.
Pour plus d'informations, reportez-vous man tput
à la commande de contrôle du terminal et man terminfo
à la liste des choses que vous pouvez dire au terminal de faire.