Mercurial > vim
changeset 33982:63341afcd329 v9.0.2177
patch 9.0.2177: Wrong cursor position when dragging out of window
Commit: https://github.com/vim/vim/commit/ec14924368e23f2430815c009bd554f88de9c57f
Author: zeertzjq <zeertzjq@outlook.com>
Date: Tue Dec 19 20:28:31 2023 +0100
patch 9.0.2177: Wrong cursor position when dragging out of window
Problem: Wrong cursor position when dragging out of window.
Solution: Don't use ScreenCols[] when mouse is not in current window.
closes: #13717
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 19 Dec 2023 20:30:09 +0100 |
parents | 00a926acf8d7 |
children | 01ac9bb74f44 |
files | src/mouse.c src/testdir/test_visual.vim src/version.c |
diffstat | 3 files changed, 41 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mouse.c +++ b/src/mouse.c @@ -2050,7 +2050,9 @@ retnomove: } } - if (prev_row >= 0 && prev_row < Rows && prev_col >= 0 && prev_col <= Columns + if (prev_row >= W_WINROW(curwin) + && prev_row < W_WINROW(curwin) + curwin->w_height + && prev_col >= curwin->w_wincol && prev_col < W_ENDCOL(curwin) && ScreenLines != NULL) { int off = LineOffset[prev_row] + prev_col;
--- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1585,6 +1585,41 @@ func Test_Visual_r_CTRL_C() call feedkeys("\<c-v>$gr\<c-c>", 'tx') call assert_equal([''], getline(1, 1)) bw! -endfu +endfunc + +func Test_visual_drag_out_of_window() + rightbelow vnew + call setline(1, '123456789') + set mouse=a + func ClickExpr(off) + call test_setmouse(1, getwininfo(win_getid())[0].wincol + a:off) + return "\<LeftMouse>" + endfunc + func DragExpr(off) + call test_setmouse(1, getwininfo(win_getid())[0].wincol + a:off) + return "\<LeftDrag>" + endfunc + + nnoremap <expr> <F2> ClickExpr(5) + nnoremap <expr> <F3> DragExpr(-1) + redraw + call feedkeys("\<F2>\<F3>\<LeftRelease>", 'tx') + call assert_equal([1, 6], [col('.'), col('v')]) + call feedkeys("\<Esc>", 'tx') + + nnoremap <expr> <F2> ClickExpr(6) + nnoremap <expr> <F3> DragExpr(-2) + redraw + call feedkeys("\<F2>\<F3>\<LeftRelease>", 'tx') + call assert_equal([1, 7], [col('.'), col('v')]) + call feedkeys("\<Esc>", 'tx') + + nunmap <F2> + nunmap <F3> + delfunc ClickExpr + delfunc DragExpr + set mouse& + bwipe! +endfunc " vim: shiftwidth=2 sts=2 expandtab