2015-11-29 5 views
5

Ich habe gelesen, dass ncurses bis zu 256 Farben und bis zu 32k Farbpaaren unterstützen kann. Während ich es schaffte, 256 Farben selbst zu erstellen, kann ich keine Informationen darüber finden, wie man 32k Farbpaare einrichtet.Wie 32k Farbpaare in Ncurses aktivieren?

Das Ergebnis

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

ist

256 - 256 

und während 2 Farben und 2 Farbpaare können für Hardcore-Terminal Fans genug sein, würde ich gerne wissen, wie sich die Farben erhalten aus der Bibliothek.

Antwort

2

Standardmäßig konfiguriert ncurses6 mit --enable-ext-colors aktiviert. Sie benötigen auch (andernfalls wird der cchar_t Typ, der erweiterte Farben speichert, nicht verwendet). Das Konfigurationsskript warnt dazu:

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

Unter der Annahme, dass Sie die Bibliothek mit erweiterten Farben (und breiten Zeichen) gebaut, es ist fähig von bis 256 Farben und bis zu 32.767 Farbpaare (der Maximalwert in einer vorzeichenbehafteten 16-Bit-Nummer). Danach hängt es von der Terminalbeschreibung ab, die Sie verwenden (und dem Terminalemulator). Ein Großteil der in X Windows ausgeführten Terminalemulatoren kann 256 Farben anzeigen. Außerhalb von X ist nicht klar, dass es eine Mehrheit gibt.

ncurses hat einigermaßen genaue Terminalbeschreibungen für jeden dieser (und nein, TERM=xterm-256color Verwendung ist nicht die Antwort für jeden, da spezielle Schlüssel und andere Merkmale im Allgemeinen von xterm unterscheiden: die FAQ Why not just use TERM set to "xterm"? gilt auch für xterm-256color).

Hier ist ein Screenshot zeigt xterm das ncurses Testprogramm läuft (von ncurses-examples) für breite Farben:

enter image description here

2

Ein Farbpaar in ncurses ist eigentlich eine Kombination aus einer Vordergrundfarbe und einer Hintergrundfarbe. Sie können sie mit color_pair (Handbuchseite here) manipulieren. Es gibt 32.768 Kombinationen, da es 256 Kombinationen für den Vordergrund und die gleichen für den Hintergrund gibt, aber z. B. Rot + Blau als Blau + Rot zählt, gibt es 256x256/2 = 32.768 Kombinationen.

Sie können dann Vorder- und Hintergrundpaare mit einem Schachbrettmuster (z. B. ░░░░░░░░░░░░) verwenden, um mehr Farben zu erzeugen. Siehe z.B. here.

Ich denke, dass es in Ihrer Frage ein Missverständnis geben kann. Aus dem Handbuch Seite:

Diese [Linux] Implementierung ERR auf Versuche zurück Farbwerte außerhalb des Bereichs 0-COLORS-1 (mit Ausnahme der Standardfarben-Erweiterung) zu verwenden, oder Farbpaare außerhalb des Bereichs 0 verwenden zu COLOR_PAIR-1.

Was das sagt ist, dass Sie nur COLOR_PAIR Farbpaare auf einmal verwenden können (dh verfügbar über init_pair() verwenden) - auf die Implementierung, die 256. BU Es sind noch 32.768 Farbpaare verfügbar - nur nicht alle auf einmal über init_pair(). So verstehe ich es jedenfalls.

+0

Das ist nicht das, was ich gefragt. Ich weiß, dass es 32k Farbkombinationen gibt, das war nicht die Frage. Es war eine Frage über die Variable COLOR_PAIRS, die angibt, wie viele verschiedene Farbpaare unterstützt werden. Der Standardwert ist 256, und ich habe irgendwo gelesen, dass es auf 32k gesetzt werden kann, aber ich weiß nicht wie. – redspah

+0

@redspah: Lesen Sie diese Antwort erneut. –

+0

@LightnessRacesinOrbit Lemme versuche mich nochmal zu erklären. Dies ist keine Frage über mögliche Farbpaare selbst, es geht darum, die Größe des Puffers zu erhöhen, der Paare enthält, die mit init_pair() definiert wurden. Im Moment ist es auf 256 gesetzt, was bedeutet, dass zu jedem Zeitpunkt nur 256 Farbpaare definiert werden können. Während Sie diese neu definieren können, werden Sie nicht mehr als 256 Paare erhalten. Ich suche nach einer Methode, um die Größe dieses Puffers zu ändern, so dass es Platz für 32k verschiedene Paare geben kann, die gleichzeitig definiert werden. – redspah