簡體   English   中英

Ncurses:檢測是否按下 F1 鍵並使用信號

[英]Ncurses: Detecting if F1 key pressed and using signals

我正在嘗試學習 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 模式下使用信號。

在終端窗口的菜單欄中,編輯->首選項。 轉到“快捷方式”選項卡。 清除沖突的快捷方式。

更好的是,不要使用任何與終端仿真器的現有快捷方式沖突的快捷方式。

您可能應該不理會SIGINT。 ncurses已經在退出之前攔截了它以清理終端。 如果您需要運行自己的一些清理代碼,請嘗試atexit函數。

我有 c/c++ 的解決方案

內聯 void signal_callback_handler(int signum){signal(SIGINT, signal_callback_handler);} 把它作為全局

在 main() 信號(SIGINT,signal_callback_handler)中調用下面;

不要忘記包含 stdio.h 和 signal.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM