]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.858 v7.3.858
authorBram Moolenaar <Bram@vim.org>
Wed, 13 Mar 2013 18:02:41 +0000 (19:02 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 13 Mar 2013 18:02:41 +0000 (19:02 +0100)
Problem:    "gv" selects the wrong area after some operators.
Solution:   Save and restore the type of selection. (Christian Brabandt)

src/normal.c
src/testdir/test66.in
src/testdir/test66.ok
src/version.c

index f9050db6250dd2260a0dfb39d378fdecedb1e2b7..3de170d6e2a55de8cba99126fd7a20da51382f9f 100644 (file)
@@ -21,6 +21,7 @@
 static int     resel_VIsual_mode = NUL;        /* 'v', 'V', or Ctrl-V */
 static linenr_T        resel_VIsual_line_count;        /* number of lines */
 static colnr_T resel_VIsual_vcol;              /* nr of cols or end col */
+static int     VIsual_mode_orig = NUL;         /* type of Visual mode, that user entered */
 
 static int     restart_VIsual_select = 0;
 #endif
@@ -1594,6 +1595,11 @@ do_pending_operator(cap, old_col, gui_yank)
                curbuf->b_visual.vi_start = VIsual;
                curbuf->b_visual.vi_end = curwin->w_cursor;
                curbuf->b_visual.vi_mode = VIsual_mode;
+               if (VIsual_mode_orig != NUL)
+               {
+                   curbuf->b_visual.vi_mode = VIsual_mode_orig;
+                   VIsual_mode_orig = NUL;
+               }
                curbuf->b_visual.vi_curswant = curwin->w_curswant;
 # ifdef FEAT_EVAL
                curbuf->b_visual_mode_eval = VIsual_mode;
@@ -7230,6 +7236,7 @@ nv_Replace(cap)
     {
        cap->cmdchar = 'c';
        cap->nchar = NUL;
+       VIsual_mode_orig = VIsual_mode; /* remember original area for gv */
        VIsual_mode = 'V';
        nv_operator(cap);
     }
@@ -7429,7 +7436,10 @@ v_visop(cap)
     if (isupper(cap->cmdchar))
     {
        if (VIsual_mode != Ctrl_V)
+       {
+           VIsual_mode_orig = VIsual_mode;
            VIsual_mode = 'V';
+       }
        else if (cap->cmdchar == 'C' || cap->cmdchar == 'D')
            curwin->w_curswant = MAXCOL;
     }
@@ -7449,7 +7459,10 @@ nv_subst(cap)
     if (VIsual_active) /* "vs" and "vS" are the same as "vc" */
     {
        if (cap->cmdchar == 'S')
+       {
+           VIsual_mode_orig = VIsual_mode;
            VIsual_mode = 'V';
+       }
        cap->cmdchar = 'c';
        nv_operator(cap);
     }
index 113b54066bd836f239abe104c657551c2ec6414c..f1fdce37920104b0e57e5e0e2d3699ad15b1d902 100644 (file)
@@ -3,12 +3,14 @@ Test for visual block shift and tab characters.
 
 STARTTEST
 :so small.vim
+/^one
+fe\164jR\eugvr1:'<,'>w! test.out
 /^abcdefgh
 \164jI    \ej<<11|D
 7|a            \e
 7|a               \e
 7|a            \e4k13|\164j<
-:$-4,$w! test.out
+:$-5,$w >> test.out
 :$-4,$s/\s\+//g
 \164kI    \ej<<
 7|a            \e
@@ -18,6 +20,12 @@ STARTTEST
 :qa!
 ENDTEST
 
+one two three
+one two three
+one two three
+one two three
+one two three
+
 abcdefghijklmnopqrstuvwxyz
 abcdefghijklmnopqrstuvwxyz
 abcdefghijklmnopqrstuvwxyz
index 2c2249b095ce0bed3d1801f207302d515b064fc3..4c3ab0fb562a75fe4373dd0926648ba9a762002f 100644 (file)
@@ -1,3 +1,9 @@
+on1 two three
+on1 two three
+on1 two three
+on1 two three
+on1 two three
+
     abcdefghijklmnopqrstuvwxyz
 abcdefghij
     abc            defghijklmnopqrstuvwxyz
index f865b72a7dd50e17d9b0f3cee1dfb2f1adb4eea0..dc224d6316e7624daebb5c877ffb129d2233e2e3 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    858,
 /**/
     857,
 /**/