VT100 转义序列删除已打印的换行符?

发布于 2024-12-09 11:45:16 字数 213 浏览 0 评论 0原文

是否有 VT100 转义序列的组合允许我的 C 程序打印如下内容:

等待......

到控制台,以这样的方式,点一个一个地出现?本质上,我想要一个可以让我插入额外的“.”的命令。在已经发送的换行符前面。

我正在寻找一种针对 Linux 的快速单行代码;它不必是便携式的。 ncurses 对此来说太过分了。

Is there a combination of VT100 escape sequences that will allow my C program to print something like:

Waiting......

to a console, in such a way that the dots appear one by one? Essentially, I want a command that will let me insert an extra '.' in front of a newline that has already been sent.

I'm looking for a quick one-liner for linux; it does not have to be portable. ncurses is overkill for this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酒几许 2024-12-16 11:45:16

您可以将 ESC[K(清除行尾)添加到 ESC[A(上一行),并

使用 Python 打印新行文本的示例:

import random, time
for _ in range(100):
    print('\x1b[A\x1b[Kthis will print each line cleanly: %d' %(random.randint(0, 100000)))
    time.sleep(0.1)

如果您确实想让事情变得简洁,请使用 ESC7(保存光标)和 ESC8(恢复光标)

然后,编写您的行并在其末尾使用 ESC7。在 print 语句的开头,使用 ESC8。请注意,除非您关闭自动换行符,否则这将无法在您的 tty 底部工作。它适用于所有行底部。

import random, time

print('this will print each dot cleanly: \x1b7')
for _ in range(10):
    print('\x1b8.\x1b7')
    print('print more foo: %d' %_)
    time.sleep(0.1)

对于 shell 脚本(bash),您可以使用不带 \n 的 printf "..." 或 echo -n

you can add ESC[K (clear to end of line) to ESC[A (up one line), and print your new line text

an example using Python:

import random, time
for _ in range(100):
    print('\x1b[A\x1b[Kthis will print each line cleanly: %d' %(random.randint(0, 100000)))
    time.sleep(0.1)

if you really want to be neat about things, use ESC7 (save cursor) and ESC8 (restore cursor)

then, you write your line and at the end of it you use ESC7. at the beginning of the print statement, you use ESC8. note, unless you turn off automatic newlines, this will not work at the bottom of your tty. it will work on all lines but the bottom.

import random, time

print('this will print each dot cleanly: \x1b7')
for _ in range(10):
    print('\x1b8.\x1b7')
    print('print more foo: %d' %_)
    time.sleep(0.1)

for shell scripting (bash), you would use printf "..." without a \n, or echo -n

凹づ凸ル 2024-12-16 11:45:16

执行此操作的一种简单方法是使用转义序列

"\x1b[A"

将光标向上移动一行。然后,重新打印“Waiting...”消息,比上次多了一个点。

An easy way to do this is to use the escape sequence

"\x1b[A"

to move the cursor up one line. Then, re-print the "Waiting..." message, with one more dot than the last time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文