Commit: patch 9.1.2130: Page scrolling in Insert mode beeps

2 views
Skip to first unread message

Christian Brabandt

unread,
11:01 AM (8 hours ago) 11:01 AM
to vim...@googlegroups.com
patch 9.1.2130: Page scrolling in Insert mode beeps

Commit: https://github.com/vim/vim/commit/a8ce914db16898de47ff270f3c19e6683012dff8
Author: zeertzjq <zeer...@outlook.com>
Date: Wed Feb 4 15:47:51 2026 +0000

patch 9.1.2130: Page scrolling in Insert mode beeps

Problem: Page scrolling in Insert mode beeps (after 9.1.0211).
Solution: Fix incorrect return value of pagescroll(). Also invert the
return value of scroll_with_sms() to be less confusing and
match comments (zeertzjq).

fixes: #19326
closes: #19327

Signed-off-by: zeertzjq <zeer...@outlook.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index e0ac515ab..560c57358 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -52463,8 +52463,14 @@ Solution: Validate the bufref after buf_reload (Sean Dewar).

Patch 9.1.2129
Problem: MS-Windows: font size calculation slightly wrong, causing
- vertical line gaps (Maxim Kim, after v9.1.2127)
+ vertical line gaps (Maxim Kim, after v9.1.2127)
Solution: Update font size calculation when using DirectX
- (Yasuhiro Matsumoto).
+ (Yasuhiro Matsumoto).
+
+Patch 9.1.2130
+Problem: Page scrolling in Insert mode beeps (after 9.1.0211).
+Solution: Fix incorrect return value of pagescroll(). Also invert the
+ return value of scroll_with_sms() to be less confusing and
+ match comments (zeertzjq).

vim:tw=78:ts=8:noet:ft=help:norl:fdm=manual:nofoldenable
diff --git a/src/move.c b/src/move.c
index 808b57252..2bf8c2b74 100644
--- a/src/move.c
+++ b/src/move.c
@@ -3238,11 +3238,11 @@ static int scroll_with_sms(int dir, long count, long *curscount)
}
curwin->w_p_sms = prev_sms;

- return curwin->w_topline == prev_topline
+ return curwin->w_topline != prev_topline
#ifdef FEAT_DIFF
- && curwin->w_topfill == prev_topfill
+ || curwin->w_topfill != prev_topfill
#endif
- && curwin->w_skipcol == prev_skipcol;
+ || curwin->w_skipcol != prev_skipcol;
}

/*
@@ -3255,7 +3255,7 @@ static int scroll_with_sms(int dir, long count, long *curscount)
int
pagescroll(int dir, long count, int half)
{
- int nochange = TRUE;
+ int did_move = FALSE;
int buflen = curbuf->b_ml.ml_line_count;
colnr_T prev_col = curwin->w_cursor.col;
colnr_T prev_curswant = curwin->w_curswant;
@@ -3291,7 +3291,7 @@ pagescroll(int dir, long count, int half)
// (Try to) scroll the window unless already at the end of the buffer.
if (count > 0)
{
- nochange = scroll_with_sms(dir, count, &curscount);
+ did_move = scroll_with_sms(dir, count, &curscount);
curwin->w_cursor.lnum = prev_lnum;
curwin->w_cursor.col = prev_col;
curwin->w_curswant = prev_curswant;
@@ -3310,9 +3310,9 @@ pagescroll(int dir, long count, int half)
// Scroll [count] times 'window' or current window height lines.
count *= ((ONE_WINDOW && p_window > 0 && p_window < Rows - 1) ?
MAX(1, p_window - 2) : get_scroll_overlap(dir));
- nochange = scroll_with_sms(dir, count, &count);
+ did_move = scroll_with_sms(dir, count, &count);

- if (!nochange)
+ if (did_move)
{
// Place cursor at top or bottom of window.
validate_botline();
@@ -3330,19 +3330,19 @@ pagescroll(int dir, long count, int half)
// Move cursor to first line of closed fold.
foldAdjustCursor();
#endif
- nochange = nochange
- && prev_col == curwin->w_cursor.col
- && prev_lnum == curwin->w_cursor.lnum;
+ did_move = did_move
+ || prev_col != curwin->w_cursor.col
+ || prev_lnum != curwin->w_cursor.lnum;

// Error if both the viewport and cursor did not change.
- if (nochange)
+ if (!did_move)
beep_flush();
else if (!curwin->w_p_sms)
beginline(BL_SOL | BL_FIX);
else if (p_sol)
nv_g_home_m_cmd(&ca);

- return nochange;
+ return did_move ? OK : FAIL;
}

void
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim
index 99e49661c..57680e40f 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -1360,97 +1360,97 @@ func Test_edit_PAGEUP_PAGEDOWN()
10new
call setline(1, repeat(['abc def ghi'], 30))
call cursor(1, 1)
- call feedkeys("i\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 9, 1, 0], getpos('.'))
- call feedkeys("i\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 17, 1, 0], getpos('.'))
- call feedkeys("i\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 25, 1, 0], getpos('.'))
- call feedkeys("i\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 30, 1, 0], getpos('.'))
- call feedkeys("i\<PageDown>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("i\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 30, 1, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 29, 1, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 21, 1, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 13, 1, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 10, 1, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 10, 11, 0], getpos('.'))
" <S-Up> is the same as <PageUp>
" <S-Down> is the same as <PageDown>
call cursor(1, 1)
- call feedkeys("i\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 9, 1, 0], getpos('.'))
- call feedkeys("i\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 17, 1, 0], getpos('.'))
- call feedkeys("i\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 25, 1, 0], getpos('.'))
- call feedkeys("i\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("i\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 30, 1, 0], getpos('.'))
- call feedkeys("i\<S-Down>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("i\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 30, 1, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 29, 1, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 21, 1, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 13, 1, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 10, 1, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 10, 11, 0], getpos('.'))
set nostartofline
call cursor(30, 11)
norm! zt
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 29, 11, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 21, 11, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 13, 11, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 10, 11, 0], getpos('.'))
- call feedkeys("A\<PageUp>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("A\<PageUp>\<esc>", "tnix")')
call assert_equal([0, 10, 11, 0], getpos('.'))
call cursor(1, 1)
- call feedkeys("A\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 9, 11, 0], getpos('.'))
- call feedkeys("A\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 17, 11, 0], getpos('.'))
- call feedkeys("A\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 25, 11, 0], getpos('.'))
- call feedkeys("A\<PageDown>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 30, 11, 0], getpos('.'))
- call feedkeys("A\<PageDown>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("A\<PageDown>\<esc>", "tnix")')
call assert_equal([0, 30, 11, 0], getpos('.'))
" <S-Up> is the same as <PageUp>
" <S-Down> is the same as <PageDown>
call cursor(30, 11)
norm! zt
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 29, 11, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 21, 11, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 13, 11, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 10, 11, 0], getpos('.'))
- call feedkeys("A\<S-Up>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("A\<S-Up>\<esc>", "tnix")')
call assert_equal([0, 10, 11, 0], getpos('.'))
call cursor(1, 1)
- call feedkeys("A\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 9, 11, 0], getpos('.'))
- call feedkeys("A\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 17, 11, 0], getpos('.'))
- call feedkeys("A\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 25, 11, 0], getpos('.'))
- call feedkeys("A\<S-Down>\<esc>", 'tnix')
+ call assert_nobeep('call feedkeys("A\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 30, 11, 0], getpos('.'))
- call feedkeys("A\<S-Down>\<esc>", 'tnix')
+ call assert_beeps('call feedkeys("A\<S-Down>\<esc>", "tnix")')
call assert_equal([0, 30, 11, 0], getpos('.'))
bw!
endfunc
diff --git a/src/version.c b/src/version.c
index 1315fb2cb..296bb7649 100644
--- a/src/version.c
+++ b/src/version.c
@@ -734,6 +734,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 2130,
/**/
2129,
/**/
Reply all
Reply to author
Forward
0 new messages