]> granicus.if.org Git - vim/commitdiff
patch 8.0.0831: with 8 colors the bold attribute is not set properly v8.0.0831
authorBram Moolenaar <Bram@vim.org>
Tue, 1 Aug 2017 16:04:04 +0000 (18:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 1 Aug 2017 16:04:04 +0000 (18:04 +0200)
Problem:    With 8 colors the bold attribute is not set properly.
Solution:   Move setting HL_TABLE() out of lookup_color. (closes #1901)

src/proto/syntax.pro
src/syntax.c
src/terminal.c
src/version.c

index 33b8b80f51b4d6250b93e2620cc310db724cb7b7..a7f6f5484e15e37b00f53d1112e93a715d5727b1 100644 (file)
@@ -23,7 +23,7 @@ void ex_syntime(exarg_T *eap);
 char_u *get_syntime_arg(expand_T *xp, int idx);
 void init_highlight(int both, int reset);
 int load_colors(char_u *name);
-int lookup_color(int idx, int foreground);
+int lookup_color(int idx, int foreground, int *boldp);
 void do_highlight(char_u *line, int forceit, int init);
 void free_highlight(void);
 void restore_cterm_colors(void);
index e026c440031263ec2614da3cdd0dbe09b2d181a8..a4c0340a4a06efa98e45558551faa6e049ba55a2 100644 (file)
@@ -7276,9 +7276,11 @@ static int color_numbers_8[28] = {0, 4, 2, 6,
 /*
  * Lookup the "cterm" value to be used for color with index "idx" in
  * color_names[].
+ * "boldp" will be set to TRUE or FALSE for a foreground color when using 8
+ * colors, otherwise it will be unchanged.
  */
     int
-lookup_color(int idx, int foreground)
+lookup_color(int idx, int foreground, int *boldp)
 {
     int                color = color_numbers_16[idx];
     char_u     *p;
@@ -7300,12 +7302,9 @@ lookup_color(int idx, int foreground)
            /* set/reset bold attribute to get light foreground
             * colors (on some terminals, e.g. "linux") */
            if (color & 8)
-           {
-               HL_TABLE()[idx].sg_cterm |= HL_BOLD;
-               HL_TABLE()[idx].sg_cterm_bold = TRUE;
-           }
+               *boldp = TRUE;
            else
-               HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
+               *boldp = FALSE;
        }
        color &= 7;     /* truncate to 8 colors */
     }
@@ -7837,6 +7836,8 @@ do_highlight(
            }
            else
            {
+               int bold = MAYBE;
+
 #if defined(__QNXNTO__)
                static int *color_numbers_8_qansi = color_numbers_8;
                /* On qnx, the 8 & 16 color arrays are the same */
@@ -7857,7 +7858,17 @@ do_highlight(
                    break;
                }
 
-               color = lookup_color(i, key[5] == 'F');
+               color = lookup_color(i, key[5] == 'F', &bold);
+
+               /* set/reset bold attribute to get light foreground
+                * colors (on some terminals, e.g. "linux") */
+               if (bold == TRUE)
+               {
+                   HL_TABLE()[idx].sg_cterm |= HL_BOLD;
+                   HL_TABLE()[idx].sg_cterm_bold = TRUE;
+               }
+               else if (bold == FALSE)
+                   HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
            }
 
            /* Add one to the argument, to avoid zero.  Zero is used for
index 1423c5f55fb15d5545026cefeb2b4fac033e4e2b..1f235872483de8bc2a2b22f2a140e9720378578b 100644 (file)
@@ -36,7 +36,7 @@
  * that buffer, attributes come from the scrollback buffer tl_scrollback.
  *
  * TODO:
- * - Use "." for current line instead of optional.
+ * - Use "." for current line instead of optional argument.
  * - make row and cols one-based instead of zero-based in term_ functions.
  * - Add StatusLineTerm highlighting
  * - in bash mouse clicks are inserting characters.
@@ -56,6 +56,8 @@
  * - do not store terminal window in viminfo.  Or prefix term:// ?
  * - add a character in :ls output
  * - add 't' to mode()
+ * - When making a change after the job has ended, make the buffer a normal
+ *   buffer; needs to be written.
  * - when closing window and job has not ended, make terminal hidden?
  * - when closing window and job has ended, make buffer hidden?
  * - don't allow exiting Vim when a terminal is still running a job
@@ -71,6 +73,8 @@
  *   conversions.
  * - update ":help function-list" for terminal functions.
  * - In the GUI use a terminal emulator for :!cmd.
+ * - Copy text in the vterm to the Vim buffer once in a while, so that
+ *   completion works.
  */
 
 #include "vim.h"
@@ -1253,7 +1257,7 @@ term_channel_closed(channel_T *ch)
  * First color is 1.  Return 0 if no match found.
  */
     static int
-color2index(VTermColor *color, int foreground)
+color2index(VTermColor *color, int fg, int *boldp)
 {
     int red = color->red;
     int blue = color->blue;
@@ -1265,16 +1269,16 @@ color2index(VTermColor *color, int foreground)
        if (green == 0)
        {
            if (blue == 0)
-               return lookup_color(0, foreground) + 1; /* black */
+               return lookup_color(0, fg, boldp) + 1; /* black */
            if (blue == 224)
-               return lookup_color(1, foreground) + 1; /* dark blue */
+               return lookup_color(1, fg, boldp) + 1; /* dark blue */
        }
        else if (green == 224)
        {
            if (blue == 0)
-               return lookup_color(2, foreground) + 1; /* dark green */
+               return lookup_color(2, fg, boldp) + 1; /* dark green */
            if (blue == 224)
-               return lookup_color(3, foreground) + 1; /* dark cyan */
+               return lookup_color(3, fg, boldp) + 1; /* dark cyan */
        }
     }
     else if (red == 224)
@@ -1282,38 +1286,38 @@ color2index(VTermColor *color, int foreground)
        if (green == 0)
        {
            if (blue == 0)
-               return lookup_color(4, foreground) + 1; /* dark red */
+               return lookup_color(4, fg, boldp) + 1; /* dark red */
            if (blue == 224)
-               return lookup_color(5, foreground) + 1; /* dark magenta */
+               return lookup_color(5, fg, boldp) + 1; /* dark magenta */
        }
        else if (green == 224)
        {
            if (blue == 0)
-               return lookup_color(6, foreground) + 1; /* dark yellow / brown */
+               return lookup_color(6, fg, boldp) + 1; /* dark yellow / brown */
            if (blue == 224)
-               return lookup_color(8, foreground) + 1; /* white / light grey */
+               return lookup_color(8, fg, boldp) + 1; /* white / light grey */
        }
     }
     else if (red == 128)
     {
        if (green == 128 && blue == 128)
-           return lookup_color(12, foreground) + 1; /* high intensity black / dark grey */
+           return lookup_color(12, fg, boldp) + 1; /* high intensity black / dark grey */
     }
     else if (red == 255)
     {
        if (green == 64)
        {
            if (blue == 64)
-               return lookup_color(20, foreground) + 1;  /* light red */
+               return lookup_color(20, fg, boldp) + 1;  /* light red */
            if (blue == 255)
-               return lookup_color(22, foreground) + 1;  /* light magenta */
+               return lookup_color(22, fg, boldp) + 1;  /* light magenta */
        }
        else if (green == 255)
        {
            if (blue == 64)
-               return lookup_color(24, foreground) + 1;  /* yellow */
+               return lookup_color(24, fg, boldp) + 1;  /* yellow */
            if (blue == 255)
-               return lookup_color(26, foreground) + 1;  /* white */
+               return lookup_color(26, fg, boldp) + 1;  /* white */
        }
     }
     else if (red == 64)
@@ -1321,14 +1325,14 @@ color2index(VTermColor *color, int foreground)
        if (green == 64)
        {
            if (blue == 255)
-               return lookup_color(14, foreground) + 1;  /* light blue */
+               return lookup_color(14, fg, boldp) + 1;  /* light blue */
        }
        else if (green == 255)
        {
            if (blue == 64)
-               return lookup_color(16, foreground) + 1;  /* light green */
+               return lookup_color(16, fg, boldp) + 1;  /* light green */
            if (blue == 255)
-               return lookup_color(18, foreground) + 1;  /* light cyan */
+               return lookup_color(18, fg, boldp) + 1;  /* light cyan */
        }
     }
     if (t_colors >= 256)
@@ -1399,8 +1403,14 @@ cell2attr(VTermScreenCell *cell)
     else
 #endif
     {
-       return get_cterm_attr_idx(attr, color2index(&cell->fg, TRUE),
-                                               color2index(&cell->bg, FALSE));
+       int bold = MAYBE;
+       int fg = color2index(&cell->fg, TRUE, &bold);
+       int bg = color2index(&cell->bg, FALSE, &bold);
+
+       /* with 8 colors set the bold attribute to get a bright foreground */
+       if (bold == TRUE)
+           attr |= HL_BOLD;
+       return get_cterm_attr_idx(attr, fg, bg);
     }
     return 0;
 }
index 02d43b6c86c67edb6f6df47437243260b5bd85ac..71ee6d29f3920cdae664929aadc25467c71e97e8 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    831,
 /**/
     830,
 /**/