Основная проблема ...
Мне интересно (надеюсь), что есть способ управлять выводом на консоль, чтобы разрешить расширенную утилиту печати.
В частности, мне интересно, есть ли способпереместить «курсор» туда, где будет напечатан следующий символ, в следующий пробел, не перезаписывая пропущенный символ.
Я надеюсь, что есть решение, которое не требует установкиновые модули или история отслеживания stdout.
Вдохновение - символ возврата каретки
Я знаю, что символ возврата каретки ('\ r') можно использовать для перемещения «курсора» вывода консоли назадв начало строки.
Оттуда, я знаю, вы можете напечатать все, что вы хотите перезаписать столько символов, сколько вы положили в stdout, оставляя оставшиеся символы из предыдущего вывода.
ОднакоЯ хотел бы оставить x-количество символов из предыдущих символов слева, а затем записать мой вывод, перезаписывая при необходимости, для остальной части моегострока.
Например ...
Я хотел бы напечатать вывод:
_____| Name | Desc | Task | Progress |
[1] Foo Bar BarFoo [==== ] 50.0%
И затем иметь возможность обновить вторую строку, не зная этого имениэто "Foo", а desc это "Bar", чтобы иметь "FooBar" под задачей (и обновить индикатор выполнения ...)
_____| Name | Desc | Task | Progress |
[1] Foo Bar FooBar [===== ] 62.5%
То есть я хочу изменить символы, показанные ниже с █, сохраняя при этомсимволы, показанные ниже как X
_____| Name | Desc | Task | Progress |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX██████XXXXXXXX████████XX█████X
Я знаю, что могу избежать этой проблемы ...
Если я согласен с наличием динамического содержимого строки слева и статического содержимого справаЯ могу безопасно обновить строку, не теряя статический контент, если ширина динамического контента известна / ограничена заранее.Я не хочу этого по стилю оформления.
Я знаю, что могу настроить какую-то систему, чтобы отслеживать то, что уже было напечатано, и перепечатывать ее для поддержания статического содержимого.Я не хочу этого, потому что то, над чем я работаю, имеет много параллелизма, и это было бы утомительно для графического эффекта.
Мне также просто любопытно, поддерживается ли такая функция.
Заранее спасибо!