watch: fixing default color handling

Previously the default background color was expected
to be always black and the default foreground color
was expected to be always white. This commit extends
the group of color pairs with pairs containing default
colors.
This commit is contained in:
Jaromir Capik 2014-09-08 15:50:24 +02:00
parent 0160bdb559
commit e428a27af9

27
watch.c
View File

@ -111,11 +111,19 @@ static int attributes;
static int fg_col;
static int bg_col;
static void reset_ansi(void)
{
attributes = A_NORMAL;
fg_col = 0;
bg_col = 0;
}
static void init_ansi_colors(void)
{
short ncurses_colors[] = {
COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE,
COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE
-1, COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW,
COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE
};
nr_of_colors = sizeof(ncurses_colors) / sizeof(short);
@ -123,11 +131,7 @@ static void init_ansi_colors(void)
for (bg_col = 0; bg_col < nr_of_colors; bg_col++)
for (fg_col = 0; fg_col < nr_of_colors; fg_col++)
init_pair(bg_col * nr_of_colors + fg_col + 1, ncurses_colors[fg_col], ncurses_colors[bg_col]);
/* default settings */
attributes = A_NORMAL;
fg_col = COLOR_WHITE;
bg_col = COLOR_BLACK;
reset_ansi();
}
@ -137,9 +141,7 @@ static void set_ansi_attribute(const int attrib)
case -1: /* restore last settings */
break;
case 0: /* restore default settings */
attributes = A_NORMAL;
fg_col = COLOR_WHITE;
bg_col = COLOR_BLACK;
reset_ansi();
break;
case 1: /* set bold / increased intensity */
attributes |= A_BOLD;
@ -183,9 +185,9 @@ static void set_ansi_attribute(const int attrib)
break;
default:
if (attrib >= 30 && attrib <= 37) { /* set foreground color */
fg_col = attrib - 30;
fg_col = attrib - 30 + 1;
} else if (attrib >= 40 && attrib <= 47) { /* set background color */
bg_col = attrib - 40;
bg_col = attrib - 40 + 1;
}
}
@ -469,6 +471,7 @@ static int run_command(char *restrict command, char **restrict command_argv)
if ((p = fdopen(pipefd[0], "r")) == NULL)
xerr(5, _("fdopen"));
reset_ansi();
for (y = show_title; y < height; y++) {
int eolseen = 0, tabpending = 0, tabwaspending;
set_ansi_attribute(-1);