components/vim/vim72-patches/7.2.048
changeset 198 172fc01ce997
equal deleted inserted replaced
197:fd801ec0737c 198:172fc01ce997
       
     1 To: [email protected]
       
     2 Subject: Patch 7.2.048
       
     3 Fcc: outbox
       
     4 From: Bram Moolenaar <[email protected]>
       
     5 Mime-Version: 1.0
       
     6 Content-Type: text/plain; charset=ISO-8859-1
       
     7 Content-Transfer-Encoding: 8bit
       
     8 ------------
       
     9 
       
    10 Patch 7.2.048
       
    11 Problem:    v:prevcount is changed too often.  Counts are not multiplied when
       
    12 	    setting v:count.
       
    13 Solution:   Set v:prevcount properly.  Multiply counts. (idea by Ben Schmidt)
       
    14 Files:	    src/eval.c, src/normal.c, src/proto/eval.pro
       
    15 
       
    16 
       
    17 *** ../vim-7.2.047/src/eval.c	Thu Nov 20 10:36:04 2008
       
    18 --- src/eval.c	Thu Nov 20 15:53:47 2008
       
    19 ***************
       
    20 *** 18146,18159 ****
       
    21   }
       
    22   
       
    23   /*
       
    24 !  * Set v:count, v:count1 and v:prevcount.
       
    25    */
       
    26       void
       
    27 ! set_vcount(count, count1)
       
    28       long	count;
       
    29       long	count1;
       
    30   {
       
    31 !     vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
       
    32       vimvars[VV_COUNT].vv_nr = count;
       
    33       vimvars[VV_COUNT1].vv_nr = count1;
       
    34   }
       
    35 --- 18146,18162 ----
       
    36   }
       
    37   
       
    38   /*
       
    39 !  * Set v:count to "count" and v:count1 to "count1".
       
    40 !  * When "set_prevcount" is TRUE first set v:prevcount from v:count.
       
    41    */
       
    42       void
       
    43 ! set_vcount(count, count1, set_prevcount)
       
    44       long	count;
       
    45       long	count1;
       
    46 +     int		set_prevcount;
       
    47   {
       
    48 !     if (set_prevcount)
       
    49 ! 	vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
       
    50       vimvars[VV_COUNT].vv_nr = count;
       
    51       vimvars[VV_COUNT1].vv_nr = count1;
       
    52   }
       
    53 *** ../vim-7.2.047/src/normal.c	Sat Nov 15 14:10:23 2008
       
    54 --- src/normal.c	Thu Nov 20 16:04:44 2008
       
    55 ***************
       
    56 *** 580,585 ****
       
    57 --- 580,588 ----
       
    58       static int	old_mapped_len = 0;
       
    59   #endif
       
    60       int		idx;
       
    61 + #ifdef FEAT_EVAL
       
    62 +     int		set_prevcount = FALSE;
       
    63 + #endif
       
    64   
       
    65       vim_memset(&ca, 0, sizeof(ca));	/* also resets ca.retval */
       
    66       ca.oap = oap;
       
    67 ***************
       
    68 *** 615,621 ****
       
    69 --- 618,629 ----
       
    70       /* When not finishing an operator and no register name typed, reset the
       
    71        * count. */
       
    72       if (!finish_op && !oap->regname)
       
    73 +     {
       
    74   	ca.opcount = 0;
       
    75 + #ifdef FEAT_EVAL
       
    76 + 	set_prevcount = TRUE;
       
    77 + #endif
       
    78 +     }
       
    79   
       
    80   #ifdef FEAT_AUTOCMD
       
    81       /* Restore counts from before receiving K_CURSORHOLD.  This means after
       
    82 ***************
       
    83 *** 719,725 ****
       
    84   	     * command, so that v:count can be used in an expression mapping
       
    85   	     * right after the count. */
       
    86   	    if (toplevel && stuff_empty())
       
    87 ! 		set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0);
       
    88   #endif
       
    89   	    if (ctrl_w)
       
    90   	    {
       
    91 --- 727,741 ----
       
    92   	     * command, so that v:count can be used in an expression mapping
       
    93   	     * right after the count. */
       
    94   	    if (toplevel && stuff_empty())
       
    95 ! 	    {
       
    96 ! 		long count = ca.count0;
       
    97 ! 
       
    98 ! 		/* multiply with ca.opcount the same way as below */
       
    99 ! 		if (ca.opcount != 0)
       
   100 ! 		    count = ca.opcount * (count == 0 ? 1 : count);
       
   101 ! 		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
       
   102 ! 		set_prevcount = FALSE;  /* only set v:prevcount once */
       
   103 ! 	    }
       
   104   #endif
       
   105   	    if (ctrl_w)
       
   106   	    {
       
   107 ***************
       
   108 *** 806,812 ****
       
   109        * Only set v:count when called from main() and not a stuffed command.
       
   110        */
       
   111       if (toplevel && stuff_empty())
       
   112 ! 	set_vcount(ca.count0, ca.count1);
       
   113   #endif
       
   114   
       
   115       /*
       
   116 --- 822,828 ----
       
   117        * Only set v:count when called from main() and not a stuffed command.
       
   118        */
       
   119       if (toplevel && stuff_empty())
       
   120 ! 	set_vcount(ca.count0, ca.count1, set_prevcount);
       
   121   #endif
       
   122   
       
   123       /*
       
   124 *** ../vim-7.2.047/src/proto/eval.pro	Sun Nov  9 13:43:25 2008
       
   125 --- src/proto/eval.pro	Thu Nov 20 15:53:54 2008
       
   126 ***************
       
   127 *** 61,67 ****
       
   128   long get_vim_var_nr __ARGS((int idx));
       
   129   char_u *get_vim_var_str __ARGS((int idx));
       
   130   list_T *get_vim_var_list __ARGS((int idx));
       
   131 ! void set_vcount __ARGS((long count, long count1));
       
   132   void set_vim_var_string __ARGS((int idx, char_u *val, int len));
       
   133   void set_vim_var_list __ARGS((int idx, list_T *val));
       
   134   void set_reg_var __ARGS((int c));
       
   135 --- 61,67 ----
       
   136   long get_vim_var_nr __ARGS((int idx));
       
   137   char_u *get_vim_var_str __ARGS((int idx));
       
   138   list_T *get_vim_var_list __ARGS((int idx));
       
   139 ! void set_vcount __ARGS((long count, long count1, int set_prevcount));
       
   140   void set_vim_var_string __ARGS((int idx, char_u *val, int len));
       
   141   void set_vim_var_list __ARGS((int idx, list_T *val));
       
   142   void set_reg_var __ARGS((int c));
       
   143 *** ../vim-7.2.047/src/version.c	Thu Nov 20 14:11:47 2008
       
   144 --- src/version.c	Thu Nov 20 16:08:19 2008
       
   145 ***************
       
   146 *** 678,679 ****
       
   147 --- 678,681 ----
       
   148   {   /* Add new patch number below this line */
       
   149 + /**/
       
   150 +     48,
       
   151   /**/
       
   152 
       
   153 -- 
       
   154 Microsoft's definition of a boolean: TRUE, FALSE, MAYBE
       
   155 "Embrace and extend"...?
       
   156 
       
   157  /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
       
   158 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
       
   159 \\\        download, build and distribute -- http://www.A-A-P.org        ///
       
   160  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///