]> granicus.if.org Git - vim/commitdiff
patch 9.0.0177: cursor position wrong with 'virtualedit' and mouse click v9.0.0177
authorBram Moolenaar <Bram@vim.org>
Tue, 9 Aug 2022 13:19:40 +0000 (14:19 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 9 Aug 2022 13:19:40 +0000 (14:19 +0100)
Problem:    Cursor position wrong with 'virtualedit' and mouse click after end
            of the line. (Hermann Mayer)
Solution:   Do not use ScreenCols[] when 'virtualedit' is active.
            (closes #10868)

src/mouse.c
src/testdir/test_virtualedit.vim
src/version.c

index 535e9a29264fa9c2f1f209be24d37a5e0dc402f3..c126a9ed0b751ceef6089ff960807d83755e8c1b 100644 (file)
@@ -1967,7 +1967,8 @@ retnomove:
 
        // Only use ScreenCols[] after the window was redrawn.  Mainly matters
        // for tests, a user would not click before redrawing.
-       if (curwin->w_redr_type <= VALID_NO_UPDATE)
+       // Do not use when 'virtualedit' is active.
+       if (curwin->w_redr_type <= VALID_NO_UPDATE && !virtual_active())
            col_from_screen = ScreenCols[off];
 #ifdef FEAT_FOLDING
        // Remember the character under the mouse, it might be a '-' or '+' in
index b31f3a2b4d3bac1fce981ae6ad27d1bb72b64c0c..8fd6d984470f4d7540cd80cd30f88610dd35cf48 100644 (file)
@@ -537,4 +537,39 @@ func Test_global_local_virtualedit()
   set virtualedit&
 endfunc
 
+func Test_virtualedit_mouse()
+  let save_mouse = &mouse
+  set mouse=a
+  set virtualedit=all
+  new
+
+  call setline(1, ["text\tword"])
+  redraw
+  call test_setmouse(1, 4)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 4, 0, 4], getcurpos())
+  call test_setmouse(1, 5)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 5, 0, 5], getcurpos())
+  call test_setmouse(1, 6)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 5, 1, 6], getcurpos())
+  call test_setmouse(1, 7)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 5, 2, 7], getcurpos())
+  call test_setmouse(1, 8)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 5, 3, 8], getcurpos())
+  call test_setmouse(1, 9)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 6, 0, 9], getcurpos())
+  call test_setmouse(1, 15)
+  call feedkeys("\<LeftMouse>", "xt")
+  call assert_equal([0, 1, 10, 2, 15], getcurpos())
+
+  bwipe!
+  let &mouse = save_mouse
+  set virtualedit&
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 0334bf061ea9ac177dee661f0519328d52040356..739a2f4071fe30bd6f7b196c5179e4a8436c8ca0 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    177,
 /**/
     176,
 /**/