2018-02-01 16:57:49 -07:00
|
|
|
" Test for 'scrollbind' causing an unexpected scroll of one of the windows.
|
|
|
|
func Test_scrollbind()
|
|
|
|
" We don't want the status line to cause problems:
|
|
|
|
set laststatus=0
|
|
|
|
let totalLines = &lines * 20
|
|
|
|
let middle = totalLines / 2
|
|
|
|
new | only
|
|
|
|
for i in range(1, totalLines)
|
|
|
|
call setline(i, 'LINE ' . i)
|
|
|
|
endfor
|
|
|
|
exe string(middle)
|
|
|
|
normal zt
|
|
|
|
normal M
|
|
|
|
aboveleft vert new
|
|
|
|
for i in range(1, totalLines)
|
|
|
|
call setline(i, 'line ' . i)
|
|
|
|
endfor
|
|
|
|
exe string(middle)
|
|
|
|
normal zt
|
|
|
|
normal M
|
|
|
|
" Execute the following two commands at once to reproduce the problem.
|
|
|
|
setl scb | wincmd p
|
|
|
|
setl scb
|
|
|
|
wincmd w
|
|
|
|
let topLineLeft = line('w0')
|
|
|
|
wincmd p
|
|
|
|
let topLineRight = line('w0')
|
|
|
|
setl noscrollbind
|
|
|
|
wincmd p
|
|
|
|
setl noscrollbind
|
|
|
|
call assert_equal(0, topLineLeft - topLineRight)
|
|
|
|
endfunc
|
2019-05-19 20:12:35 -07:00
|
|
|
|
|
|
|
" Test for 'scrollbind'
|
|
|
|
func Test_scrollbind_opt()
|
|
|
|
new | only
|
|
|
|
set noscrollbind
|
|
|
|
set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow
|
|
|
|
|
|
|
|
" Insert the text used for the test
|
|
|
|
append
|
|
|
|
|
|
|
|
|
|
|
|
start of window 1
|
|
|
|
. line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01
|
|
|
|
. line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
|
|
|
|
. line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03
|
|
|
|
. line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04
|
|
|
|
. line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
|
|
|
|
. line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
|
|
|
|
. line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07
|
|
|
|
. line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08
|
|
|
|
. line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09
|
|
|
|
. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10
|
|
|
|
. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
|
|
|
|
. line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12
|
|
|
|
. line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13
|
|
|
|
. line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14
|
|
|
|
. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15
|
|
|
|
end of window 1
|
|
|
|
|
|
|
|
|
|
|
|
start of window 2
|
|
|
|
. line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01
|
|
|
|
. line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
|
|
|
|
. line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03
|
|
|
|
. line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04
|
|
|
|
. line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
|
|
|
|
. line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
|
|
|
|
. line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07
|
|
|
|
. line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08
|
|
|
|
. line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09
|
|
|
|
. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10
|
|
|
|
. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
|
|
|
|
. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12
|
|
|
|
. line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13
|
|
|
|
. line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14
|
|
|
|
. line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15
|
|
|
|
. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
|
|
|
|
end of window 2
|
|
|
|
|
|
|
|
.
|
|
|
|
|
|
|
|
" Test using two windows open to one buffer, one extra empty window
|
|
|
|
split
|
|
|
|
new
|
|
|
|
wincmd t
|
|
|
|
resize 8
|
|
|
|
call search('^start of window 1$')
|
|
|
|
normal zt
|
|
|
|
set scrollbind
|
|
|
|
wincmd j
|
|
|
|
resize 7
|
|
|
|
call search('^start of window 2$')
|
|
|
|
normal zt
|
|
|
|
set scrollbind
|
|
|
|
|
|
|
|
" -- start of tests --
|
|
|
|
" Test scrolling down
|
|
|
|
normal L5jHyy
|
|
|
|
wincmd b | normal pr0
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal pr1
|
|
|
|
wincmd t | normal L6jHyy
|
|
|
|
wincmd b | normal pr2
|
|
|
|
wincmd k | normal Hyy
|
|
|
|
wincmd b | normal pr3
|
|
|
|
|
|
|
|
" Test scrolling up
|
|
|
|
wincmd t | normal H4k
|
|
|
|
wincmd j | normal H
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal pr4
|
|
|
|
wincmd k | normal Hyy
|
|
|
|
wincmd b | normal pr5
|
|
|
|
wincmd k | normal 3k
|
|
|
|
wincmd t | normal H
|
|
|
|
wincmd j | normal Hyy
|
|
|
|
wincmd b | normal pr6
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal pr7
|
|
|
|
|
|
|
|
" Test horizontal scrolling
|
|
|
|
set scrollopt+=hor
|
|
|
|
normal gg"zyyG"zpG
|
|
|
|
wincmd t | normal 015zly$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
wincmd k | normal y$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
wincmd k | normal 10jH7zhg0y$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
wincmd t | normal Hg0y$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
set scrollopt-=hor
|
|
|
|
|
|
|
|
wincmd b
|
|
|
|
call assert_equal([
|
|
|
|
\ '',
|
|
|
|
\ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
|
|
|
|
\ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
|
|
|
|
\ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
|
|
|
|
\ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
|
|
|
|
\ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
|
|
|
|
\ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
|
|
|
|
\ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
|
|
|
|
\ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
|
|
|
|
\ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
|
|
|
|
\ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
|
|
|
|
\ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
|
|
|
|
\ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
|
|
|
|
\ ''], getline(1, '$'))
|
|
|
|
enew!
|
|
|
|
|
|
|
|
" ****** tests using two different buffers *****
|
|
|
|
wincmd t | wincmd j | close
|
|
|
|
wincmd t | set noscrollbind
|
|
|
|
/start of window 2$/,/^end of window 2$/y
|
|
|
|
new
|
|
|
|
wincmd t | wincmd j | normal 4"zpGp
|
|
|
|
wincmd t
|
|
|
|
call search('^start of window 1$')
|
|
|
|
normal zt
|
|
|
|
set scrollbind
|
|
|
|
wincmd j
|
|
|
|
call search('^start of window 2$')
|
|
|
|
normal zt
|
|
|
|
set scrollbind
|
|
|
|
|
|
|
|
" -- start of tests --
|
|
|
|
" Test scrolling down
|
|
|
|
normal L5jHyy
|
|
|
|
wincmd b | normal pr0
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal pr1
|
|
|
|
wincmd t | normal L6jHyy
|
|
|
|
wincmd b | normal pr2
|
|
|
|
wincmd k | normal Hyy
|
|
|
|
wincmd b | normal pr3
|
|
|
|
|
|
|
|
" Test scrolling up
|
|
|
|
wincmd t | normal H4k
|
|
|
|
wincmd j | normal H
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal pr4
|
|
|
|
wincmd k | normal Hyy
|
|
|
|
wincmd b | normal pr5
|
|
|
|
wincmd k | normal 3k
|
|
|
|
wincmd t | normal H
|
|
|
|
wincmd j | normal Hyy
|
|
|
|
wincmd b | normal pr6
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal pr7
|
|
|
|
|
|
|
|
" Test horizontal scrolling
|
|
|
|
set scrollopt+=hor
|
|
|
|
normal gg"zyyG"zpG
|
|
|
|
wincmd t | normal 015zly$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
wincmd k | normal y$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
wincmd k | normal 10jH7zhg0y$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
wincmd t | normal Hg0y$
|
|
|
|
wincmd b | normal p"zpG
|
|
|
|
set scrollopt-=hor
|
|
|
|
|
|
|
|
wincmd b
|
|
|
|
call assert_equal([
|
|
|
|
\ '',
|
|
|
|
\ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
|
|
|
|
\ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
|
|
|
|
\ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
|
|
|
|
\ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
|
|
|
|
\ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
|
|
|
|
\ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
|
|
|
|
\ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
|
|
|
|
\ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
|
|
|
|
\ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
|
|
|
|
\ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
|
2023-02-15 16:25:16 -07:00
|
|
|
\ '. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10',
|
|
|
|
\ '. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10',
|
2019-05-19 20:12:35 -07:00
|
|
|
\ ''], getline(1, '$'))
|
|
|
|
enew!
|
|
|
|
|
|
|
|
" Test 'syncbind'
|
|
|
|
wincmd t | set noscrollbind | normal ggL
|
|
|
|
wincmd j | set noscrollbind | normal ggL
|
|
|
|
set scrollbind
|
|
|
|
wincmd t | set scrollbind | normal G
|
|
|
|
wincmd j | normal G
|
|
|
|
syncbind
|
|
|
|
normal Hk
|
|
|
|
wincmd t | normal H
|
|
|
|
wincmd j | normal Hyy
|
|
|
|
wincmd b | normal p
|
|
|
|
wincmd t | normal yy
|
|
|
|
wincmd b | normal p
|
|
|
|
wincmd t | set noscrollbind | normal ggL
|
|
|
|
wincmd j | set noscrollbind
|
|
|
|
normal ggL
|
|
|
|
set scrollbind
|
|
|
|
wincmd t | set scrollbind
|
|
|
|
wincmd t | normal G
|
|
|
|
wincmd j | normal G
|
|
|
|
wincmd t | syncbind | normal Hk
|
|
|
|
wincmd j | normal H
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal p
|
|
|
|
wincmd t | wincmd j | normal yy
|
|
|
|
wincmd b | normal p
|
|
|
|
wincmd t | normal H3k
|
|
|
|
wincmd j | normal H
|
|
|
|
wincmd t | normal Hyy
|
|
|
|
wincmd b | normal p
|
|
|
|
wincmd t | wincmd j | normal yy
|
|
|
|
wincmd b | normal p
|
|
|
|
|
|
|
|
wincmd b
|
|
|
|
call assert_equal([
|
|
|
|
\ '',
|
|
|
|
\ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
|
|
|
|
\ 'start of window 2',
|
|
|
|
\ 'start of window 2',
|
|
|
|
\ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
|
|
|
|
\ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15',
|
|
|
|
\ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12',
|
|
|
|
\ ], getline(1, '$'))
|
|
|
|
enew!
|
|
|
|
|
|
|
|
new | only!
|
|
|
|
set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow&
|
|
|
|
endfunc
|