To: vim_dev@googlegroups.com Subject: Patch 9.0.0007 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 =xyz call assert_equal('xyz', &t_k9) set & + + " 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 -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///