Я пишу фильтр (в трубе, предназначенный для вывода терминала), который иногда должен «перезаписывать» только что произошедшую строку. Он работает, передавая stdin в stdout по-символу до достижения \n
, а затем вызывает специальное поведение. Моя проблема касается возврата к началу строки.Возврат терминального курсора к началу строки с включенной оберткой
Первое, о чем я думал, это использование \r
или ANSI-последовательности \033[1G
. Однако, если бы линия была достаточно длинной, чтобы она была завернута на терминал (и, следовательно, вызвала ее прокрутку), они вернут курсор только к текущей линии физического.
Моей второй идеей было отслеживать длину строки (количество символов, прошедших с предыдущих \n
), а затем echo \b
, что много раз. Однако это не так, если строка содержит контрольные символы или escape-последовательности (и, возможно, Unicode?).
Не удалось найти все специальные последовательности и использовать это, чтобы настроить количество символов, есть ли простой способ достичь этого?
Спасибо за предложение! К сожалению, есть несколько причин, почему я не думаю, что это сработает для меня: * Мне все равно нужно будет отслеживать последовательности отдельных случаев, чтобы знать, насколько близко к краю я * Возможно, я не последнее трубопровод Для контекста; мой фильтр соответствует шаблону и «переписывает» соответствующие строки, окруженные последовательностями выделения цвета. Я не могу использовать 'fgets()' и работать с целыми строками за раз, так как некоторые из моих входов создадут «динамический» вывод (например, прирост состояния выполнения), который не выводит '\ n' некоторое время. –