Можно ли управлять «курсором» консольного вывода / добавлять смещение в стандартный вывод, не перезаписывая символы, занимающие смещение? - PullRequest
0 голосов
/ 26 марта 2019

Основная проблема ...

Мне интересно (надеюсь), что есть способ управлять выводом на консоль, чтобы разрешить расширенную утилиту печати. ​​

В частности, мне интересно, есть ли способпереместить «курсор» туда, где будет напечатан следующий символ, в следующий пробел, не перезаписывая пропущенный символ.

Я надеюсь, что есть решение, которое не требует установкиновые модули или история отслеживания 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

Я знаю, что могу избежать этой проблемы ...

Если я согласен с наличием динамического содержимого строки слева и статического содержимого справаЯ могу безопасно обновить строку, не теряя статический контент, если ширина динамического контента известна / ограничена заранее.Я не хочу этого по стилю оформления.

Я знаю, что могу настроить какую-то систему, чтобы отслеживать то, что уже было напечатано, и перепечатывать ее для поддержания статического содержимого.Я не хочу этого, потому что то, над чем я работаю, имеет много параллелизма, и это было бы утомительно для графического эффекта.

Мне также просто любопытно, поддерживается ли такая функция.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 марта 2019

Вы можете произвольно перемещать курсор, печатая специальные escape-последовательности. См. здесь для справки.

...