Rückkehr des Terminalcursors zum Zeilenanfang mit aktiviertem Zeilenumbruch

Ich schreibe einen Filter (in einer Pipe, die für eine Terminalausgabe bestimmt ist), der manchmal eine gerade aufgetretene Zeile "überschreiben" muss. Es funktioniert, indem stdin zeichenweise an stdout übergeben wird, bis a\n erreicht ist, und dann besonderes Verhalten aufrufen. Mein Problem betrifft die Rückkehr zum Zeilenanfang.

Das erste, woran ich dachte, war die Verwendung von\r oder die ANSI-Sequenz\033[1G. Wenn die Zeile jedoch lang genug war, um das Terminal umbrochen zu haben (und damit einen Bildlauf zu verursachen), wird der Cursor nur zum aktuellen zurückbewegtphysisch Linie.

Meine zweite Idee war, die Länge der Zeile zu verfolgen (Anzahl der Zeichen, die seit dem letzten Mal übergeben wurden)\n) und dann Echo\b so oft. Dies funktioniert jedoch nicht, wenn die Zeile Steuerzeichen oder Escape-Sequenzen (und möglicherweise Unicode?) Enthielt.

Gibt es einen einfachen Weg, dies zu erreichen, ohne nach allen speziellen Sequenzen zu suchen und damit meine Zeichenanzahl anzupassen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage