From: zeertzjq Date: Wed, 4 Feb 2026 15:47:51 +0000 (+0000) Subject: patch 9.1.2130: Page scrolling in Insert mode beeps X-Git-Tag: v9.1.2130^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8ce914db16898de47ff270f3c19e6683012dff8;p=thirdparty%2Fvim.git 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 Signed-off-by: Christian Brabandt --- diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index e0ac515ab8..560c573586 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 808b57252d..2bf8c2b74a 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 99e49661c1..57680e40fd 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\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 9, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 17, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 25, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 30, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_beeps('call feedkeys("i\\", "tnix")') call assert_equal([0, 30, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 29, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 21, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 13, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_beeps('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 11, 0], getpos('.')) " is the same as " is the same as call cursor(1, 1) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 9, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 17, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 25, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_nobeep('call feedkeys("i\\", "tnix")') call assert_equal([0, 30, 1, 0], getpos('.')) - call feedkeys("i\\", 'tnix') + call assert_beeps('call feedkeys("i\\", "tnix")') call assert_equal([0, 30, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 29, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 21, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 13, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 1, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_beeps('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 11, 0], getpos('.')) set nostartofline call cursor(30, 11) norm! zt - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 29, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 21, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 13, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_beeps('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 11, 0], getpos('.')) call cursor(1, 1) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 9, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 17, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 25, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 30, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_beeps('call feedkeys("A\\", "tnix")') call assert_equal([0, 30, 11, 0], getpos('.')) " is the same as " is the same as call cursor(30, 11) norm! zt - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 29, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 21, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 13, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_beeps('call feedkeys("A\\", "tnix")') call assert_equal([0, 10, 11, 0], getpos('.')) call cursor(1, 1) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 9, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 17, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 25, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_nobeep('call feedkeys("A\\", "tnix")') call assert_equal([0, 30, 11, 0], getpos('.')) - call feedkeys("A\\", 'tnix') + call assert_beeps('call feedkeys("A\\", "tnix")') call assert_equal([0, 30, 11, 0], getpos('.')) bw! endfunc diff --git a/src/version.c b/src/version.c index 1315fb2cbe..296bb76490 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, /**/