2010-07-15 70 views
5

我正在制作一个程序,在ncurses中显示一些信息,然后打开vim(使用system)以允许用户编辑文件。但是,vim退出后,ncurses屏幕将不会重绘。 refreshwrefresh什么都不做,导致我的漂亮菜单被彻底摧毁。C - 从ncurses ui进入外部程序并返回

所以,我被送回到命令行。当我移动它们时,菜单项重新绘制。逛了一下结果移动的东西,看起来像这样:

Tragedy

正如你看到的,我不再是我的漂亮ncurses的环境,。

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

如何做到这一点是否正确?有没有更好的方式来调用一些外部程序并优雅地返回到这里?

回答

1

我从来没有必须完全重启curses。

如果你这样做

def_prog_mode()然后 endwin()

执行系统调用

和刷新()应该恢复它

+0

谢谢!这似乎工作,但时不时我回到我的诅咒UI和我的键盘输入没有注册。所以我必须杀死程序。有任何想法吗? – 2010-07-16 05:34:50

+0

你如何初始化ncurses? initscr();/*初始化curses库*/ 小键盘(stdscr,TRUE);/*启用键盘映射*/ nonl();/*告诉诅咒不要做NL-> CR/NL输出*/ cbreak();/*一次只输入一个字符,不要等待\ n */ noecho();/*不回显输入*/ 是什么东西改变了输入法?您可以在返回时致电cbreak() – Tree77 2010-07-16 14:35:04

+0

我正在做上述所有操作,但遗憾的是仍然没有运气。 – 2010-07-16 17:30:43

0

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

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

祝你好运!