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!