From 29d5ca7d66796a306f63d454ad1588df8c58e5aa Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Sat, 30 Jul 2022 16:11:02 +0200 Subject: vim-patch:9.0.0111: "nocombine" is missing from synIDattr() Problem: "nocombine" is missing from synIDattr(). Solution: Add "nocombine". (Munif Tanjim, closes vim/vim#10816) https://github.com/vim/vim/commit/de78632c41d870d5254e9ccd285f53674b955f4e --- src/nvim/eval/funcs.c | 8 ++++++-- src/nvim/testdir/test_syn_attr.vim | 30 +++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 255a58fede..f552c9916e 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -9498,8 +9498,12 @@ static void f_synIDattr(typval_T *argvars, typval_T *rettv, FunPtr fptr) p = highlight_has_attr(id, HL_ITALIC, modec); } break; - case 'n': // name - p = get_highlight_name_ext(NULL, id - 1, false); + case 'n': + if (TOLOWER_ASC(what[1]) == 'o') { // nocombine + p = highlight_has_attr(id, HL_NOCOMBINE, modec); + } else { // name + p = get_highlight_name_ext(NULL, id - 1, false); + } break; case 'r': // reverse p = highlight_has_attr(id, HL_INVERSE, modec); diff --git a/src/nvim/testdir/test_syn_attr.vim b/src/nvim/testdir/test_syn_attr.vim index fa0b08fde5..88f9d0d84d 100644 --- a/src/nvim/testdir/test_syn_attr.vim +++ b/src/nvim/testdir/test_syn_attr.vim @@ -1,19 +1,39 @@ " Test syntax highlighting functions. func Test_missing_attr() - hi Mine cterm=italic + throw 'Skipped: use test/functional/legacy/syn_attr_spec.lua' + + hi Mine term=bold cterm=italic call assert_equal('Mine', synIDattr(hlID("Mine"), "name")) + call assert_equal('', synIDattr("Mine"->hlID(), "bg", 'term')) + call assert_equal('', synIDattr("Mine"->hlID(), "fg", 'term')) + call assert_equal('', synIDattr("Mine"->hlID(), "sp", 'term')) + call assert_equal('1', synIDattr(hlID("Mine"), "bold", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm')) - hi Mine cterm=inverse + 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 cterm=standout gui=undercurl + + 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 gui=strikethrough + + 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 term=nocombine gui=strikethrough call assert_equal('1', synIDattr(hlID("Mine"), "strikethrough", 'gui')) - hi Mine cterm=NONE gui=NONE + call assert_equal('1', synIDattr(hlID("Mine"), "nocombine", 'term')) + call assert_equal('', synIDattr(hlID("Mine"), "nocombine", 'gui')) + hi Mine term=NONE cterm=NONE gui=NONE + call assert_equal('', synIDattr(hlID("Mine"), "bold", 'term')) call assert_equal('', synIDattr(hlID("Mine"), "italic", 'cterm')) + call assert_equal('', synIDattr(hlID("Mine"), "reverse", 'term')) call assert_equal('', synIDattr(hlID("Mine"), "inverse", 'cterm')) + call assert_equal('', synIDattr(hlID("Mine"), "underline", 'term')) call assert_equal('', synIDattr(hlID("Mine"), "standout", 'cterm')) call assert_equal('', synIDattr(hlID("Mine"), "undercurl", 'gui')) call assert_equal('', synIDattr(hlID("Mine"), "strikethrough", 'gui')) -- cgit