Estoy escribiendo un filtro (en una tubería destinada a una salida del terminal) que a veces necesita "sobrescribir" una línea que acaba de ocurrir. Funciona pasando stdin a stdout carácter por carácter hasta llegar a \n
, y luego invocando un comportamiento especial. Mi problema es cómo volver al comienzo de la línea.Devolución del cursor del terminal al inicio de línea con el ajuste habilitado
Lo primero que pensé fue utilizar una secuencia \r
o ANSI \033[1G
. Sin embargo, si la línea fue lo suficientemente larga como para haber envuelto el terminal (y por lo tanto provocó que se desplace), estos solo moverán el cursor nuevamente a la línea física actual.
Mi segunda idea fue seguir la longitud de la línea (número de caracteres pasados desde la anterior \n
), y luego echo \b
que muchas veces. Sin embargo, eso no funciona si la línea contenía caracteres de control o secuencias de escape (¿y posiblemente Unicode?).
A falta de buscar todas las secuencias especiales y usar esto para ajustar el recuento de caracteres, ¿hay una manera simple de lograr esto?
Gracias por la sugerencia! Lamentablemente, hay un par de razones por las que no creo que eso funcione para mí: * Todavía necesitaría seguir secuencias de casos especiales para saber qué tan cerca del límite estoy * Puede que no sea lo último en la tubería Por contexto; mi filtro es coincidencia de patrones, y "reescribe" cadenas coincidentes rodeadas de secuencias de escape de color. No puedo usar 'fgets()' y operar cadenas enteras a la vez, ya que parte de mi entrada producirá una salida "dinámica" (por ejemplo, un estado de progreso creciente) que no da salida '\ n' por un tiempo. –