2009-07-27 3 views
4

에 대한 표준 레서피를 작성하고, 외부에서 편집기/셸/모든 것을 실행 한 다음, 완료되면 ncurses로 다시 드롭합니다. .외부 쉘에 ncurses를 끼워 넣고 키로 뒤죽박죽을 사용합니다

이 ~는 거의 작동합니다. 단, ncurses 이 처음에 몇 번의 키 누르기가 발생하는 것은 분명히 가짜입니다. ncurses는^[와 A가 각각 위로 화살표를 두 번 누르면 을 볼 것이라고 생각합니다.

누구든지이 동작을 전에 보았고 무엇을 마법으로 해결할 것인지를 으로 알 수 있습니까? 도움이된다면 Ruby ncurses 라이브러리입니다.

답변

1

조금 뒤적 거리면서 나는 껍질을 벗기는 솔루션을 발견했다 : stdscr에서 쉘을 꺼낸 후에 키패드 (1)를 명시 적으로 호출한다. 왜이 방법이 효과가 있는지 모르겠지만 그렇습니다. 나는 이유를 설명 할 수 있다면 다른 사람의 대답을 "예"로 표시 할 것입니다. 현재의 작동 원리는 키패드가 일종의 내부 버퍼를 건드리고이를 지우는 것입니다.

스크래치가 :

NCURSES_EXPORT(int) 
keypad(WINDOW *win, bool flag) 
{ 
    T((T_CALLED("keypad(%p,%d)"), win, flag)); 

    if (win) { 
     win->_use_keypad = flag; 
     returnCode(_nc_keypad(SP, flag)); 
    } else 
     returnCode(ERR); 
}
0

그래. 키패드가 없으면 ncurses가 이스케이프 코드를 처리하지 않습니다. 키패드 사람이 페이지에서 :

The keypad option enables the keypad of the user's terminal. If en- 
    abled (bf is TRUE), the user can press a function key (such as an arrow 
    key) and wgetch returns a single value representing the function key, 
    as in KEY_LEFT. If disabled (bf is FALSE), curses does not treat func- 
    tion keys specially and the program has to interpret the escape se- 
    quences itself. If the keypad in the terminal can be turned on (made 
    to transmit) and off (made to work locally), turning on this option 
    causes the terminal keypad to be turned on when wgetch is called. The 
    default value for keypad is false. 

은 종종 내가 ncurses를 프로그램에서 할 첫번째 일은 좋은 키보드 매핑을 사용하는 전화 키패드 (stdscr, TRUE)입니다.

희망이 있습니다.

+0

그래서 여기에서 이해할 수없는 것은 두 건의 키 입력 후에 "수정"되는 이유입니다. –

관련 문제