是否可以控制控制台输出的"光标"/将偏移量添加到标准输出而不覆盖占用偏移量的字符?



主要问题...

我想知道(希望)有一种方法可以管理控制台输出以允许高级打印实用程序。

具体来说,我想知道是否有办法将下一个字符将打印到下一个字符空间的"光标"移动到下一个字符空间,而不会覆盖跳过的空间中的字符。

我希望有一个解决方案不涉及安装新模块或跟踪标准输出历史记录。

灵感 - 回车角色

我知道回车符 ('\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

我知道我可以避免这个问题...

如果我满足于将动态行内容放在左侧,将静态内容放在右侧,只要事先知道/限制动态内容的宽度,我就可以安全地更新行而不会丢失静态内容。 出于样式原因,我不想要这个。

我知道我可以设置一些系统来跟踪已经打印的内容,并重新打印它以维护静态内容。 我不想要这个,因为我正在处理的东西有很多并发性,对于图形效果来说,这样做会很乏味。

我也只是好奇是否支持这种功能。

提前感谢!

您可以通过打印特殊的转义序列来任意移动光标。请参阅此处以获取参考。

最新更新