# HG changeset patch # User Bram Moolenaar # Date 1546895704 -3600 # Node ID 7444fffa482d44cf73d51dcef940e89f0719087b # Parent 6793601c7f2e6ec1319e002dd307e33edad16921 patch 8.1.0702: ":sign place" only uses the current buffer commit https://github.com/vim/vim/commit/b589f95b38ddd779d7e696abb0ea011dc92ea903 Author: Bram Moolenaar 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) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- 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. diff --git a/src/evalfunc.c b/src/evalfunc.c --- 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; } diff --git a/src/sign.c b/src/sign.c --- 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; diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim --- 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" . diff --git a/src/version.c b/src/version.c --- 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,