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