changeset 8514:260d01c1cd17 v7.4.1547

commit https://github.com/vim/vim/commit/385111bd86e0b38667879c3e89506ca1ae98e1df Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 12 19:23:00 2016 +0100 patch 7.4.1547 Problem: Getting a cterm highlight attribute that is not set results in the string "-1". Solution: Return an empty string. (Taro Muraoka)
author Christian Brabandt <cb@256bit.org>
date Sat, 12 Mar 2016 19:30:04 +0100
parents 494f16489145
children 8a5f122f70f9
files src/syntax.c src/testdir/test_alot.vim src/testdir/test_syn_attr.vim src/version.c
diffstat 4 files changed, 36 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -8999,6 +8999,8 @@ highlight_color(
 	    n = HL_TABLE()[id - 1].sg_cterm_fg - 1;
 	else
 	    n = HL_TABLE()[id - 1].sg_cterm_bg - 1;
+	if (n < 0)
+	    return NULL;
 	sprintf((char *)name, "%d", n);
 	return name;
     }
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -16,5 +16,6 @@ source test_reltime.vim
 source test_searchpos.vim
 source test_set.vim
 source test_sort.vim
+source test_syn_attr.vim
 source test_undolevels.vim
 source test_unlet.vim
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_syn_attr.vim
@@ -0,0 +1,31 @@
+" Test syntax highlighting functions.
+
+func Test_missing_attr()
+  hi Mine term=bold cterm=italic
+  call assert_equal('Mine', synIDattr(hlID("Mine"), "name"))
+  call assert_equal('', synIDattr(hlID("Mine"), "bg", 'term'))
+  call assert_equal('1', synIDattr(hlID("Mine"), "bold", 'term'))
+  call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm'))
+  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(hlID("Mine"), "undercurl", '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'))
+
+  if has('gui')
+    hi Mine guifg=blue guibg=red font=something
+    call assert_equal('blue', synIDattr(hlID("Mine"), "fg", 'gui'))
+    call assert_equal('red', synIDattr(hlID("Mine"), "bg", 'gui'))
+    call assert_equal('something', synIDattr(hlID("Mine"), "font", 'gui'))
+  endif
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1547,
+/**/
     1546,
 /**/
     1545,