mirror of
https://github.com/vim/vim.git
synced 2025-08-26 20:03:41 -04:00
patch 9.1.1205: completion: preinserted text not removed when closing pum
Problem: completion: preinserted text not removed when closing pum Solution: delete preinsert text inside in ins_compl_stop() (glepnir). closes: #16891 Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
8021830827
commit
84a7503e29
@ -2541,6 +2541,10 @@ ins_compl_stop(int c, int prev_mode, int retval)
|
|||||||
int want_cindent;
|
int want_cindent;
|
||||||
char_u *word = NULL;
|
char_u *word = NULL;
|
||||||
|
|
||||||
|
// Remove pre-inserted text when present.
|
||||||
|
if (ins_compl_preinsert_effect())
|
||||||
|
ins_compl_delete();
|
||||||
|
|
||||||
// Get here when we have finished typing a sequence of ^N and
|
// Get here when we have finished typing a sequence of ^N and
|
||||||
// ^P or other completion characters in CTRL-X mode. Free up
|
// ^P or other completion characters in CTRL-X mode. Free up
|
||||||
// memory that was used, and make sure we can redo the insert.
|
// memory that was used, and make sure we can redo the insert.
|
||||||
|
@ -3202,53 +3202,55 @@ function Test_completeopt_preinsert()
|
|||||||
endfunc
|
endfunc
|
||||||
set omnifunc=Omni_test
|
set omnifunc=Omni_test
|
||||||
set completeopt=menu,menuone,preinsert
|
set completeopt=menu,menuone,preinsert
|
||||||
|
func GetLine()
|
||||||
|
let g:line = getline('.')
|
||||||
|
let g:col = col('.')
|
||||||
|
endfunc
|
||||||
|
|
||||||
new
|
new
|
||||||
call feedkeys("S\<C-X>\<C-O>f", 'tx')
|
inoremap <buffer><F5> <C-R>=GetLine()<CR>
|
||||||
call assert_equal("fobar", getline('.'))
|
call feedkeys("S\<C-X>\<C-O>f\<F5>\<ESC>", 'tx')
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal("fobar", g:line)
|
||||||
|
call assert_equal(2, g:col)
|
||||||
|
|
||||||
call feedkeys("S\<C-X>\<C-O>foo", 'tx')
|
call feedkeys("S\<C-X>\<C-O>foo\<F5><ESC>", 'tx')
|
||||||
call assert_equal("foobar", getline('.'))
|
call assert_equal("foobar", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
|
||||||
|
|
||||||
call feedkeys("S\<C-X>\<C-O>foo\<BS>\<BS>\<BS>", 'tx')
|
call feedkeys("S\<C-X>\<C-O>foo\<BS>\<BS>\<BS>", 'tx')
|
||||||
call assert_equal("", getline('.'))
|
call assert_equal("", getline('.'))
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
|
||||||
|
|
||||||
" delete a character and input new leader
|
" delete a character and input new leader
|
||||||
call feedkeys("S\<C-X>\<C-O>foo\<BS>b", 'tx')
|
call feedkeys("S\<C-X>\<C-O>foo\<BS>b\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("fobar", getline('.'))
|
call assert_equal("fobar", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(4, g:col)
|
||||||
|
|
||||||
" delete preinsert when prepare completion
|
" delete preinsert when prepare completion
|
||||||
call feedkeys("S\<C-X>\<C-O>f\<Space>", 'tx')
|
call feedkeys("S\<C-X>\<C-O>f\<Space>", 'tx')
|
||||||
call assert_equal("f ", getline('.'))
|
call assert_equal("f ", getline('.'))
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
|
||||||
|
|
||||||
call feedkeys("S\<C-X>\<C-O>你", 'tx')
|
call feedkeys("S\<C-X>\<C-O>你\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("你的", getline('.'))
|
call assert_equal("你的", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(4, g:col)
|
||||||
|
|
||||||
call feedkeys("S\<C-X>\<C-O>你好", 'tx')
|
call feedkeys("S\<C-X>\<C-O>你好\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("你好世界", getline('.'))
|
call assert_equal("你好世界", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(7, g:col)
|
||||||
|
|
||||||
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>f", 'tx')
|
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>f\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello fobar wo", getline('.'))
|
call assert_equal("hello fobar wo", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(9, g:col)
|
||||||
|
|
||||||
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>f\<BS>", 'tx')
|
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>f\<BS>\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello wo", getline('.'))
|
call assert_equal("hello wo", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(8, g:col)
|
||||||
|
|
||||||
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>foo", 'tx')
|
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>foo\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello foobar wo", getline('.'))
|
call assert_equal("hello foobar wo", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(11, g:col)
|
||||||
|
|
||||||
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>foo\<BS>b", 'tx')
|
call feedkeys("Shello wo\<Left>\<Left>\<Left>\<C-X>\<C-O>foo\<BS>b\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello fobar wo", getline('.'))
|
call assert_equal("hello fobar wo", g:line)
|
||||||
call feedkeys("\<C-E>\<ESC>", 'tx')
|
call assert_equal(11, g:col)
|
||||||
|
|
||||||
" confirm
|
" confirm
|
||||||
call feedkeys("S\<C-X>\<C-O>f\<C-Y>", 'tx')
|
call feedkeys("S\<C-X>\<C-O>f\<C-Y>", 'tx')
|
||||||
@ -3260,9 +3262,9 @@ function Test_completeopt_preinsert()
|
|||||||
call assert_equal("fo", getline('.'))
|
call assert_equal("fo", getline('.'))
|
||||||
call assert_equal(2, col('.'))
|
call assert_equal(2, col('.'))
|
||||||
|
|
||||||
call feedkeys("S hello hero\<CR>h\<C-X>\<C-N>", 'tx')
|
call feedkeys("S hello hero\<CR>h\<C-X>\<C-N>\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello", getline('.'))
|
call assert_equal("hello", g:line)
|
||||||
call assert_equal(1, col('.'))
|
call assert_equal(2, col('.'))
|
||||||
|
|
||||||
call feedkeys("Sh\<C-X>\<C-N>\<C-Y>", 'tx')
|
call feedkeys("Sh\<C-X>\<C-N>\<C-Y>", 'tx')
|
||||||
call assert_equal("hello", getline('.'))
|
call assert_equal("hello", getline('.'))
|
||||||
@ -3282,17 +3284,17 @@ function Test_completeopt_preinsert()
|
|||||||
call assert_equal(1, col('.'))
|
call assert_equal(1, col('.'))
|
||||||
|
|
||||||
" whole line
|
" whole line
|
||||||
call feedkeys("Shello hero\<CR>\<C-X>\<C-L>", 'tx')
|
call feedkeys("Shello hero\<CR>\<C-X>\<C-L>\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello hero", getline('.'))
|
call assert_equal("hello hero", g:line)
|
||||||
call assert_equal(1, col('.'))
|
call assert_equal(1, g:col)
|
||||||
|
|
||||||
call feedkeys("Shello hero\<CR>he\<C-X>\<C-L>", 'tx')
|
call feedkeys("Shello hero\<CR>he\<C-X>\<C-L>\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hello hero", getline('.'))
|
call assert_equal("hello hero", g:line)
|
||||||
call assert_equal(2, col('.'))
|
call assert_equal(3, g:col)
|
||||||
|
|
||||||
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>er", 'tx')
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>er\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("hero", getline('.'))
|
call assert_equal("hero", g:line)
|
||||||
call assert_equal(3, col('.'))
|
call assert_equal(4, g:col)
|
||||||
|
|
||||||
" can not work with fuzzy
|
" can not work with fuzzy
|
||||||
set cot+=fuzzy
|
set cot+=fuzzy
|
||||||
@ -3302,13 +3304,13 @@ function Test_completeopt_preinsert()
|
|||||||
|
|
||||||
" test for fuzzy and noinsert
|
" test for fuzzy and noinsert
|
||||||
set cot+=noinsert
|
set cot+=noinsert
|
||||||
call feedkeys("S\<C-X>\<C-O>fb", 'tx')
|
call feedkeys("S\<C-X>\<C-O>fb\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("fb", getline('.'))
|
call assert_equal("fb", g:line)
|
||||||
call assert_equal(2, col('.'))
|
call assert_equal(3, g:col)
|
||||||
|
|
||||||
call feedkeys("S\<C-X>\<C-O>你", 'tx')
|
call feedkeys("S\<C-X>\<C-O>你\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("你", getline('.'))
|
call assert_equal("你", g:line)
|
||||||
call assert_equal(1, col('.'))
|
call assert_equal(4, g:col)
|
||||||
|
|
||||||
call feedkeys("S\<C-X>\<C-O>fb\<C-Y>", 'tx')
|
call feedkeys("S\<C-X>\<C-O>fb\<C-Y>", 'tx')
|
||||||
call assert_equal("fobar", getline('.'))
|
call assert_equal("fobar", getline('.'))
|
||||||
@ -3321,9 +3323,15 @@ function Test_completeopt_preinsert()
|
|||||||
call assert_equal(7, col('.'))
|
call assert_equal(7, col('.'))
|
||||||
|
|
||||||
set cot=preinsert,menuone
|
set cot=preinsert,menuone
|
||||||
call feedkeys("Sfoo1 foo2\<CR>f\<C-X>\<C-N>", 'tx')
|
call feedkeys("Sfoo1 foo2\<CR>f\<C-X>\<C-N>\<F5>\<ESC>", 'tx')
|
||||||
call assert_equal("foo1", getline('.'))
|
call assert_equal("foo1", g:line)
|
||||||
call assert_equal(1, col('.'))
|
call assert_equal(2, g:col)
|
||||||
|
|
||||||
|
inoremap <buffer> <f3> <cmd>call complete(4, [{'word': "fobar"}, {'word': "foobar"}])<CR>
|
||||||
|
call feedkeys("Swp.\<F3>\<F5>\<BS>\<ESC>", 'tx')
|
||||||
|
call assert_equal("wp.fobar", g:line)
|
||||||
|
call assert_equal(4, g:col)
|
||||||
|
call assert_equal("wp.", getline('.'))
|
||||||
|
|
||||||
bw!
|
bw!
|
||||||
set cot&
|
set cot&
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1205,
|
||||||
/**/
|
/**/
|
||||||
1204,
|
1204,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user