2012-06-11 7 views
1

키보드 단축키를 처리하려고하는데 이미 신호를 사용하는 방법을 알고 있지만 문제는 신호 목록이 선택 사항이 많지 않다는 것입니다. 그래서 바로 가기를 처리 할 수 ​​있는지 궁금 해서요 CTRL + '키'keyA Z E R T Y과 같은 키보드 키가 될 수 있습니다.리눅스 C 응용 프로그램에서 사용자 정의 키보드 단축키 만들기

+0

콘솔, X11, 기타? –

+0

콘솔 응용 프로그램 – razielone

+0

GNU'readline'을 사용하십시오. 커스텀 기능에 관한 문서를 읽으십시오. –

답변

0

다음은 GNU readline을 사용하는 예입니다. special characters 같은 신호 문자,Ctrl + C, Ctrl + Z 당신이 rl_catch_signals=0

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> "); 
     } 

해야합니다 위해 당신은 키 순서 Ctrl 키 + 등 P, Ctrl + G을 캡처 할 수 있습니다. 이렇게하면 자신 만의 시그널 핸들러를 정의 할 수 있습니다.

내가 발견 한 한 가지는 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을 수정할하지 않는 한.