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

时间:2011-10-11 23:46:32

标签: c printf vt100

是否存在VT100转义序列的组合,这将允许我的C程序打印如下内容:

  

等待......

到一个控制台,以这种方式逐个出现点?基本上,我想要一个命令,让我插入一个额外的'。'在已经发送的换行符前面。

我正在为linux寻找快速的单行程序;它不必是便携式的。 ncurses对此有点过分了。

2 个答案:

答案 0 :(得分:1)

一种简单的方法是使用转义序列

"\x1b[A"

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

答案 1 :(得分:1)

你可以将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),你可以使用printf" ..."没有\ n,或者echo -n