vim-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 vim/vim#3774)
b589f95b38
This commit is contained in:
Andrej Zieger
2019-05-20 11:04:58 +02:00
parent 35fbb4e1ca
commit f43900f686
4 changed files with 20 additions and 2 deletions

View File

@@ -7458,6 +7458,9 @@ sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()*
name name of the defined sign name name of the defined sign
priority sign priority 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 Returns an empty list on failure or if there are no placed
signs. signs.

View File

@@ -15602,7 +15602,7 @@ f_sign_place(typval_T *argvars, typval_T *rettv)
buf = tv_get_buf(&argvars[3], FALSE); buf = tv_get_buf(&argvars[3], FALSE);
if (buf == NULL) 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; goto cleanup;
} }

View File

@@ -1203,6 +1203,7 @@ static int parse_sign_cmd_args(
char_u *arg1; char_u *arg1;
char_u *name; char_u *name;
char_u *filename = NULL; char_u *filename = NULL;
int lnum_arg = FALSE;
// first arg could be placed sign id // first arg could be placed sign id
arg1 = arg; arg1 = arg;
@@ -1221,6 +1222,7 @@ static int parse_sign_cmd_args(
arg += 5; arg += 5;
*lnum = atoi((char *)arg); *lnum = atoi((char *)arg);
arg = skiptowhite(arg); arg = skiptowhite(arg);
lnum_arg = TRUE;
} else if (STRNCMP(arg, "*", 1) == 0 && cmd == SIGNCMD_UNPLACE) { } else if (STRNCMP(arg, "*", 1) == 0 && cmd == SIGNCMD_UNPLACE) {
if (*signid != -1) { if (*signid != -1) {
EMSG(_(e_invarg)); EMSG(_(e_invarg));
@@ -1277,7 +1279,8 @@ static int parse_sign_cmd_args(
// If the filename is not supplied for the sign place or the sign jump // If the filename is not supplied for the sign place or the sign jump
// command, then use the current buffer. // 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; *buf = curwin->w_buffer;
} }
return OK; return OK;

View File

@@ -663,6 +663,18 @@ func Test_sign_group()
call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
\ " line=10 id=5 name=sign1 priority=10\n", a) \ " 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} " :sign place group={group}
let a = execute('sign place group=g1') let a = execute('sign place group=g1')
call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .