2012-01-30 7 views
1

Shift 키와 CTRL 수정자를 누른 상태에서 화살표 키 누름을 감지하는 데 문제가 있습니다.화살표 키 플러스 수정자를 사용하는 NCurses

나는이 다음 테스트 코드 :

WINDOW * mainwin = initscr(); 
keypad(mainwin, TRUE); 
int c = wgetch(mainwin); 

이 성공적으로 화살표 키 때 'C'에 대한 서로 다른 값을 반환 - 수정과가 -를 누르면되고, 터미널의 TERM 설정이 '의 xterm'로 설정. 터미널의 TERM 설정이 'linux'으로 설정된 경우 작동하지 않습니다. 나가 c를 위해 얻는 모두는 교대 또는 Ctrl 키를 가진 27이다.

리눅스 터미널 유형을 사용하여 작업하고 싶습니다. 어떤 제안?

+0

TERM 설정은 실행중인 터미널과 일치해야합니다. "linux"는 Linux 콘솔에서만 xterm에서 작동하지 않습니다. – Craig

답변

3

Linux 콘솔은 수정 된 커서 키를 전혀 표시 할 수 없습니다. 전송되지 않았으므로 시프트, Ctrl 또는 Alt 상태를이 콘솔에서 감지 할 수 없습니다.

진정한 xterm 또는 충분히 호환되는 복제본 (그리고 요즘 대부분)에서는이를 감지 할 수 있지만 실제로는 ncurses이 이해하지 못하고 생성 된 확장 된 이스케이프 시퀀스로 인해 혼란 스러울 수 있습니다.

이 경우 나는 현대 단말 기능을 처리하도록 특별히 설계된 keyboard input handling library을 작성했습니다. 그 중 핵심 지원이 확장되었습니다.

curses 대신 getch()을 사용해보세요.