Terminal 具有恒定面积/状态条的C++终端输出 我有一个更大的C++应用程序,完全是控制台/终端控制的。大量的调试输出被打印出来,但是它开始变得杂乱无章。重要信息在各个模块的一般状态信息之间丢失。禁用这些输出是不可能的,因为它们实际上是故障的重要指示器

Terminal 具有恒定面积/状态条的C++终端输出 我有一个更大的C++应用程序,完全是控制台/终端控制的。大量的调试输出被打印出来,但是它开始变得杂乱无章。重要信息在各个模块的一般状态信息之间丢失。禁用这些输出是不可能的,因为它们实际上是故障的重要指示器,terminal,ncurses,Terminal,Ncurses,相反,我认为分割屏幕可能更有帮助,即在屏幕终端上的一种额外区域中有特定的输出。这可以被认为是一个状态栏,可能有多行 我可以很容易地用ANSI代码实现这一点,但是仍然有许多printf总是会弄乱输出。滚动也是这样被破坏的 一个选项可能是使用ncurses,但是我不想将整个应用程序移植到它。我试图找出是否可以在ncurses应用程序中显示正常的printf输出,有点像终端控制台中的终端:-,但没有找到任何输出 我正在寻找任何可以让我轻松添加以下内容的建议: 有固定大小的区域顶部N行终端上输出一些状态

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

我可以很容易地用ANSI代码实现这一点,但是仍然有许多printf总是会弄乱输出。滚动也是这样被破坏的

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

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

有固定大小的区域顶部N行终端上输出一些状态信息 屏幕的其余部分显示printf输出 滚动时,固定大小区域/状态栏不应产生不利影响,即我希望在不丢失任何信息的情况下正确滚动printf输出!
代码将在笔记本电脑上的Linux机器上运行,通常使用gnome终端或通过ssh连接远程运行。

如果不将应用程序转换为使用ncurses,使用ncurses来实现这一点是不实际的。ncurses期望成为操纵屏幕的唯一工具

除了将应用程序转换为网络课程之外,我还有两个想法:

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

您可以将输出导入一个应用程序,该应用程序在stdin上获取输入,然后使用ncurses根据某种正则表达式显示输入。e、 g.以错误开头的行进入屏幕的上半部分,其他行进入底部

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