Limpar metade da tela na linha de comando

11

Existe alguma maneira de limpar o terminal, mas em vez de deixar o prompt na parte superior da tela deixa-o no meio? Parece que clearbasicamente ignora todos os parâmetros da linha de comando.

Eu pensei que haveria alguma maneira de fazer isso, tputmas não consigo encontrar um.

fizzyh2o
fonte

Respostas:

12

Você pode usar tputpara mover o cursor para uma determinada linha na tela, por exemplo,

tput cup 11 0

para movê-lo para a décima segunda linha (os valores contam de zero).

Na mesma linha, você pode usar tputpara limpar essa posição até o final da tela, usando o edrecurso Combinando,

tput cup 11 0 && tput ed

pode ser o que se queria.

Se você quiser ir para a marca intermediária na tela, o primeiro número retornado por

stty size

é (na maioria dos sistemas) o número de linhas da tela. Adicionando isso ao comando:

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

O clearprograma difere de tput ed:

  • move o cursor para a posição inicial (canto superior esquerdo) e
  • limpa a partir desse ponto até o final da tela.

Advertência: em algumas plataformas, tput edpode não funcionar devido a problemas corrigidos há muito tempo. Nesses casos, atualizar a configuração de maldições / ncurses corrigirá o problema.

Thomas Dickey
fonte
no unix, isso não limpa o texto para mim, mas move o cursor
James Owers 24/01
1
Parece um bug corrigido há dez anos. Talvez seja hora de atualizar as coisas.
Thomas Dickey
0

Se a contagem de linhas for ímpar, tput cupa página inteira será limpa.
escrevê-lo assim deve corrigir isso:

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed
Farzad Sadeghi
fonte
-1

Se você estiver interessado em limpar a metade inferior da tela enquanto mantém o restante, isso funcionará:

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

EDIT: Para esclarecer, se você executar seq $(stty size | cut -d' ' -f1)as outras respostas sairá da primeira metade da saída, enquanto este comando sairá da segunda metade (ou seja, a saída mais recente).

GjjvdBurg
fonte