运行护士程序后终端混乱

Terminal messed up after running ncurses program

本文关键字:终端 混乱 程序 运行      更新时间:2023-10-16

这是我的程序(好吧,main调用NCursesViewController实例的这个方法):

void NCursesViewController::Run(){
    initscr(); //Init ncurses standard screen
    raw();
    printw("WELCOME");
    endwin(); //Free Ncurses resources
    getch();
}

当我在Ubuntu终端上运行这个程序后,终端仍然处于一些奇怪的状态;无论我输入什么,光标都不会移动。如果我按Enter,它会运行我输入的任何内容。所以我看不清我打了什么…有什么变通办法吗?每次都要打开终端机,真麻烦。我在一个类似的问题中看到他们保存并恢复了终端设置,但是他们使用ssh和tty。

您应该在退出之前调用endwin(),而不是在getch()之前。

呼叫getch()时,重新进入ncurses模式,需要再次呼叫endwin()。(参见man initscr:"在临时转义后调用refreshdoupdate会导致程序恢复可视化模式。"getch()自动调用wrefresh,除非没有对窗口进行更改;由于您没有关闭回显,窗口将被回显修改。

我通常在atexit()处理程序中执行endwin调用,这使得endwin()更有可能执行。为了更安全,您还应该确保进程不会被未捕获的信号(如SIGINTSIGSEGV)杀死,尽管显然您无法对SIGKILL做任何事情。

endwin(); //Free Ncurses resources
getch();

尝试删除endwin()之后的任何/所有"curses calls"。

在这种情况下,注释掉getch();试试吧。
您可以检查代码以查找endwin()之后出现的任何其他curses函数。

在调用endwin()之后,我有一些非curses日志输出,和一对cout,但没有curses…