1
0
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:
zeertzjq
2023-08-17 22:58:53 +02:00
committed by Christian Brabandt
parent 825cf813fa
commit bfe377b8f2
7 changed files with 87 additions and 46 deletions

View File

@@ -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))