Como parar 'limpar' da limpeza do buffer de rolagem

4

Inicialmente, achei que a rolagem Ilimitada não estava funcionando com o aplicativo terminal no 16.04. Eu tenho a opção "limite de rolagem para" desmarcada. Algumas vezes ele rola de volta algumas vezes isso não acontece. Então percebi que não rola para trás quando eu uso o comando clear . Ele rola de volta apenas um scree.

Eu uso bastante clear (quase uma vez em cada 3 comandos).

A página man para pontos claros para terminfo. Existem algumas opções no terminfo, mas não consigo encontrar um arquivo de configuração onde eu possa definir as opções. Todos os arquivos em / lib / terminfo / de onde clear parece estar lendo sua configuração estão em formato compilado e eu não os entendo.

Eu não vi esse problema antes com 14.04 (adivinhação).

Qualquer ajuda é muito apreciada.

Obrigado.

    
por stingray 28.06.2016 / 21:47

4 respostas

8

O que você deseja é digitar CTRL + L em vez de clear .

Isso enviará um "Feed de formulário" para o terminal. Basicamente, ele moverá tudo para cima na altura da janela do terminal, limpando a tela sem afetar sua rolagem.

    
por bashBedlam 28.06.2016 / 23:30
4

Isso me levou um tempo para descobrir, então acho que devo compartilhar como consegui que isso funcionasse.

Se você digitar "man clear", verá que o manual indica:

clear clears your screen if this is possible, including its scrollback buffer (if the extended "E3" capability is defined).

Vamos remover esse recurso do E3:

Primeiro, descubra o tipo do seu terminal:

echo $TERM

Para mim, isso resultou em "xterm-256color". Seja o que for, lembre-se disso.

Agora digite o comando:

infocmp -x xterm-256color > tempfile

Onde você obviamente substitui o xterm-256color pela saída do primeiro comando. Isto irá mostrar os recursos estendidos para este tipo de terminal em 'tempfile'.

Agora edite esse arquivo recém-criado. Você está procurando:

E3=\E[3J,

Encontre isso e apenas remova-o. A coisa toda, então se parecesse:

    ...
    Cs=\E]12;%p1%s
    ...
    Cs=\E]12;%p1%s
sudo tic -x tempfile
7, Ms=\E]52;%p1%s;%p2%s
echo $TERM
7, Se=\E[2 q, Ss=\E[%p1%d q, ...
7, E3=\E[3J, Ms=\E]52;%p1%s;%p2%s
infocmp -x xterm-256color > tempfile
7, Se=\E[2 q, Ss=\E[%p1%d q, ...

Agora deve parecer:

E3=\E[3J,

Salve o arquivo. E do seu terminal execute:

    ...
    Cs=\E]12;%p1%s
    ...
    Cs=\E]12;%p1%s
sudo tic -x tempfile
7, Ms=\E]52;%p1%s;%p2%s%pre%7, Se=\E[2 q, Ss=\E[%p1%d q, ...
7, E3=\E[3J, Ms=\E]52;%p1%s;%p2%s%pre%7, Se=\E[2 q, Ss=\E[%p1%d q, ...

Isso carregará seu terminfo modificado e o armazenará. reinicie seu terminal e limpe agora não deve mais remover o scrollbuffer

    
por polle 16.08.2016 / 18:06
2

Esta resposta se baseia na resposta da arraia (sobre a qual ele fez um bom trabalho) e pretende completá-la.

1 - Para limpar sem perder a rolagem, digite o seguinte comando no console (não é necessário usar o python como sugerido na resposta da stringray):

printf '[H[2J'

2 - Para evitar ter que memorizar isso, você pode editar seu arquivo .bashrc para criar um alias para ele. Eu chamaria o alias de claro. No bash, digite:

nano ~/.bashrc

E adicione esta linha no final:

alias clean="printf '[H[2J'"

Também gosto de adicionar div (para divisor):

alias div='echo;echo "------------------------------------------------------------------------------";echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo "------------------------------------------------------------------------------";clean'

Isso faz com que, quando você faz o comando div, ele insira dois divisores com 10 novas linhas entre eles, seguidos de um comando clean. Isso fará com que, quando você estiver rolando de volta, você saiba exatamente onde você usou div.

Você pode alterar o comportamento do sudo bash fazendo sudo su antes do procedimento listado.

Eu recomendaria isso sobre a resposta do bashBedlam ao usar tic, como editando .bashrc:

1) não requer privilégios de sudo e pode ser facilmente levado em qualquer lugar.

2) afeta apenas o seu usuário (nem todos os usuários vão querer a função de limpeza modificada)

3) sobreviverá às atualizações que normalmente não tocam no bashrc

    
por thebunnyrules 20.01.2018 / 05:34
1

@heemayl e @bashBedlam Obrigado.

CTRL + L faz o que eu quero. Mas eu estou acostumado a digitar claramente o tempo todo. Então eu meio que trabalhei em torno dele copiando / lib / xterm / x / {xterm, xterm-256color} do Ubuntu 12.04. Existe uma variável de ambiente denominada $ TERM que armazena esse arquivo. Então eu li sua resposta e tentei CTRL + L e funcionou. Fiquei curioso e estava tentando ver se eu posso colocar CTRL + L em um script e não tenho onde. Então eu lembrei que Strace poderia me dar o que eu quero. Então eu corri strace clear e achei que ele escreve "\ 33 [H \ 33 [2J" para limpar a tela. Então eu escrevi um oneliner python print ("\ 33 [H \ 33 [2J") e coloque-o em um arquivo e adicione um link chamado clear para apontar para ele. Tem 2 soluções alternativas agora. Ainda estou curioso para saber como os arquivos terminológicos podem ser lidos e alterados.

Obrigado novamente.

    
por stingray 29.06.2016 / 11:38