C-从ncurses ui到外部程序,然后再返回

C-从ncurses ui到外部程序,然后再返回,c,ncurses,external-process,C,Ncurses,External Process,我正在制作一个程序,在ncurses中显示一些信息,然后打开vim(使用system)允许用户编辑文件。然而,退出vim后,ncurses屏幕将不会重新绘制refresh和wrefresh什么都不做,导致我漂亮的菜单被彻底破坏 所以,我被送回命令行。当我移动到菜单项时,菜单项会重新绘制。移动一点会产生如下结果: 正如你所看到的,我不再处在我美丽的校园环境中 我可以完全拆下ncurses并重新设置,但有些东西(比如菜单位置)没有保留下来 如何正确地执行此操作?是否有更好的方法调用外部程序并优雅地

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

所以,我被送回命令行。当我移动到菜单项时,菜单项会重新绘制。移动一点会产生如下结果:

正如你所看到的,我不再处在我美丽的校园环境中

我可以完全拆下ncurses并重新设置,但有些东西(比如菜单位置)没有保留下来


如何正确地执行此操作?是否有更好的方法调用外部程序并优雅地返回此处?

将程序状态与诅咒状态分开

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


祝你好运

我从来没有完全重新开始过诅咒

如果你做类似的事情呢

然后

执行系统调用


并且refresh()应该可以恢复它

谢谢!这似乎是可行的,但我时不时地回到我的诅咒界面,我的击键都没有注册。所以我必须终止这个程序。有什么想法吗?你是怎么开始的?initscr();/*初始化诅咒库/键盘(stdscr,TRUE);/启用键盘映射/nonl();/告诉诅咒者不要在输出上执行NL->CR/NL/cbreak();/一次获取一个输入字符,无需等待\n/noecho();/不回显输入*/有什么东西改变了输入法吗?当您返回时,您可以调用cbreak()。我正在执行上述所有操作,但不幸的是仍然没有运气。这似乎与这里的问题类似:但调用键盘(win,1)没有帮助。很抱歉,失去击键的想法太多了