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 checkwinsize
opção pode ser necessária ao percorrer o histórico de comandos:
shopt -s checkwinsize