Problemas de ajuste de línea en bash/php

Problemas de ajuste de línea en bash/php

Estoy escribiendo un programa que imprime líneas de colores, y cuanto más lo uso, más me encuentro trabajando en los problemas que surgen sobre el ajuste de líneas.

Es una especie de terminal escrita en php, aquí está el mensaje:

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

Si me desplazo por el historial, mi texto se aleja en 10 caracteres, y si escribo 21 caracteres y elimino uno, se borra toda la línea y comienza a eliminar caracteres de la línea de arriba. Esto está en una consola que tiene 47 columnas de ancho.

Si intento agregar escapes

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

luego imprime los corchetes... incluso si agrego barras invertidas dobles.

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

Encuentro lo mismo echo -e, realmente no estoy seguro de lo que está pasando.

Por último, si modifico la PS1, funciona bien.

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

¿Que me estoy perdiendo aqui?

Respuesta1

De acuerdo ahttp://mywiki.wooledge.org/BashFAQ/053la checkwinsizeopción puede ser necesaria si se desplaza por el historial de comandos:

shopt -s checkwinsize

información relacionada