Sul tuo terminale preferito, il carattere ANSI speciale per il testo rosso è ^[[31m
. Il carattere speciale ANSI per uno sfondo blu è ^[[44m
. Quindi, per avere il testo rosso su sfondo blu sarebbe ^[[31m^[[44mHello World!
.
Tuttavia, la libreria ncurses fa le cose in modo diverso. Invece di avere un singolo carattere in primo piano rosso e un carattere di sfondo blu, hai COLOR_PAIRS
. Quindi, invece di avere un programma come questo:
attron(RED_FG);
attron(BLUE_BG);
printw("Hello World!\n");
attroff(RED_FG); attroff(BLUE_BG); // Turn off the colors
refresh(); // Flush buffer to the screen
Devi fare qualcosa di simile a questo:
init_pair(1, COLOR_RED, COLOR_BLUE); // Remember the number in the beginning!
attron(COLOR_PAIRS(1)); // Put it here!
printw("Hello World!\n");
attroff(COLOR_PAIRS(2)); // Remember to put the pair # here too
refresh();
Non vedo perché ncurses abbia i colori strutturati in questo modo. Quale schema di design stanno usando, e come posso usarlo nel mio programma mentre il colore del primo piano e dello sfondo dovrebbe trasmettere attributi diversi (ad esempio, in un gioco basato su ASCII)?