]> granicus.if.org Git - mutt/commitdiff
Prefer bright versions (8-15) of colors for brightXXX backgrounds.
authorS. Gilles <sgilles@math.umd.edu>
Mon, 4 Jan 2016 21:57:40 +0000 (13:57 -0800)
committerS. Gilles <sgilles@math.umd.edu>
Mon, 4 Jan 2016 21:57:40 +0000 (13:57 -0800)
When a bright color is specified as a background, try to use the
bright version of that color, falling back to the A_BLINK method only
on terms which do not support enough colors.

color.c

diff --git a/color.c b/color.c
index a42343adfa07b93893a85e002760cc013ed383bf..6e29603f74c09291d723058a05732bb06bdc8403 100644 (file)
--- a/color.c
+++ b/color.c
@@ -306,13 +306,14 @@ void mutt_free_color (int fg, int bg)
 #ifdef HAVE_COLOR
 
 static int
-parse_color_name (const char *s, int *col, int *attr, int brite, BUFFER *err)
+parse_color_name (const char *s, int *col, int *attr, int is_fg, BUFFER *err)
 {
   char *eptr;
+  int is_bright = 0;
 
   if (ascii_strncasecmp (s, "bright", 6) == 0)
   {
-    *attr |= brite;
+    is_bright = 1;
     s += 6;
   }
 
@@ -334,6 +335,24 @@ parse_color_name (const char *s, int *col, int *attr, int brite, BUFFER *err)
     return (-1);
   }
 
+  if (is_bright)
+  {
+    if (is_fg)
+    {
+      *attr |= A_BOLD;
+    }
+    else if (COLORS < 16)
+    {
+      /* A_BLINK turns the background color brite on some terms */
+      *attr |= A_BLINK;
+    }
+    else
+    {
+      /* Advance the color by 8 to get the bright version */
+      *col += 8;
+    }
+  }
+
   return 0;
 }
 
@@ -615,7 +634,7 @@ parse_color_pair(BUFFER *buf, BUFFER *s, int *fg, int *bg, int *attr, BUFFER *er
 
   mutt_extract_token (buf, s, 0);
 
-  if (parse_color_name (buf->data, fg, attr, A_BOLD, err) != 0)
+  if (parse_color_name (buf->data, fg, attr, 1, err) != 0)
     return (-1);
 
   if (! MoreArgs (s))
@@ -626,7 +645,7 @@ parse_color_pair(BUFFER *buf, BUFFER *s, int *fg, int *bg, int *attr, BUFFER *er
   
   mutt_extract_token (buf, s, 0);
 
-  if (parse_color_name (buf->data, bg, attr, A_BLINK, err) != 0)
+  if (parse_color_name (buf->data, bg, attr, 0, err) != 0)
     return (-1);
   
   return 0;