2011-08-18 6 views
2

ncurses 원시 모드에서 이스케이프 시퀀스를 감지하는 가장 좋은 방법은 무엇입니까?ncurses 이스케이프 시퀀스 감지

내 마음에 오는 것은 getch를 수행 한 다음 일종의 버퍼에 추가 한 다음 텍스트가 알려진 이스케이프 시퀀스와 일치하면 적절한 명령을 실행하고 그렇지 않으면 시퀀스를 무시합니다.

그러나이 알고리즘에서는 시스템이 다른 문자를 계속 입력해도 알 수없는 이스케이프 시퀀스에 도달하면 이스케이프 시퀀스의 일부로 간주됩니다. 이스케이프 시퀀스의 길이에 대한 규칙이나 이스케이프 시퀀스를 끝내는 일부 독립 문자

사용자가 문자 입력을 중단했을 때 ncurses에서 감지하는 방법이 있습니까? 같은 이스케이프 시퀀스는 일반적으로 문자 시퀀스로 올 수 있지만 입력 시스템에서 문자가 없을 때 블록 차단 getch가 있기 때문에 나는 마지막 문자를 감지 할 수있는 방법이 없습니다

예를 들어 내가 아래로 페이지를 누르면 c 버튼을 내가 연속 스트림을 이스케이프 시퀀스 문자^[[6 ~ 문자 c. 어떻게 미리 정의 된 에스 케이프 시퀀스 집합을 가지고 있지 않은지 사용자가 첫 번째 이스케이프 시퀀스를 누른 다음 c 문자를 눌렀다는 것을 알 수 있습니까?

답변

5

libtermkey를 사용하여 키 이벤트를 구문 분석 할 수 있습니다.

http://www.leonerd.org.uk/code/libtermkey/

어느 쪽이든 당신은 stdin에 직접 연결하거나 getch()에서 제공 한대로 바이트를 공급할 수 있습니다.

끝을 감지하는 일반적인 아이디어에 관해서는; 시퀀스가 따르는 특정 규칙이 있습니다. ESC [을 시작하는 시퀀스는 CSI 시퀀스이며 [\x40-\x7e] 범위의 첫 번째 8 진수로 끝납니다. 몇 가지 종류가 있지만 단말기에서 나오는 경우는 거의 없습니다.

+0

libtermkey는 mintty로 실행되는 프로그램에서 잘 작동합니다. –

1

사전 정의 된 이스케이프 시퀀스 집합이 없으면 시퀀스의 끝.

Ncurses는 termcap/terminfo를 사용하여 시퀀스와 그 의미를 열거합니다.

관련 문제