summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-09-29 20:59:17 +0200
committerBram Moolenaar <Bram@vim.org>2020-09-29 20:59:17 +0200
commit391c36279415d0b8c5dba1ba11b668add04be963 (patch)
tree963cacdf2fa296fba4e1e3c1a52e0b9d0dad5a08
parentd569a9e74684cd17f9cea63e804281388728e513 (diff)
downloadvim-git-391c36279415d0b8c5dba1ba11b668add04be963.tar.gz
patch 8.2.1771: synIDattr() cannot get the value of ctermulv8.2.1771
Problem: synIDattr() cannot get the value of ctermul. Solution: Add the "ul" value for "what". (closes #7037)
-rw-r--r--runtime/doc/eval.txt4
-rw-r--r--src/evalfunc.c4
-rw-r--r--src/highlight.c7
-rw-r--r--src/testdir/test_highlight.vim1
-rw-r--r--src/version.c2
5 files changed, 15 insertions, 3 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 58c390ebb..6bf205d4e 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -10348,7 +10348,9 @@ synIDattr({synID}, {what} [, {mode}]) *synIDattr()*
"bg" background color (as with "fg")
"font" font name (only available in the GUI)
|highlight-font|
- "sp" special color (as with "fg") |highlight-guisp|
+ "sp" special color for the GUI (as with "fg")
+ |highlight-guisp|
+ "ul" underline color for cterm: number as a string
"fg#" like "fg", but for the GUI and the GUI is
running the name in "#RRGGBB" form
"bg#" like "fg#" for "bg"
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 2af4bc00d..cf1e26533 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -8604,7 +8604,9 @@ f_synIDattr(typval_T *argvars UNUSED, typval_T *rettv)
break;
case 'u':
- if (STRLEN(what) <= 5 || TOLOWER_ASC(what[5]) != 'c')
+ 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
diff --git a/src/highlight.c b/src/highlight.c
index 0a014473b..56b198883 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -2684,13 +2684,14 @@ highlight_has_attr(
char_u *
highlight_color(
int id,
- char_u *what, // "font", "fg", "bg", "sp", "fg#", "bg#" or "sp#"
+ char_u *what, // "font", "fg", "bg", "sp", "ul", "fg#", "bg#" or "sp#"
int modec) // 'g' for GUI, 'c' for cterm, 't' for term
{
static char_u name[20];
int n;
int fg = FALSE;
int sp = FALSE;
+ int ul = FALSE;
int font = FALSE;
if (id <= 0 || id > highlight_ga.ga_len)
@@ -2703,6 +2704,8 @@ highlight_color(
font = TRUE;
else if (TOLOWER_ASC(what[0]) == 's' && TOLOWER_ASC(what[1]) == 'p')
sp = TRUE;
+ else if (TOLOWER_ASC(what[0]) == 'u' && TOLOWER_ASC(what[1]) == 'l')
+ ul = TRUE;
else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g'))
return NULL;
if (modec == 'g')
@@ -2749,6 +2752,8 @@ highlight_color(
{
if (fg)
n = HL_TABLE()[id - 1].sg_cterm_fg - 1;
+ else if (ul)
+ n = HL_TABLE()[id - 1].sg_cterm_ul - 1;
else
n = HL_TABLE()[id - 1].sg_cterm_bg - 1;
if (n < 0)
diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim
index 05f215ae3..8bd03e2da 100644
--- a/src/testdir/test_highlight.vim
+++ b/src/testdir/test_highlight.vim
@@ -808,6 +808,7 @@ func Test_highlight_ctermul()
call assert_notmatch('ctermul=', HighlightArgs('Normal'))
highlight Normal ctermul=3
call assert_match('ctermul=3', HighlightArgs('Normal'))
+ call assert_equal('3', synIDattr(synIDtrans(hlID('Normal')), 'ul'))
highlight Normal ctermul=NONE
endfunc
diff --git a/src/version.c b/src/version.c
index 26e63c2bd..d390212d8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1771,
+/**/
1770,
/**/
1769,