mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	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 <cb@256bit.org>
This commit is contained in:
		| @@ -26,6 +26,7 @@ augroup matchparen | |||||||
|   autocmd! WinLeave,BufLeave * call s:Remove_Matches() |   autocmd! WinLeave,BufLeave * call s:Remove_Matches() | ||||||
|   if exists('##TextChanged') |   if exists('##TextChanged') | ||||||
|     autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair() |     autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair() | ||||||
|  |     autocmd! TextChangedP * call s:Remove_Matches() | ||||||
|   endif |   endif | ||||||
| augroup END | augroup END | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1330,11 +1330,6 @@ ins_compl_show_pum(void) | |||||||
|     if (!pum_wanted() || !pum_enough_matches()) |     if (!pum_wanted() || !pum_enough_matches()) | ||||||
| 	return; | 	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. |     // Update the screen later, before drawing the popup menu over it. | ||||||
|     pum_call_update_screen(); |     pum_call_update_screen(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -206,6 +206,7 @@ NEW_TESTS = \ | |||||||
| 	test_matchadd_conceal \ | 	test_matchadd_conceal \ | ||||||
| 	test_matchadd_conceal_utf8 \ | 	test_matchadd_conceal_utf8 \ | ||||||
| 	test_matchfuzzy \ | 	test_matchfuzzy \ | ||||||
|  | 	test_matchparen \ | ||||||
| 	test_memory_usage \ | 	test_memory_usage \ | ||||||
| 	test_menu \ | 	test_menu \ | ||||||
| 	test_messages \ | 	test_messages \ | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								src/testdir/dumps/Test_matchparen_pum_clear_1.dump
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/testdir/dumps/Test_matchparen_pum_clear_1.dump
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
| @@ -215,59 +215,6 @@ func Test_unprintable_fileformats() | |||||||
|   call StopVimInTerminal(buf) |   call StopVimInTerminal(buf) | ||||||
| endfunc | 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\<C-D>\<C-D>") |  | ||||||
|  |  | ||||||
|   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\<Esc>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()\<CR>:\<Esc>") |  | ||||||
|   call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) |  | ||||||
|  |  | ||||||
|   call term_sendkeys(buf, "\<C-^>:\<Esc>") |  | ||||||
|   call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {}) |  | ||||||
|  |  | ||||||
|   call term_sendkeys(buf, "\<C-^>:\<Esc>") |  | ||||||
|   call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) |  | ||||||
|  |  | ||||||
|   call StopVimInTerminal(buf) |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| func Test_display_scroll_at_topline() | func Test_display_scroll_at_topline() | ||||||
|   CheckScreendump |   CheckScreendump | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										87
									
								
								src/testdir/test_matchparen.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/testdir/test_matchparen.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -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\<C-D>\<C-D>") | ||||||
|  |  | ||||||
|  |   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\<Esc>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()\<CR>:\<Esc>") | ||||||
|  |   call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_2', {}) | ||||||
|  |  | ||||||
|  |   call term_sendkeys(buf, "\<C-^>:\<Esc>") | ||||||
|  |   call VerifyScreenDump(buf, 'Test_matchparen_clear_highlight_1', {}) | ||||||
|  |  | ||||||
|  |   call term_sendkeys(buf, "\<C-^>:\<Esc>") | ||||||
|  |   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\<C-N>\<C-N>") | ||||||
|  |  | ||||||
|  |   call VerifyScreenDump(buf, 'Test_matchparen_pum_clear_1', {}) | ||||||
|  |  | ||||||
|  |   call StopVimInTerminal(buf) | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  |  | ||||||
|  | " vim: shiftwidth=2 sts=2 expandtab | ||||||
| @@ -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 */ | ||||||
|  | /**/ | ||||||
|  |     2102, | ||||||
| /**/ | /**/ | ||||||
|     2101, |     2101, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user