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 checkwinsize
opción puede ser necesaria si se desplaza por el historial de comandos:
shopt -s checkwinsize