]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.199 v7.4.199
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Mar 2014 16:42:04 +0000 (17:42 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Mar 2014 16:42:04 +0000 (17:42 +0100)
Problem:    (issue 197) ]P doesn't paste over Visual selection.
Solution:   Handle Visual mode specifically. (Christian Brabandt)

src/normal.c
src/version.c

index b8c6fc24fd4246049c80a5e70ecb7e81c9cc3a70..19025f75b2d4afc85041b58168fb8da2a30339f1 100644 (file)
@@ -6751,10 +6751,58 @@ nv_brackets(cap)
     {
        if (!checkclearop(cap->oap))
        {
+           int     dir = (cap->cmdchar == ']' && cap->nchar == 'p')
+                                                        ? FORWARD : BACKWARD;
+           int     regname = cap->oap->regname;
+#ifdef FEAT_VISUAL
+           int     was_visual = VIsual_active;
+           int     line_count = curbuf->b_ml.ml_line_count;
+           pos_T   start, end;
+
+           if (VIsual_active)
+           {
+               start = ltoreq(VIsual, curwin->w_cursor)
+                                                 ? VIsual : curwin->w_cursor;
+               end =  equalpos(start,VIsual) ? curwin->w_cursor : VIsual;
+               curwin->w_cursor = (dir == BACKWARD ? start : end);
+           }
+#endif
+# ifdef FEAT_CLIPBOARD
+           adjust_clip_reg(&regname);
+# endif
            prep_redo_cmd(cap);
-           do_put(cap->oap->regname,
-             (cap->cmdchar == ']' && cap->nchar == 'p') ? FORWARD : BACKWARD,
-                                                 cap->count1, PUT_FIXINDENT);
+
+           do_put(regname, dir, cap->count1, PUT_FIXINDENT);
+#ifdef FEAT_VISUAL
+           if (was_visual)
+           {
+               VIsual = start;
+               curwin->w_cursor = end;
+               if (dir == BACKWARD)
+               {
+                   /* adjust lines */
+                   VIsual.lnum += curbuf->b_ml.ml_line_count - line_count;
+                   curwin->w_cursor.lnum +=
+                                     curbuf->b_ml.ml_line_count - line_count;
+               }
+
+               VIsual_active = TRUE;
+               if (VIsual_mode == 'V')
+               {
+                   /* delete visually selected lines */
+                   cap->cmdchar = 'd';
+                   cap->nchar = NUL;
+                   cap->oap->regname = regname;
+                   nv_operator(cap);
+                   do_pending_operator(cap, 0, FALSE);
+               }
+               if (VIsual_active)
+               {
+                   end_visual_mode();
+                   redraw_later(SOME_VALID);
+               }
+           }
+#endif
        }
     }
 
index 3a1070c539177770c5bd0393afb058416e7c5d15..2fe98b8bc682301955245d34968abf730e421d09 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    199,
 /**/
     198,
 /**/