Default colour as foreground colour

In the default colour setup (white on black), white could only
with great difficulty be used as customized foreground colour,
because the colour pair COLR_CUSTOM then was identical to
COLR_DEFAULT (default on default). This made it impossible to
distinguish the selected element in lists.

The patch turns on the video attribute bold when default is chosen
as foreground colour.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen 2017-12-07 16:36:01 +01:00 committed by Lukas Fleischer
parent 95c5d576fa
commit e733d09ea0
4 changed files with 24 additions and 4 deletions

View File

@ -675,7 +675,11 @@ enum move {
YEAR_NEXT
};
/* Available color pairs. */
/*
* Available color pairs.
* The numbering must agree with
* the colour numbers 1-6, see custom.c.
*/
enum {
COLR_RED = 1,
COLR_GREEN,

View File

@ -263,6 +263,7 @@ static int config_parse_color_theme(void *dummy, const char *val)
if (!config_parse_color_pair(&color1, &color2, val))
return 0;
init_pair(COLR_CUSTOM, color1, color2);
custom_init_attr();
return 1;
}

View File

@ -58,7 +58,13 @@ static struct attribute attr;
*/
void custom_init_attr(void)
{
attr.color[ATTR_HIGHEST] = COLOR_PAIR(COLR_CUSTOM);
short col_fg;
pair_content(COLR_CUSTOM, &col_fg, NULL);
attr.color[ATTR_HIGHEST] =
(col_fg == -1 || col_fg == 255) ?
COLOR_PAIR(COLR_CUSTOM) | A_BOLD :
COLOR_PAIR(COLR_CUSTOM);
attr.color[ATTR_HIGH] = COLOR_PAIR(COLR_HIGH);
attr.color[ATTR_MIDDLE] = COLOR_PAIR(COLR_RED) | A_BOLD;
attr.color[ATTR_LOW] = COLOR_PAIR(COLR_CYAN);
@ -371,6 +377,7 @@ display_color_config(struct window *cwin, int *mark_fore, int *mark_back,
if (colr_back == 255)
colr_back = -1;
init_pair(COLR_CUSTOM, colr_fore, colr_back);
custom_init_attr();
} else {
/* Retrieve the actual color theme. */
pair_content(COLR_CUSTOM, &colr_fore, &colr_back);
@ -379,7 +386,8 @@ display_color_config(struct window *cwin, int *mark_fore, int *mark_back,
|| (colr_fore == DEFAULTCOLOR_EXT)) {
*mark_fore = NBUSERCOLORS;
} else {
for (i = 0; i < NBUSERCOLORS + 1; i++)
for (i = 0; i < NBUSERCOLORS; i++)
/* WARNING. Colour pair number used as colour number. */
if (colr_fore == colr[i])
*mark_fore = i;
}
@ -388,7 +396,8 @@ display_color_config(struct window *cwin, int *mark_fore, int *mark_back,
|| (colr_back == DEFAULTCOLOR_EXT)) {
*mark_back = SIZE - 1;
} else {
for (i = 0; i < NBUSERCOLORS + 1; i++)
for (i = 0; i < NBUSERCOLORS; i++)
/* WARNING. Colour pair number used as colour number. */
if (colr_back ==
colr[NBUSERCOLORS + 1 + i])
*mark_back =

View File

@ -669,6 +669,12 @@ print_bool_option_incolor(WINDOW * win, unsigned option, int pos_y,
EXIT(_("option not defined"));
}
/*
* Possibly nested custom_apply_attr() calls. Turn
* custom_apply_attr(ATTR_HIGHEST) off explicitly,
* while it may have other attributes besides the colour.
*/
custom_remove_attr(win, ATTR_HIGHEST);
custom_apply_attr(win, color);
mvwaddstr(win, pos_y, pos_x, option_value);
custom_remove_attr(win, color);