summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.086
blob: cf494e0049d563313f1b4e1c70d50fa302d16ec7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
To: vim_dev@googlegroups.com
Subject: Patch 7.3.086
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.086
Problem:    When using a mapping with an expression and there was no count,
	    v:count has the value of the previous command. (ZyX)
Solution:   Also set v:count and v:count1 before getting the character that
	    could be a command or a count.
Files:	    src/normal.c


*** ../vim-7.3.085/src/normal.c	2010-10-13 18:06:42.000000000 +0200
--- src/normal.c	2010-12-17 18:46:56.000000000 +0100
***************
*** 25,30 ****
--- 25,33 ----
  static int	restart_VIsual_select = 0;
  #endif
  
+ #ifdef FEAT_EVAL
+ static void	set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+ #endif
  static int
  # ifdef __BORLANDC__
  _RTLENTRYF
***************
*** 648,653 ****
--- 651,664 ----
      dont_scroll = FALSE;	/* allow scrolling here */
  #endif
  
+ #ifdef FEAT_EVAL
+     /* Set v:count here, when called from main() and not a stuffed
+      * command, so that v:count can be used in an expression mapping
+      * when there is no count. */
+     if (toplevel && stuff_empty())
+ 	set_vcount_ca(&ca, &set_prevcount);
+ #endif
+ 
      /*
       * Get the command character from the user.
       */
***************
*** 725,739 ****
  	     * command, so that v:count can be used in an expression mapping
  	     * right after the count. */
  	    if (toplevel && stuff_empty())
! 	    {
! 		long count = ca.count0;
! 
! 		/* multiply with ca.opcount the same way as below */
! 		if (ca.opcount != 0)
! 		    count = ca.opcount * (count == 0 ? 1 : count);
! 		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
! 		set_prevcount = FALSE;  /* only set v:prevcount once */
! 	    }
  #endif
  	    if (ctrl_w)
  	    {
--- 736,742 ----
  	     * command, so that v:count can be used in an expression mapping
  	     * right after the count. */
  	    if (toplevel && stuff_empty())
! 		set_vcount_ca(&ca, &set_prevcount);
  #endif
  	    if (ctrl_w)
  	    {
***************
*** 1386,1391 ****
--- 1389,1414 ----
      opcount = ca.opcount;
  }
  
+ #ifdef FEAT_EVAL
+ /*
+  * Set v:count and v:count1 according to "cap".
+  * Set v:prevcount only when "set_prevcount" is TRUE.
+  */
+     static void
+ set_vcount_ca(cap, set_prevcount)
+     cmdarg_T	*cap;
+     int		*set_prevcount;
+ {
+     long count = cap->count0;
+ 
+     /* multiply with cap->opcount the same way as above */
+     if (cap->opcount != 0)
+ 	count = cap->opcount * (count == 0 ? 1 : count);
+     set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
+     *set_prevcount = FALSE;  /* only set v:prevcount once */
+ }
+ #endif
+ 
  /*
   * Handle an operator after visual mode or when the movement is finished
   */
***************
*** 8529,8535 ****
      else
  	curwin->w_curswant = 0;
      /* keep curswant at the column where we wanted to go, not where
!        we ended; differs if line is too short */
      curwin->w_set_curswant = FALSE;
  }
  
--- 8552,8558 ----
      else
  	curwin->w_curswant = 0;
      /* keep curswant at the column where we wanted to go, not where
!      * we ended; differs if line is too short */
      curwin->w_set_curswant = FALSE;
  }
  
*** ../vim-7.3.085/src/version.c	2010-12-17 18:06:00.000000000 +0100
--- src/version.c	2010-12-17 18:51:20.000000000 +0100
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     86,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
15. Five days in advance, tell your friends you can't attend their
    party because you're not in the mood.

 /// 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    ///