Chaque fois que quelqu'un définit une taille différente pour une console virtuelle, less
reconnaît la résolution de la fenêtre (je suppose que ...); selon cela, il change le nombre de lignes de texte qu'il doit visualiser. Comment ce paramètre est-il calculé?
13
Réponses:
Si vous cherchez un moyen de vérifier à partir d'un script, vous pouvez effectuer l'une des opérations suivantes:
tput cols
ettput lines
, comme le suggère la manœuvreMais 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 unSIGWINCH
signal qui indiqueless
qu'il doit vérifier la nouvelle taille de la fenêtre. Par exemple, j'ai commencé uneless
exécution (en tant qu'ID de processus 16663) , je me suis connecté avecstrace
et j'ai redimensionné la fenêtre. Voici ce que j'ai vu:C'est aussi ce qu'ils font
tput cols
et ce qu'ilstput lines
font en coulisses, s'ils le peuvent. Pour plus d'informations sur cette méthode, consultezman 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
etCOLUMNS
sera souvent réglé aux dimensions du terminal. En fait, sibash
ouzsh
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 comprisdash
ettcsh
, 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. Sitput 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 etman terminfo
à la liste des choses que vous pouvez dire au terminal de faire.la source
Si vous jetez un œil au code source, vous connaîtrez les
less
appelsioctl()
pour récupérer la taille de la fenêtre sous Linux.la source
Je ne sais pas si ce sont les informations que vous recherchez. Je suppose qu'il
less
enregistre un gestionnaire de signal pourSIGWINCH
. Lorsque la dimension du terminal change, il reçoit unSIGWINCH
signal et sonde les informations tty pour la dimension actuelle du terminal. http://www.gnu.org/software/libc/manual/html_node/Miscivers-Signals.htmlla source