]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.010
- new
[packages/vim.git] / 7.2.010
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.010
3 Fcc: outbox
4 From: Bram Moolenaar <Bram@moolenaar.net>
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.010
11 Problem:    When using "K" in Visual mode not all characters are properly
12             escaped. (Ben Schmidt)
13 Solution:   Use a function with the functionality of shellescape(). (Jan
14             Minar)
15 Files:      src/mbyte.c, src/misc2.c, src/normal.c
16
17
18 *** ../vim-7.2.009/src/mbyte.c  Wed Aug  6 18:45:36 2008
19 --- src/mbyte.c Wed Sep  3 22:34:48 2008
20 ***************
21 *** 2540,2546 ****
22       return (int)(p - q);
23   }
24   
25 - #if defined(FEAT_EVAL) || defined(PROTO)
26   /*
27    * Copy a character from "*fp" to "*tp" and advance the pointers.
28    */
29 --- 2540,2545 ----
30 ***************
31 *** 2555,2561 ****
32       *tp += l;
33       *fp += l;
34   }
35 - #endif
36   
37   /*
38    * Return the offset from "p" to the first byte of a character.  When "p" is
39 --- 2554,2559 ----
40 *** ../vim-7.2.009/src/misc2.c  Thu Jul 24 20:28:58 2008
41 --- src/misc2.c Wed Sep  3 22:05:21 2008
42 ***************
43 *** 1257,1263 ****
44       return escaped_string;
45   }
46   
47 - #if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO)
48   /*
49    * Return TRUE when 'shell' has "csh" in the tail.
50    */
51 --- 1257,1262 ----
52 ***************
53 *** 1266,1274 ****
54   {
55       return (strstr((char *)gettail(p_sh), "csh") != NULL);
56   }
57 - #endif
58   
59 - #if defined(FEAT_EVAL) || defined(PROTO)
60   /*
61    * Escape "string" for use as a shell argument with system().
62    * This uses single quotes, except when we know we need to use double qoutes
63 --- 1265,1271 ----
64 ***************
65 *** 1391,1397 ****
66   
67       return escaped_string;
68   }
69 - #endif
70   
71   /*
72    * Like vim_strsave(), but make all characters uppercase.
73 --- 1388,1393 ----
74 *** ../vim-7.2.009/src/normal.c Thu Jul 31 22:03:54 2008
75 --- src/normal.c        Sat Sep  6 15:06:07 2008
76 ***************
77 *** 5469,5474 ****
78 --- 5469,5479 ----
79                 STRCPY(buf, "he! ");
80             else
81             {
82 +               /* An external command will probably use an argument starting
83 +                * with "-" as an option.  To avoid trouble we skip the "-". */
84 +               while (*ptr == '-')
85 +                   ++ptr;
86
87                 /* When a count is given, turn it into a range.  Is this
88                  * really what we want? */
89                 isman = (STRCMP(kp, "man") == 0);
90 ***************
91 *** 5511,5547 ****
92       /*
93        * Now grab the chars in the identifier
94        */
95 !     if (cmdchar == '*')
96 !       aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
97 !     else if (cmdchar == '#')
98 !       aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
99 !     else if (cmdchar == 'K' && !kp_help)
100 !       aux_ptr = (char_u *)" \t\\\"|!";
101 !     else
102 !       /* Don't escape spaces and Tabs in a tag with a backslash */
103 !       aux_ptr = (char_u *)"\\|\"";
104
105 !     p = buf + STRLEN(buf);
106 !     while (n-- > 0)
107 !     {
108 !       /* put a backslash before \ and some others */
109 !       if (vim_strchr(aux_ptr, *ptr) != NULL)
110 !           *p++ = '\\';
111 ! #ifdef FEAT_MBYTE
112 !       /* When current byte is a part of multibyte character, copy all bytes
113 !        * of that character. */
114 !       if (has_mbyte)
115         {
116 !           int i;
117 !           int len = (*mb_ptr2len)(ptr) - 1;
118
119 !           for (i = 0; i < len && n >= 1; ++i, --n)
120 !               *p++ = *ptr++;
121         }
122   #endif
123 !       *p++ = *ptr++;
124       }
125 -     *p = NUL;
126   
127       /*
128        * Execute the command.
129 --- 5516,5572 ----
130       /*
131        * Now grab the chars in the identifier
132        */
133 !     if (cmdchar == 'K' && !kp_help)
134 !     {
135 !       /* Escape the argument properly for a shell command */
136 !       p = vim_strsave_shellescape(ptr, TRUE);
137 !       if (p == NULL)
138         {
139 !           vim_free(buf);
140 !           return;
141         }
142 +       buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1);
143 +       if (buf == NULL)
144 +       {
145 +           vim_free(buf);
146 +           vim_free(p);
147 +           return;
148 +       }
149 +       STRCAT(buf, p);
150 +       vim_free(p);
151 +     }
152 +     else
153 +     {
154 +       if (cmdchar == '*')
155 +           aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
156 +       else if (cmdchar == '#')
157 +           aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
158 +       else
159 +           /* Don't escape spaces and Tabs in a tag with a backslash */
160 +           aux_ptr = (char_u *)"\\|\"\n*?[";
161
162 +       p = buf + STRLEN(buf);
163 +       while (n-- > 0)
164 +       {
165 +           /* put a backslash before \ and some others */
166 +           if (vim_strchr(aux_ptr, *ptr) != NULL)
167 +               *p++ = '\\';
168 + #ifdef FEAT_MBYTE
169 +           /* When current byte is a part of multibyte character, copy all
170 +            * bytes of that character. */
171 +           if (has_mbyte)
172 +           {
173 +               int i;
174 +               int len = (*mb_ptr2len)(ptr) - 1;
175
176 +               for (i = 0; i < len && n >= 1; ++i, --n)
177 +                   *p++ = *ptr++;
178 +           }
179   #endif
180 !           *p++ = *ptr++;
181 !       }
182 !       *p = NUL;
183       }
184   
185       /*
186        * Execute the command.
187 *** ../vim-7.2.009/src/version.c        Mon Sep  1 17:56:05 2008
188 --- src/version.c       Sat Sep  6 16:26:42 2008
189 ***************
190 *** 678,679 ****
191 --- 678,681 ----
192   {   /* Add new patch number below this line */
193 + /**/
194 +     10,
195   /**/
196
197 -- 
198 Q. What happens to programmers when they die?
199 A: MS-Windows programmers are reinstalled.  C++ programmers become undefined,
200    anyone who refers to them will die as well.  Java programmers reincarnate
201    after being garbage collected.
202
203  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
204 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
205 \\\        download, build and distribute -- http://www.A-A-P.org        ///
206  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.037801 seconds and 3 git commands to generate.