ncurses multi colors on screen

c, command-line, ncurses, window

Solution

Here's a working version:

#include <curses.h>

int main(void) {
    initscr();
    start_color();

    init_pair(1, COLOR_BLACK, COLOR_RED);
    init_pair(2, COLOR_BLACK, COLOR_GREEN);

    attron(COLOR_PAIR(1));
    printw("This should be printed in black with a red background!\n");

    attron(COLOR_PAIR(2));
    printw("And this in a green background!\n");
    refresh();

    getch();

    endwin();
}

Notes:

- you need to call `start_color()` after `initscr()` to use color.

- you have to use the `COLOR_PAIR` macro to pass a color pair allocated with `init_pair` to `attron` et al.

- you can't use color pair 0.

- you only have to call `refresh()` once, and only if you want your output to be seen at that point, and you're not calling an input function like `getch()`.

This HOWTO is very helpful.

Problem

I want to make a menu with `ncurses.h` and more than one color. I mean something like this: ``` ┌────────────────────┐ │░░░░░░░░░░░░░░░░░░░░│ <- color 1 │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ <- color 2 └────────────────────┘ ``` But if I use `init_pair()`, `attron()`and `attroff()` the color of the whole screen is the same, and not like I've expected. ``` initscr(); init_pair(0, COLOR_BLACK, COLOR_RED); init_pair(1, COLOR_BLACK, COLOR_GREEN); attron(0); printw("This should be printed in black with a red background!\n"); refresh(); attron(1); printw("And this in a green background!\n"); refresh() sleep(2); endwin(); ``` What's wrong with this code? Thanks for every answer!

Original source