]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.2130: Page scrolling in Insert mode beeps v9.1.2130
authorzeertzjq <zeertzjq@outlook.com>
Wed, 4 Feb 2026 15:47:51 +0000 (15:47 +0000)
committerChristian Brabandt <cb@256bit.org>
Wed, 4 Feb 2026 15:51:01 +0000 (15:51 +0000)
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 <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/version9.txt
src/move.c
src/testdir/test_edit.vim
src/version.c

index e0ac515ab8ad2f4ec8a1bb86584d0b4a104be648..560c573586ed549e8f75afdb23a3db4ad29fa2c8 100644 (file)
@@ -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
index 808b57252dde03de818d43f8d504124cd353df2e..2bf8c2b74a188b8bae05ca7348d4f60f03f4657a 100644 (file)
@@ -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
index 99e49661c117ce215e83ec68081da36ad31516b5..57680e40fd4ab050166c926975a3c227e042e997 100644 (file)
@@ -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
index 1315fb2cbe61e299b5087bab2f66a89fefbc2b6e..296bb764907e4995ff178a98f9c3d26a49bac9ed 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2130,
 /**/
     2129,
 /**/