ncurses ライブラリを学習しようとしていますが、以下のコードを思いつきました:
#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("%c\n", c);
attroff(A_BOLD);
refresh();
c = getch();
/* work around for ctrl+c */
if(c == 3)
finish(0);
printf("Code = %d\n", 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 キーをオーバーライドする方法はありますか? curses モードでシグナルを使用するにはどうすればよいですか?