]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.166
- new
[packages/vim.git] / 7.2.166
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.166
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.166
11 Problem:    No completion for ":sign" command.
12 Solution:   Add ":sign" completion. (Dominique Pelle)
13 Files:      src/ex_cmds.c, src/ex_docmd.c, src/ex_getln.c, src/vim.h,
14             src/proto/ex_cmds.pro
15
16
17 *** ../vim-7.2.165/src/ex_cmds.c        Tue Feb 24 04:28:40 2009
18 --- src/ex_cmds.c       Wed Apr 29 17:08:27 2009
19 ***************
20 *** 6543,6562 ****
21   static void sign_list_defined __ARGS((sign_T *sp));
22   static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev));
23   
24 ! /*
25 !  * ":sign" command
26 !  */
27 !     void
28 ! ex_sign(eap)
29 !     exarg_T   *eap;
30 ! {
31 !     char_u    *arg = eap->arg;
32 !     char_u    *p;
33 !     int               idx;
34 !     sign_T    *sp;
35 !     sign_T    *sp_prev;
36 !     buf_T     *buf;
37 !     static char       *cmds[] = {
38                         "define",
39   #define SIGNCMD_DEFINE        0
40                         "undefine",
41 --- 6543,6549 ----
42   static void sign_list_defined __ARGS((sign_T *sp));
43   static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev));
44   
45 ! static char *cmds[] = {
46                         "define",
47   #define SIGNCMD_DEFINE        0
48                         "undefine",
49 ***************
50 *** 6569,6590 ****
51   #define SIGNCMD_UNPLACE       4
52                         "jump",
53   #define SIGNCMD_JUMP  5
54   #define SIGNCMD_LAST  6
55 !     };
56   
57       /* Parse the subcommand. */
58       p = skiptowhite(arg);
59 !     if (*p != NUL)
60 !       *p++ = NUL;
61 !     for (idx = 0; ; ++idx)
62       {
63 !       if (idx == SIGNCMD_LAST)
64 !       {
65 !           EMSG2(_("E160: Unknown sign command: %s"), arg);
66 !           return;
67 !       }
68 !       if (STRCMP(arg, cmds[idx]) == 0)
69 !           break;
70       }
71       arg = skipwhite(p);
72   
73 --- 6556,6606 ----
74   #define SIGNCMD_UNPLACE       4
75                         "jump",
76   #define SIGNCMD_JUMP  5
77 +                       NULL
78   #define SIGNCMD_LAST  6
79 ! };
80
81 ! /*
82 !  * Find index of a ":sign" subcmd from its name.
83 !  * "*end_cmd" must be writable.
84 !  */
85 !     static int
86 ! sign_cmd_idx(begin_cmd, end_cmd)
87 !     char      *begin_cmd;     /* begin of sign subcmd */
88 !     char      *end_cmd;       /* just after sign subcmd */
89 ! {
90 !     int               idx;
91 !     char      save = *end_cmd;
92
93 !     *end_cmd = NUL;
94 !     for (idx = 0; ; ++idx)
95 !       if (cmds[idx] == NULL || STRCMP(begin_cmd, cmds[idx]) == 0)
96 !           break;
97 !     *end_cmd = save;
98 !     return idx;
99 ! }
100
101 ! /*
102 !  * ":sign" command
103 !  */
104 !     void
105 ! ex_sign(eap)
106 !     exarg_T   *eap;
107 ! {
108 !     char_u    *arg = eap->arg;
109 !     char_u    *p;
110 !     int               idx;
111 !     sign_T    *sp;
112 !     sign_T    *sp_prev;
113 !     buf_T     *buf;
114   
115       /* Parse the subcommand. */
116       p = skiptowhite(arg);
117 !     idx = sign_cmd_idx(arg, p);
118 !     if (idx == SIGNCMD_LAST)
119       {
120 !       EMSG2(_("E160: Unknown sign command: %s"), arg);
121 !       return;
122       }
123       arg = skipwhite(p);
124   
125 ***************
126 *** 7110,7115 ****
127 --- 7126,7311 ----
128   }
129   #endif
130   
131 + #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
132 + static enum
133 + {
134 +     EXP_SUBCMD,               /* expand :sign sub-commands */
135 +     EXP_DEFINE,               /* expand :sign define {name} args */
136 +     EXP_PLACE,                /* expand :sign place {id} args */
137 +     EXP_UNPLACE,      /* expand :sign unplace" */
138 +     EXP_SIGN_NAMES    /* expand with name of placed signs */
139 + } expand_what;
140
141 + /*
142 +  * Function given to ExpandGeneric() to obtain the sign command
143 +  * expansion.
144 +  */
145 + /*ARGSUSED*/
146 +     char_u *
147 + get_sign_name(xp, idx)
148 +     expand_T  *xp;
149 +     int               idx;
150 + {
151 +     sign_T    *sp;
152 +     int               current_idx;
153
154 +     switch (expand_what)
155 +     {
156 +     case EXP_SUBCMD:
157 +       return (char_u *)cmds[idx];
158 +     case EXP_DEFINE:
159 +       {
160 +           char *define_arg[] =
161 +           {
162 +               "icon=", "linehl=", "text=", "texthl=", NULL
163 +           };
164 +           return (char_u *)define_arg[idx];
165 +       }
166 +     case EXP_PLACE:
167 +       {
168 +           char *place_arg[] =
169 +           {
170 +               "line=", "name=", "file=", "buffer=", NULL
171 +           };
172 +           return (char_u *)place_arg[idx];
173 +       }
174 +     case EXP_UNPLACE:
175 +       {
176 +           char *unplace_arg[] = { "file=", "buffer=", NULL };
177 +           return (char_u *)unplace_arg[idx];
178 +       }
179 +     case EXP_SIGN_NAMES:
180 +       /* Complete with name of signs already defined */
181 +       current_idx = 0;
182 +       for (sp = first_sign; sp != NULL; sp = sp->sn_next)
183 +           if (current_idx++ == idx)
184 +               return sp->sn_name;
185 +       return NULL;
186 +     default:
187 +       return NULL;
188 +     }
189 + }
190
191 + /*
192 +  * Handle command line completion for :sign command.
193 +  */
194 +     void
195 + set_context_in_sign_cmd(xp, arg)
196 +     expand_T  *xp;
197 +     char_u    *arg;
198 + {
199 +     char_u    *p;
200 +     char_u    *end_subcmd;
201 +     char_u    *last;
202 +     int               cmd_idx;
203 +     char_u    *begin_subcmd_args;
204
205 +     /* Default: expand subcommands. */
206 +     xp->xp_context = EXPAND_SIGN;
207 +     expand_what = EXP_SUBCMD;
208 +     xp->xp_pattern = arg;
209
210 +     end_subcmd = skiptowhite(arg);
211 +     if (*end_subcmd == NUL)
212 +       /* expand subcmd name
213 +        * :sign {subcmd}<CTRL-D>*/
214 +       return;
215
216 +     cmd_idx = sign_cmd_idx(arg, end_subcmd);
217
218 +     /* :sign {subcmd} {subcmd_args}
219 +      *                |
220 +      *                begin_subcmd_args */
221 +     begin_subcmd_args = skipwhite(end_subcmd);
222 +     p = skiptowhite(begin_subcmd_args);
223 +     if (*p == NUL)
224 +     {
225 +       /*
226 +        * Expand first argument of subcmd when possible.
227 +        * For ":jump {id}" and ":unplace {id}", we could
228 +        * possibly expand the ids of all signs already placed.
229 +        */
230 +       xp->xp_pattern = begin_subcmd_args;
231 +       switch (cmd_idx)
232 +       {
233 +           case SIGNCMD_LIST:
234 +           case SIGNCMD_UNDEFINE:
235 +               /* :sign list <CTRL-D>
236 +                * :sign undefine <CTRL-D> */
237 +               expand_what = EXP_SIGN_NAMES;
238 +               break;
239 +           default:
240 +               xp->xp_context = EXPAND_NOTHING;
241 +       }
242 +       return;
243 +     }
244
245 +     /* expand last argument of subcmd */
246
247 +     /* :sign define {name} {args}...
248 +      *              |
249 +      *              p */
250
251 +     /* Loop until reaching last argument. */
252 +     do
253 +     {
254 +       p = skipwhite(p);
255 +       last = p;
256 +       p = skiptowhite(p);
257 +     } while (*p != NUL);
258
259 +     p = vim_strchr(last, '=');
260
261 +     /* :sign define {name} {args}... {last}=
262 +      *                               |     |
263 +      *                            last     p */
264 +     if (p == NUL)
265 +     {
266 +       /* Expand last argument name (before equal sign). */
267 +       xp->xp_pattern = last;
268 +       switch (cmd_idx)
269 +       {
270 +           case SIGNCMD_DEFINE:
271 +               expand_what = EXP_DEFINE;
272 +               break;
273 +           case SIGNCMD_PLACE:
274 +               expand_what = EXP_PLACE;
275 +               break;
276 +           case SIGNCMD_JUMP:
277 +           case SIGNCMD_UNPLACE:
278 +               expand_what = EXP_UNPLACE;
279 +               break;
280 +           default:
281 +               xp->xp_context = EXPAND_NOTHING;
282 +       }
283 +     }
284 +     else
285 +     {
286 +       /* Expand last argument value (after equal sign). */
287 +       xp->xp_pattern = p + 1;
288 +       switch (cmd_idx)
289 +       {
290 +           case SIGNCMD_DEFINE:
291 +               if (STRNCMP(last, "texthl", p - last) == 0 ||
292 +                   STRNCMP(last, "linehl", p - last) == 0)
293 +                   xp->xp_context = EXPAND_HIGHLIGHT;
294 +               else if (STRNCMP(last, "icon", p - last) == 0)
295 +                   xp->xp_context = EXPAND_FILES;
296 +               else
297 +                   xp->xp_context = EXPAND_NOTHING;
298 +               break;
299 +           case SIGNCMD_PLACE:
300 +               if (STRNCMP(last, "name", p - last) == 0)
301 +                   expand_what = EXP_SIGN_NAMES;
302 +               else
303 +                   xp->xp_context = EXPAND_NOTHING;
304 +               break;
305 +           default:
306 +               xp->xp_context = EXPAND_NOTHING;
307 +       }
308 +     }
309 + }
310 + #endif
311   #endif
312   
313   #if defined(FEAT_GUI) || defined(FEAT_CLIENTSERVER) || defined(PROTO)
314 *** ../vim-7.2.165/src/ex_docmd.c       Wed Apr 22 16:22:44 2009
315 --- src/ex_docmd.c      Wed Apr 29 17:05:23 2009
316 ***************
317 *** 3695,3700 ****
318 --- 3695,3705 ----
319             set_context_in_cscope_cmd(xp, arg, ea.cmdidx);
320             break;
321   #endif
322 + #ifdef FEAT_SIGNS
323 +       case CMD_sign:
324 +           set_context_in_sign_cmd(xp, arg);
325 +           break;
326 + #endif
327   #ifdef FEAT_LISTCMDS
328         case CMD_bdelete:
329         case CMD_bwipeout:
330 ***************
331 *** 5218,5223 ****
332 --- 5223,5231 ----
333       {EXPAND_MENUS, "menu"},
334       {EXPAND_SETTINGS, "option"},
335       {EXPAND_SHELLCMD, "shellcmd"},
336 + #if defined(FEAT_SIGNS)
337 +     {EXPAND_SIGN, "sign"},
338 + #endif
339       {EXPAND_TAGS, "tag"},
340       {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
341       {EXPAND_USER_VARS, "var"},
342 *** ../vim-7.2.165/src/ex_getln.c       Wed Apr 29 12:03:35 2009
343 --- src/ex_getln.c      Wed Apr 29 12:51:42 2009
344 ***************
345 *** 325,331 ****
346   #endif
347   
348   #ifdef FEAT_DIGRAPHS
349 !     do_digraph(-1);           /* init digraph typahead */
350   #endif
351   
352       /*
353 --- 325,331 ----
354   #endif
355   
356   #ifdef FEAT_DIGRAPHS
357 !     do_digraph(-1);           /* init digraph typeahead */
358   #endif
359   
360       /*
361 ***************
362 *** 4521,4526 ****
363 --- 4521,4529 ----
364   #ifdef FEAT_CSCOPE
365             {EXPAND_CSCOPE, get_cscope_name, TRUE},
366   #endif
367 + #ifdef FEAT_SIGNS
368 +           {EXPAND_SIGN, get_sign_name, TRUE},
369 + #endif
370   #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
371         && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
372             {EXPAND_LANGUAGE, get_lang_arg, TRUE},
373 *** ../vim-7.2.165/src/vim.h    Wed Mar 18 12:50:58 2009
374 --- src/vim.h   Wed Apr 29 12:51:42 2009
375 ***************
376 *** 709,714 ****
377 --- 709,715 ----
378   #define EXPAND_USER_LIST      31
379   #define EXPAND_SHELLCMD               32
380   #define EXPAND_CSCOPE         33
381 + #define EXPAND_SIGN           34
382   
383   /* Values for exmode_active (0 is no exmode) */
384   #define EXMODE_NORMAL         1
385 *** ../vim-7.2.165/src/proto/ex_cmds.pro        Tue Feb 24 04:28:40 2009
386 --- src/proto/ex_cmds.pro       Wed Apr 29 17:10:29 2009
387 ***************
388 *** 40,46 ****
389   int read_viminfo_sub_string __ARGS((vir_T *virp, int force));
390   void write_viminfo_sub_string __ARGS((FILE *fp));
391   void free_old_sub __ARGS((void));
392 - void free_signs __ARGS((void));
393   int prepare_tagpreview __ARGS((int undo_sync));
394   void ex_help __ARGS((exarg_T *eap));
395   char_u *check_help_lang __ARGS((char_u *arg));
396 --- 40,45 ----
397 ***************
398 *** 56,60 ****
399 --- 55,62 ----
400   char_u *sign_get_text __ARGS((int typenr));
401   void *sign_get_image __ARGS((int typenr));
402   char_u *sign_typenr2name __ARGS((int typenr));
403 + void free_signs __ARGS((void));
404 + char_u *get_sign_name __ARGS((expand_T *xp, int idx));
405 + void set_context_in_sign_cmd __ARGS((expand_T *xp, char_u *arg));
406   void ex_drop __ARGS((exarg_T *eap));
407   /* vim: set ft=c : */
408 *** ../vim-7.2.165/src/version.c        Wed Apr 29 18:01:23 2009
409 --- src/version.c       Wed Apr 29 18:43:14 2009
410 ***************
411 *** 678,679 ****
412 --- 678,681 ----
413   {   /* Add new patch number below this line */
414 + /**/
415 +     166,
416   /**/
417
418 -- 
419 Did you ever stop to think...  and forget to start again?
420                                   -- Steven Wright
421
422  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
423 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
424 \\\        download, build and distribute -- http://www.A-A-P.org        ///
425  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.059145 seconds and 3 git commands to generate.