patch 9.1.1305: completion menu active after switching windows/tabs
Problem: When switching to another window or tab page while the
completion menu is active, the menu stays visible, although it
belongs to the previous window/tab page context (Evgeni
Chasnovski).
Solution: Track the window and tab page where completion started. Detect
changes in the main editing loop and cancel completion mode if
the current window or tab page differs from where completion
started.
fixes: #17090
closes: #17101
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index b2952fd..ac879d2 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -2157,4 +2157,36 @@
call StopVimInTerminal(buf)
endfunc
+func Test_pum_clear_when_switch_tab_or_win()
+ CheckScreendump
+
+ let lines =<< trim END
+ inoremap <F4> <Cmd>wincmd w<CR>
+ inoremap <F5> <Cmd>tabnext<CR>
+ END
+
+ call writefile(lines, 'Xtest', 'D')
+ let buf = RunVimInTerminal('-S Xtest', {})
+
+ call term_sendkeys(buf, ":tabe\<CR>")
+ call TermWait(buf, 50)
+ call term_sendkeys(buf, "Aaa aaa \<C-N>")
+ call VerifyScreenDump(buf, 'Test_tabnext_clear_pum_01', {})
+ call term_sendkeys(buf, "\<F5>")
+ call TermWait(buf, 50)
+ call VerifyScreenDump(buf, 'Test_tabnext_clear_pum_02', {})
+ call term_sendkeys(buf, "\<ESC>:tabclose!\<CR>")
+
+ call term_sendkeys(buf, ":vnew win_b\<CR>")
+ call TermWait(buf, 50)
+ call term_sendkeys(buf, "Abb bbb \<C-N>")
+ call VerifyScreenDump(buf, 'Test_switchwin_clear_pum_01', {})
+ call term_sendkeys(buf, "\<F4>")
+ call TermWait(buf, 50)
+ call VerifyScreenDump(buf, 'Test_switchwin_clear_pum_02', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+
" vim: shiftwidth=2 sts=2 expandtab