patch 9.1.0945: ComplMatchIns highlight doesn't end after inserted text
Problem: ComplMatchIns highlight doesn't end after inserted text.
Solution: Handle ComplMatchIns highlight more like search highlight.
Fix off-by-one error. Handle deleting text properly.
(zeertzjq)
closes: #16244
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index 9ea5445..8f053fa 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -1746,13 +1746,67 @@
call TermWait(buf)
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-Y>")
call VerifyScreenDump(buf, 'Test_pum_matchins_04', {})
- call term_sendkeys(buf, "\<C-E>\<Esc>")
+ call term_sendkeys(buf, "\<Esc>")
" restore after cancel completion
call TermWait(buf)
call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<Space>")
call VerifyScreenDump(buf, 'Test_pum_matchins_05', {})
- call term_sendkeys(buf, "\<C-E>\<Esc>")
+ call term_sendkeys(buf, "\<Esc>")
+
+ " text after the inserted text shouldn't be highlighted
+ call TermWait(buf)
+ call term_sendkeys(buf, "0ea \<C-X>\<C-O>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_07', {})
+ call term_sendkeys(buf, "\<C-P>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_08', {})
+ call term_sendkeys(buf, "\<C-P>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_09', {})
+ call term_sendkeys(buf, "\<C-Y>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_10', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ call StopVimInTerminal(buf)
+endfunc
+
+func Test_pum_matchins_highlight_combine()
+ CheckScreendump
+ let lines =<< trim END
+ func Omni_test(findstart, base)
+ if a:findstart
+ return col(".")
+ endif
+ return [#{word: "foo"}, #{word: "bar"}, #{word: "你好"}]
+ endfunc
+ set omnifunc=Omni_test
+ hi Normal ctermbg=blue
+ hi CursorLine cterm=underline ctermbg=green
+ set cursorline
+ call setline(1, 'aaa bbb')
+ END
+ call writefile(lines, 'Xscript', 'D')
+ let buf = RunVimInTerminal('-S Xscript', {})
+
+ " when ComplMatchIns is not set, CursorLine applies normally
+ call term_sendkeys(buf, "0ea \<C-X>\<C-O>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_combine_01', {})
+ call term_sendkeys(buf, "\<C-E>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_combine_02', {})
+ call term_sendkeys(buf, "\<BS>\<Esc>")
+
+ " when ComplMatchIns is set, it is applied over CursorLine
+ call TermWait(buf)
+ call term_sendkeys(buf, ":hi ComplMatchIns ctermbg=red ctermfg=yellow\<CR>")
+ call TermWait(buf)
+ call term_sendkeys(buf, "0ea \<C-X>\<C-O>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_combine_03', {})
+ call term_sendkeys(buf, "\<C-P>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_combine_04', {})
+ call term_sendkeys(buf, "\<C-P>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_combine_05', {})
+ call term_sendkeys(buf, "\<C-E>")
+ call VerifyScreenDump(buf, 'Test_pum_matchins_combine_06', {})
+ call term_sendkeys(buf, "\<Esc>")
call StopVimInTerminal(buf)
endfunc