0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 9.1.1132: Mark positions wrong after triggering multiline completion

Problem:  Mark positions wrong after triggering multiline completion.
Solution: Call deleted_lines_mark() after deleting lines.
          (zeertzjq)

closes: #16687

Co-authored-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq 2025-02-21 20:06:26 +01:00 committed by Christian Brabandt
parent b79fa3d9c8
commit 060e6556e2
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 47 additions and 0 deletions

View File

@ -4429,6 +4429,7 @@ ins_compl_delete(void)
VIM_CLEAR(remaining);
return;
}
deleted_lines_mark(curwin->w_cursor.lnum, 1L);
curwin->w_cursor.lnum--;
}
// move cursor to end of line

View File

@ -3182,4 +3182,48 @@ function Test_completeopt_preinsert()
delfunc Omni_test
endfunc
" Check that mark positions are correct after triggering multiline completion.
func Test_complete_multiline_marks()
func Omni_test(findstart, base)
if a:findstart
return col(".")
endif
return [
\ #{word: "func ()\n\t\nend"},
\ #{word: "foobar"},
\ #{word: "你好\n\t\n我好"}
\ ]
endfunc
set omnifunc=Omni_test
new
let lines = mapnew(range(10), 'string(v:val)')
call setline(1, lines)
call setpos("'a", [0, 3, 1, 0])
call feedkeys("A \<C-X>\<C-O>\<C-E>\<BS>", 'tx')
call assert_equal(lines, getline(1, '$'))
call assert_equal([0, 3, 1, 0], getpos("'a"))
call feedkeys("A \<C-X>\<C-O>\<C-N>\<C-E>\<BS>", 'tx')
call assert_equal(lines, getline(1, '$'))
call assert_equal([0, 3, 1, 0], getpos("'a"))
call feedkeys("A \<C-X>\<C-O>\<C-N>\<C-N>\<C-E>\<BS>", 'tx')
call assert_equal(lines, getline(1, '$'))
call assert_equal([0, 3, 1, 0], getpos("'a"))
call feedkeys("A \<C-X>\<C-O>\<C-N>\<C-N>\<C-N>\<C-E>\<BS>", 'tx')
call assert_equal(lines, getline(1, '$'))
call assert_equal([0, 3, 1, 0], getpos("'a"))
call feedkeys("A \<C-X>\<C-O>\<C-Y>", 'tx')
call assert_equal(['0 func ()', "\t", 'end'] + lines[1:], getline(1, '$'))
call assert_equal([0, 5, 1, 0], getpos("'a"))
bw!
set omnifunc&
delfunc Omni_test
endfunc
" vim: shiftwidth=2 sts=2 expandtab nofoldenable

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1132,
/**/
1131,
/**/