Я пишу фильтр (в канале, предназначенном для вывода терминала), который иногда должен "перезаписать" только что возникшую строку. Он работает, передавая stdin символьному символу stdout до тех пор, пока не будет достигнут \n
, и затем вызывает специальное поведение. Моя проблема касается того, как вернуться к началу строки.
Первое, о чем я подумал, это использовать \r
или последовательность ANSI \033[1G
. Однако, если строка была достаточно длинной для переноса на терминал (и, следовательно, заставила его прокручиваться), они только переместят курсор назад к текущей физической строке.
Моя вторая идея состояла в том, чтобы отследить длину строки (количество символов, прошедших с предыдущего \n
), а затем повторить \b
столько раз. Тем не менее, это не так, если строка содержит управляющие символы или escape-последовательности (и, возможно, Unicode?).
Если не искать все специальные последовательности и использовать это для настройки количества символов, есть ли простой способ добиться этого?