curses 사용 중에 질문..
글쓴이: moonzoo / 작성시간: 금, 2003/06/27 - 4:55오후
curses를 사용해서 화면을 구성중입니다.
화살표 키 등을 처리하기 위해서
KEYPAD를 TRUE에 설정하고 wgetch 등을 이용해서
key입력을 받고 있는데..
다른 키들을 DELAY없이 바로바로 처리가 되는데
ESC키를 받을때는 약간(0.5총 정도.)의 DELAY가 발생하네요..
이 DELAY를 어떻게 없애야 할까요?
참고로
KEYPAD를 FALSE로 놓고 하면 DELAY는 발생하지 않습니다..
근데 화살표 등을 처리하기 위해 TRUE로 처리해야 될 상황..
cbreak , nodelay 등도 써봤는데 효과 없었습니다...
Forums:
제가 보던 책 내용중에..
'keypad mode'를 사용하면 세가지의 제한사항을 감수해야 한다.
...략..
첫번째.이스케이스 시퀀스를 인식하는것은 타이밍에 의존하게 되며,많은 네트워크 문자들은(기능키 시퀀스를 escape와 개별적인 문자로 인식하도록)분리한다.
두번째. curses 는 키보드에서 Escape 로 시작하는 시퀀스와 ...략..
Escape 키를 처리하는데 조금의 지연이 있음을 알 수 있을 것이다..
에이..배끼기 힘들다..
wrox press 한글 번역판 리눅스 프로그래밍(빨간책)
235 페이지에 있는 내용입니다.:-)
이 책에서 저자는 취소의 개념으로 curses 에서 ESC 키를 쓰는것 그다지 바람직 하지 않다고 말하고 있습니다.
이유는 해당 Escape 가 그냥 하나의 escape 인지(?) 아니면 여러 이스케이프시퀀스의 시작부분인지 알아내기 위해서 조금의 시간을 필요로 한다고 하네요.
그러고 보니 대부분의 curses 로 작성된 프로그램에서 esc 키를 쓰는건 별로 본적이 없네요.. vi 를 빼고는..도움이 안되지요..--a..
http://clusterkorea.org/
Curses 를 사용치 않고 하는 저레벨 키보드 제어 소스 만든적이 있어
Curses 를 사용치 않고 하는 저레벨 키보드 제어 소스 만든적이 있어서
해당 부분만 소스 공개합니다.
그냥 이런 방법도 있다고 알려드리고 싶네요.
완전히 하나의 소스로 독립적이지 못하게 올리는거는 시간관계상 죄송하네요.
중요한것은 이러한 방식을 사용하게 되면
해당 PC의 물리적 키보드에 대해서는 전부 받을수도 있도록
코딩될수 있으며
반대로 그 의미를 해석하면 다른 유저의 키보드를
퍼미션이 허용한다면 가로챌수 있게 됩니다.
그리고 키보드 누름 및 떼는 동작을 2가지로 분류해서
코드를 받을수 있으며 동시 입력키도 다중으로 처리 가능하도록
코딩될수 있습니다.
이러한 방식은 정확한 Keyboard처리의 이해가 필요해서
사실 추천하지는 않지만 훨씬 많은것을 할수 있죠.
또한 Ctrl + Alt + Del 키도 먹통이 되게 할수 있는 응용도 있습니다.
중요한것은 Device 를 정확히 시스템에 따라서 선택해야 하는데
좀 어려운 일중에 하나고요.
이부분에 의해서 저레벨의 키보드를 얻을수 있는지 아니면 자신이
Terminal 상에 입력이 발생하는지.. 알수 있는 트릭도 있고요....
암튼 도저히 ESC에 대해 사용해야 하는되지만
해결책에 대한 설명이 리플되지 않는다면
고려해보세요.
ncurses사용을 해본적이 없고 맨날 이방식을 사용한지라
저는 답변을 못드리겠네요.
감사염.
답변에 감사드립니다..
원래 그런 문제가 발생하는 것이었군여..
소스도 감사합니다.
댓글 달기