forked from aniani/vim
patch 9.0.1919: Wrong curswant when clicking on empty line or with vsplits
Problem: Wrong curswant when clicking on empty line or with vsplits. Solution: Don't check for ScreenCols[] before the start of the window and handle empty line properly. closes: #13132 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
parent
5790a54166
commit
03cd697d63
@ -2101,11 +2101,11 @@ retnomove:
|
||||
if (col_from_screen == MAXCOL)
|
||||
{
|
||||
// When clicking after end of line, still need to set correct curswant
|
||||
int off_l = LineOffset[prev_row];
|
||||
int off_l = LineOffset[prev_row] + curwin->w_wincol;
|
||||
if (ScreenCols[off_l] < MAXCOL)
|
||||
{
|
||||
// Binary search to find last char in line
|
||||
int off_r = off_l + prev_col;
|
||||
int off_r = LineOffset[prev_row] + prev_col;
|
||||
int off_click = off_r;
|
||||
while (off_l < off_r)
|
||||
{
|
||||
@ -2118,8 +2118,8 @@ retnomove:
|
||||
col = ScreenCols[off_r] + (off_click - off_r);
|
||||
}
|
||||
else
|
||||
// Shouldn't normally happen
|
||||
col = MAXCOL;
|
||||
// Clicking on an empty line
|
||||
col = prev_col - curwin->w_wincol;
|
||||
}
|
||||
else if (col_from_screen >= 0)
|
||||
{
|
||||
|
@ -4104,6 +4104,39 @@ func Test_normal_click_on_double_width_char()
|
||||
let &mouse = save_mouse
|
||||
endfunc
|
||||
|
||||
func Test_normal_click_on_empty_line()
|
||||
let save_mouse = &mouse
|
||||
set mouse=a
|
||||
botright new
|
||||
call setline(1, ['', '', ''])
|
||||
let row = win_screenpos(0)[0] + 2
|
||||
20vsplit
|
||||
redraw
|
||||
|
||||
call test_setmouse(row, 1)
|
||||
call feedkeys("\<LeftMouse>", 'xt')
|
||||
call assert_equal([0, 3, 1, 0, 1], getcurpos())
|
||||
call test_setmouse(row, 2)
|
||||
call feedkeys("\<LeftMouse>", 'xt')
|
||||
call assert_equal([0, 3, 1, 0, 2], getcurpos())
|
||||
call test_setmouse(row, 10)
|
||||
call feedkeys("\<LeftMouse>", 'xt')
|
||||
call assert_equal([0, 3, 1, 0, 10], getcurpos())
|
||||
|
||||
call test_setmouse(row, 21 + 1)
|
||||
call feedkeys("\<LeftMouse>", 'xt')
|
||||
call assert_equal([0, 3, 1, 0, 1], getcurpos())
|
||||
call test_setmouse(row, 21 + 2)
|
||||
call feedkeys("\<LeftMouse>", 'xt')
|
||||
call assert_equal([0, 3, 1, 0, 2], getcurpos())
|
||||
call test_setmouse(row, 21 + 10)
|
||||
call feedkeys("\<LeftMouse>", 'xt')
|
||||
call assert_equal([0, 3, 1, 0, 10], getcurpos())
|
||||
|
||||
bwipe!
|
||||
let &mouse = save_mouse
|
||||
endfunc
|
||||
|
||||
func Test_normal33_g_cmd_nonblank()
|
||||
" Test that g<End> goes to the last non-blank char and g$ to the last
|
||||
" visible column
|
||||
|
@ -564,35 +564,38 @@ func Test_virtualedit_mouse()
|
||||
let save_mouse = &mouse
|
||||
set mouse=a
|
||||
set virtualedit=all
|
||||
new
|
||||
botright new
|
||||
let row = win_screenpos(0)[0]
|
||||
20vsplit
|
||||
wincmd p
|
||||
|
||||
call setline(1, ["text\tword"])
|
||||
redraw
|
||||
call test_setmouse(1, 4)
|
||||
call test_setmouse(row, 21 + 4)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 4, 0, 4], getcurpos())
|
||||
call test_setmouse(1, 5)
|
||||
call test_setmouse(row, 21 + 5)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 5, 0, 5], getcurpos())
|
||||
call test_setmouse(1, 6)
|
||||
call test_setmouse(row, 21 + 6)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 5, 1, 6], getcurpos())
|
||||
call test_setmouse(1, 7)
|
||||
call test_setmouse(row, 21 + 7)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 5, 2, 7], getcurpos())
|
||||
call test_setmouse(1, 8)
|
||||
call test_setmouse(row, 21 + 8)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 5, 3, 8], getcurpos())
|
||||
call test_setmouse(1, 9)
|
||||
call test_setmouse(row, 21 + 9)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 6, 0, 9], getcurpos())
|
||||
call test_setmouse(1, 12)
|
||||
call test_setmouse(row, 21 + 12)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 9, 0, 12], getcurpos())
|
||||
call test_setmouse(1, 13)
|
||||
call test_setmouse(row, 21 + 13)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 10, 0, 13], getcurpos())
|
||||
call test_setmouse(1, 15)
|
||||
call test_setmouse(row, 21 + 15)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
call assert_equal([0, 1, 10, 2, 15], getcurpos())
|
||||
|
||||
|
@ -699,6 +699,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1919,
|
||||
/**/
|
||||
1918,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user