1
我正在嘗試處理鍵盤快捷鍵,我已經知道如何處理信號,但問題在於信號列表不提供很多選擇。 所以我想知道是否有可能處理快捷鍵,如CTRL +'鍵' 和key
可以是任何鍵盤鍵,如A Z E R T Y
。在linux c應用程序中創建自定義快捷鍵
我正在嘗試處理鍵盤快捷鍵,我已經知道如何處理信號,但問題在於信號列表不提供很多選擇。 所以我想知道是否有可能處理快捷鍵,如CTRL +'鍵' 和key
可以是任何鍵盤鍵,如A Z E R T Y
。在linux c應用程序中創建自定義快捷鍵
以下是使用GNU readline
的示例。您可以捕獲鍵序列按Ctrl + P,按Ctrl + G等
int keyPressed(int count, int key) {
printf("key pressed: %d\n",key);
rl_on_new_line();
return 0;
}
int main() {
rl_catch_signals = 0;
rl_bind_keyseq("\\C-g",keyPressed);
rl_bind_keyseq("\\C-p",keyPressed);
rl_bind_keyseq("\\C-z",keyPressed);
while(1) {
char *line = readline("rl> ");
}
對於special characters如信號字符,按Ctrl + C,按Ctrl + Z你需要rl_catch_signals=0
。這樣,你可以定義你自己的信號處理程序。
我發現的一件事是即使您在撥打readline
之前將終端置於raw
模式,也不會調用rl_bind_keyseq("\\C-z",keyPressed)
。相反,終端仍將解釋爲Ctrl + Z爲SIGTSTP
。
翻閱源代碼,顯然每次調用readline()
時,終端設置爲reset。
//rltty.c
#if defined (HANDLE_SIGNALS)
tiop->c_lflag &= ~ISIG;
#else
tiop->c_lflag |= ISIG;
#endif
除非你想修改readline
,我建議定義特殊字符信號處理程序。
控制檯,X11,其他? –
控制檯應用程序 – razielone
使用GNU'readline'。閱讀有關自定義功能的文檔。 –