c -护士:检测F1键是否按下并使用信号



我正在尝试学习护士库,我想出了下面的代码:

#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.hsignal.h

相关内容

  • 没有找到相关文章

最新更新