Ncurses: обнаружение нажатия клавиши F1 и использование сигналов - PullRequest
1 голос
/ 25 июля 2011

Я пытаюсь изучить библиотеку 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 на терминале и как я могу использовать сигналы в режиме проклятий.

1 Ответ

1 голос
/ 25 июля 2011

В строке меню окна терминала Правка -> Настройки.Перейдите на вкладку «Ярлыки».Очистите конфликтующие ярлыки.

Еще лучше, не используйте ярлыки, которые конфликтуют с существующими ранее ярлыками эмулятора терминала.

Вы, вероятно, должны оставить SIGINT в покое.ncurses уже перехватывает его, чтобы очистить терминал перед выходом.Если вам нужно запустить собственный код очистки, попробуйте функцию atexit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...