具有恒定区域/状态栏的C ++终端输出

时间:2012-03-17 21:11:30

标签: terminal ncurses

我有一个更大的C ++应用程序,完全由控制台/终端控制。打印了很多调试输出,但是它开始变得混乱。各种模块的一般状态信息之间丢失重要信息。禁用这些输出是不可能的,因为它们实际上是故障的重要指标。

相反,我认为“分割”屏幕可能更有帮助,即在屏幕(终端)上的一种额外区域中具有特定输出。这可以被认为是状态栏(可能是多行)。

我可以使用ANSI代码轻松完成此操作,但是仍有许多printfs总是弄乱输出。滚动也是这样打破的。

一个选项可能是使用ncurses,但我不想将整个应用程序移植到它。我试图找出是否可以在ncurses应用程序中显示正常的printf输出(有点像终端控制台中的终端:-)),但没有找到任何。

我正在寻找任何可以让我轻松添加这样的内容的建议:

  • 在终端输出上有一个固定大小的区域(前N行)一些状态信息
  • 屏幕的其余部分显示printf输出
  • 滚动时,固定大小的区域/状态栏不应产生不利影响(即我想正确滚动printf输出而不会丢失任何!)

代码将在笔记本电脑上的Linux机器上运行(通常使用gnome终端)或通过ssh连接远程运行。

1 个答案:

答案 0 :(得分:0)

如果不将应用程序转换为使用ncurses,则使用ncurses执行此操作是不切实际的。 ncurses期望是唯一操纵屏幕的东西。

在我的头脑中,我有2个想法(除了将你的应用转换为ncurses):

  • 您可以使用一些疯狂的链接器或#define技巧来替换对使用ncurses写入屏幕的版本的printf等所有调用。我不推荐这个。

  • 您可以将输出通过管道输入到stdin上的输入,然后使用ncurses根据某种正则表达式显示输入。 (例如,以“错误”开头的行会进入屏幕的上半部分到底部)。

如果您想使用终端的滚动缓冲区,您需要在窗口顶部放置滚动部分。 ncurses可能无法很好地满足此要求,因为它是在终端没有回滚缓冲区的时代设计的。