Retornando o cursor do terminal para o início de linha com a quebra automática ativada
Estou escrevendo um filtro (em um canal destinado a uma saída de terminal) que às vezes precisa "substituir" uma linha que acabou de ocorrer. Ele funciona passando stdin para stdout character-by-character até um\n
é atingido e, em seguida, invocar comportamento especial. Meu problema diz respeito a como voltar ao início da linha.
A primeira coisa que pensei foi usar um\r
ou a sequência ANSI\033[1G
. No entanto, se a linha foi longa o suficiente para ter envolvido no terminal (e, portanto, causou a rolagem), estes só irá mover o cursor de volta para o atualfisica linha.
Minha segunda idéia era rastrear o comprimento da linha (número de caracteres passados desde\n
) e, em seguida, eco\b
isso muitas vezes. No entanto, isso não funciona se a linha contiver caracteres de controle ou seqüências de escape (e possivelmente Unicode?).
Além de procurar por todas as sequências especiais e usar isso para ajustar a contagem de caracteres, existe uma maneira simples de conseguir isso?