diff --git a/7.3.879 b/7.3.879 new file mode 100644 index 0000000..bb642dd --- /dev/null +++ b/7.3.879 @@ -0,0 +1,97 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.879 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 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) +Files: src/normal.c + + +*** ../vim-7.3.878/src/normal.c 2013-03-16 14:20:45.000000000 +0100 +--- src/normal.c 2013-04-05 16:54:13.000000000 +0200 +*************** +*** 5418,5423 **** +--- 5418,5424 ---- + cmdarg_T *cap; + { + int old_p_im; ++ int cmd_result; + + #ifdef FEAT_VISUAL + if (VIsual_active) +*************** +*** 5449,5455 **** + old_p_im = p_im; + + /* get a command line and execute it */ +! do_cmdline(NULL, getexline, NULL, + cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0); + + /* If 'insertmode' changed, enter or exit Insert mode */ +--- 5450,5456 ---- + old_p_im = p_im; + + /* get a command line and execute it */ +! 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,5472 **** + restart_edit = 0; + } + +! /* The start of the operator may have become invalid by the Ex +! * command. */ +! 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)))) + clearopbeep(cap->oap); + } + } +--- 5462,5478 ---- + restart_edit = 0; + } + +! 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)) +! || did_emsg +! )) +! /* The start of the operator has become invalid by the Ex command. +! */ + clearopbeep(cap->oap); + } + } +*** ../vim-7.3.878/src/version.c 2013-04-05 15:39:41.000000000 +0200 +--- src/version.c 2013-04-05 16:56:43.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 879, + /**/ + +-- +~ +~ +~ +".signature" 4 lines, 50 characters written + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///