mirror of
https://github.com/vim/vim
synced 2025-07-15 16:51:57 +00:00
patch 9.0.1983: scrolling inactive window not possible with cursorbind
Problem: Scrolling non-current window using mouse is inconsistent depending on 'scrollbind'/'scrolloff' and different from GUI vertical scrollbar when 'cursorbind' is set. Solution: Don't move cursor in non-current windows for 'cursorbind' if cursor in the current window didn't move. closes: #13219 closes: #13210 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
committed by
Christian Brabandt
parent
4dbb2669e9
commit
8e5f26ec6a
@ -3571,6 +3571,14 @@ halfpage(int flag, linenr_T Prenum)
|
||||
void
|
||||
do_check_cursorbind(void)
|
||||
{
|
||||
static win_T *prev_curwin = NULL;
|
||||
static pos_T prev_cursor = {0, 0, 0};
|
||||
|
||||
if (curwin == prev_curwin && EQUAL_POS(curwin->w_cursor, prev_cursor))
|
||||
return;
|
||||
prev_curwin = curwin;
|
||||
prev_cursor = curwin->w_cursor;
|
||||
|
||||
linenr_T line = curwin->w_cursor.lnum;
|
||||
colnr_T col = curwin->w_cursor.col;
|
||||
colnr_T coladd = curwin->w_cursor.coladd;
|
||||
|
@ -1,4 +1,4 @@
|
||||
" Test for reset 'scroll' and 'smoothscroll'
|
||||
" Test for 'scroll', 'scrolloff', 'smoothscroll', etc.
|
||||
|
||||
source check.vim
|
||||
source screendump.vim
|
||||
@ -39,20 +39,74 @@ func Test_reset_scroll()
|
||||
endfunc
|
||||
|
||||
func Test_scolloff_even_line_count()
|
||||
new
|
||||
resize 6
|
||||
setlocal scrolloff=3
|
||||
call setline(1, range(20))
|
||||
normal 2j
|
||||
call assert_equal(1, getwininfo(win_getid())[0].topline)
|
||||
normal j
|
||||
call assert_equal(1, getwininfo(win_getid())[0].topline)
|
||||
normal j
|
||||
call assert_equal(2, getwininfo(win_getid())[0].topline)
|
||||
normal j
|
||||
call assert_equal(3, getwininfo(win_getid())[0].topline)
|
||||
new
|
||||
resize 6
|
||||
setlocal scrolloff=3
|
||||
call setline(1, range(20))
|
||||
normal 2j
|
||||
call assert_equal(1, getwininfo(win_getid())[0].topline)
|
||||
normal j
|
||||
call assert_equal(1, getwininfo(win_getid())[0].topline)
|
||||
normal j
|
||||
call assert_equal(2, getwininfo(win_getid())[0].topline)
|
||||
normal j
|
||||
call assert_equal(3, getwininfo(win_getid())[0].topline)
|
||||
|
||||
bwipe!
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_mouse_scroll_inactive_with_cursorbind()
|
||||
for scb in [0, 1]
|
||||
for so in [0, 1, 2]
|
||||
let msg = $'scb={scb} so={so}'
|
||||
|
||||
new | only
|
||||
let w1 = win_getid()
|
||||
setlocal cursorbind
|
||||
let &l:scb = scb
|
||||
let &l:so = so
|
||||
call setline(1, range(101, 109))
|
||||
rightbelow vnew
|
||||
let w2 = win_getid()
|
||||
setlocal cursorbind
|
||||
let &l:scb = scb
|
||||
let &l:so = so
|
||||
call setline(1, range(101, 109))
|
||||
|
||||
normal! $
|
||||
call assert_equal(3, col('.', w1), msg)
|
||||
call assert_equal(3, col('.', w2), msg)
|
||||
call test_setmouse(1, 1)
|
||||
call feedkeys("\<ScrollWheelDown>", 'xt')
|
||||
call assert_equal(4, line('w0', w1), msg)
|
||||
call assert_equal(4 + so, line('.', w1), msg)
|
||||
call assert_equal(1, line('w0', w2), msg)
|
||||
call assert_equal(1, line('.', w2), msg)
|
||||
call feedkeys("\<ScrollWheelDown>", 'xt')
|
||||
call assert_equal(7, line('w0', w1), msg)
|
||||
call assert_equal(7 + so, line('.', w1), msg)
|
||||
call assert_equal(1, line('w0', w2), msg)
|
||||
call assert_equal(1, line('.', w2), msg)
|
||||
call feedkeys("\<ScrollWheelUp>", 'xt')
|
||||
call assert_equal(4, line('w0', w1), msg)
|
||||
call assert_equal(7 + so, line('.', w1), msg)
|
||||
call assert_equal(1, line('w0', w2), msg)
|
||||
call assert_equal(1, line('.', w2), msg)
|
||||
call feedkeys("\<ScrollWheelUp>", 'xt')
|
||||
call assert_equal(1, line('w0', w1), msg)
|
||||
call assert_equal(7 + so, line('.', w1), msg)
|
||||
call assert_equal(1, line('w0', w2), msg)
|
||||
call assert_equal(1, line('.', w2), msg)
|
||||
normal! 0
|
||||
call assert_equal(1, line('.', w1), msg)
|
||||
call assert_equal(1, col('.', w1), msg)
|
||||
call assert_equal(1, line('.', w2), msg)
|
||||
call assert_equal(1, col('.', w2), msg)
|
||||
|
||||
bwipe!
|
||||
bwipe!
|
||||
endfor
|
||||
endfor
|
||||
endfunc
|
||||
|
||||
func Test_CtrlE_CtrlY_stop_at_end()
|
||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1983,
|
||||
/**/
|
||||
1982,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user