Patch 8.0.1544
Problem:    When using 'termguicolors' SpellBad doesn't show.
Solution:   When the GUI colors are not set fall back to the cterm colors.
Files:      src/syntax.c, src/screen.c, src/gui.h, src/structs.h


*** ../vim-8.0.1543/src/syntax.c        2018-02-27 13:04:55.028256869 +0100
--- src/syntax.c        2018-02-27 14:36:40.461896013 +0100
***************
*** 8952,8959 ****
  
      vim_memset(&at_en, 0, sizeof(attrentry_T));
      at_en.ae_attr = attr;
!     at_en.ae_u.cterm.fg_rgb = fg;
!     at_en.ae_u.cterm.bg_rgb = bg;
      return get_attr_entry(&cterm_attr_table, &at_en);
  }
  #endif
--- 8952,8969 ----
  
      vim_memset(&at_en, 0, sizeof(attrentry_T));
      at_en.ae_attr = attr;
!     if (fg == INVALCOLOR && bg == INVALCOLOR)
!     {
!       /* If both GUI colors are not set fall back to the cterm colors.  Helps
!        * if the GUI only has an attribute, such as undercurl. */
!       at_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
!       at_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
!     }
!     else
!     {
!       at_en.ae_u.cterm.fg_rgb = fg;
!       at_en.ae_u.cterm.bg_rgb = bg;
!     }
      return get_attr_entry(&cterm_attr_table, &at_en);
  }
  #endif
***************
*** 9094,9103 ****
                if (spell_aep->ae_u.cterm.bg_color > 0)
                    new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color;
  #ifdef FEAT_TERMGUICOLORS
!               if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
!                   new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb;
!               if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
!                   new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb;
  #endif
            }
        }
--- 9104,9126 ----
                if (spell_aep->ae_u.cterm.bg_color > 0)
                    new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color;
  #ifdef FEAT_TERMGUICOLORS
!               /* If both fg and bg are not set fall back to cterm colors.
!                * Helps for SpellBad which uses undercurl in the GUI. */
!               if (COLOR_INVALID(spell_aep->ae_u.cterm.fg_rgb)
!                       && COLOR_INVALID(spell_aep->ae_u.cterm.bg_rgb))
!               {
!                   if (spell_aep->ae_u.cterm.fg_color > 0)
!                       new_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
!                   if (spell_aep->ae_u.cterm.bg_color > 0)
!                       new_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
!               }
!               else
!               {
!                   if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
!                       new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb;
!                   if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
!                       new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb;
!               }
  #endif
            }
        }
***************
*** 9592,9597 ****
--- 9615,9628 ----
  #  endif
        at_en.ae_u.cterm.fg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_fg);
        at_en.ae_u.cterm.bg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_bg);
+       if (at_en.ae_u.cterm.fg_rgb == INVALCOLOR
+               && at_en.ae_u.cterm.bg_rgb == INVALCOLOR)
+       {
+           /* If both fg and bg are invalid fall back to the cterm colors.
+            * Helps when the GUI only uses an attribute, e.g. undercurl. */
+           at_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
+           at_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
+       }
  # endif
        sgp->sg_cterm_attr = get_attr_entry(&cterm_attr_table, &at_en);
      }
*** ../vim-8.0.1543/src/screen.c        2018-02-22 21:06:44.566818882 +0100
--- src/screen.c        2018-02-27 14:21:13.835865569 +0100
***************
*** 8066,8081 ****
            }
            if ((attr & HL_BOLD) && *T_MD != NUL)       /* bold */
                out_str(T_MD);
!           else if (aep != NULL && cterm_normal_fg_bold &&
  #ifdef FEAT_TERMGUICOLORS
!                       (p_tgc ?
!                           (aep->ae_u.cterm.fg_rgb != INVALCOLOR):
  #endif
!                           (t_colors > 1 && aep->ae_u.cterm.fg_color)
! #ifdef FEAT_TERMGUICOLORS
!                       )
! #endif
!                   )
                /* If the Normal FG color has BOLD attribute and the new HL
                 * has a FG color defined, clear BOLD. */
                out_str(T_ME);
--- 8066,8078 ----
            }
            if ((attr & HL_BOLD) && *T_MD != NUL)       /* bold */
                out_str(T_MD);
!           else if (aep != NULL && cterm_normal_fg_bold && (
  #ifdef FEAT_TERMGUICOLORS
!                       p_tgc && aep->ae_u.cterm.fg_rgb != CTERMCOLOR
!                         ? aep->ae_u.cterm.fg_rgb != INVALCOLOR
!                         :
  #endif
!                           t_colors > 1 && aep->ae_u.cterm.fg_color))
                /* If the Normal FG color has BOLD attribute and the new HL
                 * has a FG color defined, clear BOLD. */
                out_str(T_ME);
***************
*** 8101,8128 ****
            if (aep != NULL)
            {
  #ifdef FEAT_TERMGUICOLORS
!               if (p_tgc)
                {
                    if (aep->ae_u.cterm.fg_rgb != INVALCOLOR)
                        term_fg_rgb_color(aep->ae_u.cterm.fg_rgb);
                    if (aep->ae_u.cterm.bg_rgb != INVALCOLOR)
                        term_bg_rgb_color(aep->ae_u.cterm.bg_rgb);
                }
                else
  #endif
                {
!                   if (t_colors > 1)
!                   {
!                       if (aep->ae_u.cterm.fg_color)
!                           term_fg_color(aep->ae_u.cterm.fg_color - 1);
!                       if (aep->ae_u.cterm.bg_color)
!                           term_bg_color(aep->ae_u.cterm.bg_color - 1);
!                   }
!                   else
!                   {
!                       if (aep->ae_u.term.start != NULL)
!                           out_str(aep->ae_u.term.start);
!                   }
                }
            }
        }
--- 8098,8136 ----
            if (aep != NULL)
            {
  #ifdef FEAT_TERMGUICOLORS
!               /* When 'termguicolors' is set but fg or bg is unset,
!                * fall back to the cterm colors.   This helps for SpellBad,
!                * where the GUI uses a red undercurl. */
!               if (p_tgc && aep->ae_u.cterm.fg_rgb != CTERMCOLOR)
                {
                    if (aep->ae_u.cterm.fg_rgb != INVALCOLOR)
                        term_fg_rgb_color(aep->ae_u.cterm.fg_rgb);
+               }
+               else
+ #endif
+               if (t_colors > 1)
+               {
+                   if (aep->ae_u.cterm.fg_color)
+                       term_fg_color(aep->ae_u.cterm.fg_color - 1);
+               }
+ #ifdef FEAT_TERMGUICOLORS
+               if (p_tgc && aep->ae_u.cterm.bg_rgb != CTERMCOLOR)
+               {
                    if (aep->ae_u.cterm.bg_rgb != INVALCOLOR)
                        term_bg_rgb_color(aep->ae_u.cterm.bg_rgb);
                }
                else
  #endif
+               if (t_colors > 1)
+               {
+                   if (aep->ae_u.cterm.bg_color)
+                       term_bg_color(aep->ae_u.cterm.bg_color - 1);
+               }
+ 
+               if (t_colors <= 1)
                {
!                   if (aep->ae_u.term.start != NULL)
!                       out_str(aep->ae_u.term.start);
                }
            }
        }
***************
*** 8162,8178 ****
                     * Assume that t_me restores the original colors!
                     */
                    aep = syn_cterm_attr2entry(screen_attr);
!                   if (aep != NULL &&
  #ifdef FEAT_TERMGUICOLORS
!                           (p_tgc ?
!                               (aep->ae_u.cterm.fg_rgb != INVALCOLOR
!                                || aep->ae_u.cterm.bg_rgb != INVALCOLOR):
  #endif
!                               (aep->ae_u.cterm.fg_color || 
aep->ae_u.cterm.bg_color)
  #ifdef FEAT_TERMGUICOLORS
!                           )
  #endif
!                       )
                        do_ME = TRUE;
                }
                else
--- 8170,8188 ----
                     * Assume that t_me restores the original colors!
                     */
                    aep = syn_cterm_attr2entry(screen_attr);
!                   if (aep != NULL && ((
  #ifdef FEAT_TERMGUICOLORS
!                           p_tgc && aep->ae_u.cterm.fg_rgb != CTERMCOLOR
!                               ? aep->ae_u.cterm.fg_rgb != INVALCOLOR
!                               :
  #endif
!                               aep->ae_u.cterm.fg_color) || (
  #ifdef FEAT_TERMGUICOLORS
!                           p_tgc && aep->ae_u.cterm.bg_rgb != CTERMCOLOR
!                               ? aep->ae_u.cterm.bg_rgb != INVALCOLOR
!                               :
  #endif
!                               aep->ae_u.cterm.bg_color)))
                        do_ME = TRUE;
                }
                else
*** ../vim-8.0.1543/src/gui.h   2017-11-18 22:13:04.749908702 +0100
--- src/gui.h   2018-02-27 13:41:49.758915785 +0100
***************
*** 207,212 ****
--- 207,214 ----
  #define INVALCOLOR (guicolor_T)-11111 /* number for invalid color; on 32 bit
                                   displays there is a tiny chance this is an
                                   actual color */
+ #define CTERMCOLOR (guicolor_T)-11110 /* only used for cterm.bg_rgb and
+                                          cterm.fg_rgb: use cterm color */
  
  #ifdef FEAT_GUI_GTK
    typedef PangoFontDescription        *GuiFont;       /* handle for a GUI 
font */
*** ../vim-8.0.1543/src/structs.h       2018-02-11 19:06:20.269418910 +0100
--- src/structs.h       2018-02-27 13:42:58.618494224 +0100
***************
*** 101,107 ****
--- 101,110 ----
  # endif
  # define guicolor_T long
  # define INVALCOLOR ((guicolor_T)0x1ffffff)
+     /* only used for cterm.bg_rgb and cterm.fg_rgb: use cterm color */
+ # define CTERMCOLOR ((guicolor_T)0x1fffffe)
  #endif
+ #define COLOR_INVALID(x) ((x) == INVALCOLOR || (x) == CTERMCOLOR)
  
  /*
   * marks: positions in a file
*** ../vim-8.0.1543/src/version.c       2018-02-27 13:04:55.028256869 +0100
--- src/version.c       2018-02-27 14:25:32.306239017 +0100
***************
*** 780,781 ****
--- 780,783 ----
  {   /* Add new patch number below this line */
+ /**/
+     1544,
  /**/

-- 
FROG: How you English say:  I one more time, mac, I unclog my nose towards
      you, sons of a window-dresser,  so, you think you could out-clever us
      French fellows with your silly knees-bent creeping about advancing
      behaviour.  (blows a raspberry) I wave my private parts at your aunties,
      you brightly-coloured, mealy-templed, cranberry-smelling, electric
      donkey-bottom biters.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui