mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.0478: test for 'splitscroll' takes too much time
Problem: Test for 'splitscroll' takes too much time. Solution: Only test some of the combinations. (Luuk van Baal, closes #11139)
This commit is contained in:
parent
3e8b7a6056
commit
594f9e09cd
@ -515,7 +515,7 @@ call <SID>AddOption("splitbelow", gettext("a new window is put below the current
|
|||||||
call <SID>BinOptionG("sb", &sb)
|
call <SID>BinOptionG("sb", &sb)
|
||||||
call <SID>AddOption("splitright", gettext("a new window is put right of the current one"))
|
call <SID>AddOption("splitright", gettext("a new window is put right of the current one"))
|
||||||
call <SID>BinOptionG("spr", &spr)
|
call <SID>BinOptionG("spr", &spr)
|
||||||
call <SID>AddOption("splitscroll", gettext("determines scroll behavior when spliting windows"))
|
call <SID>AddOption("splitscroll", gettext("determines scroll behavior for split windows"))
|
||||||
call <SID>BinOptionG("spsc", &spsc)
|
call <SID>BinOptionG("spsc", &spsc)
|
||||||
call <SID>AddOption("scrollbind", gettext("this window scrolls together with other bound windows"))
|
call <SID>AddOption("scrollbind", gettext("this window scrolls together with other bound windows"))
|
||||||
call append("$", "\t" .. s:local_to_window)
|
call append("$", "\t" .. s:local_to_window)
|
||||||
|
@ -1637,24 +1637,24 @@ endfunc
|
|||||||
func Test_splitscroll_with_splits()
|
func Test_splitscroll_with_splits()
|
||||||
set nowrap
|
set nowrap
|
||||||
set nosplitscroll
|
set nosplitscroll
|
||||||
|
|
||||||
|
" disallow window resizing
|
||||||
|
let save_WS = &t_WS
|
||||||
|
set t_WS=
|
||||||
|
|
||||||
let gui = has("gui_running")
|
let gui = has("gui_running")
|
||||||
inoremap c <cmd>:copen<CR>
|
inoremap <expr> c "<cmd>copen<bar>wincmd k<CR>"
|
||||||
for winbar in [0, 1]
|
for run in range(0, 10)
|
||||||
for sb in [0, 1]
|
|
||||||
for ea in [0, 1]
|
|
||||||
for tab in [0, 1]
|
|
||||||
for so in [0, 5]
|
|
||||||
for ls in range(0, 2)
|
|
||||||
for pos in ["H", "M", "L"]
|
|
||||||
tabnew | tabonly! | redraw
|
tabnew | tabonly! | redraw
|
||||||
let tabline = (gui ? 0 : (tab ? 1 : 0))
|
let tabline = (gui ? 0 : ((run % 5) ? 1 : 0))
|
||||||
let winbar_sb = (sb ? winbar : 0)
|
let winbar_sb = (run % 2) && (run % 3)
|
||||||
execute 'set scrolloff=' . so
|
execute 'set scrolloff=' . !(run % 3) ? 0 : run
|
||||||
execute 'set laststatus=' . ls
|
execute 'set laststatus=' . (run % 3)
|
||||||
execute 'set ' . (ea ? 'equalalways' : 'noequalalways')
|
execute 'set ' . ((run % 2) ? 'equalalways' : 'noequalalways')
|
||||||
execute 'set ' . (sb ? 'splitbelow' : 'nosplitbelow')
|
execute 'set ' . ((run % 3) ? 'splitbelow' : 'nosplitbelow')
|
||||||
execute tab ? 'tabnew' : ''
|
execute (run % 5) ? 'tabnew' : ''
|
||||||
execute winbar ? 'nnoremenu 1.10 WinBar.Test :echo' : ''
|
execute (run % 2) ? 'nnoremenu 1.10 WinBar.Test :echo' : ''
|
||||||
|
let pos = !(run % 3) ? 'H' : ((run % 2) ? 'M' : 'L')
|
||||||
call setline(1, range(1, 256))
|
call setline(1, range(1, 256))
|
||||||
" No scroll for restore_snapshot
|
" No scroll for restore_snapshot
|
||||||
norm G
|
norm G
|
||||||
@ -1734,8 +1734,7 @@ func Test_splitscroll_with_splits()
|
|||||||
above copen | wincmd j
|
above copen | wincmd j
|
||||||
call assert_equal(win_screenpos(0)[0] - tabline, line("w0"))
|
call assert_equal(win_screenpos(0)[0] - tabline, line("w0"))
|
||||||
|
|
||||||
" No scroll when opening cmdwin, and no cursor move when closing
|
" No scroll when opening cmdwin, and no cursor move when closing cmdwin.
|
||||||
" cmdwin.
|
|
||||||
only | norm ggL
|
only | norm ggL
|
||||||
let curpos = getcurpos()
|
let curpos = getcurpos()
|
||||||
norm q:
|
norm q:
|
||||||
@ -1744,21 +1743,14 @@ func Test_splitscroll_with_splits()
|
|||||||
|
|
||||||
" Scroll when cursor becomes invalid in insert mode
|
" Scroll when cursor becomes invalid in insert mode
|
||||||
norm Lic
|
norm Lic
|
||||||
wincmd k | only
|
call assert_equal(curpos, getcurpos())
|
||||||
call assert_notequal(1, line("w0"))
|
|
||||||
|
|
||||||
" No scroll when topline not equal to 1
|
" No scroll when topline not equal to 1
|
||||||
execute "norm gg5\<C-e>" | split | wincmd k
|
only | execute "norm gg5\<C-e>" | split | wincmd k
|
||||||
call assert_equal(6, line("w0"))
|
call assert_equal(6, line("w0"))
|
||||||
wincmd j
|
wincmd j
|
||||||
call assert_equal(5 + win_screenpos(0)[0] - tabline - winbar_sb, line("w0"))
|
call assert_equal(5 + win_screenpos(0)[0] - tabline - winbar_sb, line("w0"))
|
||||||
endfor
|
endfor
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
|
|
||||||
tabnew | tabonly! | %bwipeout!
|
tabnew | tabonly! | %bwipeout!
|
||||||
iunmap c
|
iunmap c
|
||||||
@ -1768,6 +1760,7 @@ func Test_splitscroll_with_splits()
|
|||||||
set laststatus&
|
set laststatus&
|
||||||
set equalalways&
|
set equalalways&
|
||||||
set splitscroll&
|
set splitscroll&
|
||||||
|
let &t_WS = save_WS
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
function Test_nosplitscroll_cmdwin_cursor_position()
|
function Test_nosplitscroll_cmdwin_cursor_position()
|
||||||
|
@ -703,6 +703,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 */
|
||||||
|
/**/
|
||||||
|
478,
|
||||||
/**/
|
/**/
|
||||||
477,
|
477,
|
||||||
/**/
|
/**/
|
||||||
|
@ -6403,7 +6403,6 @@ win_fix_scroll(int resize)
|
|||||||
static void
|
static void
|
||||||
win_fix_cursor(int normal)
|
win_fix_cursor(int normal)
|
||||||
{
|
{
|
||||||
int top = FALSE;
|
|
||||||
win_T *wp = curwin;
|
win_T *wp = curwin;
|
||||||
long so = get_scrolloff_value();
|
long so = get_scrolloff_value();
|
||||||
linenr_T nlnum = 0;
|
linenr_T nlnum = 0;
|
||||||
@ -6418,7 +6417,7 @@ win_fix_cursor(int normal)
|
|||||||
so = MIN(wp->w_height / 2, so);
|
so = MIN(wp->w_height / 2, so);
|
||||||
// Check if cursor position is above topline or below botline.
|
// Check if cursor position is above topline or below botline.
|
||||||
if (wp->w_cursor.lnum < (wp->w_topline + so) && wp->w_topline != 1)
|
if (wp->w_cursor.lnum < (wp->w_topline + so) && wp->w_topline != 1)
|
||||||
top = nlnum = MIN(wp->w_topline + so, wp->w_buffer->b_ml.ml_line_count);
|
nlnum = MIN(wp->w_topline + so, wp->w_buffer->b_ml.ml_line_count);
|
||||||
else if (wp->w_cursor.lnum > (wp->w_botline - so - 1)
|
else if (wp->w_cursor.lnum > (wp->w_botline - so - 1)
|
||||||
&& (wp->w_botline - wp->w_buffer->b_ml.ml_line_count) != 1)
|
&& (wp->w_botline - wp->w_buffer->b_ml.ml_line_count) != 1)
|
||||||
nlnum = MAX(wp->w_botline - so - 1, 1);
|
nlnum = MAX(wp->w_botline - so - 1, 1);
|
||||||
@ -6436,7 +6435,11 @@ win_fix_cursor(int normal)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Ensure cursor stays visible if we are not in normal mode.
|
{ // Ensure cursor stays visible if we are not in normal mode.
|
||||||
wp->w_fraction = top ? 0 : FRACTION_MULT;
|
wp->w_fraction = 0.5 * FRACTION_MULT;
|
||||||
|
// Make sure cursor is closer to topline than botline.
|
||||||
|
if (so == wp->w_height / 2
|
||||||
|
&& nlnum - wp->w_topline > wp->w_botline - 1 - nlnum)
|
||||||
|
wp->w_fraction++;
|
||||||
scroll_to_fraction(wp, wp->w_prev_height);
|
scroll_to_fraction(wp, wp->w_prev_height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user