2010-11-22 3 views
3

F11 또는 insand getchr과 같은 키를 캡처하는 방법에 이러한 키가 반환되지 않으며 입력 이벤트의 원시 입력을 허용하는 작업이 없습니다.getch는 -1을 반환합니까?

지금 ncurses/curses를 시도하고 있습니다. C++ 프로그램에서 이러한 키를 캡처 할 수 있습니다.

테스트 내 프로그램은 간단

, 그것은 기본적으로 : 나는 최근의 커널을 사용하고 있습니다 ..

#include <stdlib.h> 
#include <stdio.h> 
#include <curses.h> 
int main() { 
    int car; 
    while(c != '\b') { 
     c = getch(); 
     printf("%i", c); 
    } 
    return 0; 
} 

나는 다른 getch() 함수로 물론 같은 사용하지만 -1 무한한 시간을 반환 아치 리눅스에서 표준 터미널 (xterm에서 테스트 됨)

라이브러리에서이 getch()를 사용하려면 스위치를 켜야합니까?

답변

7

getch()을 호출하기 전에 저주를 초기화하려면 initscr();으로 전화해야합니다.

또한 라인 비 버퍼링 모드를 원할 것이므로 cbreak(); noecho(); (에코 모드를 cbreak 모드와 함께 사용하면 안됨)을 호출해야합니다.

+0

나는 curses 전문가는 아니지만 ncurses가 특수 키 이스케이프 시퀀스를 변환하고 getch()에서 반환하는 편리한 값을 반환 할 수 있도록'keypad (stdscr, TRUE); '를 호출 할 수도 있습니다. * KEY_ * 매크로. 예 : 'if (getch() == KEY_F0 + 11) {/ * f11 pressed * /}' –

+0

고맙습니다. 내 FN 키는 리눅스에서 어떤 이유로 작동하지 않으므로 테스트 할 수는 없지만 삽입 및 기타 등등의 이상한 것들은 작동하지 않습니다. 커널에서 원시 키보드 입력을 매핑하여 fn + ins 키 및 물건을 일시 중지하려면 : \ – John