2012-06-11 62 views
1

我正在嘗試處理鍵盤快捷鍵,我已經知道如何處理信號,但問題在於信號列表不提供很多選擇。 所以我想知道是否有可能處理快捷鍵,如CTRL +'鍵'key可以是任何鍵盤鍵,如A Z E R T Y在linux c應用程序中創建自定義快捷鍵

+0

控制檯,X11,其他? –

+0

控制檯應用程序 – razielone

+0

使用GNU'readline'。閱讀有關自定義功能的文檔。 –

回答

0

以下是使用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 + ZSIGTSTP

翻閱源代碼,顯然每次調用readline()時,終端設置爲reset

//rltty.c 
    #if defined (HANDLE_SIGNALS) 
     tiop->c_lflag &= ~ISIG; 
    #else 
     tiop->c_lflag |= ISIG; 
    #endif 

除非你想修改readline,我建議定義特殊字符信號處理程序。

相關問題