2015-11-29 27 views
5

Ho letto che ncurses può supportare fino a 256 colori e fino a 32k coppie di colori. Mentre sono riuscito a impostare 256 colori da solo, non riesco a trovare alcuna informazione su come impostare coppie di colori a 32k.Come abilitare coppie di colori 32k in ncurses?

Il risultato di

printf("%d - %d\n", COLORS, COLOR_PAIRS); 

è

256 - 256 

e mentre 2 colori e 2 coppie di colori possono essere sufficienti per i fan più accaniti del terminale, mi piacerebbe sapere come ottenere il maggior numero di colori fuori dalla biblioteca.

risposta

2

Per impostazione predefinita, ncurses6 si configura con --enable-ext-colors attivato. È necessario anche --enable-widec (altrimenti, il tipo cchar_t che memorizza i colori estesi non viene utilizzato). Lo script di configurazione mette in guardia su questo:

checking if you want to use extended colors... yes 
configure: WARNING: This option applies only to wide-character library 

Supponendo che hai costruito la libreria con i colori estesi (e caratteri di larghezza), è grado di visualizzare fino a 256 colori e fino a 32767 coppie di colori (il valore massimo in un numero a 16 bit con segno). Dopodiché, dipende dalla descrizione del terminale che stai usando (e dall'emulatore di terminale). La maggior parte degli emulatori di terminale in esecuzione in X Windows può visualizzare 256 colori. Al di fuori di X, non è chiaro che ci sia una maggioranza.

ncurses ha ragionevolmente descrizioni accurate terminali per ciascuno di questi (e non, utilizzando TERM=xterm-256color non è la risposta per ciascuno, perché le chiavi speciali e altre caratteristiche generalmente differiscono da xterm: la Domanda Why not just use TERM set to "xterm"? vale anche per xterm-256color).

Ecco uno screenshot che mostra xterm l'esecuzione del programma ncurses di prova (da ncurses-examples) per i colori larghi:

enter image description here

2

Una coppia di colori in ncurses è in realtà una combinazione di un colore di primo piano e un colore di sfondo. È possibile manipolarli con color_pair (manuale pagina here). Ci sono 32.768 combinazioni in quanto ci sono 256 combinazioni per il foreground e lo stesso per lo sfondo, ma contando rosso + blu (per esempio) come blu + rosso, ci sono 256x256/2 = 32.768 combinazioni.

È quindi possibile utilizzare coppie di primo piano + sfondo con un motivo a scacchiera (ad esempio ░░░░░░░░░░░░) per produrre più colori. Vedi per es. here.

Penso che ci possa essere un malinteso inerente alla domanda. Dalla pagina manuale:

Questo [Linux] attuazione tornerà ERR su tentativi di utilizzare valori di colore fuori del campo 0 a COLORS-1 (tranne per l'estensione colori predefiniti), oppure utilizzare coppie di colori fuori della gamma 0 a COLOR_PAIR-1.

Cosa che sta dicendo è che è possibile utilizzare solo COLOR_PAIR coppie di colori subito (cioè disponibili per l'uso tramite init_pair()) - sulla vostra implementazione che è 256. Bu Ci sono ancora 32.768 coppie di colori disponibili - solo non tutte in una volta tramite init_pair(). Questo è il modo in cui lo capisco comunque.

+0

Questo non è quello che ho chiesto. So che ci sono 32k combinazioni di colori, non era questa la domanda. Era una domanda sulla variabile COLOR_PAIRS, che specifica il numero di coppie di colori differenti supportate. Il valore predefinito è misero 256, e ho letto da qualche parte che può essere impostato su 32k, ma non so come. – redspah

+0

@redspah: leggi di nuovo questa risposta. –

+0

@LightnessRacesinOrbit Lemme prova a spiegarmi di nuovo. Questa non è una domanda sulle possibili coppie di colori, si tratta di aumentare la dimensione del buffer che contiene le coppie definite con init_pair(). Al momento, è impostato su 256, il che significa che possono essere definite solo 256 coppie di colori in qualsiasi momento e, mentre sei libero di ridefinirle, non otterrai più di 256 coppie. Sto cercando un metodo per cambiare la dimensione di quel buffer, in modo che ci possa essere posto per 32k coppie diverse da definire allo stesso tempo. – redspah