O comentário "da parte superior da tela para a linha atual" é ambíguo. Se você quis dizer a partir do topo da parte visível da tela, isso não é o scrollback . A rolagem de um terminal é a parte que você pode ver apenas usando a barra de rolagem (ou teclas adequadas, como troca de página).
Sequências de controle do XTerm documentam a sequência de escape relevante:
CSI Ps J Erase in Display (ED).
Ps = 0 -> Erase Below (default).
Ps = 1 -> Erase Above.
Ps = 2 -> Erase All.
Ps = 3 -> Erase Saved Lines (xterm).
A capacidade de descrição do terminal clear
usa o penúltimo, por exemplo,
clear=\E[H\E[2J
para posicionar o cursor no canto superior esquerdo e, em seguida, limpar a tela inteira (visível). Você poderia usar o Erase Below , mas isso não é usado na descrição do terminal.
Referindo-se a limpar o scrollback : Esse é um recurso específico do terminal, originalmente uma seqüência de escape no xterm ( 1999 , documentado em ctlseqs.ms mas não mencionado nas alterações) e posterior ( 2011 ) implementado como uma extensão para o console do Linux e a descrição do terminal correspondente . O banco de dados do terminal o relaciona como uma "extensão diversa" .
Atualmente, essas descrições de terminal têm o recurso:
- linux3.0 (o padrão atual para "linux")
- massa
- xterm + basic (um bloco de construção usado na maioria das variantes "xterm")
Se ele é suportado no xterm, o VTE teria que ser respondido por testes (não há documentação útil para VTE ou Konsole).
Se preferir não usar a extensão, você pode remover o recurso E3
da descrição do terminal que você usa, por exemplo,
infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo
Eu sugeri usar as opções -1
e -x
para simplificar a formatação e mostrar o recurso a ser alterado. O exemplo dado no link é consistente com esse conselho:
- o caminho
/home/flowerpick/.terminfo/x/xterm
seria usado por ncurses - os recursos
AX
eXT
são recursos estendidos (comoE3
), mostrados com a opção-x
.
Se você estiver usando mais de um tipo de terminal, terá que fazer isso para cada um (valor de $TERM
), e a alteração só se aplica à máquina onde você executa clear
. As primeiras linhas da saída infocmp
mostram em qual delas você está trabalhando:
# Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
Por exemplo, uxrvt
define $TERM
como algo como rxvt-unicode
, produzindo linhas como esta em infocmp
:
# Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
rxvt-unicode|rxvt-unicode terminal (X Window System),
O programa st
usa xterm
(ou possivelmente xterm-256color
), embora tenha sido um tempo desde que eu vi uma cópia de que que funcionou bem o suficiente para comentar.
A propósito, você poderia ter um alias para clear
, que está enviando a seqüência de escape (ignorando a descrição do terminal), mas eu não vi isso relatado por ninguém.
Se você quiser "limpar acima", isso não é tão simples quanto digitar "limpar". O escape 3[1J
apaga do canto superior esquerdo para a posição atual do cursor. Você pode criar um script que faça isso para limpar apenas as linhas acima do seu cursor atual:
- use o relatório de posição do cursor para encontrar a linha / coluna na qual o cursor está atualmente e
- se o cursor não estiver na primeira linha, (salvando essa posição), mova o cursor uma linha para cima e depois (com a sequência
hpa
) mova certo um número grande, - emita o "claro acima" e
- retorna para a posição original usando
cup
(endereçamento do cursor).
Essa parte com o relatório de posição do cursor não parece funcionar em (por exemplo) uma ligação readline, então sugeri um script. Você poderia fazer uma ligação que usasse os recursos de salvar / restaurar o cursor se não houvesse o problema de estar na primeira linha.