Patch 8.1.0679
Problem: Sign functions do not take buffer argument as documented.
Solution: Use get_buf_tv(). (Yegappan Lakshmanan, closes #3755)
Files: src/evalfunc.c, src/testdir/test_signs.vim
*** ../vim-8.1.0678/src/evalfunc.c 2019-01-01 13:20:05.940711222 +0100
--- src/evalfunc.c 2019-01-02 13:37:14.702974769 +0100
***************
*** 11365,11371 ****
if (argvars[0].v_type != VAR_UNKNOWN)
{
// get signs placed in this buffer
! buf = find_buffer(&argvars[0]);
if (buf == NULL)
{
EMSG2(_("E158: Invalid buffer name: %s"),
--- 11365,11371 ----
if (argvars[0].v_type != VAR_UNKNOWN)
{
// get signs placed in this buffer
! buf = get_buf_tv(&argvars[0], FALSE);
if (buf == NULL)
{
EMSG2(_("E158: Invalid buffer name: %s"),
***************
*** 11457,11463 ****
goto cleanup;
// Buffer to place the sign
! buf = find_buffer(&argvars[3]);
if (buf == NULL)
{
EMSG2(_("E158: Invalid buffer name: %s"), tv_get_string(&argvars[2]));
--- 11457,11463 ----
goto cleanup;
// Buffer to place the sign
! buf = get_buf_tv(&argvars[3], FALSE);
if (buf == NULL)
{
EMSG2(_("E158: Invalid buffer name: %s"), tv_get_string(&argvars[2]));
***************
*** 11566,11572 ****
if ((di = dict_find(dict, (char_u *)"buffer", -1)) != NULL)
{
! buf = find_buffer(&di->di_tv);
if (buf == NULL)
{
EMSG2(_("E158: Invalid buffer name: %s"),
--- 11566,11572 ----
if ((di = dict_find(dict, (char_u *)"buffer", -1)) != NULL)
{
! buf = get_buf_tv(&di->di_tv, FALSE);
if (buf == NULL)
{
EMSG2(_("E158: Invalid buffer name: %s"),
*** ../vim-8.1.0678/src/testdir/test_signs.vim 2018-12-31 22:02:24.077890554
+0100
--- src/testdir/test_signs.vim 2019-01-02 13:37:14.702974769 +0100
***************
*** 32,38 ****
" current window if the buffer is displayed there.
let bn = bufnr('%')
let wn = winnr()
! exe 'sign place 41 line=3 name=Sign1 buffer=' . bn
1
bot split
exe 'sign jump 41 buffer=' . bufnr('%')
--- 32,38 ----
" current window if the buffer is displayed there.
let bn = bufnr('%')
let wn = winnr()
! exe 'sign place 41 line=3 name=Sign1 buffer=' . bn
1
bot split
exe 'sign jump 41 buffer=' . bufnr('%')
***************
*** 77,83 ****
sign unplace
let a=execute('sign place')
call assert_equal("\n--- Signs ---\n", a)
!
" Try again to unplace sign on current line, it should fail this time.
call assert_fails('sign unplace', 'E159:')
--- 77,83 ----
sign unplace
let a=execute('sign place')
call assert_equal("\n--- Signs ---\n", a)
!
" Try again to unplace sign on current line, it should fail this time.
call assert_fails('sign unplace', 'E159:')
***************
*** 386,396 ****
call assert_equal([{'bufnr' : bufnr(''), 'signs' :
\ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1',
\ 'priority' : 10}]}],
! \ sign_getplaced('Xsign', {'lnum' : 20}))
call assert_equal([{'bufnr' : bufnr(''), 'signs' :
\ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1',
\ 'priority' : 10}]}],
! \ sign_getplaced('Xsign', {'id' : 10}))
" Tests for invalid arguments to sign_place()
call assert_fails('call sign_place([], "", "mySign", 1)', 'E745:')
--- 386,396 ----
call assert_equal([{'bufnr' : bufnr(''), 'signs' :
\ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1',
\ 'priority' : 10}]}],
! \ sign_getplaced('%', {'lnum' : 20}))
call assert_equal([{'bufnr' : bufnr(''), 'signs' :
\ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1',
\ 'priority' : 10}]}],
! \ sign_getplaced('', {'id' : 10}))
" Tests for invalid arguments to sign_place()
call assert_fails('call sign_place([], "", "mySign", 1)', 'E745:')
***************
*** 407,413 ****
\ {"lnum" : 30})', 'E730:')
call assert_fails('call sign_place(5, "", "sign1", "abcxyz.xxx",
\ {"lnum" : 10})', 'E158:')
! call assert_fails('call sign_place(5, "", "sign1", "", {"lnum" : 10})',
\ 'E158:')
call assert_fails('call sign_place(5, "", "sign1", [], {"lnum" : 10})',
\ 'E158:')
--- 407,413 ----
\ {"lnum" : 30})', 'E730:')
call assert_fails('call sign_place(5, "", "sign1", "abcxyz.xxx",
\ {"lnum" : 10})', 'E158:')
! call assert_fails('call sign_place(5, "", "sign1", "@", {"lnum" : 10})',
\ 'E158:')
call assert_fails('call sign_place(5, "", "sign1", [], {"lnum" : 10})',
\ 'E158:')
***************
*** 429,435 ****
\ 'priority' : 10}]}],
\ sign_getplaced())
call assert_fails("call sign_getplaced('dummy.sign')", 'E158:')
! call assert_fails('call sign_getplaced("")', 'E158:')
call assert_fails('call sign_getplaced(-1)', 'E158:')
call assert_fails('call sign_getplaced("Xsign", [])', 'E715:')
call assert_equal([{'bufnr' : bufnr(''), 'signs' : []}],
--- 429,435 ----
\ 'priority' : 10}]}],
\ sign_getplaced())
call assert_fails("call sign_getplaced('dummy.sign')", 'E158:')
! call assert_fails('call sign_getplaced("&")', 'E158:')
call assert_fails('call sign_getplaced(-1)', 'E158:')
call assert_fails('call sign_getplaced("Xsign", [])', 'E715:')
call assert_equal([{'bufnr' : bufnr(''), 'signs' : []}],
***************
*** 451,457 ****
call assert_fails("call sign_unplace('',
\ {'id' : 20, 'buffer' : 'buffer.c'})", 'E158:')
call assert_fails("call sign_unplace('',
! \ {'id' : 20, 'buffer' : ''})", 'E158:')
call assert_fails("call sign_unplace('g1',
\ {'id' : 20, 'buffer' : 200})", 'E158:')
call assert_fails("call sign_unplace('g1', 'mySign')", 'E715:')
--- 451,457 ----
call assert_fails("call sign_unplace('',
\ {'id' : 20, 'buffer' : 'buffer.c'})", 'E158:')
call assert_fails("call sign_unplace('',
! \ {'id' : 20, 'buffer' : '&'})", 'E158:')
call assert_fails("call sign_unplace('g1',
\ {'id' : 20, 'buffer' : 200})", 'E158:')
call assert_fails("call sign_unplace('g1', 'mySign')", 'E715:')
***************
*** 1186,1188 ****
--- 1186,1247 ----
enew | only
call delete("Xsign")
endfunc
+
+ " Test for auto-adjusting the line number of a placed sign.
+ func Test_sign_lnum_adjust()
+ enew! | only!
+
+ sign define sign1 text=#> linehl=Comment
+ call setline(1, ['A', 'B', 'C', 'D'])
+ exe 'sign place 5 line=3 name=sign1 buffer=' . bufnr('')
+ let l = sign_getplaced(bufnr(''))
+ call assert_equal(3, l[0].signs[0].lnum)
+
+ " Add some lines before the sign and check the sign line number
+ call append(2, ['AA', 'AB', 'AC'])
+ let l = sign_getplaced(bufnr(''))
+ call assert_equal(6, l[0].signs[0].lnum)
+
+ " Delete some lines before the sign and check the sign line number
+ call deletebufline('%', 1, 2)
+ let l = sign_getplaced(bufnr(''))
+ call assert_equal(4, l[0].signs[0].lnum)
+
+ sign unplace * group=*
+ sign undefine sign1
+ enew!
+ endfunc
+
+ " Test for changing the type of a placed sign
+ func Test_sign_change_type()
+ enew! | only!
+
+ sign define sign1 text=#> linehl=Comment
+ sign define sign2 text=@@ linehl=Comment
+
+ call setline(1, ['A', 'B', 'C', 'D'])
+ exe 'sign place 4 line=3 name=sign1 buffer=' . bufnr('')
+ let l = sign_getplaced(bufnr(''))
+ call assert_equal('sign1', l[0].signs[0].name)
+ exe 'sign place 4 name=sign2 buffer=' . bufnr('')
+ let l = sign_getplaced(bufnr(''))
+ call assert_equal('sign2', l[0].signs[0].name)
+ call sign_place(4, '', 'sign1', '')
+ let l = sign_getplaced(bufnr(''))
+ call assert_equal('sign1', l[0].signs[0].name)
+
+ exe 'sign place 4 group=g1 line=4 name=sign1 buffer=' . bufnr('')
+ let l = sign_getplaced(bufnr(''), {'group' : 'g1'})
+ call assert_equal('sign1', l[0].signs[0].name)
+ exe 'sign place 4 group=g1 name=sign2 buffer=' . bufnr('')
+ let l = sign_getplaced(bufnr(''), {'group' : 'g1'})
+ call assert_equal('sign2', l[0].signs[0].name)
+ call sign_place(4, 'g1', 'sign1', '')
+ let l = sign_getplaced(bufnr(''), {'group' : 'g1'})
+ call assert_equal('sign1', l[0].signs[0].name)
+
+ sign unplace * group=*
+ sign undefine sign1
+ sign undefine sign2
+ enew!
+ endfunc
*** ../vim-8.1.0678/src/version.c 2019-01-02 00:02:07.607556145 +0100
--- src/version.c 2019-01-02 13:39:21.357897656 +0100
***************
*** 801,802 ****
--- 801,804 ----
{ /* Add new patch number below this line */
+ /**/
+ 679,
/**/
--
A fool learns from his mistakes, a wise man from someone else's.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.