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)
|
if (col_from_screen == MAXCOL)
|
||||||
{
|
{
|
||||||
// When clicking after end of line, still need to set correct curswant
|
// 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)
|
if (ScreenCols[off_l] < MAXCOL)
|
||||||
{
|
{
|
||||||
// Binary search to find last char in line
|
// 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;
|
int off_click = off_r;
|
||||||
while (off_l < off_r)
|
while (off_l < off_r)
|
||||||
{
|
{
|
||||||
@ -2118,8 +2118,8 @@ retnomove:
|
|||||||
col = ScreenCols[off_r] + (off_click - off_r);
|
col = ScreenCols[off_r] + (off_click - off_r);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// Shouldn't normally happen
|
// Clicking on an empty line
|
||||||
col = MAXCOL;
|
col = prev_col - curwin->w_wincol;
|
||||||
}
|
}
|
||||||
else if (col_from_screen >= 0)
|
else if (col_from_screen >= 0)
|
||||||
{
|
{
|
||||||
|
@ -4104,6 +4104,39 @@ func Test_normal_click_on_double_width_char()
|
|||||||
let &mouse = save_mouse
|
let &mouse = save_mouse
|
||||||
endfunc
|
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()
|
func Test_normal33_g_cmd_nonblank()
|
||||||
" Test that g<End> goes to the last non-blank char and g$ to the last
|
" Test that g<End> goes to the last non-blank char and g$ to the last
|
||||||
" visible column
|
" visible column
|
||||||
|
@ -564,35 +564,38 @@ func Test_virtualedit_mouse()
|
|||||||
let save_mouse = &mouse
|
let save_mouse = &mouse
|
||||||
set mouse=a
|
set mouse=a
|
||||||
set virtualedit=all
|
set virtualedit=all
|
||||||
new
|
botright new
|
||||||
|
let row = win_screenpos(0)[0]
|
||||||
|
20vsplit
|
||||||
|
wincmd p
|
||||||
|
|
||||||
call setline(1, ["text\tword"])
|
call setline(1, ["text\tword"])
|
||||||
redraw
|
redraw
|
||||||
call test_setmouse(1, 4)
|
call test_setmouse(row, 21 + 4)
|
||||||
call feedkeys("\<LeftMouse>", "xt")
|
call feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 4, 0, 4], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 5, 0, 5], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 5, 1, 6], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 5, 2, 7], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 5, 3, 8], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 6, 0, 9], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 9, 0, 12], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 10, 0, 13], getcurpos())
|
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 feedkeys("\<LeftMouse>", "xt")
|
||||||
call assert_equal([0, 1, 10, 2, 15], getcurpos())
|
call assert_equal([0, 1, 10, 2, 15], getcurpos())
|
||||||
|
|
||||||
|
@ -699,6 +699,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 */
|
||||||
|
/**/
|
||||||
|
1919,
|
||||||
/**/
|
/**/
|
||||||
1918,
|
1918,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user