Animação dentro do terminal com códigos de escape

4

Arquivo de entrada: saída da Tower of Hanoi em Brainfuck (alguns pontos de código pode não renderizar corretamente em seu navegador). O arquivo basicamente usa códigos de escape (mais especificamente ^[[m;nH ) para reescrever linhas.

Executando o comando (talvez seja necessário fazer sudo apt-get install pv ou equivalente)

cat hanoi.b.out |  pv -l -L 10 -q

dá saída como

seotamanhodajanelaforgrandeosuficiente.

Senão,asaídaseparececom

ondeaimagemcomeça"rolando para baixo".

Naturalmente, isso levanta a questão: por que esse (des) comportamento acontece quando o tamanho da janela é muito pequeno?

    
por theindigamer 29.07.2017 / 15:39

1 resposta

5

Nem toda a saída é endereçamento de cursor. Algumas delas são feeds de linha, o que (quando o cursor estiver na linha inferior) fará com que o terminal role para cima. Aqui está uma renderização visível usando unmap do início da saída: procure o \n (novas linhas são "feeds de linha");

\E[H
\E[2J
\E[2;27HTowers of Hanoi in Brainf*ck
\E[3;15HWritten by Clifford Wolf <http://www.clifford.at/bfcpu/>
\E[14;43H-----------------------------------
\E[24;23H-----------------------------------
\E[14;3H-----------------------------------
\E[13;3HxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
\E[12;5HxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
\E[11;7HxXXXXXXXXXXXXXXXXXXXXXXXXXx
\E[10;9HxXXXXXXXXXXXXXXXXXXXXXx
\E[9;11HxXXXXXXXXXXXXXXXXXx
\E[8;13HxXXXXXXXXXXXXXx
\E[7;15HxXXXXXXXXXx
\E[6;17HxXXXXXx
\E[5;19HxXx
\E[5;19H   
\E[13;59HxXx
\n
\E[1;1H
\E[6;17H       
\E[23;37HxXXXXXx
\n
\E[1;1H
\E[13;59H   
\E[22;39HxXx
\n
\E[1;1H
\E[7;15H           
\E[13;55HxXXXXXXXXXx

Quando você usa um tamanho de tela menor, os feeds de linha que não causaram a rolagem têm maior probabilidade de estar na linha inferior, portanto, você o verá rolar para cima.

    
por 29.07.2017 / 15:59