3 votes

Comment puis-je demander au terminal de rafraîchir le contenu lorsque je redimensionne la fenêtre du terminal ?

Une largeur de terminal par défaut pourrait être de 80 caractères, cependant la sortie d'une commande pourrait comporter 100 caractères (plus large que la largeur du terminal), donc cela déborde et met 80 caractères sur une ligne et peut-être 20 caractères sur la ligne suivante. Lorsque je redimensionne le terminal à une largeur de 200 caractères, tout ce qui a déjà été affiché à l'écran reste exactement tel qu'il était (80 sur une ligne et 20 sur une autre ligne). Je me demande s'il existe une solution qui permettra au terminal de redessiner le contenu, de sorte que tous les 100 caractères puissent alors tenir sur une seule ligne.

Mon système actuel est Ubuntu Linux et j'utilise bash. J'ai le sentiment qu'il existe une solution, car lorsque j'utilise OSX, il semble capable de redessiner le contenu du terminal et de réorganiser les lignes précédentes.

1voto

Peter Dietz Points 151

Depuis que j'ai posé cette question, j'ai trouvé un extrait de code qui résout cela.

Je l'ai testé sous RHEL5 et il résout avec succès le besoin que j'avais. Ainsi, lorsque vous avez une sortie de commande affichant du texte. Par exemple: ls -al vous pouvez ensuite redimensionner la fenêtre avec votre souris de plus ou moins 80 pixels, et la sortie se repliera sur la ligne suivante s'il n'y a pas assez de place visible à l'écran, ou s'étirera pour occuper une seule ligne, lorsque vous agrandissez votre fenêtre.

Trouvé sur: http://codesnippets.joyent.com/posts/show/1645

tput lines
tput cols

echo $LINES
echo $COLUMNS

stty size
stty size | awk '{print $1}'    # lignes
stty size | awk '{print $NF}'   # colonnes

stty size | cut -d" " -f1   # lignes
stty size | cut -d" " -f2   # colonnes 

stty -a | awk '/rows/ {print $4}'      # lignes
stty -a | awk '/columns/ {print $6}'   # colonnes

stty -a | sed -E -n -e 's/^.*[^[:digit:]]([[:digit:]]+)[[:space:]]+rows;.*$/\1/p;q;'
stty -a | sed -E -n -e 's/^.*[^[:digit:]]([[:digit:]]+)[[:space:]]+columns;.*$/\1/p;q;'

# redimensionner automatiquement la fenêtre du Terminal si elle devient plus petite que la taille par défaut

# test d'entier positif (y compris zéro)
function positive_int() { return $(test "$@" -eq "$@" > /dev/null 2>&1 && test "$@" -ge 0 > /dev/null 2>&1); }

# redimensionner la fenêtre du Terminal
function sizetw() { 
   if [[ $# -eq 2 ]] && $(positive_int "$1") && $(positive_int "$2"); then 
      printf "\e[8;${1};${2};t"
      return 0
   fi
   return 1
}

# taille par défaut de la fenêtre du Terminal : 26 lignes et 107 colonnes
sizetw 26 107

# ajuster automatiquement la taille de la fenêtre du Terminal
function defaultwindow() {

   DEFAULTLINES=26
   DEFAULTCOLUMNS=107

   if [[ $(/usr/bin/tput lines) -lt $DEFAULTLINES ]] && [[ $(/usr/bin/tput cols) -lt $DEFAULTCOLUMNS ]]; then
      sizetw $DEFAULTLINES $DEFAULTCOLUMNS
   elif [[ $(/usr/bin/tput lines) -lt $DEFAULTLINES ]]; then
      sizetw $DEFAULTLINES $(/usr/bin/tput cols)
   elif [[ $(/usr/bin/tput cols) -lt $DEFAULTCOLUMNS ]]; then
      sizetw $(/usr/bin/tput lines) $DEFAULTCOLUMNS
   fi

   return 0
}

# SIGWINCH est le signal de changement de fenêtre
trap defaultwindow SIGWINCH    

sizetw 26 70
sizetw 10 107
sizetw 4 15

Pour une bonne raison, OSX (au moins dans mon 10.7.2 actuel) semble prendre en charge le redimensionnement nativement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X