2011-07-08 56 views
-1

我想输出的东西到终端窗口,然后只清除它的一部分(如前半部分或季度等),而不是其余部分。有什么办法可以做到这一点?我正在使用系统(“清除”),但清除了所有内容。我宁愿不使用ncurses。任何帮助表示赞赏。在C++ unix中清除终端屏幕的一部分?

+0

什么是您的终端? –

+0

只是使用Ubuntu的,所以无论终端在那里 – Sterling

+0

如果没有其他的工作,打印100次“\ n”,并重新打印什么不需要更改 –

回答

3

如果您需要一个通用的解决方案,那么它将以某种方式涉及通过使用特殊字符返回终端,用空白覆盖要删除的部分并恢复该部分,该部分仍然应该可见。

你可以看出,如何回到this的终端后。它包含一些示例,显示如何使用回车(\ r)字符。

此外还有一个例子,它显示了如何使用ansi转义序列来获取红色文本。以同样的方式,您可以使用ansi转义序列写入终端上的特定位置,看一看here。在这个链接中的“强制光标位置”应该让您能够为每个想要清除的位置写入空格。

但是,您应该知道,并非所有终端都支持这些方法,并且如果将输出流式传输到文件,则它将包含这些特殊字符。

3

如果你计算出你的终端的功能是什么,你可以简单地用cout将它们写入stdout。

如果您不确定从哪里开始,可以尝试如下所示:在提示符下键入man terminfo,您可能会收到一个终端功能列表。试试tput看看哪些工作。然后找出你需要打印的代码的东西,如:

% tput el | od -t x1 
0000000 1b 5b 4b              
0000003 

发送这些字节到我的终端问题“clr_eol”(“厄尔尼诺”),它会清除该行的末尾。弄清楚如何在终端上移动光标,如何清除线条,然后就完成了。

当您使用gnome-terminal时,您可以这样做来擦除前3行:将光标移动到主页,擦除到行尾,向下移动,擦除到行尾,向下移动,擦除到行结束。

找出你需要打印的内容:

% (tput home ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el) | od -t x1 
0000000 1b 5b 48 1b 5b 4b 0a 1b 5b 4b 0a 1b 5b 4b 0a 1b 
0000020 5b 4b 0a 1b 5b 4b           
0000026 

发送的字节(1B 5B 48等)到标准输出(与COUT)会做的伎俩从C++。

使用ncurses会更加便携,如果你不想使用它,你可能会发现你最终会重新实现它。