]> granicus.if.org Git - neomutt/commitdiff
menu: fix the thread tree color
authorFabrice Bellet <fabrice@bellet.info>
Wed, 10 May 2017 16:05:17 +0000 (18:05 +0200)
committerRichard Russon <rich@flatcap.org>
Wed, 5 Jul 2017 11:58:48 +0000 (12:58 +0100)
The background tree color is really meaningless as it mixes with the
background color of indexes subject in unpleasant ways. We prefer to
create a new color based on the tree foreground color only.

color.c
menu.c
protos.h

diff --git a/color.c b/color.c
index f90e2836e0c4075531cbeef50f110ad86c8eaeb6..ab9c50e6ce6ea1da2ec5ec9075dee78946a9cc77 100644 (file)
--- a/color.c
+++ b/color.c
@@ -313,6 +313,45 @@ int mutt_alloc_color(int fg, int bg)
   return (COLOR_PAIR(p->index));
 }
 
+static int mutt_lookup_color(short pair, short *fg, short *bg)
+{
+  struct ColorList *p = ColorList;
+
+  while (p)
+  {
+    if (COLOR_PAIR(p->index) == pair)
+    {
+      if (fg)
+        *fg = p->fg;
+      if (bg)
+        *bg = p->bg;
+      return 0;
+    }
+    p = p->next;
+  }
+  return -1;
+}
+
+int mutt_combine_color(int fg_attr, int bg_attr)
+{
+  short fg, bg;
+
+  fg = bg = COLOR_DEFAULT;
+  mutt_lookup_color(fg_attr, &fg, NULL);
+  mutt_lookup_color(bg_attr, NULL, &bg);
+  if ((fg == COLOR_DEFAULT) && (bg == COLOR_DEFAULT))
+    return A_NORMAL;
+#ifdef HAVE_USE_DEFAULT_COLORS
+  if (!option(OPTNOCURSES) && has_colors() &&
+      ((fg == COLOR_DEFAULT) || (bg == COLOR_DEFAULT)) && use_default_colors() != OK)
+  {
+    mutt_error(_("default colors not supported."));
+    return A_NORMAL;
+  }
+#endif
+  return mutt_alloc_color(fg, bg);
+}
+
 void mutt_free_color(int fg, int bg)
 {
   struct ColorList *p = NULL, *q = NULL;
diff --git a/menu.c b/menu.c
index e87f2a5f23101736d0f3679a17e2ea34091dba58..3f6d6aaed4f668671102c4218c301f4ba00ac1c6 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -102,7 +102,15 @@ static void print_enriched_string(int index, int attr, unsigned char *s, int do_
     if (*s < MUTT_TREE_MAX)
     {
       if (do_color)
+#if defined(HAVE_COLOR) && defined(HAVE_USE_DEFAULT_COLORS)
+        /* Combining tree fg color and another bg color requires
+         * having use_default_colors, because the other bg color
+         * may be undefined. */
+        ATTRSET(mutt_combine_color(ColorDefs[MT_COLOR_TREE], attr));
+#else
         SETCOLOR(MT_COLOR_TREE);
+#endif
+
       while (*s && *s < MUTT_TREE_MAX)
       {
         switch (*s)
index e229c7a05d744f66d4aaab9c4f847cf9a83c41bb..7ea4fa35f64a5dbdd3ecb4e961f7768f1bef3504 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -256,6 +256,7 @@ int mutt_alias_complete(char *s, size_t buflen);
 void mutt_alias_add_reverse(struct Alias *t);
 void mutt_alias_delete_reverse(struct Alias *t);
 int mutt_alloc_color(int fg, int bg);
+int mutt_combine_color(int fg_attr, int bg_attr);
 int mutt_any_key_to_continue(const char *s);
 char *mutt_apply_replace(char *dbuf, size_t dlen, char *sbuf, struct ReplaceList *rlist);
 int mutt_buffy_check(bool force);