我正在尝试学习护士库,我想出了下面的代码:
#include <ncurses.h>
#include <stdlib.h>
#include <signal.h>
static void finish(int sig);
int main(int argc, char** argv) {
char c;
initscr();
raw();
keypad(stdscr, TRUE);
noecho();
(void) signal(SIGINT, finish); /* arrange interrupts to terminate */
printw("Type any character to see it in bold:n");
refresh();
c = getch();
/* work around for ctrl+c */
if(c == 3)
finish(0);
while(c != KEY_F(1))
{
printw("The pressed key is ");
attron(A_BOLD);
printw("%cn", c);
attroff(A_BOLD);
refresh();
c = getch();
/* work around for ctrl+c */
if(c == 3)
finish(0);
printf("Code = %dn", c);
}
printw("F1 key pressed.n");
endwin();
return (EXIT_SUCCESS);
}
static void finish(int sig)
{
endwin();
/* do your non-curses wrapup here */
exit(0);
}
这个代码中的问题是当我按F1键时,终端帮助窗口打开,我无法捕获F1键。我也不能捕捉ctrl+c按下的信号机制。是否有任何方法覆盖F1键在终端上,我如何使用信号在诅咒模式。
在终端窗口的菜单栏中,单击Edit -> Preferences。转到快捷键选项卡。清除冲突的捷径。
更好的是,不要使用任何与终端仿真器已有的快捷方式冲突的快捷方式。
你应该不要去管SIGINT。护士已经拦截它,以便在退出前清理终端。如果您需要运行一些自己的清理代码,请尝试atexit
函数。
我在c / c++
都有解决方案
inline void signal_callback_handler(int signum){signal(SIGINT, signal_callback_handler);}
设置为全局
呼叫以下main()
signal(SIGINT, signal_callback_handler);
不要忘记包括stdio.h
和signal.h