Blob Blame History Raw
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


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