Patch 9.0.0007
Problem:    No support for double, dotted and dashed underlines.
Solution:   Add the termcap entries and highlight modes. (closes #9553)
Files:      runtime/doc/term.txt, runtime/doc/options.txt,
            runtime/doc/syntax.txt, src/termdefs.h, src/term.c, src/screen.c,
            src/vim.h, src/evalfunc.c, src/gui.c, src/hardcopy.c,
            src/highlight.c, src/optiondefs.h, src/testdir/test_highlight.vim,
            src/testdir/test_syn_attr.vim, src/testdir/test_options.vim


*** ../vim-9.0.0006/runtime/doc/term.txt        2022-06-28 11:21:06.000000000 
+0100
--- runtime/doc/term.txt        2022-06-29 16:36:35.913787749 +0100
***************
*** 372,379 ****
  
  Added by Vim (there are no standard codes for these):
        t_AU    set underline color (ANSI)                      *t_AU* *'t_AU'*
!       t_Ce    undercurl end                                   *t_Ce* *'t_Ce'*
!       t_Cs    undercurl mode                                  *t_Cs* *'t_Cs'*
        t_Te    strikethrough end                               *t_Te* *'t_Te'*
        t_Ts    strikethrough mode                              *t_Ts* *'t_Ts'*
        t_IS    set icon text start                             *t_IS* *'t_IS'*
--- 372,382 ----
  
  Added by Vim (there are no standard codes for these):
        t_AU    set underline color (ANSI)                      *t_AU* *'t_AU'*
!       t_Ce    undercurl and underline end                     *t_Ce* *'t_Ce'*
!       t_Cs    undercurl (curly underline) mode                *t_Cs* *'t_Cs'*
!       t_Us    double underline mode                           *t_Us* *'t_Us'*
!       t_ds    dotted underline mode                           *t_ds* *'t_ds'*
!       t_Ds    dashed underline mode                           *t_Ds* *'t_Ds'*
        t_Te    strikethrough end                               *t_Te* *'t_Te'*
        t_Ts    strikethrough mode                              *t_Ts* *'t_Ts'*
        t_IS    set icon text start                             *t_IS* *'t_IS'*
*** ../vim-9.0.0006/runtime/doc/options.txt     2022-06-28 11:21:06.000000000 
+0100
--- runtime/doc/options.txt     2022-06-29 15:57:31.788849807 +0100
***************
*** 4211,4217 ****
                b       bold            (termcap entry "md" and "me")
                s       standout        (termcap entry "so" and "se")
                u       underline       (termcap entry "us" and "ue")
!               c       undercurl       (termcap entry "Cs" and "Ce")
                t       strikethrough   (termcap entry "Ts" and "Te")
                n       no highlighting
                -       no highlighting
--- 4211,4220 ----
                b       bold            (termcap entry "md" and "me")
                s       standout        (termcap entry "so" and "se")
                u       underline       (termcap entry "us" and "ue")
!               c       undercurl       (termcap entry "Us" and "Ce")
!               2       double underline (termcap entry "Ds" and "Ce")
!               d       dotted underline (termcap entry "ds" and "Ce")
!               =       dashed underline (termcap entry "Ds" and "Ce")
                t       strikethrough   (termcap entry "Ts" and "Te")
                n       no highlighting
                -       no highlighting
*** ../vim-9.0.0006/runtime/doc/syntax.txt      2022-06-28 11:21:06.000000000 
+0100
--- runtime/doc/syntax.txt      2022-06-29 16:40:14.909521609 +0100
***************
*** 5002,5015 ****
  1. highlight arguments for normal terminals
  
                                        *bold* *underline* *undercurl*
!                                       *inverse* *italic* *standout*
!                                       *nocombine* *strikethrough*
  term={attr-list}                      *attr-list* *highlight-term* *E418*
        attr-list is a comma-separated list (without spaces) of the
        following items (in any order):
                bold
                underline
                undercurl       not always available
                strikethrough   not always available
                reverse
                inverse         same as reverse
--- 5017,5034 ----
  1. highlight arguments for normal terminals
  
                                        *bold* *underline* *undercurl*
!                                       *underdouble* *underdotted*
!                                       *underdashed* *inverse* *italic*
!                                       *standout* *nocombine* *strikethrough*
  term={attr-list}                      *attr-list* *highlight-term* *E418*
        attr-list is a comma-separated list (without spaces) of the
        following items (in any order):
                bold
                underline
                undercurl       not always available
+               underdouble     not always available
+               underdotted     not always available
+               underdashed     not always available
                strikethrough   not always available
                reverse
                inverse         same as reverse
***************
*** 5020,5025 ****
--- 5039,5045 ----
  
        Note that "bold" can be used here and by using a bold font.  They
        have the same effect.
+                                                       *underline-codes*
        "undercurl" is a curly underline.  When "undercurl" is not possible
        then "underline" is used.  In general "undercurl" and "strikethrough"
        are only available in the GUI and some terminals.  The color is set
***************
*** 5028,5033 ****
--- 5048,5064 ----
            let &t_Cs = "\e[4:3m"
            let &t_Ce = "\e[4:0m"
  
+ <     "underdouble" is a double underline, "underdotted" is a dotted
+       underline and "underdashed" is a dashed underline.  These are only
+       supported by some terminals.  If your terminal supports them you may
+       have to specify the codes like this: >
+           let &t_Us = "\e[4:2m"
+           let &t_ds = "\e[4:4m"
+           let &t_Ds = "\e[4:5m"
+ <     They are reset with |t_Ce|, the same as curly underline (undercurl).
+       When t_Us, t_ds or t_Ds is not set then underline will be used as a
+       fallback.
+ 
  
  start={term-list}                             *highlight-start* *E422*
  stop={term-list}                              *term-list* *highlight-stop*
*** ../vim-9.0.0006/src/termdefs.h      2021-01-14 16:20:23.000000000 +0000
--- src/termdefs.h      2022-06-29 16:06:09.208199944 +0100
***************
*** 55,60 ****
--- 55,63 ----
      KS_US,    // underscore (underline) mode
      KS_UCE,   // exit undercurl mode
      KS_UCS,   // undercurl mode
+     KS_USS,   // double underline mode
+     KS_DS,    // dotted underline mode
+     KS_CDS,   // dashed underline mode
      KS_STE,   // exit strikethrough mode
      KS_STS,   // strikethrough mode
      KS_MS,    // save to move cur in reverse mode
***************
*** 160,165 ****
--- 163,171 ----
  #define T_US  (TERM_STR(KS_US))       // underscore (underline) mode
  #define T_UCE (TERM_STR(KS_UCE))      // exit undercurl mode
  #define T_UCS (TERM_STR(KS_UCS))      // undercurl mode
+ #define T_USS (TERM_STR(KS_USS))      // double underline mode
+ #define T_DS  (TERM_STR(KS_DS))       // dotted underline mode
+ #define T_CDS (TERM_STR(KS_CDS))      // dashed underline mode
  #define T_STE (TERM_STR(KS_STE))      // exit strikethrough mode
  #define T_STS (TERM_STR(KS_STS))      // strikethrough mode
  #define T_MS  (TERM_STR(KS_MS))       // save to move cur in reverse mode
*** ../vim-9.0.0006/src/term.c  2022-06-26 11:15:01.000000000 +0100
--- src/term.c  2022-06-29 15:43:24.138250165 +0100
***************
*** 1187,1192 ****
--- 1187,1195 ----
      {(int)KS_US,      "[US]"},
      {(int)KS_UCE,     "[UCE]"},
      {(int)KS_UCS,     "[UCS]"},
+     {(int)KS_USS,     "[USS]"},
+     {(int)KS_DS,      "[DS]"},
+     {(int)KS_CDS,     "[CDS]"},
      {(int)KS_STE,     "[STE]"},
      {(int)KS_STS,     "[STS]"},
      {(int)KS_MS,      "[MS]"},
***************
*** 1669,1674 ****
--- 1672,1678 ----
                        {KS_MD, "md"}, {KS_SE, "se"}, {KS_SO, "so"},
                        {KS_CZH,"ZH"}, {KS_CZR,"ZR"}, {KS_UE, "ue"},
                        {KS_US, "us"}, {KS_UCE, "Ce"}, {KS_UCS, "Cs"},
+                       {KS_USS, "Us"}, {KS_DS, "ds"}, {KS_CDS, "Ds"},
                        {KS_STE,"Te"}, {KS_STS,"Ts"},
                        {KS_CM, "cm"}, {KS_SR, "sr"},
                        {KS_CRI,"RI"}, {KS_VB, "vb"}, {KS_KS, "ks"},
*** ../vim-9.0.0006/src/screen.c        2022-06-26 11:29:15.000000000 +0100
--- src/screen.c        2022-06-29 16:09:19.535997095 +0100
***************
*** 1855,1862 ****
                out_str(T_SO);
            if ((attr & HL_UNDERCURL) && *T_UCS != NUL) // undercurl
                out_str(T_UCS);
!           if (((attr & HL_UNDERLINE)      // underline or undercurl
!                       || ((attr & HL_UNDERCURL) && *T_UCS == NUL))
                    && *T_US != NUL)
                out_str(T_US);
            if ((attr & HL_ITALIC) && *T_CZH != NUL)    // italic
--- 1855,1871 ----
                out_str(T_SO);
            if ((attr & HL_UNDERCURL) && *T_UCS != NUL) // undercurl
                out_str(T_UCS);
!           if ((attr & HL_UNDERDOUBLE) && *T_USS != NUL) // double underline
!               out_str(T_USS);
!           if ((attr & HL_UNDERDOTTED) && *T_DS != NUL) // dotted underline
!               out_str(T_DS);
!           if ((attr & HL_UNDERDASHED) && *T_CDS != NUL) // dashed underline
!               out_str(T_CDS);
!           if (((attr & HL_UNDERLINE)      // underline or undercurl, etc.
!                       || ((attr & HL_UNDERCURL) && *T_UCS == NUL)
!                       || ((attr & HL_UNDERDOUBLE) && *T_USS == NUL)
!                       || ((attr & HL_UNDERDOTTED) && *T_DS == NUL)
!                       || ((attr & HL_UNDERDASHED) && *T_CDS == NUL))
                    && *T_US != NUL)
                out_str(T_US);
            if ((attr & HL_ITALIC) && *T_CZH != NUL)    // italic
***************
*** 1951,1956 ****
--- 1960,1967 ----
        else
  #endif
        {
+           int is_under;
+ 
            if (screen_attr > HL_ALL)                   // special HL attr.
            {
                attrentry_T *aep;
***************
*** 2030,2044 ****
                else
                    out_str(T_SE);
            }
!           if ((screen_attr & HL_UNDERCURL) && *T_UCE != NUL)
            {
                if (STRCMP(T_UCE, T_ME) == 0)
                    do_ME = TRUE;
                else
                    out_str(T_UCE);
            }
!           if ((screen_attr & HL_UNDERLINE)
!                           || ((screen_attr & HL_UNDERCURL) && *T_UCE == NUL))
            {
                if (STRCMP(T_UE, T_ME) == 0)
                    do_ME = TRUE;
--- 2041,2056 ----
                else
                    out_str(T_SE);
            }
!           is_under = (screen_attr & (HL_UNDERCURL
!                         | HL_UNDERDOUBLE | HL_UNDERDOTTED | HL_UNDERDASHED));
!           if (is_under && *T_UCE != NUL)
            {
                if (STRCMP(T_UCE, T_ME) == 0)
                    do_ME = TRUE;
                else
                    out_str(T_UCE);
            }
!           if ((screen_attr & HL_UNDERLINE) || (is_under && *T_UCE == NUL))
            {
                if (STRCMP(T_UE, T_ME) == 0)
                    do_ME = TRUE;
*** ../vim-9.0.0006/src/vim.h   2022-06-24 16:14:07.000000000 +0100
--- src/vim.h   2022-06-29 15:44:34.994222545 +0100
***************
*** 659,668 ****
  #define HL_ITALIC             0x04
  #define HL_UNDERLINE          0x08
  #define HL_UNDERCURL          0x10
! #define HL_STANDOUT           0x20
! #define HL_NOCOMBINE          0x40
! #define HL_STRIKETHROUGH      0x80
! #define HL_ALL                        0xff
  
  // special attribute addition: Put message in history
  #define MSG_HIST              0x1000
--- 659,671 ----
  #define HL_ITALIC             0x04
  #define HL_UNDERLINE          0x08
  #define HL_UNDERCURL          0x10
! #define HL_UNDERDOUBLE                0x20
! #define HL_UNDERDOTTED                0x40
! #define HL_UNDERDASHED                0x80
! #define HL_STANDOUT           0x100
! #define HL_NOCOMBINE          0x200
! #define HL_STRIKETHROUGH      0x400
! #define HL_ALL                        0x7ff
  
  // special attribute addition: Put message in history
  #define MSG_HIST              0x1000
*** ../vim-9.0.0006/src/evalfunc.c      2022-06-29 10:37:14.938302547 +0100
--- src/evalfunc.c      2022-06-29 17:16:15.971744869 +0100
***************
*** 10104,10117 ****
                break;
  
        case 'u':
!               if (TOLOWER_ASC(what[1]) == 'l')        // ul
!                   p = highlight_color(id, what, modec);
!               else if (STRLEN(what) <= 5 || TOLOWER_ASC(what[5]) != 'c')
                                                        // underline
!                   p = highlight_has_attr(id, HL_UNDERLINE, modec);
!               else
                                                        // undercurl
!                   p = highlight_has_attr(id, HL_UNDERCURL, modec);
                break;
      }
  
--- 10104,10130 ----
                break;
  
        case 'u':
!               if (STRLEN(what) >= 9)
!               {
!                   if (TOLOWER_ASC(what[5]) == 'l')
                                                        // underline
!                       p = highlight_has_attr(id, HL_UNDERLINE, modec);
!                   else if (TOLOWER_ASC(what[5]) != 'd')
                                                        // undercurl
!                       p = highlight_has_attr(id, HL_UNDERCURL, modec);
!                   else if (TOLOWER_ASC(what[6]) != 'o')
!                                                       // underdashed
!                       p = highlight_has_attr(id, HL_UNDERDASHED, modec);
!                   else if (TOLOWER_ASC(what[7]) == 'u')
!                                                       // underdouble
!                       p = highlight_has_attr(id, HL_UNDERDOUBLE, modec);
!                   else
!                                                       // underdotted
!                       p = highlight_has_attr(id, HL_UNDERDOTTED, modec);
!               }
!               else
!                                                       // ul
!                   p = highlight_color(id, what, modec);
                break;
      }
  
*** ../vim-9.0.0006/src/gui.c   2022-06-29 12:54:48.064572066 +0100
--- src/gui.c   2022-06-29 15:51:35.009468311 +0100
***************
*** 2501,2506 ****
--- 2501,2508 ----
      if (hl_mask_todo & HL_UNDERCURL)
        draw_flags |= DRAW_UNDERC;
  
+     // TODO: HL_UNDERDOUBLE, HL_UNDERDOTTED, HL_UNDERDASHED
+ 
      // Do we strikethrough the text?
      if (hl_mask_todo & HL_STRIKETHROUGH)
        draw_flags |= DRAW_STRIKE;
*** ../vim-9.0.0006/src/hardcopy.c      2022-01-31 14:36:43.000000000 +0000
--- src/hardcopy.c      2022-06-29 15:52:02.125413226 +0100
***************
*** 293,298 ****
--- 293,299 ----
      pattr->italic = (highlight_has_attr(hl_id, HL_ITALIC, modec) != NULL);
      pattr->underline = (highlight_has_attr(hl_id, HL_UNDERLINE, modec) != 
NULL);
      pattr->undercurl = (highlight_has_attr(hl_id, HL_UNDERCURL, modec) != 
NULL);
+     // TODO: HL_UNDERDOUBLE, HL_UNDERDOTTED, HL_UNDERDASHED
  
  # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
      if (USE_24BIT)
*** ../vim-9.0.0006/src/highlight.c     2022-06-29 12:54:48.064572066 +0100
--- src/highlight.c     2022-06-29 17:02:27.732372625 +0100
***************
*** 25,34 ****
   * following names, separated by commas (but no spaces!).
   */
  static char *(hl_name_table[]) =
!     {"bold", "standout", "underline", "undercurl",
!       "italic", "reverse", "inverse", "nocombine", "strikethrough", "NONE"};
  static int hl_attr_table[] =
!     {HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, 
HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
  #define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? (attr_b) : 
(attr_a)) | (attr_b))
  
  /*
--- 25,40 ----
   * following names, separated by commas (but no spaces!).
   */
  static char *(hl_name_table[]) =
!     {"bold", "standout", "underline",
!       "undercurl", "underdouble", "underdotted", "underdashed",
!       "italic", "reverse", "inverse", "nocombine", "strikethrough", "NONE"};
  static int hl_attr_table[] =
!     {HL_BOLD, HL_STANDOUT, HL_UNDERLINE,
!       HL_UNDERCURL, HL_UNDERDOUBLE, HL_UNDERDOTTED, HL_UNDERDASHED,
!       HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
! // length of all attribute names, plus commas, together (and a bit more)
! #define MAX_ATTR_LEN 120
! 
  #define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? (attr_b) : 
(attr_a)) | (attr_b))
  
  /*
***************
*** 2963,2969 ****
      char_u    *sarg,
      char      *name)
  {
!     char_u    buf[100];
      char_u    *ts;
      int               i;
  
--- 2969,2975 ----
      char_u    *sarg,
      char      *name)
  {
!     char_u    buf[MAX_ATTR_LEN];
      char_u    *ts;
      int               i;
  
***************
*** 2984,2991 ****
                if (iarg & hl_attr_table[i])
                {
                    if (buf[0] != NUL)
!                       vim_strcat(buf, (char_u *)",", 100);
!                   vim_strcat(buf, (char_u *)hl_name_table[i], 100);
                    iarg &= ~hl_attr_table[i];      // don't want "inverse"
                }
            }
--- 2990,2997 ----
                if (iarg & hl_attr_table[i])
                {
                    if (buf[0] != NUL)
!                       vim_strcat(buf, (char_u *)",", MAX_ATTR_LEN);
!                   vim_strcat(buf, (char_u *)hl_name_table[i], MAX_ATTR_LEN);
                    iarg &= ~hl_attr_table[i];      // don't want "inverse"
                }
            }
***************
*** 3287,3293 ****
        at_en.ae_u.cterm.bg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_bg);
        // Only use the underline/undercurl color when used, it may clear the
        // background color if not supported.
!       if (sgp->sg_cterm & (HL_UNDERLINE | HL_UNDERCURL))
            at_en.ae_u.cterm.ul_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_sp);
        else
            at_en.ae_u.cterm.ul_rgb = INVALCOLOR;
--- 3293,3300 ----
        at_en.ae_u.cterm.bg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_bg);
        // Only use the underline/undercurl color when used, it may clear the
        // background color if not supported.
!       if (sgp->sg_cterm & (HL_UNDERLINE | HL_UNDERCURL
!                          | HL_UNDERDOUBLE | HL_UNDERDOTTED | HL_UNDERDASHED))
            at_en.ae_u.cterm.ul_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_sp);
        else
            at_en.ae_u.cterm.ul_rgb = INVALCOLOR;
***************
*** 3801,3806 ****
--- 3808,3819 ----
                                break;
                    case 'c':   attr |= HL_UNDERCURL;
                                break;
+                   case '2':   attr |= HL_UNDERDOUBLE;
+                               break;
+                   case 'd':   attr |= HL_UNDERDOTTED;
+                               break;
+                   case '=':   attr |= HL_UNDERDASHED;
+                               break;
                    case 't':   attr |= HL_STRIKETHROUGH;
                                break;
                    case ':':   ++p;                // highlight group name
***************
*** 4362,4370 ****
  {
      char_u    *name;
      int               error;
!     char_u    term_attr[80];
!     char_u    cterm_attr[80];
!     char_u    gui_attr[80];
      char_u    *start;
      char_u    *stop;
      char_u    *ctermfg;
--- 4375,4383 ----
  {
      char_u    *name;
      int               error;
!     char_u    term_attr[MAX_ATTR_LEN];
!     char_u    cterm_attr[MAX_ATTR_LEN];
!     char_u    gui_attr[MAX_ATTR_LEN];
      char_u    *start;
      char_u    *stop;
      char_u    *ctermfg;
*** ../vim-9.0.0006/src/optiondefs.h    2022-05-21 19:40:39.000000000 +0100
--- src/optiondefs.h    2022-06-29 16:05:23.180251073 +0100
***************
*** 2893,2901 ****
      p_term("t_BD", T_BD)
      p_term("t_cd", T_CD)
      p_term("t_ce", T_CE)
      p_term("t_cl", T_CL)
      p_term("t_cm", T_CM)
-     p_term("t_Ce", T_UCE)
      p_term("t_Co", T_CCO)
      p_term("t_CS", T_CCS)
      p_term("t_Cs", T_UCS)
--- 2893,2901 ----
      p_term("t_BD", T_BD)
      p_term("t_cd", T_CD)
      p_term("t_ce", T_CE)
+     p_term("t_Ce", T_UCE)
      p_term("t_cl", T_CL)
      p_term("t_cm", T_CM)
      p_term("t_Co", T_CCO)
      p_term("t_CS", T_CCS)
      p_term("t_Cs", T_UCS)
***************
*** 2905,2910 ****
--- 2905,2912 ----
      p_term("t_db", T_DB)
      p_term("t_DL", T_CDL)
      p_term("t_dl", T_DL)
+     p_term("t_ds", T_DS)
+     p_term("t_Ds", T_CDS)
      p_term("t_EC", T_CEC)
      p_term("t_EI", T_CEI)
      p_term("t_fs", T_FS)
***************
*** 2952,2957 ****
--- 2954,2960 ----
      p_term("t_u7", T_U7)
      p_term("t_ue", T_UE)
      p_term("t_us", T_US)
+     p_term("t_Us", T_USS)
      p_term("t_ut", T_UT)
      p_term("t_vb", T_VB)
      p_term("t_ve", T_VE)
*** ../vim-9.0.0006/src/testdir/test_highlight.vim      2022-04-07 
15:01:40.000000000 +0100
--- src/testdir/test_highlight.vim      2022-06-29 16:43:10.549317655 +0100
***************
*** 888,895 ****
  
  " Test for setting various 'term' attributes
  func Test_highlight_term_attr()
!   hi HlGrp3 
term=bold,underline,undercurl,strikethrough,reverse,italic,standout
!   call assert_equal('hi HlGrp3          
term=bold,standout,underline,undercurl,italic,reverse,strikethrough', 
HighlightArgs('HlGrp3'))
    hi HlGrp3 term=NONE
    call assert_equal('hi HlGrp3          cleared', HighlightArgs('HlGrp3'))
    hi clear
--- 888,895 ----
  
  " Test for setting various 'term' attributes
  func Test_highlight_term_attr()
!   hi HlGrp3 
term=bold,underline,undercurl,underdouble,underdotted,underdashed,strikethrough,reverse,italic,standout
!   call assert_equal('hi HlGrp3          
term=bold,standout,underline,undercurl,underdouble,underdotted,underdashed,italic,reverse,strikethrough',
 HighlightArgs('HlGrp3'))
    hi HlGrp3 term=NONE
    call assert_equal('hi HlGrp3          cleared', HighlightArgs('HlGrp3'))
    hi clear
***************
*** 1174,1185 ****
    " Test for setting all the 'term', 'cterm' and 'gui' attributes of a
    " highlight group
    let lines =<< trim END
!     VAR attr = {'bold': v:true, 'underline': v:true, 'undercurl': v:true,
                  \ 'strikethrough': v:true, 'reverse': v:true, 'italic': 
v:true,
                  \ 'standout': v:true, 'nocombine': v:true}
      call hlset([{'name': 'myhlg2', 'term': attr, 'cterm': attr, 'gui': attr}])
      VAR id2 = hlID('myhlg2')
!     VAR expected = "myhlg2 xxx 
term=bold,standout,underline,undercurl,italic,reverse,nocombine,strikethrough 
cterm=bold,standout,underline,undercurl,italic,reverse,nocombine,strikethrough 
gui=bold,standout,underline,undercurl,italic,reverse,nocombine,strikethrough"
      VAR output = execute('highlight myhlg2')
      LET output = output->split("\n")->join()->substitute('\s\+', ' ', 'g')
      call assert_equal(expected, output)
--- 1174,1187 ----
    " Test for setting all the 'term', 'cterm' and 'gui' attributes of a
    " highlight group
    let lines =<< trim END
!     VAR attr = {'bold': v:true, 'underline': v:true,
!                 \ 'undercurl': v:true, 'underdouble': v:true,
!                 \ 'underdotted': v:true, 'underdashed': v:true,
                  \ 'strikethrough': v:true, 'reverse': v:true, 'italic': 
v:true,
                  \ 'standout': v:true, 'nocombine': v:true}
      call hlset([{'name': 'myhlg2', 'term': attr, 'cterm': attr, 'gui': attr}])
      VAR id2 = hlID('myhlg2')
!     VAR expected = "myhlg2 xxx 
term=bold,standout,underline,undercurl,underdouble,underdotted,underdashed,italic,reverse,nocombine,strikethrough
 
cterm=bold,standout,underline,undercurl,underdouble,underdotted,underdashed,italic,reverse,nocombine,strikethrough
 
gui=bold,standout,underline,undercurl,underdouble,underdotted,underdashed,italic,reverse,nocombine,strikethrough"
      VAR output = execute('highlight myhlg2')
      LET output = output->split("\n")->join()->substitute('\s\+', ' ', 'g')
      call assert_equal(expected, output)
*** ../vim-9.0.0006/src/testdir/test_syn_attr.vim       2020-03-25 
21:12:13.000000000 +0000
--- src/testdir/test_syn_attr.vim       2022-06-29 17:06:16.788225133 +0100
***************
*** 11,20 ****
--- 11,27 ----
    hi Mine term=reverse cterm=inverse
    call assert_equal('1', synIDattr(hlID("Mine"), "reverse", 'term'))
    call assert_equal('1', synIDattr(hlID("Mine"), "inverse", 'cterm'))
+ 
    hi Mine term=underline cterm=standout gui=undercurl
    call assert_equal('1', synIDattr(hlID("Mine"), "underline", 'term'))
    call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm'))
    call assert_equal('1', synIDattr("Mine"->hlID(), "undercurl", 'gui'))
+ 
+   hi Mine term=underdouble cterm=underdotted gui=underdashed
+   call assert_equal('1', synIDattr(hlID("Mine"), "underdouble", 'term'))
+   call assert_equal('1', synIDattr(hlID("Mine"), "underdotted", 'cterm'))
+   call assert_equal('1', synIDattr("Mine"->hlID(), "underdashed", 'gui'))
+ 
    hi Mine gui=strikethrough
    call assert_equal('1', synIDattr(hlID("Mine"), "strikethrough", 'gui'))
    hi Mine term=NONE cterm=NONE gui=NONE
*** ../vim-9.0.0006/src/testdir/test_options.vim        2022-05-12 
17:40:54.000000000 +0100
--- src/testdir/test_options.vim        2022-06-29 18:29:30.689147930 +0100
***************
*** 955,960 ****
--- 955,972 ----
    set <F9>=xyz
    call assert_equal('xyz', &t_k9)
    set <t_k9>&
+ 
+   " should we test all of them?
+   set t_Ce=testCe
+   set t_Cs=testCs
+   set t_Us=testUs
+   set t_ds=testds
+   set t_Ds=testDs
+   call assert_equal('testCe', &t_Ce)
+   call assert_equal('testCs', &t_Cs)
+   call assert_equal('testUs', &t_Us)
+   call assert_equal('testds', &t_ds)
+   call assert_equal('testDs', &t_Ds)
  endfunc
  
  " Test for changing options in a sandbox
*** ../vim-9.0.0006/src/version.c       2022-06-29 14:39:07.909560028 +0100
--- src/version.c       2022-06-29 17:07:14.684183555 +0100
***************
*** 737,738 ****
--- 737,740 ----
  {   /* Add new patch number below this line */
+ /**/
+     7,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
14. Put mosquito netting around your work area. Play a tape of jungle
    sounds all day.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220629175645.714D01C1E34%40moolenaar.net.

Raspunde prin e-mail lui