gnu readline 사용; 같은 프로그램에서 NCURSE를 추가하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/691652

  •  22-08-2019
  •  | 
  •  

문제

제목은 내 실제 목표보다 조금 더 구체적입니다.

나는 GNU READLINE을 사용하는 명령 줄 프로그램이 있습니다. 현재 프로그램의 출력은 사용자의 입력과 산재 해 나타나는 것처럼 보이지만 때로는 괜찮지 만 출력은 비동기식입니다 (입력 명령에 대한 응답으로 네트워크 연결을 통해 제공됨) 새 입력을 입력하고 있습니다).

이 프로그램에 기능을 추가하고 싶습니다 : 출력에 대한 별도의 "창". 나는 이것에 ncures를 사용하는 것에 대해 생각했다. 그러나 그것은에서 나타납니다 ncurses faq 두 라이브러리는 함께 사용하기 쉽지 않습니다.

사용을 고려할 수 있습니다 편집자 또는 Tecla Readline 대신 대신, 그 중 하나가 내 문제를 해결할 수 있다면 분명하지 않습니다. 또한 기능 (텍스트 모드 Wind

아, 그리고 컬러 텍스트에 대한 지원은 보너스 포인트를 얻을 수 있습니다. 나는 Readline으로 그렇게 할 수있을 것 같아서 별도의 관심사일지도 모르지만 내 문제에 대한 해결책으로 인해 출력에 약간의 색상을 추가 할 수있게되면 훨씬 좋습니다.

Ubuntu Hardy (Linux 2.6)를 사용하고 있습니다.

도움이 되었습니까?

해결책

나는 약간의 검색을했고, 당신이 운이없는 것처럼 보인다.

NCURSES 대안의 경우 속어, 영원 그리고 터보 비전. 속어는 단순한 화면 처리 이상의 것이므로 더 복잡하지만 아마도 당신의 목적에 사용될 수 있습니까?. Newt는 화면 처리를 사용하며 훨씬 간단하지만 너무 간단하고 단일 스레드 모드가 목적을 위해 생각합니다.

Turbo Vision은 Borland의 텍스트 모드 그래픽 라이브러리로 80 년대 후반에서 90 년대 초의 모든 도구에서 사용합니다. Borland는 이러한 종류의 시장이 줄어들 때 소스 코드를 발표했으며 이제 Linux의 포트가 있습니다 (Side Note, 이 프로젝트 자체 터보 비전 구현을 작성한 것 같습니다). That port is not dead (there have been some cvs updates this year which compiled fine (the older releases did not)), but none of the TV examples I found were up to date and I did only got a few of them to compile before 나머지를 포기합니다. TV는 사용하기에 멋진 환경 이었기 때문에 이것은 약간 수치스러운 일입니다. TV는 btw c ++입니다 (그리고 당신이 c를 사용하고 있다고 가정합니다).

Readline의 대안을 위해서 libkinput, NCURSES와 함께 작동 할 수 있습니다 (NCURSES의 Terminfo를 사용할 수 있다고 말하지만 NCURSES 사용량과 공동 존재할 수 있는지 확실하지 않습니다)?

아마 rlwrap?

다른 팁

이제 Github에 간단한 예제 프로그램을 작성했습니다. https://github.com/ulfalizer/readline-and-ncurses.

원활하고 효율적인 터미널 크기 조정 및 멀티 바이트/결합/넓은 문자를 지원합니다. 코드에는 유용한 의견이 있습니다.

아래 스크린 샷 :

Screenshot of program combining ncurses and readline

이것은 몇 시간 동안 내 머리를 두드리게했기 때문에 사람들이 고통을 덜어주기 위해 :

Ncurses의 내장을 사용하는 경우 SIGWINCH 핸들러 KEY_RESIZE, Readline이 설정한다는 점에 유의하십시오 LINES 그리고 COLUMNS 기본적으로 환경 변수. 동적 크기 계산을 무시합니다 (보통 ioctl() TIOCGWINSZ) NCURSES는 그렇지 않으면 단자를 크기를 조정 한 후에도 초기 터미널 크기를 계속 얻을 수 있습니다.

설정으로 방지 할 수 있습니다 rl_change_environment 에게 0 readline을 초기화하기 전에.

업데이트:

다음은 Readline 소스에서 얻은 몇 가지 추가 정보입니다.

Readline 's SIGWINCH 처리 코드 (IF가 사용됩니다 rl_catch_sigwinch IS 1) 업데이트됩니다 LINES 그리고 COLUMNS, NCURSE에 충분한 것 같습니다. 그러나 대체 readline 인터페이스를 사용할 때 (읽기 라인을 NCURSES와 결합 할 때 가장 의미가 있음) 신호 처리기 ( SIGWINCH) 각각의 지속 시간 동안 만 설치됩니다. rl_callback_read_char() 통화, 두 개의 통화 사이에서 터미널 크기 조정을 의미합니다. rl_callback_read_char() Readline에서는 보이지 않습니다.

나는 당신이 내 프로그램에서 묘사 한 것을 달성했습니다.

http://dpc.ucore.info/lab:xmppconsole

다음은 io를 처리하는 파일입니다.

http://github.com/dpc/xmppconsole/blob/master/src/io.c

따라서 GDB는 readline과 ncures를 모두 사용합니다. 이 작업에 관심이 있으시면 구현을 확인하는 것이 좋습니다. http://sourceware.org/git/?p=gdb.git ;A=Blob ;f=gdb/tui/tui-io.c

어떤 버전을 시도했는지 잘 모르겠습니다. 오늘 (2012.09.14) 현재로서는 매우 간단합니다. 맞춤 기능을 다음과 같은 기능 포인터에 연결하면됩니다.

rl_getch_function
rl_redisplay_function
rl_completion_display_matches_hook

나는 합리적인 일을했다 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top