2012-03-17 30 views
0

我有一个完全由控制台/终端控制的较大的C++应用程序。大量的调试输出被打印,但是它开始变得混乱。重要信息在各个模块的一般状态信息之间丢失。禁用这些输出是不可能的,因为它们实际上是故障的重要指标。相反,我认为它可能更有助于“分割”屏幕,即在屏幕(终端)上的一种额外区域中具有特定的输出。这可以被认为是一个状态栏(可能是多行)。具有恒定区域/状态栏的C++终端输出

我可以用ANSI代码很容易地做到这一点,但仍然有很多printfs总是弄乱了输出。滚动也是这样打破的。

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

我期待的任何建议,让我加入这样的事情很容易:

  • 有一个固定大小的区域(前N线)上的终端输出一些状态信息
  • 的余屏幕上显示的printf输出
  • 滚动时,固定大小的面积/状态栏应该不会有不良影响(即我想正常滚动的printf的输出,而不会丢失任何!)

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

回答

0

如果不将应用程序转换为使用ncurses,使用ncurses来做到这一点是不实际的。 ncurses希望是唯一操纵屏幕的东西。

关闭我的头顶,我有两个想法,你(除了转换你的应用程序的ncurses):

  • 你可以使用一些疯狂的连接或者将#define技巧,以替换所有呼叫对printf,等使用ncurses写入屏幕的版本。我不推荐这个。

  • 你可以通过管道将输出到一个应用程序,需要在标准输入的输入,然后使用ncurses的基于某种正则表达式的显示输入。 (例如,与“错误”开始线往屏幕一切到底部的上半部分)。

如果您希望使用终端的滚动缓冲区,您需要在窗口顶部有滚动部分。 ncurses的可能并非这一要求,因为它是在这样一个时代设计时,终端没有回溯的缓冲区工作。