forked from aniani/vim
patch 9.0.1729: screenpos() wrong when w_skipcol and cpoptions+=n
Problem: screenpos() wrong result with w_skipcol and cpoptions+=n
Solution: Use adjust_plines_for_skipcol() instead of subtracting
w_skipcol.
closes: #12625
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
825cf813fa
commit
bfe377b8f2
@@ -130,38 +130,71 @@ func Test_screenpos()
|
||||
\ winid->screenpos(line('$'), 22))
|
||||
|
||||
1split
|
||||
normal G$
|
||||
redraw
|
||||
" w_skipcol should be subtracted
|
||||
call assert_equal({'row': winrow + 0,
|
||||
\ 'col': wincol + 20 - 1,
|
||||
\ 'curscol': wincol + 20 - 1,
|
||||
\ 'endcol': wincol + 20 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
|
||||
" w_leftcol should be subtracted
|
||||
setlocal nowrap
|
||||
normal 050zl$
|
||||
normal G050zl$
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 0,
|
||||
\ 'col': wincol + 10 - 1,
|
||||
\ 'curscol': wincol + 10 - 1,
|
||||
\ 'endcol': wincol + 10 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
|
||||
" w_skipcol should only matter for the topline
|
||||
" FIXME: This fails because pline_m_win() does not take w_skipcol into
|
||||
" account. If it does, then other tests fail.
|
||||
" wincmd +
|
||||
" setlocal wrap smoothscroll
|
||||
" call setline(line('$') + 1, 'last line')
|
||||
" exe "normal \<C-E>G$"
|
||||
" redraw
|
||||
" call assert_equal({'row': winrow + 1,
|
||||
" \ 'col': wincol + 9 - 1,
|
||||
" \ 'curscol': wincol + 9 - 1,
|
||||
" \ 'endcol': wincol + 9 - 1},
|
||||
" \ screenpos(win_getid(), line('.'), col('.')))
|
||||
close
|
||||
" w_skipcol should be taken into account
|
||||
setlocal wrap
|
||||
normal $
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 0,
|
||||
\ 'col': wincol + 20 - 1,
|
||||
\ 'curscol': wincol + 20 - 1,
|
||||
\ 'endcol': wincol + 20 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
call assert_equal({'row': 0, 'col': 0, 'curscol': 0, 'endcol': 0},
|
||||
\ screenpos(win_getid(), line('.'), col('.') - 20))
|
||||
setlocal number
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 0,
|
||||
\ 'col': wincol + 16 - 1,
|
||||
\ 'curscol': wincol + 16 - 1,
|
||||
\ 'endcol': wincol + 16 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
call assert_equal({'row': 0, 'col': 0, 'curscol': 0, 'endcol': 0},
|
||||
\ screenpos(win_getid(), line('.'), col('.') - 16))
|
||||
set cpoptions+=n
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 0,
|
||||
\ 'col': wincol + 4 - 1,
|
||||
\ 'curscol': wincol + 4 - 1,
|
||||
\ 'endcol': wincol + 4 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
call assert_equal({'row': 0, 'col': 0, 'curscol': 0, 'endcol': 0},
|
||||
\ screenpos(win_getid(), line('.'), col('.') - 4))
|
||||
|
||||
wincmd +
|
||||
call setline(line('$') + 1, 'last line')
|
||||
setlocal smoothscroll
|
||||
normal G$
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 1,
|
||||
\ 'col': wincol + 4 + 9 - 1,
|
||||
\ 'curscol': wincol + 4 + 9 - 1,
|
||||
\ 'endcol': wincol + 4 + 9 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
set cpoptions-=n
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 1,
|
||||
\ 'col': wincol + 4 + 9 - 1,
|
||||
\ 'curscol': wincol + 4 + 9 - 1,
|
||||
\ 'endcol': wincol + 4 + 9 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
setlocal nonumber
|
||||
redraw
|
||||
call assert_equal({'row': winrow + 1,
|
||||
\ 'col': wincol + 9 - 1,
|
||||
\ 'curscol': wincol + 9 - 1,
|
||||
\ 'endcol': wincol + 9 - 1},
|
||||
\ screenpos(win_getid(), line('.'), col('.')))
|
||||
|
||||
close
|
||||
call assert_equal({}, screenpos(999, 1, 1))
|
||||
|
||||
Reference in New Issue
Block a user