mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.1.1136: Match highlighting marks a buffer region as changed
Problem:  Match highlighting marks a buffer region to be redrawn as if
          its buffer text was changed, unnecessarily invoking syntax code.
Solution: Set the `w_redraw_top/bot` variables instead of the b_mod_* ones
          (Luuk van Baal)
closes: #16697
Signed-off-by: Luuk van Baal <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
			
			
This commit is contained in:
		
				
					committed by
					
						 Christian Brabandt
						Christian Brabandt
					
				
			
			
				
	
			
			
			
						parent
						
							bf595ae4ac
						
					
				
				
					commit
					7bbb0f357e
				
			| @@ -3365,9 +3365,21 @@ redrawWinline( | ||||
|     win_T	*wp, | ||||
|     linenr_T	lnum) | ||||
| { | ||||
|     if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum) | ||||
| 	wp->w_redraw_top = lnum; | ||||
|     if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum) | ||||
| 	wp->w_redraw_bot = lnum; | ||||
|     redraw_win_later(wp, UPD_VALID); | ||||
|     redraw_win_range_later(wp, lnum, lnum); | ||||
| } | ||||
|  | ||||
|     void | ||||
| redraw_win_range_later( | ||||
|     win_T	*wp, | ||||
|     linenr_T	first, | ||||
|     linenr_T	last) | ||||
| { | ||||
|     if (last >= wp->w_topline && first < wp->w_botline) | ||||
|     { | ||||
| 	if (wp->w_redraw_top == 0 || wp->w_redraw_top > first) | ||||
| 	    wp->w_redraw_top = first; | ||||
| 	if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < last) | ||||
| 	    wp->w_redraw_bot = last; | ||||
| 	redraw_win_later(wp, UPD_VALID); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -2384,12 +2384,7 @@ foldUpdateIEMS(win_T *wp, linenr_T top, linenr_T bot) | ||||
|     // this in other situations, the changed lines will be redrawn anyway and | ||||
|     // this method can cause the whole window to be updated. | ||||
|     if (end != bot) | ||||
|     { | ||||
| 	if (wp->w_redraw_top == 0 || wp->w_redraw_top > top) | ||||
| 	    wp->w_redraw_top = top; | ||||
| 	if (wp->w_redraw_bot < end) | ||||
| 	    wp->w_redraw_bot = end; | ||||
|     } | ||||
| 	redraw_win_range_later(wp, top, end); | ||||
|  | ||||
|     invalid_top = (linenr_T)0; | ||||
| } | ||||
|   | ||||
							
								
								
									
										30
									
								
								src/match.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								src/match.c
									
									
									
									
									
								
							| @@ -187,20 +187,7 @@ match_add( | ||||
| 	// Calculate top and bottom lines for redrawing area | ||||
| 	if (toplnum != 0) | ||||
| 	{ | ||||
| 	    if (wp->w_buffer->b_mod_set) | ||||
| 	    { | ||||
| 		if (wp->w_buffer->b_mod_top > toplnum) | ||||
| 		    wp->w_buffer->b_mod_top = toplnum; | ||||
| 		if (wp->w_buffer->b_mod_bot < botlnum) | ||||
| 		    wp->w_buffer->b_mod_bot = botlnum; | ||||
| 	    } | ||||
| 	    else | ||||
| 	    { | ||||
| 		wp->w_buffer->b_mod_set = TRUE; | ||||
| 		wp->w_buffer->b_mod_top = toplnum; | ||||
| 		wp->w_buffer->b_mod_bot = botlnum; | ||||
| 		wp->w_buffer->b_mod_xlines = 0; | ||||
| 	    } | ||||
| 	    redraw_win_range_later(wp, toplnum, botlnum); | ||||
| 	    m->mit_toplnum = toplnum; | ||||
| 	    m->mit_botlnum = botlnum; | ||||
| 	    rtype = UPD_VALID; | ||||
| @@ -269,20 +256,7 @@ match_delete(win_T *wp, int id, int perr) | ||||
|     vim_free(cur->mit_pattern); | ||||
|     if (cur->mit_toplnum != 0) | ||||
|     { | ||||
| 	if (wp->w_buffer->b_mod_set) | ||||
| 	{ | ||||
| 	    if (wp->w_buffer->b_mod_top > cur->mit_toplnum) | ||||
| 		wp->w_buffer->b_mod_top = cur->mit_toplnum; | ||||
| 	    if (wp->w_buffer->b_mod_bot < cur->mit_botlnum) | ||||
| 		wp->w_buffer->b_mod_bot = cur->mit_botlnum; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 	    wp->w_buffer->b_mod_set = TRUE; | ||||
| 	    wp->w_buffer->b_mod_top = cur->mit_toplnum; | ||||
| 	    wp->w_buffer->b_mod_bot = cur->mit_botlnum; | ||||
| 	    wp->w_buffer->b_mod_xlines = 0; | ||||
| 	} | ||||
| 	redraw_win_range_later(wp, cur->mit_toplnum, cur->mit_botlnum); | ||||
| 	rtype = UPD_VALID; | ||||
|     } | ||||
|     vim_free(cur->mit_pos_array); | ||||
|   | ||||
| @@ -24,4 +24,5 @@ void status_redraw_curbuf(void); | ||||
| void redraw_statuslines(void); | ||||
| void win_redraw_last_status(frame_T *frp); | ||||
| void redrawWinline(win_T *wp, linenr_T lnum); | ||||
| void redraw_win_range_later(win_T *wp, linenr_T first, linenr_T last); | ||||
| /* vim: set ft=c : */ | ||||
|   | ||||
| @@ -704,6 +704,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     1136, | ||||
| /**/ | ||||
|     1135, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user