Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

updated for version 7.3.086

Problem:    When using a mapping with an expression and there was no count,
	    v:count has the value of the previous command. (ZyX)
Solution:   Also set v:count and v:count1 before getting the character that
	    could be a command or a count.
  • Loading branch information...
commit 7d51f1a5439167d72bb23977c317b044e539646c 1 parent cd6656d
Bram Moolenaar authored
Showing with 35 additions and 10 deletions.
  1. +33 −10 src/normal.c
  2. +2 −0  src/version.c
View
43 src/normal.c
@@ -25,6 +25,9 @@ static colnr_T resel_VIsual_col; /* nr of cols or end col */
static int restart_VIsual_select = 0;
#endif
+#ifdef FEAT_EVAL
+static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+#endif
static int
# ifdef __BORLANDC__
_RTLENTRYF
@@ -648,6 +651,14 @@ normal_cmd(oap, toplevel)
dont_scroll = FALSE; /* allow scrolling here */
#endif
+#ifdef FEAT_EVAL
+ /* Set v:count here, when called from main() and not a stuffed
+ * command, so that v:count can be used in an expression mapping
+ * when there is no count. */
+ if (toplevel && stuff_empty())
+ set_vcount_ca(&ca, &set_prevcount);
+#endif
+
/*
* Get the command character from the user.
*/
@@ -725,15 +736,7 @@ normal_cmd(oap, toplevel)
* command, so that v:count can be used in an expression mapping
* right after the count. */
if (toplevel && stuff_empty())
- {
- long count = ca.count0;
-
- /* multiply with ca.opcount the same way as below */
- if (ca.opcount != 0)
- count = ca.opcount * (count == 0 ? 1 : count);
- set_vcount(count, count == 0 ? 1 : count, set_prevcount);
- set_prevcount = FALSE; /* only set v:prevcount once */
- }
+ set_vcount_ca(&ca, &set_prevcount);
#endif
if (ctrl_w)
{
@@ -1386,6 +1389,26 @@ normal_cmd(oap, toplevel)
opcount = ca.opcount;
}
+#ifdef FEAT_EVAL
+/*
+ * Set v:count and v:count1 according to "cap".
+ * Set v:prevcount only when "set_prevcount" is TRUE.
+ */
+ static void
+set_vcount_ca(cap, set_prevcount)
+ cmdarg_T *cap;
+ int *set_prevcount;
+{
+ long count = cap->count0;
+
+ /* multiply with cap->opcount the same way as above */
+ if (cap->opcount != 0)
+ count = cap->opcount * (count == 0 ? 1 : count);
+ set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
+ *set_prevcount = FALSE; /* only set v:prevcount once */
+}
+#endif
+
/*
* Handle an operator after visual mode or when the movement is finished
*/
@@ -8529,7 +8552,7 @@ nv_pipe(cap)
else
curwin->w_curswant = 0;
/* keep curswant at the column where we wanted to go, not where
- we ended; differs if line is too short */
+ * we ended; differs if line is too short */
curwin->w_set_curswant = FALSE;
}
View
2  src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 86,
+/**/
85,
/**/
84,
Please sign in to comment.
Something went wrong with that request. Please try again.