2015-07-24 6 views
3
  1. Lorsque je redimensionne le terminal, il reste en plein écran. Je suppose qu'il existe un moyen de déterminer la taille d'écran du terminal. Comment puis-je faire ça en VT100? Avec, quand je liste le dossier, il affiche le dossier en couleur bleue. (ou disons une couleur différente) Mais, si vous sauvegardez la sortie dans un fichier texte (ls> out.txt), vous ne verrez pas de code ANSI mais du texte brut. Cependant, si vous essayez (vi> out.txt), vous verrez le code ANSI. Comment le savoir?Séquences d'échappement VT100 ANSI: obtention de la taille de l'écran, conditionnelle ANSI

Merci

Répondre

4

programmes (tels que vi) qui ajuste automatiquement le redimensionnement de l'écran réagissent au signal SIGWINCH, et en utilisant un appel système pour obtenir des informations du système sur l'écran de taille. Voir par exemple Get width/height of a terminal window in c++?. En passant, bien que largement mis en œuvre, il ne semble pas être documenté dans POSIX signal.h.

Sans prendre en compte SIGWINCH, un programme pourrait demander le terminal sur sa taille d'écran. Le programme resize fait cela, en envoyant les séquences de contrôle du terminal à

  • déplacer le curseur vers le coin inférieur droit (en fait, à la ligne/colonne 999/999, ce qui est assez bon), et
  • demander le terminal où le curseur est vraiment.

Le comportement de ls et vi (et d'autres programmes) en ce qui concerne les séquences de contrôle ANSI qui seraient intégrés dans leur production dépend de la conception du programme. Ils détectent probablement la redirection de leur sortie vers un fichier en utilisant la fonction isatty, et font quelque chose de différent selon que la sortie est à un terminal ou à un fichier.

+1

Les programmes Terminal (et les bibliothèques comme ncurses) n'utilisent pas la technique de déplacement du curseur mais utilisent plutôt ioctl TIOCGWINSZ. – sim642

+0

Votre commentaire n'est pas pertinent à la réponse (qui pointe déjà vers un exemple de programme utilisant termios). –

+0

@ sim642 Merci d'avoir fourni des informations sur les pratiques courantes; très pertinent à la réponse! –