# HG changeset patch # User Bram Moolenaar # Date 1365176594 -7200 # Node ID 79176b78969cf5d182b378ffb8e341e22f18775b # Parent 4a6b19dfd84ba71066099fc816c88d33160a5957 updated for version 7.3.879 Problem: When using an ex command in operator pending mode, using Esc to abort the command still executes the operator. (David B?rgin) Solution: Clear the operator when the ex command fails. (Christian Brabandt) diff --git a/src/normal.c b/src/normal.c --- a/src/normal.c +++ b/src/normal.c @@ -5418,6 +5418,7 @@ nv_colon(cap) cmdarg_T *cap; { int old_p_im; + int cmd_result; #ifdef FEAT_VISUAL if (VIsual_active) @@ -5449,7 +5450,7 @@ nv_colon(cap) old_p_im = p_im; /* get a command line and execute it */ - do_cmdline(NULL, getexline, NULL, + cmd_result = do_cmdline(NULL, getexline, NULL, cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0); /* If 'insertmode' changed, enter or exit Insert mode */ @@ -5461,12 +5462,17 @@ nv_colon(cap) restart_edit = 0; } - /* The start of the operator may have become invalid by the Ex - * command. */ - if (cap->oap->op_type != OP_NOP + if (cmd_result == FAIL) + /* The Ex command failed, do not execute the operator. */ + clearop(cap->oap); + else if (cap->oap->op_type != OP_NOP && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count || cap->oap->start.col > - (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)))) + (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)) + || did_emsg + )) + /* The start of the operator has become invalid by the Ex command. + */ clearopbeep(cap->oap); } } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 879, +/**/ 878, /**/ 877,