diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2023-02-18 20:15:44 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-02-18 20:15:44 +0000 |
commit | 441a7a94482f704b66253b8d08130f27b6b13736 (patch) | |
tree | 8af0a0b94c5a3852758fdd41dbb3a77f8afe2d1a | |
parent | 3e1ac1443af0bce41351b9d917651ac4fe41928d (diff) | |
download | vim-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.c | 19 | ||||
-rw-r--r-- | src/testdir/test_fold.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |