]> granicus.if.org Git - vim/commitdiff
patch 8.2.2711: "gj" in a closed fold does not move out of the fold v8.2.2711
authorBram Moolenaar <Bram@vim.org>
Sun, 4 Apr 2021 19:26:04 +0000 (21:26 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 4 Apr 2021 19:26:04 +0000 (21:26 +0200)
Problem:    "gj" in a closed fold does not move out of the fold. (Marco Hinz)
Solution:   Add a check for being in a closed fold. (closes #8062)

src/normal.c
src/testdir/test_fold.vim
src/version.c

index 4299a90df449b4a999547fd4b9e4fa58079980fb..a15ae358901971de94b9c4b44fc6900426a15d46 100644 (file)
@@ -2564,7 +2564,11 @@ nv_screengo(oparg_T *oap, int dir, long dist)
       {
        if (dir == BACKWARD)
        {
-           if ((long)curwin->w_curswant >= width1)
+           if ((long)curwin->w_curswant >= width1
+#ifdef FEAT_FOLDING
+                   && !hasFolding(curwin->w_cursor.lnum, NULL, NULL)
+#endif
+              )
                // Move back within the line. This can give a negative value
                // for w_curswant if width1 < width2 (with cpoptions+=n),
                // which will get clipped to column 0.
@@ -2598,7 +2602,11 @@ nv_screengo(oparg_T *oap, int dir, long dist)
                n = ((linelen - width1 - 1) / width2 + 1) * width2 + width1;
            else
                n = width1;
-           if (curwin->w_curswant + width2 < (colnr_T)n)
+           if (curwin->w_curswant + width2 < (colnr_T)n
+#ifdef FEAT_FOLDING
+                   && !hasFolding(curwin->w_cursor.lnum, NULL, NULL)
+#endif
+                   )
                // move forward within line
                curwin->w_curswant += width2;
            else
index 20171f03407a59ddb0bb95b88842e7a3881de37b..e5dc1ececa88d68751081903aac815d5163dfb6e 100644 (file)
@@ -890,28 +890,33 @@ func Test_fold_relative_move()
   new
   set fdm=indent sw=2 wrap tw=80
 
-  let content = [ '  foo', '  bar', '  baz',
-              \   repeat('x', &columns + 1),
-              \   '  foo', '  bar', '  baz'
+  let longtext = repeat('x', &columns + 1)
+  let content = [ '  foo', '  ' .. longtext, '  baz',
+              \   longtext,
+              \   '  foo', '  ' .. longtext, '  baz'
               \ ]
   call append(0, content)
 
   normal zM
 
-  call cursor(3, 1)
-  call assert_true(foldclosed(line('.')))
-  normal gj
-  call assert_equal(2, winline())
+  for lnum in range(1, 3)
+    call cursor(lnum, 1)
+    call assert_true(foldclosed(line('.')))
+    normal gj
+    call assert_equal(2, winline())
+  endfor
 
   call cursor(2, 1)
   call assert_true(foldclosed(line('.')))
   normal 2gj
   call assert_equal(3, winline())
 
-  call cursor(5, 1)
-  call assert_true(foldclosed(line('.')))
-  normal gk
-  call assert_equal(3, winline())
+  for lnum in range(5, 7)
+    call cursor(lnum, 1)
+    call assert_true(foldclosed(line('.')))
+    normal gk
+    call assert_equal(3, winline())
+  endfor
 
   call cursor(6, 1)
   call assert_true(foldclosed(line('.')))
index db31f8874fab264cf61ba2938024906a1dd25a88..c9632c36155afde28b2a105fad17d9625a14dace 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2711,
 /**/
     2710,
 /**/