[英]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.