To: vim-dev@vim.org Subject: patch 7.1.036 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 7.1.036 Problem: Completing ":echohl" argument should include "None". (Ori Avtalion) ":match" should have "none" too. Solution: Add flags to use expand_highlight(). Also fix that when disabling FEAT_CMDL_COMPL compilation fails. (Chris Lubinski) Files: src/eval.c, src/ex_docmd.c, src/ex_getln.c, src/proto/syntax.pro src/syntax.c *** ../vim-7.1.035/src/eval.c Tue Jul 24 10:44:10 2007 --- src/eval.c Wed Jul 11 19:50:27 2007 *************** *** 1411,1417 **** } ! #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO) /* * Call some vimL function and return the result in "*rettv". * Uses argv[argc] for the function arguments. --- 1411,1418 ---- } ! #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \ ! || defined(FEAT_COMPL_FUNC) || defined(PROTO) /* * Call some vimL function and return the result in "*rettv". * Uses argv[argc] for the function arguments. *************** *** 1484,1489 **** --- 1485,1491 ---- return ret; } + # if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO) /* * Call vimL function "func" and return the result as a string. * Returns NULL when calling the function fails. *************** *** 1506,1513 **** clear_tv(&rettv); return retval; } ! #if defined(FEAT_COMPL_FUNC) || defined(PROTO) /* * Call vimL function "func" and return the result as a number. * Returns -1 when calling the function fails. --- 1508,1516 ---- clear_tv(&rettv); return retval; } + # endif ! # if defined(FEAT_COMPL_FUNC) || defined(PROTO) /* * Call vimL function "func" and return the result as a number. * Returns -1 when calling the function fails. *************** *** 1530,1536 **** clear_tv(&rettv); return retval; } ! #endif /* * Call vimL function "func" and return the result as a list --- 1533,1539 ---- clear_tv(&rettv); return retval; } ! # endif /* * Call vimL function "func" and return the result as a list *************** *** 1556,1563 **** return rettv.vval.v_list; } - #endif /* * Save the current function call pointer, and set it to NULL. --- 1559,1566 ---- return rettv.vval.v_list; } #endif + /* * Save the current function call pointer, and set it to NULL. *** ../vim-7.1.035/src/ex_docmd.c Mon Jul 16 20:38:56 2007 --- src/ex_docmd.c Sun Jul 15 17:20:09 2007 *************** *** 3406,3419 **** case CMD_windo: return arg; ! #ifdef FEAT_SEARCH_EXTRA case CMD_match: if (*arg == NUL || !ends_excmd(*arg)) { ! /* Dummy call to clear variables. */ ! set_context_in_highlight_cmd(xp, (char_u *)"link n"); ! xp->xp_context = EXPAND_HIGHLIGHT; ! xp->xp_pattern = arg; arg = skipwhite(skiptowhite(arg)); if (*arg != NUL) { --- 3406,3418 ---- case CMD_windo: return arg; ! #ifdef FEAT_CMDL_COMPL ! # ifdef FEAT_SEARCH_EXTRA case CMD_match: if (*arg == NUL || !ends_excmd(*arg)) { ! /* also complete "None" */ ! set_context_in_echohl_cmd(xp, arg); arg = skipwhite(skiptowhite(arg)); if (*arg != NUL) { *************** *** 3422,3430 **** } } return find_nextcmd(arg); ! #endif - #ifdef FEAT_CMDL_COMPL /* * All completion for the +cmdline_compl feature goes here. */ --- 3421,3428 ---- } } return find_nextcmd(arg); ! # endif /* * All completion for the +cmdline_compl feature goes here. */ *************** *** 3622,3629 **** break; case CMD_echohl: ! xp->xp_context = EXPAND_HIGHLIGHT; ! xp->xp_pattern = arg; break; #endif case CMD_highlight: --- 3620,3626 ---- break; case CMD_echohl: ! set_context_in_echohl_cmd(xp, arg); break; #endif case CMD_highlight: *** ../vim-7.1.035/src/ex_getln.c Tue Jul 17 18:14:14 2007 --- src/ex_getln.c Tue Jul 17 18:05:49 2007 *************** *** 268,274 **** --- 268,276 ---- { xpc.xp_context = ccline.xp_context; xpc.xp_pattern = ccline.cmdbuff; + # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL) xpc.xp_arg = ccline.xp_arg; + # endif } #endif *************** *** 4151,4163 **** --- 4153,4171 ---- #ifdef FEAT_EVAL if (ccline.cmdfirstc == '=') + { + # ifdef FEAT_CMDL_COMPL /* pass CMD_SIZE because there is no real command */ set_context_for_expression(xp, str, CMD_SIZE); + # endif + } else if (ccline.input_fn) { xp->xp_context = ccline.xp_context; xp->xp_pattern = ccline.cmdbuff; + # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL) xp->xp_arg = ccline.xp_arg; + # endif } else #endif *************** *** 4504,4509 **** --- 4512,4523 ---- /* Sort the results. Keep menu's in the specified order. */ if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS) sort_strings(*file, *num_file); + + #ifdef FEAT_CMDL_COMPL + /* Reset the variables used for special highlight names expansion, so that + * they don't show up when getting normal highlight names by ID. */ + reset_expand_highlight(); + #endif return OK; } *** ../vim-7.1.035/src/proto/syntax.pro Sat May 5 19:23:52 2007 --- src/proto/syntax.pro Fri Jul 13 19:51:43 2007 *************** *** 8,13 **** --- 8,15 ---- void syntax_clear __ARGS((buf_T *buf)); void ex_syntax __ARGS((exarg_T *eap)); int syntax_present __ARGS((buf_T *buf)); + void reset_expand_highlight __ARGS((void)); + void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg)); void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg)); char_u *get_syntax_name __ARGS((expand_T *xp, int idx)); int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp)); *** ../vim-7.1.035/src/syntax.c Thu Jun 28 11:59:13 2007 --- src/syntax.c Fri Jul 13 19:51:39 2007 *************** *** 66,73 **** #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data))) #ifdef FEAT_CMDL_COMPL ! static int include_default = FALSE; /* include "default" for expansion */ ! static int include_link = FALSE; /* include "link" for expansion */ #endif /* --- 66,75 ---- #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data))) #ifdef FEAT_CMDL_COMPL ! /* Flags to indicate an additional string for highlight name completion. */ ! static int include_none = 0; /* when 1 include "None" */ ! static int include_default = 0; /* when 1 include "default" */ ! static int include_link = 0; /* when 2 include "link" and "clear" */ #endif /* *************** *** 5968,5973 **** --- 5970,5998 ---- EXP_CASE /* expand ":syn case" arguments */ } expand_what; + /* + * Reset include_link, include_default, include_none to 0. + * Called when we are done expanding. + */ + void + reset_expand_highlight() + { + include_link = include_default = include_none = 0; + } + + /* + * Handle command line completion for :match and :echohl command: Add "None" + * as highlight group. + */ + void + set_context_in_echohl_cmd(xp, arg) + expand_T *xp; + char_u *arg; + { + xp->xp_context = EXPAND_HIGHLIGHT; + xp->xp_pattern = arg; + include_none = 1; + } /* * Handle command line completion for :syntax command. *************** *** 5983,5990 **** xp->xp_context = EXPAND_SYNTAX; expand_what = EXP_SUBCMD; xp->xp_pattern = arg; ! include_link = FALSE; ! include_default = FALSE; /* (part of) subcommand already typed */ if (*arg != NUL) --- 6008,6015 ---- xp->xp_context = EXPAND_SYNTAX; expand_what = EXP_SUBCMD; xp->xp_pattern = arg; ! include_link = 0; ! include_default = 0; /* (part of) subcommand already typed */ if (*arg != NUL) *************** *** 8949,8955 **** return OK; } ! #ifdef FEAT_CMDL_COMPL static void highlight_list __ARGS((void)); static void highlight_list_two __ARGS((int cnt, int attr)); --- 8974,8980 ---- return OK; } ! #if defined(FEAT_CMDL_COMPL) || defined(PROTO) static void highlight_list __ARGS((void)); static void highlight_list_two __ARGS((int cnt, int attr)); *************** *** 8967,8974 **** /* Default: expand group names */ xp->xp_context = EXPAND_HIGHLIGHT; xp->xp_pattern = arg; ! include_link = TRUE; ! include_default = TRUE; /* (part of) subcommand already typed */ if (*arg != NUL) --- 8992,8999 ---- /* Default: expand group names */ xp->xp_context = EXPAND_HIGHLIGHT; xp->xp_pattern = arg; ! include_link = 2; ! include_default = 1; /* (part of) subcommand already typed */ if (*arg != NUL) *************** *** 8976,8982 **** p = skiptowhite(arg); if (*p != NUL) /* past "default" or group name */ { ! include_default = FALSE; if (STRNCMP("default", arg, p - arg) == 0) { arg = skipwhite(p); --- 9001,9007 ---- p = skiptowhite(arg); if (*p != NUL) /* past "default" or group name */ { ! include_default = 0; if (STRNCMP("default", arg, p - arg) == 0) { arg = skipwhite(p); *************** *** 8985,8991 **** } if (*p != NUL) /* past group name */ { ! include_link = FALSE; if (arg[1] == 'i' && arg[0] == 'N') highlight_list(); if (STRNCMP("link", arg, p - arg) == 0 --- 9010,9016 ---- } if (*p != NUL) /* past group name */ { ! include_link = 0; if (arg[1] == 'i' && arg[0] == 'N') highlight_list(); if (STRNCMP("link", arg, p - arg) == 0 *************** *** 9045,9075 **** expand_T *xp; int idx; { - if (idx == highlight_ga.ga_len #ifdef FEAT_CMDL_COMPL ! && include_link ! #endif ! ) return (char_u *)"link"; ! if (idx == highlight_ga.ga_len + 1 ! #ifdef FEAT_CMDL_COMPL ! && include_link ! #endif ! ) return (char_u *)"clear"; - if (idx == highlight_ga.ga_len + 2 - #ifdef FEAT_CMDL_COMPL - && include_default #endif - ) - return (char_u *)"default"; if (idx < 0 || idx >= highlight_ga.ga_len) return NULL; return HL_TABLE()[idx].sg_name; } #endif ! #ifdef FEAT_GUI /* * Free all the highlight group fonts. * Used when quitting for systems which need it. --- 9070,9094 ---- expand_T *xp; int idx; { #ifdef FEAT_CMDL_COMPL ! if (idx == highlight_ga.ga_len && include_none != 0) ! return (char_u *)"none"; ! if (idx == highlight_ga.ga_len + include_none && include_default != 0) ! return (char_u *)"default"; ! if (idx == highlight_ga.ga_len + include_none + include_default ! && include_link != 0) return (char_u *)"link"; ! if (idx == highlight_ga.ga_len + include_none + include_default + 1 ! && include_link != 0) return (char_u *)"clear"; #endif if (idx < 0 || idx >= highlight_ga.ga_len) return NULL; return HL_TABLE()[idx].sg_name; } #endif ! #if defined(FEAT_GUI) || defined(PROTO) /* * Free all the highlight group fonts. * Used when quitting for systems which need it. *** ../vim-7.1.035/src/version.c Tue Jul 24 11:15:46 2007 --- src/version.c Tue Jul 24 14:30:18 2007 *************** *** 668,669 **** --- 668,671 ---- { /* Add new patch number below this line */ + /**/ + 36, /**/ -- Apparently, 1 in 5 people in the world are Chinese. And there are 5 people in my family, so it must be one of them. It's either my mum or my dad. Or my older brother Colin. Or my younger brother Ho-Cha-Chu. But I think it's Colin. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///