mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.0.1324: "gj" and "gk" do not move correctly over a closed fold
Problem:    "gj" and "gk" do not move correctly over a closed fold.
Solution:   Use the same code as used for "j"/"k" to go to the next/previous
            line. (Luuk van Baal, closes #12007)
			
			
This commit is contained in:
		
				
					committed by
					
						 Bram Moolenaar
						Bram Moolenaar
					
				
			
			
				
	
			
			
			
						parent
						
							3e1ac1443a
						
					
				
				
					commit
					441a7a9448
				
			
							
								
								
									
										19
									
								
								src/normal.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/normal.c
									
									
									
									
									
								
							| @@ -2344,20 +2344,11 @@ nv_screengo(oparg_T *oap, int dir, long dist) | |||||||
| 	    else | 	    else | ||||||
| 	    { | 	    { | ||||||
| 		// to previous line | 		// to previous line | ||||||
| #ifdef FEAT_FOLDING | 		if (!cursor_up_inner(curwin, 1)) | ||||||
| 		// Move to the start of a closed fold.  Don't do that when |  | ||||||
| 		// 'foldopen' contains "all": it will open in a moment. |  | ||||||
| 		if (!(fdo_flags & FDO_ALL)) |  | ||||||
| 		    (void)hasFolding(curwin->w_cursor.lnum, |  | ||||||
| 						&curwin->w_cursor.lnum, NULL); |  | ||||||
| #endif |  | ||||||
| 		if (curwin->w_cursor.lnum == 1) |  | ||||||
| 		{ | 		{ | ||||||
| 		    retval = FAIL; | 		    retval = FAIL; | ||||||
| 		    break; | 		    break; | ||||||
| 		} | 		} | ||||||
| 		--curwin->w_cursor.lnum; |  | ||||||
|  |  | ||||||
| 		linelen = linetabsize_str(ml_get_curline()); | 		linelen = linetabsize_str(ml_get_curline()); | ||||||
| 		if (linelen > width1) | 		if (linelen > width1) | ||||||
| 		    curwin->w_curswant += (((linelen - width1 - 1) / width2) | 		    curwin->w_curswant += (((linelen - width1 - 1) / width2) | ||||||
| @@ -2380,17 +2371,11 @@ nv_screengo(oparg_T *oap, int dir, long dist) | |||||||
| 	    else | 	    else | ||||||
| 	    { | 	    { | ||||||
| 		// to next line | 		// to next line | ||||||
| #ifdef FEAT_FOLDING | 		if (!cursor_down_inner(curwin, 1)) | ||||||
| 		// Move to the end of a closed fold. |  | ||||||
| 		(void)hasFolding(curwin->w_cursor.lnum, NULL, |  | ||||||
| 						      &curwin->w_cursor.lnum); |  | ||||||
| #endif |  | ||||||
| 		if (curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count) |  | ||||||
| 		{ | 		{ | ||||||
| 		    retval = FAIL; | 		    retval = FAIL; | ||||||
| 		    break; | 		    break; | ||||||
| 		} | 		} | ||||||
| 		curwin->w_cursor.lnum++; |  | ||||||
| 		curwin->w_curswant %= width2; | 		curwin->w_curswant %= width2; | ||||||
| 		// Check if the cursor has moved below the number display | 		// Check if the cursor has moved below the number display | ||||||
| 		// when width1 < width2 (with cpoptions+=n). Subtract width2 | 		// when width1 < width2 (with cpoptions+=n). Subtract width2 | ||||||
|   | |||||||
| @@ -1748,4 +1748,11 @@ func Test_expand_fold_at_bottom_of_buffer() | |||||||
|  |  | ||||||
|   bwipe! |   bwipe! | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | func Test_fold_screenrow_motion() | ||||||
|  |   call setline(1, repeat(['aaaa'], 5)) | ||||||
|  |   1,4fold | ||||||
|  |   norm Ggkzo | ||||||
|  |   call assert_equal(1, line('.')) | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|   | |||||||
| @@ -695,6 +695,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 */ | ||||||
|  | /**/ | ||||||
|  |     1324, | ||||||
| /**/ | /**/ | ||||||
|     1323, |     1323, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user