【问题标题】:C++ terminal output with constant area / status bar带有恒定区域/状态栏的 C++ 终端输出
【发布时间】:2012-03-17 21:11:29
【问题描述】:

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

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

我可以使用 ANSI 代码轻松做到这一点,但是仍然有许多 printfs 总是会弄乱输出。滚动也以这种方式被破坏。

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

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

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

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

【问题讨论】:

    标签: terminal ncurses


    【解决方案1】:

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

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

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

    • 您可以将输出通过管道传输到应用程序中,该应用程序在标准输入上接受输入,然后使用 ncurses 根据某种正则表达式显示输入。 (例如,以“error”开头的行转到屏幕的上半部分,其他所有的行都到底部)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多