A maneira mais fácil de limpar o buffer de rolagem do terminal + alguma explicação mais profunda?

2

Por que se incomodar?

Limpar o buffer de rolagem é útil de várias maneiras, por exemplo, quando eu desejo executar algum comando com saída longa e deseja rolar rapidamente para o início desta saída. Quando o buffer de rolagem está desmarcado, posso simplesmente rolar para o topo e será feito.

Algumas considerações:

Existe o comando clear , de acordo com o homem,

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

No gnome-terminal clear não não limpa o buffer de rolagem. (O que é o recurso "E3"?)

Existe também reset , que limpa, mas faz um pouco mais do que isso, e é muito lento (no meu sistema leva mais de um segundo, o que é um atraso significativo para os humanos serem notados).

E há echo -ne '\ec' ou echo -ne '3c' , que faz o trabalho. E, de fato, é muito mais rápido que reset .

A pergunta é, o que é \ec sequence, como ele difere de qual clear e reset , e por que não existe um comando separado para ele?

Há também a sequência chave C-l da readline, que por padrão está vinculada ao comando clear-screen (ou seja, comando readline, não shell). O que é esse comando? Qual sequência de escape ela emite? Como de fato, isso funciona? Ele executa o comando shell? Ou o que? Novamente, no gnome-terminal, parece que funciona apenas cuspindo linhas em branco até que o prompt apareça na linha superior do terminal. Não tenho certeza sobre outros emuladores de terminal. Esse é um comportamento muito complicado. Ele polui o retrocesso com pedaços de vazio, então você deve rolar mais e mais. É como um hack, em vez de uma solução limpa.

Outra questão é, existe um comando readline para a sequência \ec mencionada? Eu quero vinculá-lo a C-l em vez disso, porque eu sempre quero limpar o buffer de rolagem quando limpo a tela.

E outra pergunta é como digitar essa seqüência de escape no terminal, para executar a ação desejada? Então não é necessário pensar em ligar C-l a outro comando readline (se tal comando existir). Tentei digitar Esc e, em seguida, c , mas isso não funciona.

UPDATE Essa pergunta foi respondida principalmente aqui: link . É uma resposta muito boa, que explica quase todas as perguntas feitas aqui.

    
por tosh 13.12.2017 / 18:52

1 resposta

2

Muitos emuladores de terminal usam as mesmas seqüências de escape que o XTerm ou similar. Para XTerm, Esc c é definido como "Reinicialização total (RIS)". Parece razoável que uma reinicialização completa limpe o buffer de rolagem.

Eu não tive sucesso usando readline para vincular-se à sequência em si, mas uma solução alternativa é

bind '"\C-l": "\C-a\C-kprintf\ "\033c"\C-m"'

Isso tem algumas ressalvas. Primeiro, ele coloca o comando printf em seu histórico de shell, o que não é ideal. Em segundo lugar, não pode ser usado durante a entrada de um comando; sobrescreve a linha de entrada atual.

    
por 13.12.2017 / 19:37