値COLOR_BLUEをrgb値(1000、0、0)に設定して、テキストブロックの背景を赤に設定しようとしています。Gnomeの「ターミナル」アプリケーションを使用する場合は背景が正しい(赤)が、KDEの「Konsole」を使用する場合は正しくない(青)。どうしてこれなの?次のコードは、コンパイル行を使用してLinuxでコンパイルされます。
g++ filename.cpp -lcurses
次の方法でTERMタイプをxterm-256colorに設定しました。
export TERM=xterm-256color
コードは次のとおりです。
#include <ncurses.h>
#include <cassert>
#include <csignal>
static bool stop = false;
void sigAbortHandler(int _sig)
{
stop = true;
}
int main(int _argc, char **_argv)
{
signal(SIGABRT, &sigAbortHandler);
WINDOW *window = initscr();
if (!has_colors())
{
delwin(window);
endwin();
perror("You must enable colors in your console");
}
if (!can_change_color())
{
delwin(window);
endwin();
perror("Error: unable to change colors, "
"trying setting your TERM type to enable colors");
}
assert(start_color() == OK);
keypad(stdscr, TRUE);
cbreak();
noecho();
curs_set(0);
nodelay(window, true);
int background = COLOR_BLUE;
assert(init_color(background, 1000, 0, 0) == OK);
int foreground = 2;
assert(init_color(foreground, 0, 0, 0) == OK);
int pair = 1;
assert(init_pair(pair, foreground, background) == OK);
assert(wattron(window, COLOR_PAIR(pair)) == OK);
short r, g, b;
color_content(background, &r, &g, &b);
assert(mvwprintw(window, 10, 10, "color content: %d, %d, %d", r, g, b) == OK);
assert(wrefresh(window) == OK);
assert(wattroff(window, COLOR_PAIR(pair)) == OK);
while (!stop)
{
}
delwin(window);
endwin();
return 0;
}