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:
committed by
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