| To: vim-dev@vim.org |
| Subject: patch 7.1.036 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| 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 |
| |
| |
| |
| |
| |
| *** 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. |
| |
| |
| |
| *** 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: |
| |
| |
| |
| *** 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; |
| } |
| |
| |
| |
| *** 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)); |
| |
| |
| |
| *** 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. |
| |
| |
| |
| *** 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 /// |