【问题标题】:C - going from ncurses ui to external program and backC - 从 ncurses ui 到外部程序并返回
【发布时间】:2010-07-15 17:19:29
【问题描述】:

我正在制作一个在 ncurses 中显示一些信息的程序,然后打开 vim(使用 system)以允许用户编辑文件。但是,退出 vim 后,ncurses 屏幕不会重绘。 refreshwrefresh 什么都不做,导致我漂亮的菜单被彻底破坏。

所以,我被送回命令行。当我移动到菜单项时,它们会重新绘制。稍微移动一下会得到如下所示的结果:

如您所见,我不再处于漂亮的 ncurses 环境中。

我可以完全拆除 ncurses 并重新设置,但有些东西(如菜单位置)不会被保留。

如何正确执行此操作?有没有更好的方法来调用一些外部程序并优雅地返回这里?

【问题讨论】:

    标签: c ncurses external-process


    【解决方案1】:

    我从来不用完全重启 curses。

    如果你做类似的事情会怎样

    def_prog_mode() 然后 endwin()

    执行系统调用

    并且 refresh() 应该恢复它

    【讨论】:

    • 谢谢!这似乎可行,但是我时不时地回到我的诅咒 UI,并且我的击键都没有注册。所以我必须杀死这个程序。有什么想法吗?
    • 如何初始化 ncurses?初始化(); /* 初始化curses库/keypad(stdscr, TRUE); / 启用键盘映射 / nonl(); / 告诉 curses 不要在输出 /cbreak() 上执行 NL->CR/NL; / 一次输入一个字符,无需等待 \n / noecho(); / 不回显输入 */ 是不是有什么东西改变了输入法?您可以在返回时调用 cbreak()
    • 我正在做以上所有事情,不幸的是仍然没有运气。
    • 这似乎类似于这里的问题:stackoverflow.com/questions/1189708/… 但是调用 keypad(win, 1) 没有帮助。
    • 很抱歉没有击键的想法
    【解决方案2】:

    将您的程序状态与 curses 状态分开。

    我知道的唯一干净的方法是完全停止并重新启动诅咒。如果您的程序对其内部状态有一个清晰的概念(应该如此),那么回到相同的位置应该很容易。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2020-09-22
      相关资源
      最近更新 更多