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 -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui