patch 9.1.0617: Cursor moves beyond first line of folded end of buffer

Commit: 
https://github.com/vim/vim/commit/dc373d456b5919ed2b8f83e8642c115f646ca93d
Author: Luuk van Baal <luukvb...@gmail.com>
Date:   Thu Jul 25 21:24:32 2024 +0200

    patch 9.1.0617: Cursor moves beyond first line of folded end of buffer
    
    Problem:  Cursor moves beyond start of a folded range at the end of a 
buffer.
    Solution: Move cursor to start of fold when going beyond end of buffer.
              Check that cursor moved to detect FAIL in outer cursor function.
              (Luuk van Baal)
    
    closes: #15344
    
    Signed-off-by: Luuk van Baal <luukvb...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/edit.c b/src/edit.c
index e75a1cf11..8a37a6169 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -2849,7 +2849,6 @@ cursor_down_inner(win_T *wp, long n)
        // count each sequence of folded lines as one logical line
        while (n--)
        {
-           // Move to last line of fold, will fail if it's the end-of-file.
            if (hasFoldingWin(wp, lnum, NULL, &last, TRUE, NULL))
                lnum = last + 1;
            else
@@ -2877,8 +2876,11 @@ cursor_down(
 {
     linenr_T   lnum = curwin->w_cursor.lnum;
     linenr_T   line_count = curwin->w_buffer->b_ml.ml_line_count;
-    // This fails if the cursor is already in the last line or would move
-    // beyond the last line and '-' is in 'cpoptions'
+    // This fails if the cursor is already in the last (folded) line, or would
+    // move beyond the last line and '-' is in 'cpoptions'.
+#ifdef FEAT_FOLDING
+    hasFoldingWin(curwin, lnum, NULL, &lnum, TRUE, NULL);
+#endif
     if (n > 0
            && (lnum >= line_count
                || (lnum + n > line_count
diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim
index dedc4a243..7fb004331 100644
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -1914,4 +1914,18 @@ func Test_foldexpr_end_fold()
   bwipe!
 endfunc
 
+" Test moving cursor down to or beyond start of folded end of buffer.
+func Test_cursor_down_fold_eob()
+  call setline(1, range(1, 4))
+  norm Gzf2kj
+  call assert_equal(2, line('.'))
+  norm zojzc
+  call assert_equal(3, line('.'))
+  norm j
+  call assert_equal(3, line('.'))
+  norm k2j
+  call assert_equal(4, line('.'))
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 9ee1592cf..1a267fd3f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    617,
 /**/
     616,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1sX4A9-00AaUc-KU%40256bit.org.

Raspunde prin e-mail lui