문제

이것은 두 개의 스크립트에 대한 이야기이며 이전 질문.

두 스크립트가 있습니다 http://gist.github.com/50692. ANSI.RB 스크립트는 256 개의 배경색에 256 개의 색상을 모두 표시합니다. ncurses.rb 스크립트는 256 개의 전경 색상을 모두 표시하지만 배경은 기본 16을 표시 한 다음 깜박임 및 리버스 비디오와 같은 다양한 속성을 순환하는 것 같습니다.

그래서 무엇을 제공합니까? 이것은 색상 쌍에 서명 된 정수를 사용하는 ncures의 버그입니까? (예 : 'tput colors'는 256이라고 말하지만 'tput pairs'는 32767이라고 말합니다. 랩.

도움이 되었습니까?

해결책

그 이유는 Debian 및 Amazon AMI 사용을 포함한 대부분의 분포가 포함 된 현재 버전을 포함하는 NCURSE PRE ABI 6을 포함하기 때문입니다. COLOR_PAIR(n) 256 이상의 정의 된 쌍을 참조 할 수 없습니다. COLOR_PAIR(n) 유형입니다 cchar_t . 낮은 8 비트는 컬러 쌍을 선택하고 나머지는 비트 플래그로 취급됩니다. OR특정 터미널 속성에 대한 ED. 그렇기 때문에 샘플 코드에서 쌍 번호 255 이상으로 이동하려고 할 때 깜박임, 역, 밑줄 등이 나타납니다.

이것은 불행한 일이며, 나는 내 프로그램에서 큐를 사용하여 사용을 사용하여 색상을 정의 할 계획입니다. init_pair() 그리고 가장 최근에 사용 된 쌍을 타협으로 덮어 씁니다. 나는 NCURSES 관리자 인 Thomas Dickey에게 NCURSES 밖을 일시적으로 밟아 원시 터미널 코드를 작성한 다음 NCURSES로 돌아갈 수있는 방법이 있는지 묻습니다. 이것은 그의 대답이었습니다.

기본적으로 스크린 최적화를 잊어 버리고 terminfo (3)에 나열된 기능을 사용하여 자신의 도면을 수행해야합니다.

NCURSES에서 일시적으로 종료 할 수 있지만 화면을 다시 칠해야합니다. 그렇지 않으면 NCURSES는 화면의 내용과 커서의 위치에 대해 혼란 스러울 것입니다.

이 솔루션은 너무 많은 함정을 나타내는 것처럼 보이지만 NCurses 프로그램에서 256 개 이상의 동시 쌍이 필요하다면 (역 속 속성으로 가짜를 계산할 수 없음) 이것이해야 할 일입니다.

다른 팁

루비를 전혀 알지 못하므로 작업 예제를 제공 할 수는 없지만 Ncurses.rb 스크립트는 ANSI.RB 스크립트보다 훨씬 짧다는 것을 알려야합니다.

색상을 설정하지 않으므로 깜박임 밑줄, 대담한 등과 같은 속성에 의해 제공되는 변형으로 기본 16 색상 팔레트를 반복하는 것입니다.

사용해야합니다 int init_color(short color, short r, short g, short b) RGB 값 (0-1000)으로 색 인덱스를 초기화 한 다음 표시에 사용할 색상 쌍을 int init_pair(short pair, short f, short b) 전화하기 전에 COLOR_PAIR(n).

이식성을 위해 확인해야합니다 bool has_colors(void) 그리고 bool can_change_color(void)

내 시스템에서는 ncurses의 남자 페이지가 귀중합니다.

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