]> granicus.if.org Git - vim/commitdiff
updated for version 7.2b-025 v7.2b.025
authorBram Moolenaar <Bram@vim.org>
Thu, 31 Jul 2008 20:04:27 +0000 (20:04 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 31 Jul 2008 20:04:27 +0000 (20:04 +0000)
src/normal.c
src/structs.h
src/version.c

index a1b3a945f4af71262f4f6019c98b922557657c0d..eb03a6a6de567cf942efe4eba34f47d258a163cc 100644 (file)
@@ -581,6 +581,10 @@ normal_cmd(oap, toplevel)
 
     vim_memset(&ca, 0, sizeof(ca));    /* also resets ca.retval */
     ca.oap = oap;
+
+    /* Use a count remembered from before entering an operator.  After typing
+     * "3d" we return from normal_cmd() and come back here, the "3" is
+     * remembered in "opcount". */
     ca.opcount = opcount;
 
 #ifdef FEAT_SNIFF
@@ -606,9 +610,24 @@ normal_cmd(oap, toplevel)
     }
 #endif
 
+    /* When not finishing an operator and no register name typed, reset the
+     * count. */
     if (!finish_op && !oap->regname)
        ca.opcount = 0;
 
+#ifdef FEAT_AUTOCMD
+    /* Restore counts from before receiving K_CURSORHOLD.  This means after
+     * typing "3", handling K_CURSORHOLD and then typing "2" we get "32", not
+     * "3 * 2". */
+    if (oap->prev_opcount > 0 || oap->prev_count0 > 0)
+    {
+       ca.opcount = oap->prev_opcount;
+       ca.count0 = oap->prev_count0;
+       oap->prev_opcount = 0;
+       oap->prev_count0 = 0;
+    }
+#endif
+
 #ifdef FEAT_VISUAL
     mapped_len = typebuf_maplen();
 #endif
@@ -744,16 +763,27 @@ getcount:
        }
     }
 
-    /*
-     * If we're in the middle of an operator (including after entering a yank
-     * buffer with '"') AND we had a count before the operator, then that
-     * count overrides the current value of ca.count0.
-     * What this means effectively, is that commands like "3dw" get turned
-     * into "d3w" which makes things fall into place pretty neatly.
-     * If you give a count before AND after the operator, they are multiplied.
-     */
-    if (ca.opcount != 0)
+#ifdef FEAT_AUTOCMD
+    if (c == K_CURSORHOLD)
     {
+       /* Save the count values so that ca.opcount and ca.count0 are exactly
+        * the same when coming back here after handling K_CURSORHOLD. */
+       oap->prev_opcount = ca.opcount;
+       oap->prev_count0 = ca.count0;
+    }
+    else
+#endif
+       if (ca.opcount != 0)
+    {
+       /*
+        * If we're in the middle of an operator (including after entering a
+        * yank buffer with '"') AND we had a count before the operator, then
+        * that count overrides the current value of ca.count0.
+        * What this means effectively, is that commands like "3dw" get turned
+        * into "d3w" which makes things fall into place pretty neatly.
+        * If you give a count before AND after the operator, they are
+        * multiplied.
+        */
        if (ca.count0)
            ca.count0 *= ca.opcount;
        else
@@ -798,7 +828,7 @@ getcount:
 
     if (text_locked() && (nv_cmds[idx].cmd_flags & NV_NCW))
     {
-       /* This command is not allowed wile editing a ccmdline: beep. */
+       /* This command is not allowed while editing a ccmdline: beep. */
        clearopbeep(oap);
        text_locked_msg();
        goto normal_end;
@@ -1274,7 +1304,11 @@ normal_end:
 #endif
 
 #ifdef FEAT_CMDL_INFO
-    if (oap->op_type == OP_NOP && oap->regname == 0)
+    if (oap->op_type == OP_NOP && oap->regname == 0
+# ifdef FEAT_AUTOCMD
+           && ca.cmdchar != K_CURSORHOLD
+# endif
+           )
        clear_showcmd();
 #endif
 
index 31c3dfc2dc41a3e1d49b16e20efae8f3525dd71a..a485ec15c3deb57104930260bba5a07a3ced1102 100644 (file)
@@ -2076,6 +2076,10 @@ typedef struct oparg_S
 #endif
     colnr_T    start_vcol;     /* start col for block mode operator */
     colnr_T    end_vcol;       /* end col for block mode operator */
+#ifdef FEAT_AUTOCMD
+    long       prev_opcount;   /* ca.opcount saved for K_CURSORHOLD */
+    long       prev_count0;    /* ca.count0 saved for K_CURSORHOLD */
+#endif
 } oparg_T;
 
 /*
index 4d2baa4265cd6f945f4af5850bac130c4131b703..b42aec73083da73698d697991da84cd1c982d4bc 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    25,
 /**/
     24,
 /**/