Perché le ncurses usano le coppie di colori?

1

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)?

    
posta Lawful Lazy 14.11.2016 - 23:35
fonte

1 risposta

2

ncurses usa l'approccio della coppia di colori perché curses l'ha usato, e curses è stato costruito su termcap che già lo utilizzava come questo.

La radice di tutto questo inizia prima che le sequenze di escape ANSI diventassero diffuse: termcap originario del 1978 e doveva supportare come il più possibile di terminali esistenti e requisiti specifici del venditore a quella data, e le sequenze ansi sono state adottate come standard nel 1979, e tale transizione non avviene durante la notte.

Quindi la ragione principale è certamente storica, cioè trovare un concetto che funzioni con la maggior parte dei terminali in circolazione.

Non conosco molto bene l'interno di termcap e dei suoi discendenti. Ma potevo immaginare che la condivisione di una console tra diversi processi avrebbe potuto avere un ruolo nel design. L'uso di una coppia di colori consente di cambiare più facilmente il contesto tra i processi per ripristinare i colori di primo piano e di sfondo correnti utilizzati dal processo corrente.

    
risposta data 15.11.2016 - 01:17
fonte

Leggi altre domande sui tag