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:
committed by
Christian Brabandt
parent
eb4b903c9b
commit
dc373d456b
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user