aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/calcurse.h6
-rw-r--r--src/config.c1
-rw-r--r--src/custom.c15
-rw-r--r--src/utils.c6
4 files changed, 24 insertions, 4 deletions
diff --git a/src/calcurse.h b/src/calcurse.h
index 5bf32cf..d9d4e1e 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -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,
diff --git a/src/config.c b/src/config.c
index c46d718..3221f23 100644
--- a/src/config.c
+++ b/src/config.c
@@ -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;
}
diff --git a/src/custom.c b/src/custom.c
index f528d32..a7ded71 100644
--- a/src/custom.c
+++ b/src/custom.c
@@ -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 =
diff --git a/src/utils.c b/src/utils.c
index c046ad5..2440c44 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -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);