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:
parent
dace9f785f
commit
746670604a
@ -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".
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@ -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.
|
||||||
|
12
src/window.c
12
src/window.c
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user