Como posso obter o Terminal para repintar o conteúdo quando redimensiono o terminal?

3

Uma largura de terminal padrão pode ter 80 caracteres, mas a saída de um comando pode ter 100 caracteres (mais largos que a largura do terminal), portanto, ele transborda e coloca 80 caracteres em uma linha e talvez coloca 20 caracteres na próxima linha. Quando eu redimensiono o terminal para 200 caracteres, tudo o que já foi mostrado na tela fica exatamente como era (80 em uma linha e 20 em outra linha). Eu estou querendo saber se existe alguma solução que terá o terminal repintar o conteúdo, para que todos os 100 caracteres, em seguida, caber em uma única linha.

Meu sistema atual é o Ubuntu Linux, e eu uso o bash. Tenho a sensação de que existe uma solução, já que quando uso o OSX parece ser capaz de redesenhar o conteúdo do terminal e reorganizar as linhas anteriores.

    
por Peter Dietz 16.02.2012 / 03:15

1 resposta

1

Desde que fiz esta pergunta, encontrei um trecho de código que resolve isso.

Eu testei no RHEL5 e ele está resolvendo com sucesso a necessidade que eu tinha. Assim, quando chegar a ter um comando de saída algum texto. Tais como: ls -al você pode redimensionar a janela com o mouse mais ou menos de 80 pixels, e a saída com quebra automática na próxima linha se não houver espaço visível suficiente na tela, ou desembrulhar para ocupar apenas uma linha , enquanto você amplia sua janela.

Encontrado em: link

tput lines
tput cols

echo $LINES
echo $COLUMNS

stty size
stty size | awk '{print $1}'    # lines
stty size | awk '{print $NF}'   # columns

stty size | cut -d" " -f1   # lines
stty size | cut -d" " -f2   # columns 

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

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



# automatically resize the Terminal window if it gets smaller than the default size

# positive integer test (including zero)
function positive_int() { return $(test "$@" -eq "$@" > /dev/null 2>&1 && test "$@" -ge 0 > /dev/null 2>&1); }


# resize the Terminal window
function sizetw() { 
   if [[ $# -eq 2 ]] && $(positive_int "$1") && $(positive_int "$2"); then 
      printf "\e[8;${1};${2};t"
      return 0
   fi
   return 1
}


# the default Terminal window size: 26 lines and 107 columns
sizetw 26 107


# automatically adjust Terminal window size
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 is the window change signal
trap defaultwindow SIGWINCH    


sizetw 26 70
sizetw 10 107
sizetw 4 15

Por algum bom motivo, o OSX (pelo menos no meu atual 10.7.2) parece suportar o redimensionamento nativamente.

    
por 27.02.2012 / 19:02