2012-04-03 7 views
2

사용자로부터 입력을받는 간단한 UI에 ncurses을 사용하고 있습니다. 입력은 1 행 높이의 창이며 모두 커서입니다. 현재 wgetnstr(inputwindow, input, inputlen)을 사용 중입니다.ncurses와 함께 stdin 사용

필자가 원하는 것은 readline과 마찬가지로 입력 행을 편집 할 수있게하는 것입니다. 즉,^W (^ U 작품 btw)를 사용할 수 있고, 버퍼로 돌아가서 변경 등을 할 수 있습니다. 입력 기록을 보관하고 '위쪽'화살표를 사용하여 액세스 할 수 있다면 , 그것도 좋을 것이다.

그러나 나는 ncurses이 제공하는 기능 이외에는 아무것도 작동하지 못했습니다. 내게는 위의 이점을 얻으려면 inputwindow을 떨어 뜨리는 것이 좋습니다. 그러나 가능한지 확실하지 않습니다.

그래서

  • 그것은 readline 사용하거나 ncurses 그것이 제공하는 입력 기능을 이용하여 이러한 기능을 갖는 것이 가능하다? 및/또는
  • curses 창 아래에 빈 줄을 입력하면 사용자가 stdin을 직접 사용하여 입력 할 수 있습니다 (즉, 모든 일반 읽기 입력 함수이므로 readline도 직접 입력 할 수 있습니다) ?

이러한 것들이 가능하다면, 간단한 코드는 훌륭하지만 지침과 포인터도 훌륭합니다. 그렇지 않다면 시간을 낭비하지 말고 알아두면 좋을 것입니다.

+0

[여기] (http://stackoverflow.com/questions/1706678/ncurses-and-stdin-blocking-problem)도 비슷한 질문이지만 실제로는 그렇지 않습니다. – c00kiemon5ter

+0

아마도 내가 원하는 것 중 가장 좋은 점은 클라이언트가 입력을 처리하는 방법입니다. 예. 'irssi'와'weechat'. 나는 조금 파다. .. – c00kiemon5ter

답변

1

ncurses는 전체 화면을 제어하려고합니다. ncurses 입력/출력을 non-ncurses 입/출력과 섞는 것은 가능할 수도 있지만 시도하지 않는 것이 좋습니다.

ncurses 프로그램에서 readline 스타일 입력이 필요하면 직접 구현해야합니다.

form 라이브러리 (ncurses에 포함)를 사용하면 편집 가능한 필드가있는 양식을 정의 할 수 있습니다. 자신이 직접 역사를 처리해야합니다. 이 양식들은 panels에 위치하여 화면상의 배치를보다 쉽게 ​​제어 할 수 있습니다.