这是我的程序(好吧,main
为NCursesViewController实例调用此方法):
void NCursesViewController::Run(){
initscr(); //Init ncurses standard screen
raw();
printw("WELCOME");
endwin(); //Free Ncurses resources
getch();
}
在Ubuntu终端上运行后,终端仍然处于某种奇怪的状态;无论我输入什么,光标都不会移动。如果按Enter键,它会运行我键入的任何内容。所以我看不到我打字的内容......有什么解决方法吗?每次都要打开一个终端是很麻烦的。我在类似的问题中看到他们保存并恢复了终端设置,但他们使用了ssh和tty。
答案 0 :(得分:3)
endwin(); //Free Ncurses resources getch();
尝试在endwin()之后删除任何/所有“curses调用”。
在这种情况下,注释掉getch();并试试。
您可以查看代码以查找在endwin()之后发生的任何其他curses函数。
在我的endwin()调用之后,我有一些非curses日志输出,以及几个cout,但没有curses ......它距离main的末尾大约有20行。
答案 1 :(得分:2)
您应该在退出之前而不是在endwin()
之前致电getch()
。
当您致电getch()
时,会重新进入ncurses
模式,并且需要再次拨打endwin()
。 (请参阅man initscr
:"暂时转义后调用refresh
或doupdate
会导致程序恢复可视模式。" getch()
会自动调用{{1}除非没有对窗口进行任何更改;因为您没有关闭回显,所以窗口会被回显修改。)
我通常在wrefresh
处理程序中执行endwin
调用,这使得atexit()
执行的可能性更大。为了更安全,您还应确保该过程不会被endwin()
或SIGINT
等未被捕获的信号杀死,但显然您无法对SIGSEGV
执行任何操作。