]> granicus.if.org Git - vim/commitdiff
patch 8.2.2236: 'scroll' option can change when setting the statusline v8.2.2236
authorBram Moolenaar <Bram@vim.org>
Mon, 28 Dec 2020 14:41:41 +0000 (15:41 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 28 Dec 2020 14:41:41 +0000 (15:41 +0100)
Problem:    'scroll' option can change when setting the statusline or tabline
            but the option context is not updated.
Solution:   Update the script context when the scroll option is changed as a
            side effect. (Christian Brabandt, closes #7533)

runtime/doc/options.txt
src/scriptfile.c
src/testdir/test_options.vim
src/version.c
src/vim.h
src/window.c

index db62f8a34fcd1888e1dff5c8b50ef2ee837bb881..4d26df86efbbeb1748b74d230f8c02af3f14b79d 100644 (file)
@@ -6321,7 +6321,9 @@ A jump table for the options with a short description can be found at |Q_op|.
                        local to window
        Number of lines to scroll with CTRL-U and CTRL-D commands.  Will be
        set to half the number of lines in the window when the window size
-       changes.  If you give a count to the CTRL-U or CTRL-D command it will
+       changes.  This may happen when enabling the |status-line| or
+       'tabline' option after setting the 'scroll' option.
+       If you give a count to the CTRL-U or CTRL-D command it will
        be used as the new value for 'scroll'.  Reset to half the window
        height with ":set scroll=0".
 
index 90d483b9ec8d0fb97a1375f2edcc3477fdebd64f..a9b382590acf01ab357e45c5ee51e1588ffaedb4 100644 (file)
@@ -1553,6 +1553,7 @@ scriptnames_slash_adjust(void)
 
 /*
  * Get a pointer to a script name.  Used for ":verbose set".
+ * Message appended to "Last set from "
  */
     char_u *
 get_scriptname(scid_T id)
@@ -1567,6 +1568,8 @@ get_scriptname(scid_T id)
        return (char_u *)_("environment variable");
     if (id == SID_ERROR)
        return (char_u *)_("error handler");
+    if (id == SID_WINLAYOUT)
+       return (char_u *)_("changed window size");
     return SCRIPT_ITEM(id)->sn_name;
 }
 
index 74f8d4c556128cbf13e119b956133f5c7c902767..281c20c1f1da35346dd55070a44705970cd9f55e 100644 (file)
@@ -1013,4 +1013,22 @@ func Test_isfname_with_options()
   setlocal keywordprg&
 endfunc
 
+" Test that resetting laststatus does change scroll option
+func Test_opt_reset_scroll()
+  CheckRunVimInTerminal
+  let vimrc =<< trim [CODE]
+    set scroll=2
+    set laststatus=2
+  [CODE]
+  call writefile(vimrc, 'Xscroll')
+  let buf = RunVimInTerminal('-S Xscroll', {'rows': 16, 'cols': 45})
+  call term_sendkeys(buf, ":verbose set scroll?\n")
+  call WaitForAssert({-> assert_match('Last set.*window size', term_getline(buf, 15))})
+  call assert_match('^\s*scroll=7$', term_getline(buf, 14))
+  call StopVimInTerminal(buf)
+
+  " clean up
+  call delete('Xscroll')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index f6c1bf237bb7f2074d9ec8caadbb361f1ef673b7..401bce9672ddffa08c995e0cdadd8f6e3dae8c3b 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2236,
 /**/
     2235,
 /**/
index 1dedd814134171f13766cc537f3421f1b87b7d5c..f19a4fe97b8e79df25efd1f38c00b4042675b00a 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -1232,6 +1232,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
 #define SID_ENV                -4      // for sourcing environment variable
 #define SID_ERROR      -5      // option was reset because of an error
 #define SID_NONE       -6      // don't set scriptID
+#define SID_WINLAYOUT  -7      // changing window size
 
 /*
  * Events for autocommands.
index 1134d0a6c0f66add4998be78dab0df12e13f2c95..1cf795fd743aeb1eeb3e70214173196dd78c23f5 100644 (file)
@@ -6325,9 +6325,21 @@ win_new_width(win_T *wp, int width)
     void
 win_comp_scroll(win_T *wp)
 {
+#if defined(FEAT_EVAL)
+    int old_w_p_scr = wp->w_p_scr;
+#endif
+
     wp->w_p_scr = ((unsigned)wp->w_height >> 1);
     if (wp->w_p_scr == 0)
        wp->w_p_scr = 1;
+#if defined(FEAT_EVAL)
+    if (wp->w_p_scr != old_w_p_scr)
+    {
+       // Used by "verbose set scroll".
+       wp->w_p_script_ctx[WV_SCROLL].sc_sid = SID_WINLAYOUT;
+       wp->w_p_script_ctx[WV_SCROLL].sc_lnum = 0;
+    }
+#endif
 }
 
 /*