1
0
forked from aniani/vim

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 <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Luuk van Baal
2024-07-25 21:24:32 +02:00
committed by Christian Brabandt
parent eb4b903c9b
commit dc373d456b
3 changed files with 21 additions and 3 deletions

View File

@@ -2849,7 +2849,6 @@ cursor_down_inner(win_T *wp, long n)
// count each sequence of folded lines as one logical line // count each sequence of folded lines as one logical line
while (n--) 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)) if (hasFoldingWin(wp, lnum, NULL, &last, TRUE, NULL))
lnum = last + 1; lnum = last + 1;
else else
@@ -2877,8 +2876,11 @@ cursor_down(
{ {
linenr_T lnum = curwin->w_cursor.lnum; linenr_T lnum = curwin->w_cursor.lnum;
linenr_T line_count = curwin->w_buffer->b_ml.ml_line_count; 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 // This fails if the cursor is already in the last (folded) line, or would
// beyond the last line and '-' is in 'cpoptions' // move beyond the last line and '-' is in 'cpoptions'.
#ifdef FEAT_FOLDING
hasFoldingWin(curwin, lnum, NULL, &lnum, TRUE, NULL);
#endif
if (n > 0 if (n > 0
&& (lnum >= line_count && (lnum >= line_count
|| (lnum + n > line_count || (lnum + n > line_count

View File

@@ -1914,4 +1914,18 @@ func Test_foldexpr_end_fold()
bwipe! bwipe!
endfunc 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

View File

@@ -704,6 +704,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 */
/**/
617,
/**/ /**/
616, 616,
/**/ /**/