sto scrivendo un filtro (in un tubo destinato ad un'uscita del terminale) che a volte ha bisogno di "sovrascrivere" una linea che è appena avvenuto. Funziona passando lo stdin allo stdout carattere per carattere fino a quando viene raggiunto un valore \n
e quindi si richiama un comportamento speciale. Il mio problema riguarda come tornare all'inizio della linea.il cursore terminale per lanciare-di-linea con lo spostamento abilitato
La prima cosa che ho pensato è stata l'utilizzo di \r
o la sequenza ANSI \033[1G
. Tuttavia, se la linea era sufficientemente lunga da essere avvolta nel terminale (e quindi provocato lo scorrimento), questi spostano solo il cursore sulla linea fisica corrente.
La mia seconda idea era quella di tracciare la lunghezza della linea (numero di caratteri passati dal precedente \n
), quindi echo \b
più volte. Tuttavia, ciò non funziona se la riga contiene caratteri di controllo o sequenze di escape (e possibilmente Unicode?).
corta di ricerca di tutte le sequenze speciali e l'utilizzo di questo per regolare il mio conteggio dei caratteri, c'è un modo semplice per raggiungere questo obiettivo?
Grazie per il suggerimento! Purtroppo ci sono un paio di motivi per cui non penso che funzionerà per me: * Avrei ancora bisogno di monitorare le sequenze del caso speciale per sapere quanto vicino al limite sono * Potrei non essere l'ultima cosa in la pipeline Per contesto; il mio filtro è pattern matching e "riscrittura" di stringhe corrispondenti circondate da sequenze di escape a colori. Non posso usare 'fgets()' e operare su intere stringhe alla volta, dato che alcuni dei miei input produrranno un output "dinamico" (ad esempio uno stato di avanzamento incrementale) che non emette '\ n' per un po '. –