changeset 15388:7444fffa482d v8.1.0702

patch 8.1.0702: ":sign place" only uses the current buffer commit https://github.com/vim/vim/commit/b589f95b38ddd779d7e696abb0ea011dc92ea903 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jan 7 22:10:00 2019 +0100 patch 8.1.0702: ":sign place" only uses the current buffer Problem: ":sign place" only uses the current buffer. Solution: List signs for all buffers when there is no buffer argument. Fix error message for invalid buffer name in sign_place(). (Yegappan Lakshmanan, closes #3774)
author Bram Moolenaar <Bram@vim.org>
date Mon, 07 Jan 2019 22:15:04 +0100
parents 6793601c7f2e
children 0351fa7879f9
files runtime/doc/eval.txt src/evalfunc.c src/sign.c src/testdir/test_signs.vim src/version.c
diffstat 5 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -7971,6 +7971,9 @@ sign_getplaced([{expr} [, {dict}]])			*s
 			name	name of the defined sign
 			priority	sign priority
 
+		The returned signs in a buffer are ordered by their line
+		number.
+
 		Returns an empty list on failure or if there are no placed
 		signs.
 
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -11462,7 +11462,7 @@ f_sign_place(typval_T *argvars, typval_T
     buf = tv_get_buf(&argvars[3], FALSE);
     if (buf == NULL)
     {
-	EMSG2(_("E158: Invalid buffer name: %s"), tv_get_string(&argvars[2]));
+	EMSG2(_("E158: Invalid buffer name: %s"), tv_get_string(&argvars[3]));
 	goto cleanup;
     }
 
--- a/src/sign.c
+++ b/src/sign.c
@@ -1237,6 +1237,7 @@ parse_sign_cmd_args(
     char_u	*arg1;
     char_u	*name;
     char_u	*filename = NULL;
+    int		lnum_arg = FALSE;
 
     // first arg could be placed sign id
     arg1 = arg;
@@ -1259,6 +1260,7 @@ parse_sign_cmd_args(
 	    arg += 5;
 	    *lnum = atoi((char *)arg);
 	    arg = skiptowhite(arg);
+	    lnum_arg = TRUE;
 	}
 	else if (STRNCMP(arg, "*", 1) == 0 && cmd == SIGNCMD_UNPLACE)
 	{
@@ -1327,7 +1329,8 @@ parse_sign_cmd_args(
 
     // If the filename is not supplied for the sign place or the sign jump
     // command, then use the current buffer.
-    if (filename == NULL && (cmd == SIGNCMD_PLACE || cmd == SIGNCMD_JUMP))
+    if (filename == NULL && ((cmd == SIGNCMD_PLACE && lnum_arg)
+		|| cmd == SIGNCMD_JUMP))
 	*buf = curwin->w_buffer;
 
     return OK;
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -663,6 +663,18 @@ func Test_sign_group()
   call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
 	      \ "    line=10  id=5  name=sign1  priority=10\n", a)
 
+  " Place signs in more than one buffer and list the signs
+  split foo
+  set buftype=nofile
+  sign place 25 line=76 name=sign1 priority=99 file=foo
+  let a = execute('sign place')
+  call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
+	      \ "    line=10  id=5  name=sign1  priority=10\n" .
+	      \ "Signs for foo:\n" .
+	      \ "    line=76  id=25  name=sign1  priority=99\n", a)
+  close
+  bwipe foo
+
   " :sign place group={group}
   let a = execute('sign place group=g1')
   call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
--- 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 */
 /**/
+    702,
+/**/
     701,
 /**/
     700,