As seqüências de escape \e[B
e \e[A
movem o cursor para baixo e para cima, respectivamente, restringindo a janela de visualização. As seqüências de escape \eD
(chamadas de "index") e \eM
("índice reverso") também se movem para baixo e para cima, mas também rolam a janela de exibição se necessário. (Observe a falta do caractere [
nos últimos.)
Eu recomendo que você imprima alguns caracteres "index", seguidos pelo mesmo número de "cursor para cima" (ou "índice reverso"). Por exemplo:
echo -ne '\eD\eD\eD\e[A\e[A\e[A'
move o cursor para baixo por 3 linhas, rolando a viewport inteira, se necessário, e então move-a de volta. Efetivamente, garante que haja pelo menos 3 linhas vazias na parte inferior da tela.
Você pode conectá-lo ao seu $PS1
(prompt de shell primário), apenas certifique-se de que ele esteja entre \[
e \]
para que o shell saiba que esses caracteres não avançam o cursor horizontalmente, por exemplo:
PS1='\[\eD\eD\eD\e[A\e[A\e[A\]prompt$ '
Você também pode optar por imprimi-lo em $PROMPT_COMMAND
. Nesse caso, se bem me lembro, ele precisa ser colocado entre um byte 0x01
( ^A
) e um 0x02
( ^B
).
Nota: os atalhos \e[3A
e \e[3B
movem o cursor para cima / baixo em 3 linhas (e obviamente você pode substituir 3 por qualquer número). As seqüências "index" e "reverse index" não possuem esses atalhos.
Eu deixo para você como um exercício para programaticamente descobrir o seu número preferido de linhas com base na altura do terminal.