changeset 15156:b63787182765 v8.1.0588

patch 8.1.0588: cannot define a sign with space in the text commit https://github.com/vim/vim/commit/06b056e110005ce0dd97b8c6333405afd06c36fc Author: Bram Moolenaar <Bram@vim.org> Date: Fri Dec 14 19:37:08 2018 +0100 patch 8.1.0588: cannot define a sign with space in the text Problem: Cannot define a sign with space in the text. Solution: Allow for escaping characters. (Ben Jackson, closes https://github.com/vim/vim/issues/2967)
author Bram Moolenaar <Bram@vim.org>
date Fri, 14 Dec 2018 19:45:05 +0100
parents 891f2e5dca0b
children be541307f4b9
files src/ex_cmds.c src/testdir/test_signs.vim src/version.c
diffstat 3 files changed, 37 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -7779,6 +7779,14 @@ ex_sign(exarg_T *eap)
 			int	len;
 
 			arg += 5;
+			for (s = arg; s + 1 < p; ++s)
+			    if (*s == '\\')
+			    {
+				// Remove a backslash, so that it is possible
+				// to use a space.
+				STRMOVE(s, s + 1);
+				--p;
+			    }
 # ifdef FEAT_MBYTE
 			/* Count cells and check for non-printable chars */
 			if (has_mbyte)
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -104,6 +104,33 @@ func Test_sign()
   exe 'sign jump 43 file=' . fn
   call assert_equal('B', getline('.'))
 
+  " can't define a sign with a non-printable character as text
+  call assert_fails("sign define Sign4 text=\e linehl=Comment", 'E239:')
+  call assert_fails("sign define Sign4 text=a\e linehl=Comment", 'E239:')
+  call assert_fails("sign define Sign4 text=\ea linehl=Comment", 'E239:')
+
+  " Only 1 or 2 character text is allowed
+  call assert_fails("sign define Sign4 text=abc linehl=Comment", 'E239:')
+  call assert_fails("sign define Sign4 text= linehl=Comment", 'E239:')
+  call assert_fails("sign define Sign4 text=\ ab  linehl=Comment", 'E239:')
+
+  " define sign with whitespace
+  sign define Sign4 text=\ X linehl=Comment
+  sign undefine Sign4
+  sign define Sign4 linehl=Comment text=\ X
+  sign undefine Sign4
+
+  sign define Sign5 text=X\  linehl=Comment
+  sign undefine Sign5
+  sign define Sign5 linehl=Comment text=X\ 
+  sign undefine Sign5
+
+  " define sign with backslash
+  sign define Sign4 text=\\\\ linehl=Comment
+  sign undefine Sign4
+  sign define Sign4 text=\\ linehl=Comment
+  sign undefine Sign4
+
   " After undefining the sign, we should no longer be able to place it.
   sign undefine Sign1
   sign undefine Sign2
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    588,
+/**/
     587,
 /**/
     586,