Como adicionar linhas em branco acima da parte inferior no terminal

1

No vim e em muitos outros editores de texto, você pode rolar até o final do arquivo para a parte superior da tela enquanto mostra o resto das linhas como em branco. Mas no terminal, por padrão, o fim da linha é fixo no final da tela do terminal, de modo que sua linha atual esteja sempre aparecendo na parte inferior. Como posso percorrer a linha atual enquanto adiciono linhas em branco entre a última linha e a parte inferior da tela?

Obrigado

    
por Kohki Mametani 30.07.2016 / 03:34

1 resposta

3

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.

    
por 31.07.2016 / 16:55