From 9588666360e94de3ff58d4bc79aa9148fbf5fc44 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 12 Nov 2023 16:55:01 +0100 Subject: [PATCH] patch 9.0.2102: matchparen highlight not cleared in completion mode Problem: matchparen highlight not cleared in completion mode Solution: Clear matchparen highlighting in completion mode Remove hard-coded hack in insexpand.c to clear the :3match before displaying the completion menu. Add a test for matchparen highlighting. While at it, move all test tests related to the matchparen plugin into a separate test file. closes: #13493 closes: #13524 Signed-off-by: Christian Brabandt --- runtime/plugin/matchparen.vim | 1 + src/insexpand.c | 5 -- src/testdir/Make_all.mak | 1 + .../dumps/Test_matchparen_pum_clear_1.dump | 10 +++ src/testdir/test_display.vim | 53 ----------- src/testdir/test_matchparen.vim | 87 +++++++++++++++++++ src/version.c | 2 + 7 files changed, 101 insertions(+), 58 deletions(-) create mode 100644 src/testdir/dumps/Test_matchparen_pum_clear_1.dump create mode 100644 src/testdir/test_matchparen.vim diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim index 9d57545ee8..4235a0d39b 100644 --- a/runtime/plugin/matchparen.vim +++ b/runtime/plugin/matchparen.vim @@ -26,6 +26,7 @@ augroup matchparen autocmd! WinLeave,BufLeave * call s:Remove_Matches() if exists('##TextChanged') autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair() + autocmd! TextChangedP * call s:Remove_Matches() endif augroup END diff --git a/src/insexpand.c b/src/insexpand.c index 7ede6bd91f..e870147012 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -1330,11 +1330,6 @@ ins_compl_show_pum(void) if (!pum_wanted() || !pum_enough_matches()) return; -#if defined(FEAT_EVAL) - // Dirty hard-coded hack: remove any matchparen highlighting. - do_cmdline_cmd((char_u *)"if exists('g:loaded_matchparen')|:3match none|endif"); -#endif - // Update the screen later, before drawing the popup menu over it. pum_call_update_screen(); diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 6b4d8df329..1614cf0dc8 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -206,6 +206,7 @@ NEW_TESTS = \ test_matchadd_conceal \ test_matchadd_conceal_utf8 \ test_matchfuzzy \ + test_matchparen \ test_memory_usage \ test_menu \ test_messages \ diff --git a/src/testdir/dumps/Test_matchparen_pum_clear_1.dump b/src/testdir/dumps/Test_matchparen_pum_clear_1.dump new file mode 100644 index 0000000000..1690fd6236 --- /dev/null +++ b/src/testdir/dumps/Test_matchparen_pum_clear_1.dump @@ -0,0 +1,10 @@ +|a+0&#ffffff0@1| @72 +|a@2| @71 +|a@3| @70 +|(|a@2>)| @69 +| +0#0000001#ffd7ff255|a@1| @12| +0#4040ff13#ffffff0@58 +| +0#0000001#e0e0e08|a@2| @11| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|a@3| @10| +0#4040ff13#ffffff0@58 +|~| @73 +|~| @73 +|-+2#0000000&@1| |K|e|y|w|o|r|d| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |2| |o|f| |3| +0#0000000&@33 diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim index 55764ba160..5e0f86ad66 100644 --- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -215,59 +215,6 @@ func Test_unprintable_fileformats() call StopVimInTerminal(buf) endfunc -" Test for scrolling that modifies buffer during visual block -func Test_visual_block_scroll() - CheckScreendump - - let lines =<< trim END - source $VIMRUNTIME/plugin/matchparen.vim - set scrolloff=1 - call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}']) - call cursor(5, 1) - END - - let filename = 'Xvisualblockmodifiedscroll' - call writefile(lines, filename, 'D') - - let buf = RunVimInTerminal('-S '.filename, #{rows: 7}) - call term_sendkeys(buf, "V\\") - - call VerifyScreenDump(buf, 'Test_display_visual_block_scroll', {}) - - call StopVimInTerminal(buf) -endfunc - -" Test for clearing paren highlight when switching buffers -func Test_matchparen_clear_highlight() - CheckScreendump - - let lines =<< trim END - source $VIMRUNTIME/plugin/matchparen.vim - set hidden - call setline(1, ['()']) - normal 0 - - func OtherBuffer() - enew - exe "normal iaa\0" - endfunc - END - call writefile(lines, 'XMatchparenClear', 'D') - let buf = RunVimInTerminal('-S XMatchparenClear', #{rows: 5}) - call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {}) - - call term_sendkeys(buf, ":call OtherBuffer()\:\") - call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) - - call term_sendkeys(buf, "\:\") - call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {}) - - call term_sendkeys(buf, "\:\") - call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) - - call StopVimInTerminal(buf) -endfunc - func Test_display_scroll_at_topline() CheckScreendump diff --git a/src/testdir/test_matchparen.vim b/src/testdir/test_matchparen.vim new file mode 100644 index 0000000000..6d09b6f30a --- /dev/null +++ b/src/testdir/test_matchparen.vim @@ -0,0 +1,87 @@ +" Test for the matchparen plugin + +if !has('gui_running') && has('unix') + set term=ansi +endif + +source view_util.vim +source check.vim +source screendump.vim + +" Test for scrolling that modifies buffer during visual block +func Test_visual_block_scroll() + CheckScreendump + + let lines =<< trim END + source $VIMRUNTIME/plugin/matchparen.vim + set scrolloff=1 + call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}']) + call cursor(5, 1) + END + + let filename = 'Xvisualblockmodifiedscroll' + call writefile(lines, filename, 'D') + + let buf = RunVimInTerminal('-S '.filename, #{rows: 7}) + call term_sendkeys(buf, "V\\") + + call VerifyScreenDump(buf, 'Test_display_visual_block_scroll', {}) + + call StopVimInTerminal(buf) +endfunc + +" Test for clearing paren highlight when switching buffers +func Test_matchparen_clear_highlight() + CheckScreendump + + let lines =<< trim END + source $VIMRUNTIME/plugin/matchparen.vim + set hidden + call setline(1, ['()']) + normal 0 + + func OtherBuffer() + enew + exe "normal iaa\0" + endfunc + END + call writefile(lines, 'XMatchparenClear', 'D') + let buf = RunVimInTerminal('-S XMatchparenClear', #{rows: 5}) + call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {}) + + call term_sendkeys(buf, ":call OtherBuffer()\:\") + call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) + + call term_sendkeys(buf, "\:\") + call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {}) + + call term_sendkeys(buf, "\:\") + call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) + + call StopVimInTerminal(buf) +endfunc + +" Test for scrolling that modifies buffer during visual block +func Test_matchparen_pum_clear() + CheckScreendump + + let lines =<< trim END + source $VIMRUNTIME/plugin/matchparen.vim + set completeopt=menuone + call setline(1, ['aa', 'aaa', 'aaaa', '(a)']) + call cursor(4, 3) + END + + let filename = 'Xmatchparen' + call writefile(lines, filename, 'D') + + let buf = RunVimInTerminal('-S '.filename, #{rows: 10}) + call term_sendkeys(buf, "i\\") + + call VerifyScreenDump(buf, 'Test_matchparen_pum_clear_1', {}) + + call StopVimInTerminal(buf) +endfunc + + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 12821542f3..238e3df101 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2102, /**/ 2101, /**/