Возврат терминального курсора в начало строки с включенным переносом

Я пишу фильтр (в канале, предназначенном для вывода терминала), который иногда должен «перезаписывать»; линия, которая только что произошла. Это работает, передавая стандартный ввод в стандартный вывод до тех пор, пока\n достигается, а затем вызывает особое поведение. Моя проблема касается того, как вернуться к началу строки.

Первое, о чем я подумал, это использовать\r или последовательность ANSI\033[1G, Однако, если строка была достаточно длинной для переноса на терминал (и, следовательно, заставила ее прокручиваться), они будут только перемещать курсор назад к текущемуphysical линия.

Моя вторая идея заключалась в том, чтобы отслеживать длину строки (количество символов, переданных с момента предыдущего\n), а затем эхо\b это много раз. Однако, это пойдет не так, если строка содержит управляющие символы или escape-последовательности (и, возможно, Unicode?).

Если не считать всех специальных последовательностей и не использовать их для настройки количества символов, есть ли простой способ добиться этого?

Ответы на вопрос(3)

Ваш ответ на вопрос