运行 ncurses 程序后终端混乱
Terminal messed up after running ncurses program
这是我的程序(嗯,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
:"Calling refresh
or doupdate
after a temporary escape causes the program to resume visual mode." getch()
自动调用 wrefresh
除非对 window 没有任何更改;因为您没有关闭回显,window被echo修改了。)
我通常在 atexit()
处理程序中执行 endwin
调用,这使得 endwin()
更有可能执行。为了安全起见,您还应该确保该进程不会被 SIGINT
或 SIGSEGV
等未捕获的信号杀死,尽管显然您对 SIGKILL
.[= 无能为力。 26=]
endwin(); //Free Ncurses resources
getch();
尝试在 endwin() 之后删除任何/所有 "curses calls"。
在这种情况下,注释掉getch();并尝试一下。
您可能会检查您的代码以找到在 endwin() 之后出现的任何其他 curses 函数。
调用 endwin() 后,我有一些非 curses 日志输出和一些 cout,但没有 curses ...距 main 末尾大约 20 行。
这是我的程序(嗯,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
:"Calling refresh
or doupdate
after a temporary escape causes the program to resume visual mode." getch()
自动调用 wrefresh
除非对 window 没有任何更改;因为您没有关闭回显,window被echo修改了。)
我通常在 atexit()
处理程序中执行 endwin
调用,这使得 endwin()
更有可能执行。为了安全起见,您还应该确保该进程不会被 SIGINT
或 SIGSEGV
等未捕获的信号杀死,尽管显然您对 SIGKILL
.[= 无能为力。 26=]
endwin(); //Free Ncurses resources getch();
尝试在 endwin() 之后删除任何/所有 "curses calls"。
在这种情况下,注释掉getch();并尝试一下。
您可能会检查您的代码以找到在 endwin() 之后出现的任何其他 curses 函数。
调用 endwin() 后,我有一些非 curses 日志输出和一些 cout,但没有 curses ...距 main 末尾大约 20 行。