mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04: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
|
void
|
||||||
do_check_cursorbind(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;
|
linenr_T line = curwin->w_cursor.lnum;
|
||||||
colnr_T col = curwin->w_cursor.col;
|
colnr_T col = curwin->w_cursor.col;
|
||||||
colnr_T coladd = curwin->w_cursor.coladd;
|
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 check.vim
|
||||||
source screendump.vim
|
source screendump.vim
|
||||||
@@ -55,6 +55,60 @@ func Test_scolloff_even_line_count()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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()
|
func Test_CtrlE_CtrlY_stop_at_end()
|
||||||
enew
|
enew
|
||||||
call setline(1, ['one', 'two'])
|
call setline(1, ['one', 'two'])
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
1983,
|
||||||
/**/
|
/**/
|
||||||
1982,
|
1982,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user