mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
updated for version 7.2b-025
This commit is contained in:
56
src/normal.c
56
src/normal.c
@@ -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
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
/*
|
||||
|
@@ -676,6 +676,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
25,
|
||||
/**/
|
||||
24,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user