summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-02-18 20:15:44 +0000
committerBram Moolenaar <Bram@vim.org>2023-02-18 20:15:44 +0000
commit441a7a94482f704b66253b8d08130f27b6b13736 (patch)
tree8af0a0b94c5a3852758fdd41dbb3a77f8afe2d1a
parent3e1ac1443af0bce41351b9d917651ac4fe41928d (diff)
downloadvim-git-441a7a94482f704b66253b8d08130f27b6b13736.tar.gz
patch 9.0.1324: "gj" and "gk" do not move correctly over a closed foldv9.0.1324
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)
-rw-r--r--src/normal.c19
-rw-r--r--src/testdir/test_fold.vim7
-rw-r--r--src/version.c2
3 files changed, 11 insertions, 17 deletions
diff --git a/src/normal.c b/src/normal.c
index f5a85ac44..1ab159922 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2344,20 +2344,11 @@ nv_screengo(oparg_T *oap, int dir, long dist)
else
{
// to previous line
-#ifdef FEAT_FOLDING
- // 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)
+ if (!cursor_up_inner(curwin, 1))
{
retval = FAIL;
break;
}
- --curwin->w_cursor.lnum;
-
linelen = linetabsize_str(ml_get_curline());
if (linelen > width1)
curwin->w_curswant += (((linelen - width1 - 1) / width2)
@@ -2380,17 +2371,11 @@ nv_screengo(oparg_T *oap, int dir, long dist)
else
{
// to next line
-#ifdef FEAT_FOLDING
- // 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)
+ if (!cursor_down_inner(curwin, 1))
{
retval = FAIL;
break;
}
- curwin->w_cursor.lnum++;
curwin->w_curswant %= width2;
// Check if the cursor has moved below the number display
// when width1 < width2 (with cpoptions+=n). Subtract width2
diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim
index a35ea1e3b..e0119c497 100644
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -1748,4 +1748,11 @@ func Test_expand_fold_at_bottom_of_buffer()
bwipe!
endfunc
+func Test_fold_screenrow_motion()
+ call setline(1, repeat(['aaaa'], 5))
+ 1,4fold
+ norm Ggkzo
+ call assert_equal(1, line('.'))
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index e6ccb9242..8be5a6e64 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1324,
+/**/
1323,
/**/
1322,