0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.2236: 'scroll' option can change when setting the statusline

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)
This commit is contained in:
Bram Moolenaar 2020-12-28 15:41:41 +01:00
parent dace9f785f
commit 746670604a
6 changed files with 39 additions and 1 deletions

View File

@ -6321,7 +6321,9 @@ A jump table for the options with a short description can be found at |Q_op|.
local to window local to window
Number of lines to scroll with CTRL-U and CTRL-D commands. Will be 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 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 be used as the new value for 'scroll'. Reset to half the window
height with ":set scroll=0". height with ":set scroll=0".

View File

@ -1553,6 +1553,7 @@ scriptnames_slash_adjust(void)
/* /*
* Get a pointer to a script name. Used for ":verbose set". * Get a pointer to a script name. Used for ":verbose set".
* Message appended to "Last set from "
*/ */
char_u * char_u *
get_scriptname(scid_T id) get_scriptname(scid_T id)
@ -1567,6 +1568,8 @@ get_scriptname(scid_T id)
return (char_u *)_("environment variable"); return (char_u *)_("environment variable");
if (id == SID_ERROR) if (id == SID_ERROR)
return (char_u *)_("error handler"); return (char_u *)_("error handler");
if (id == SID_WINLAYOUT)
return (char_u *)_("changed window size");
return SCRIPT_ITEM(id)->sn_name; return SCRIPT_ITEM(id)->sn_name;
} }

View File

@ -1013,4 +1013,22 @@ func Test_isfname_with_options()
setlocal keywordprg& setlocal keywordprg&
endfunc 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 " vim: shiftwidth=2 sts=2 expandtab

View File

@ -750,6 +750,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 */
/**/
2236,
/**/ /**/
2235, 2235,
/**/ /**/

View File

@ -1232,6 +1232,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define SID_ENV -4 // for sourcing environment variable #define SID_ENV -4 // for sourcing environment variable
#define SID_ERROR -5 // option was reset because of an error #define SID_ERROR -5 // option was reset because of an error
#define SID_NONE -6 // don't set scriptID #define SID_NONE -6 // don't set scriptID
#define SID_WINLAYOUT -7 // changing window size
/* /*
* Events for autocommands. * Events for autocommands.

View File

@ -6325,9 +6325,21 @@ win_new_width(win_T *wp, int width)
void void
win_comp_scroll(win_T *wp) 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); wp->w_p_scr = ((unsigned)wp->w_height >> 1);
if (wp->w_p_scr == 0) if (wp->w_p_scr == 0)
wp->w_p_scr = 1; 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
} }
/* /*