0
0
mirror of https://github.com/vim/vim.git synced 2025-10-18 07:54:29 -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:
Luuk van Baal
2023-02-18 20:15:44 +00:00
committed by Bram Moolenaar
parent 3e1ac1443a
commit 441a7a9448
3 changed files with 11 additions and 17 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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,
/**/ /**/