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)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 58f5806..cd0888b 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -11462,7 +11462,7 @@
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;
}
diff --git a/src/sign.c b/src/sign.c
index 0dfc552..686a943 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -1237,6 +1237,7 @@
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 @@
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 @@
// 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;
diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim
index 9241046..07547bb 100644
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -663,6 +663,18 @@
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" .
diff --git a/src/version.c b/src/version.c
index eb7b268..13f7909 100644
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 702,
+/**/
701,
/**/
700,