Problemas de quebra de linha no bash/php

Problemas de quebra de linha no bash/php

Estou escrevendo um programa que imprime linhas coloridas e, quanto mais faço isso, mais me vejo trabalhando em problemas de quebra de linha que surgem.

É uma espécie de terminal escrito em php, aqui está o prompt:

$return = readline("\033[44m\033[1;37m{$this->text}>>\033[0m ");

Se eu percorrer o histórico, meu texto terá 10 caracteres, e se eu digitar 21 caracteres e excluir um, ele limpará a linha inteira e começará a excluir os caracteres da linha acima. Isso está em um console com 47 colunas de largura

Se eu tentar adicionar escapes

$return = readline("\[\033[44m\033[1;37m\]{$this->text}>>\[\033[0m\] ");

então ele imprime os colchetes... mesmo se eu adicionar barras invertidas duplas.

\[\][timer]>>\[\] 

Acho a mesma coisa echo -e, não tenho certeza do que está acontecendo.

Por último, se eu modificar o PS1, ele funcionará perfeitamente.

[mike@crest ~]$ export PS1="\[\033[44m\033[1;37m\][timer]>>\[\033[0m\] "
[timer]>>

O que estou perdendo aqui?

Responder1

De acordo comhttp://mywiki.wooledge.org/BashFAQ/053a checkwinsizeopção pode ser necessária ao percorrer o histórico de comandos:

shopt -s checkwinsize

informação relacionada