gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:16 25 4
gpt4 key购买 nike

我正在尝试学习 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 - Ncurses:检测是否按下 F1 键并使用信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6815305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com