【问题标题】:How to popup a ncurses widget without clearing background?如何在不清除背景的情况下弹出 ncurses 小部件?
【发布时间】:2016-02-15 03:08:24
【问题描述】:

ncurses 通常会清除背景并显示小部件/窗口。

我想让 ncurses 像当前会话的助手一样工作,它会在当前 ssh 会话上方弹出窗口

外观将类似于 CMD.exe 实现(见图)

【问题讨论】:

    标签: python c++ perl ncurses


    【解决方案1】:

    简短的回答:你不能这样做。

    Long:curses 应用程序是清除屏幕的全屏程序,以便它们知道屏幕上的内容(因此 curses 库可以优化它的输出:使用最少的工作量)。

    您可以编写一个使用自己的规则的低级应用程序,例如,使用 terminfo/termcap 接口。即使您将它与 ncurses 库链接,这不会使其成为 curses 应用程序,而是 terminfo(首选)或 termcap(长期弃用)应用程序。请参阅 ncurses 常见问题解答Types of library users

    要为所示示例创建一个 terminfo 应用程序,您的应用程序将(临时,可能还有其他事情要做):

    • 使用setupterm初始化终端(实际上是应用程序到终端数据库的连接)。
    • 如果终端支持,保存原光标位置
    • 清除屏幕的剩余部分
    • 绘制对话框
    • 运行您的对话框
    • 使用保存的光标位置,将光标返回到原来的位置
    • 清除屏幕的剩余部分

    根据终端的能力,可能需要不同的方案(终端能力的不同组合)来清屏、绘制对话框等。

    在绘制对话框时,您将无法使用任何高级 curses 调用。 python 文档并没有真正概述低级调用。要查看这一点,请阅读ncurses documentation

    有些人可能会提出替代方案(我不会),但由于终端功能,它们具有相同的限制。

    【讨论】:

      【解决方案2】:

      Curses 不是为此而设计的。您应该使用 perl tk 或类似的 GUI 模块。它相当容易使用,并且比诅咒更强大。

      【讨论】:

      • OP 正在显示一个带有 Windows 控制台窗口的 ssh 会话。您的答案应该考虑到如何使 that 在 OP 的配置上运行。
      猜你喜欢
      • 2021-05-10
      • 2015-12-13
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多