Vra

Dit is 'n verhaal van twee skrifte en is verwant aan 'n vorige vraag .

Die twee skrifte is by http://gist.github.com/50692 . Die ansi.rb script vertoon al 256 kleure op al 256 agtergrond kleure. Die ncurses.rb script vertoon al 256 voorgrond kleure, maar die agtergrond vertoon die basiese 16 en dan lyk te ry deur verskillende eienskappe soos flikkerende en video te keer.

Wat gee? Is dit die fout in ncurses dat dit gebruik 'n getekende heelgetal vir kleur pare? (Dit wil sê 'tput kleure "sê 256, maar' tput pare" sê 32767 plaas 65536) Dit lyk asof dit die geval was in die eerste helfte van die kleure pare sou goed vertoon, maar die tweede helfte sou herhaal of kry in die eienskappe as die int vou.

Was dit nuttig?

Oplossing

Die rede hiervoor is omdat ncurses pre ABI 6, wat die huidige weergawe wat die meeste uitkerings insluitend Debian en Amazon AMI gebruik, COLOR_PAIR(n) kan nie enige gedefinieer pare verwysing hierbo 256. Dit is omdat die argument te COLOR_PAIR(n) is van tipe cchar_t sluit. Die laer 8 stukkies kies die kleur pair, en die res word as bitflags ORed in vir spesifieke terminale eienskappe. Dit is die rede waarom sien jy knip, omgekeerde, onderstreep, ens wanneer jy probeer om te gaan buite paar nommer 255 in jou voorbeeld kode.

Dit is redelik ongelukkig, en Ek is van plan om 'n tou te gebruik in my program om kleure op die fly met behulp van init_pair() definieer en net vervang die minste onlangs gebruik pare as 'n kompromie. Ek het die ncurses onderhouer Thomas Dickey vra of daar 'n manier om buite ncurses stap tydelik te rou terminale kodes skryf en dan terug te keer na ncurses. Dit was sy antwoord:

  

In wese wat jy wil hê om te vergeet van die skerm-optimalisering en net doen   jou eie tekening met behulp van die in terminfo (3), bv gelys funksies,   tigetstr, mvcur, tputs.

     

Jy kan tydelik verlaat van ncurses, maar dan moet die verf   skerm. Anders ncurses sal verward oor wat op die skerm wees   en waar die wyser is.

Hierdie oplossing lyk te veel slaggate te bied, maar as jy absoluut meer as 256 gelyktydige pare moet in 'n ncurses program (nie die tel van pare jy kan fake met die omgekeerde kenmerk), dan is dit is wat jy hoef te doen.

Ander wenke

Ek weet nie Ruby glad, so kan nie 'n werkende voorbeeld, maar die ncurses.rb script moet jy iets in dat dit so baie korter as die ansi.rb script vertel.

Jy is nie die opstel van die kleure, so dit is net herhaling van die standaard 16 kleur palet met variasies wat deur die eienskappe soos knip onderstreep, vet, ens.

Jy moet int init_color(short color, short r, short g, short b) gebruik om 'n kleur indeks met die RGB waardes (0-1000) inisialiseer. En dan stel die kleur pare te gebruik vir vertoning met int init_pair(short pair, short f, short b) voordat hy COLOR_PAIR(n)

Vir port jy moet bool has_colors(void) en bool can_change_color(void) check

Op my stelsel die man bladsye vir ncurses is van onskatbare waarde.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top