키보드 단축키를 처리하려고하는데 이미 신호를 사용하는 방법을 알고 있지만 문제는 신호 목록이 선택 사항이 많지 않다는 것입니다. 그래서 바로 가기를 처리 할 수 있는지 궁금 해서요 CTRL + '키' 및 key
은 A Z E R T Y
과 같은 키보드 키가 될 수 있습니다.리눅스 C 응용 프로그램에서 사용자 정의 키보드 단축키 만들기
1
A
답변
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 + 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'을 사용하십시오. 커스텀 기능에 관한 문서를 읽으십시오. –