mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.1.0294: Text height function does not respect it's argument
Problem:  plines_m_win() does not take into account it's "limit_winheight"
          argument for filler lines below the last line of the buffer.
          (after v9.1.0280)
Solution: Check window height when "limit_winheight" is TRUE.
          (Luuk van Baal)
closes: #14449
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
						
							41208884b8
						
					
				
				
					commit
					08b0f632c1
				
			
							
								
								
									
										15
									
								
								src/misc1.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/misc1.c
									
									
									
									
									
								
							| @@ -502,7 +502,7 @@ plines_m_win(win_T *wp, linenr_T first, linenr_T last, int limit_winheight) | |||||||
| { | { | ||||||
|     int		count = 0; |     int		count = 0; | ||||||
|  |  | ||||||
|     while (first <= last) |     while (first <= last && (!limit_winheight || count < wp->w_height)) | ||||||
|     { |     { | ||||||
| #ifdef FEAT_FOLDING | #ifdef FEAT_FOLDING | ||||||
| 	int	x; | 	int	x; | ||||||
| @@ -519,17 +519,20 @@ plines_m_win(win_T *wp, linenr_T first, linenr_T last, int limit_winheight) | |||||||
| #endif | #endif | ||||||
| 	{ | 	{ | ||||||
| #ifdef FEAT_DIFF | #ifdef FEAT_DIFF | ||||||
| 	    if (first == wp->w_buffer->b_ml.ml_line_count) |  | ||||||
| 		count += diff_check_fill(wp, first + 1); |  | ||||||
| 	    if (first == wp->w_topline) | 	    if (first == wp->w_topline) | ||||||
| 		count += plines_win_nofill(wp, first, limit_winheight) | 		count += plines_win_nofill(wp, first, FALSE) + wp->w_topfill; | ||||||
| 							       + wp->w_topfill; |  | ||||||
| 	    else | 	    else | ||||||
| #endif | #endif | ||||||
| 		count += plines_win(wp, first, limit_winheight); | 		count += plines_win(wp, first, FALSE); | ||||||
| 	    ++first; | 	    ++first; | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|  | #ifdef FEAT_DIFF | ||||||
|  |     if (first == wp->w_buffer->b_ml.ml_line_count + 1) | ||||||
|  | 	count += diff_check_fill(wp, first); | ||||||
|  | #endif | ||||||
|  |     if (limit_winheight && count > wp->w_height) | ||||||
|  | 	return wp->w_height; | ||||||
|     return (count); |     return (count); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3210,7 +3210,7 @@ pagescroll(int dir, long count, int half) | |||||||
| 	{ | 	{ | ||||||
| 	    int n = plines_correct_topline(curwin, curwin->w_topline, FALSE); | 	    int n = plines_correct_topline(curwin, curwin->w_topline, FALSE); | ||||||
| 	    if (n - count < curwin->w_height && curwin->w_topline < buflen) | 	    if (n - count < curwin->w_height && curwin->w_topline < buflen) | ||||||
| 		n += plines_m_win(curwin, curwin->w_topline + 1, buflen, TRUE); | 		n += plines_m_win(curwin, curwin->w_topline + 1, buflen, FALSE); | ||||||
| 	    if (n - count < curwin->w_height) | 	    if (n - count < curwin->w_height) | ||||||
| 		count = n - curwin->w_height; | 		count = n - curwin->w_height; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -654,7 +654,7 @@ popup_show_curline(win_T *wp) | |||||||
| 	    wp->w_topline = wp->w_buffer->b_ml.ml_line_count; | 	    wp->w_topline = wp->w_buffer->b_ml.ml_line_count; | ||||||
| 	while (wp->w_topline < wp->w_cursor.lnum | 	while (wp->w_topline < wp->w_cursor.lnum | ||||||
| 		&& wp->w_topline < wp->w_buffer->b_ml.ml_line_count | 		&& wp->w_topline < wp->w_buffer->b_ml.ml_line_count | ||||||
| 		&& plines_m_win(wp, wp->w_topline, wp->w_cursor.lnum, TRUE) | 		&& plines_m_win(wp, wp->w_topline, wp->w_cursor.lnum, FALSE) | ||||||
| 								> wp->w_height) | 								> wp->w_height) | ||||||
| 	    ++wp->w_topline; | 	    ++wp->w_topline; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2025,17 +2025,19 @@ endfunc | |||||||
|   bwipe! |   bwipe! | ||||||
|   bwipe! |   bwipe! | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| " Ctrl-D reveals filler lines below the last line in the buffer. | " Ctrl-D reveals filler lines below the last line in the buffer. | ||||||
| func Test_diff_eob_halfpage() | func Test_diff_eob_halfpage() | ||||||
|   5new |   new | ||||||
|   call setline(1, ['']->repeat(10) + ['a']) |  | ||||||
|   call setline(1, ['']->repeat(10) + ['a']) |   call setline(1, ['']->repeat(10) + ['a']) | ||||||
|   diffthis |   diffthis | ||||||
|  |   new | ||||||
|   call setline(1, ['']->repeat(3) + ['a', 'b']) |   call setline(1, ['']->repeat(3) + ['a', 'b']) | ||||||
|   call setline(1, ['']->repeat(3) + ['a', 'b']) |   diffthis | ||||||
|   diffthis |   resize 5 | ||||||
|   wincmd j |   wincmd j | ||||||
|  |   resize 5 | ||||||
|  |   norm G | ||||||
|   call assert_equal(7, line('w0')) |   call assert_equal(7, line('w0')) | ||||||
|   exe "norm! \<C-D>" |   exe "norm! \<C-D>" | ||||||
|   call assert_equal(8, line('w0')) |   call assert_equal(8, line('w0')) | ||||||
|   | |||||||
| @@ -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 */ | ||||||
|  | /**/ | ||||||
|  |     294, | ||||||
| /**/ | /**/ | ||||||
|     293, |     293, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user