A saída do terminal colorido ignora a sequência de reinicialização. Cor continua

1

Eu brinquei com isso por algumas horas e não consegui encontrar uma solução ...

Digamos que eu imprima isso em um terminal (testado com bash e zsh em um terminal genoma em uma máquina virtual executando um novo Linux Mint) :

python3
print("3[41mFOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO3[0m BAR")
  • 3[41m ativa um plano de fundo vermelho para o texto que segue.
  • 3[0m redefine o segundo plano para o padrão.
  • Suponha que haja o suficiente O para gerar uma saída que preencha exatamente uma linha e meia no terminal.

Em um terminal novo, a saída se parece com isso (como eu esperava):

|FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
|=================================|
|OOOOOOOOOOOOOO BAR               |
|==============                   |
|                                 |
  • Cada caractere sublinhado com = tem um plano de fundo vermelho.
  • | Define a borda do terminal.

Então, vemos FOO... com um fundo vermelho e BAR sem um fundo vermelho.

Se eu executar o comando novamente, recebo isto:

|FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
|=================================|
|OOOOOOOOOOOOOO BAR               |
|==============    ===============|
|                                 |

Depois de BAR , a linha continua a ser vermelha ... e não tenho ideia do motivo? Alguma idéia?

    
por Rotareti 31.07.2017 / 19:50

1 resposta

3
O

iTerm2 no Mac OS X também faz isso quando o texto colorido passa pelas colunas disponíveis. Uma solução alternativa pode ser apagar até o fim da linha depois de escrever BAR por meio do controle CSI Ps K Erase in Line (EL) sequência , por exemplo

$ perl -e 'print "\e[41m".("a"x120)."\e[0mBAR\e[K"'
    
por 31.07.2017 / 20:02