Porque se importar?
A limpeza do buffer de rolagem é útil de várias maneiras, por exemplo, quando desejo executar algum comando com saída longa e quero rolar rapidamente para o início dessa saída. Quando o buffer de rolagem é limpo, posso apenas rolar para o topo e pronto.
Algumas considerações:
Há clear
comando, de acordo com o homem,
clear limpa sua tela se isso for possível, incluindo seu buffer de rolagem (se o recurso "E3" estendido estiver definido).
No gnome-terminal clear
não limpa o buffer de rolagem. (Mas o que é a capacidade "E3")?
Há 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 '\033c'
, que faz o trabalho. E, de fato, é muito mais rápido que reset
.
A questão é: o que é \ec
sequência, como ela difere do que clear
e reset
faz e por que não há um comando separado para isso?
Há também a C-l
sequência de teclas do readline, que por padrão é vinculada ao clear-screen
comando (quero dizer, comando readline, não comando shell). O que é este comando? Qual sequência de escape ele 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. Este é um comportamento muito complicado. Ele polui a rolagem para trás com pedaços de vazio, então você deve rolar para cima mais e mais. É como um hack, em vez de uma solução limpa.
Outra questão é: existe um comando readline para a \ec
sequência mencionada? Em vez disso , quero vinculá-lo C-l
porque sempre desejo limpar o buffer de rolagem quando limpo a tela.
E outra questão é como digitar essa sequência de escape no terminal para executar a ação desejada? Então não precisa pensar em vincular C-l
a outro comando readline (se tal comando existir). Eu tentei digitar Esc
, então, c
mas isso não funciona.
ATUALIZAÇÃO Esta pergunta foi respondida principalmente aqui: https://unix.stackexchange.com/a/375784/257159 . É uma resposta muito boa que explica quase todas as perguntas feitas aqui.
Na
man bash
seção readline do 's :então pressione control + alt + L
Muitos emuladores de terminal usam as mesmas sequências de escape do XTerm ou similares. Para XTerm, Esccé definido como "Full Reset (RIS)". Parece razoável que uma redefinição completa limpe o buffer de rolagem.
Não tive sucesso usando
readline
para vincular à própria sequência, mas uma solução alternativa éIsso tem algumas ressalvas. Primeiro, ele coloca o
printf
comando no histórico do shell, o que não é o ideal. Em segundo lugar, não pode ser usado ao inserir um comando; ele sobrescreve a linha de entrada atual.Isso funciona para mim:
(da
clear
página de manual)Este é o melhor que encontrei para limpar o terminal e o histórico/rolagem