r999 - in /trunk/packages/vim: debian/ upstream/patches/

jamessan at users.alioth.debian.org jamessan at users.alioth.debian.org
Wed Aug 1 17:43:02 UTC 2007


Author: jamessan
Date: Wed Aug  1 17:43:01 2007
New Revision: 999

URL: http://svn.debian.org/wsvn/pkg-vim/?sc=1&rev=999
Log:
Upstream patches 40 - 47.  Still need to fix how we build vim-tiny so it will be more resilient to changes in src/feature.h

Added:
    trunk/packages/vim/upstream/patches/7.1.040
    trunk/packages/vim/upstream/patches/7.1.041
    trunk/packages/vim/upstream/patches/7.1.042
    trunk/packages/vim/upstream/patches/7.1.043
    trunk/packages/vim/upstream/patches/7.1.044
    trunk/packages/vim/upstream/patches/7.1.045
    trunk/packages/vim/upstream/patches/7.1.046
    trunk/packages/vim/upstream/patches/7.1.047
Modified:
    trunk/packages/vim/debian/README
    trunk/packages/vim/debian/changelog

Modified: trunk/packages/vim/debian/README
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/debian/README?rev=999&op=diff
==============================================================================
--- trunk/packages/vim/debian/README (original)
+++ trunk/packages/vim/debian/README Wed Aug  1 17:43:01 2007
@@ -64,3 +64,11 @@
   1817  7.1.037  using strcpy() for an overlapping string
   5704  7.1.038  'preseveindent' doesn't always work when 'et' is set
   1750  7.1.039  weird help-tags tag in docs file may make cause a crash
+ 53412  7.1.040  ":match" only supports three matches
+  4614  7.1.041  (extra, after 7.1.040) update test makefiles for new test
+  2366  7.1.042  (after 7.1.040) internal error when using matchadd()
+  2820  7.1.043  in Ex mode using CTRL-D twice may cause a crash
+  1632  7.1.044  in Insert mode 0 CTRL-T deletes all indent
+  3101  7.1.045  double screen redraw in some situations
+  1637  7.1.046  ":s/.*/&/" deletes composing characters
+  1552  7.1.047  wrong argument for vim_regcomp()

Modified: trunk/packages/vim/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/debian/changelog?rev=999&op=diff
==============================================================================
--- trunk/packages/vim/debian/changelog (original)
+++ trunk/packages/vim/debian/changelog Wed Aug  1 17:43:01 2007
@@ -1,7 +1,7 @@
-vim (1:7.1-039+1) UNRELEASED; urgency=low
+vim (1:7.1-047+1) UNRELEASED; urgency=low
 
   [ Debian Vim Maintainers ]
-  * New upstream patches (023 - 039), see README.gz for details.
+  * New upstream patches (023 - 047), see README.gz for details.
 
   [ Pierre Habouzit ]
   * Make sure reportbug vim/presubj is named that way, without a `vim.` prefix
@@ -16,7 +16,7 @@
     continuations for the ftplugin in order to prevent an error when being run
     in vi-compatible mode.  (Closes: #430372)
 
- -- James Vega <jamessan at debian.org>  Wed, 25 Jul 2007 19:36:26 -0400
+ -- James Vega <jamessan at debian.org>  Wed, 01 Aug 2007 13:29:36 -0400
 
 vim (1:7.1-022+1) unstable; urgency=low
 

Added: trunk/packages/vim/upstream/patches/7.1.040
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.040?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.040 (added)
+++ trunk/packages/vim/upstream/patches/7.1.040 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,1843 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.040
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.040
+Problem:    ":match" only supports three matches.
+Solution:   Add functions clearmatches(), getmatches(), matchadd(),
+	    matchdelete() and setmatches().  Changed the data structures for
+	    this.  A small bug in syntax.c is fixed, so newly created
+	    highlight groups can have their name resolved correctly from their
+	    ID.  (Martin Toft)
+Files:	    runtime/doc/eval.txt, runtime/doc/pattern.txt,
+	    runtime/doc/usr_41.txt, src/eval.c, src/ex_docmd.c,
+	    src/proto/window.pro, src/screen.c, src/structs.h, src/syntax.c,
+	    src/testdir/Makefile, src/testdir/test63.in,
+	    src/testdir/test63.ok, src/window.c
+
+
+*** ../vim-7.1.039/runtime/doc/eval.txt	Tue Jul 17 16:31:15 2007
+--- runtime/doc/eval.txt	Wed Jul 25 21:05:56 2007
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 7.1.  Last change: 2007 Jul 11
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 7.1.  Last change: 2007 Jul 25
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1557,1562 ****
+--- 1557,1563 ----
+  changenr()			Number  current change number
+  char2nr( {expr})		Number	ASCII value of first char in {expr}
+  cindent( {lnum})		Number	C indent for line {lnum}
++ clearmatches()			None	clear all matches
+  col( {expr})			Number	column nr of cursor or mark
+  complete({startcol}, {matches})	String  set Insert mode completion
+  complete_add( {expr})		Number	add completion match
+***************
+*** 1622,1627 ****
+--- 1623,1629 ----
+  getline( {lnum})		String	line {lnum} of current buffer
+  getline( {lnum}, {end})		List	lines {lnum} to {end} of current buffer
+  getloclist({nr})		List	list of location list items
++ getmatches()			List	list of current matches
+  getpos( {expr})			List	position of cursor, mark, etc.
+  getqflist()			List	list of quickfix items
+  getreg( [{regname} [, 1]])	String	contents of register
+***************
+*** 1676,1682 ****
+--- 1678,1687 ----
+  				String	check for mappings matching {name}
+  match( {expr}, {pat}[, {start}[, {count}]])
+  				Number	position where {pat} matches in {expr}
++ matchadd( {group}, {pattern}[, {priority}[, {id}]])
++ 				Number	highlight {pattern} with {group}
+  matcharg( {nr})			List	arguments of |:match|
++ matchdelete( {id})		Number	delete match identified by {id}
+  matchend( {expr}, {pat}[, {start}[, {count}]])
+  				Number	position where {pat} ends in {expr}
+  matchlist( {expr}, {pat}[, {start}[, {count}]])
+***************
+*** 1731,1736 ****
+--- 1736,1742 ----
+  setline( {lnum}, {line})	Number	set line {lnum} to {line}
+  setloclist( {nr}, {list}[, {action}])
+  				Number	modify location list using {list}
++ setmatches( {list})		Number	restore a list of matches
+  setpos( {expr}, {list})		none	set the {expr} position to {list}
+  setqflist( {list}[, {action}])	Number	modify quickfix list using {list}
+  setreg( {n}, {v}[, {opt}])	Number	set register to value and type
+***************
+*** 2012,2017 ****
+--- 2018,2027 ----
+  		feature, -1 is returned.
+  		See |C-indenting|.
+  
++ clearmatches()						*clearmatches()*
++ 		Clears all matches previously defined by |matchadd()| and the
++ 		|:match| commands.
++ 
+  							*col()*
+  col({expr})	The result is a Number, which is the byte index of the column
+  		position given with {expr}.  The accepted positions are:
+***************
+*** 2918,2923 ****
+--- 2928,2955 ----
+  		returned.  For an invalid window number {nr}, an empty list is
+  		returned. Otherwise, same as getqflist().
+  
++ getmatches()						*getmatches()*
++ 		Returns a |List| with all matches previously defined by
++ 		|matchadd()| and the |:match| commands.  |getmatches()| is
++ 		useful in combination with |setmatches()|, as |setmatches()|
++ 		can restore a list of matches saved by |getmatches()|.
++ 		Example: >
++ 			:echo getmatches()
++ <			[{'group': 'MyGroup1', 'pattern': 'TODO',
++ 			'priority': 10, 'id': 1}, {'group': 'MyGroup2',
++ 			'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
++ 			:let m = getmatches()
++ 			:call clearmatches()
++ 			:echo getmatches()
++ <			[] >
++ 			:call setmatches(m)
++ 			:echo getmatches()
++ <			[{'group': 'MyGroup1', 'pattern': 'TODO',
++ 			'priority': 10, 'id': 1}, {'group': 'MyGroup2',
++ 			'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
++ 			:unlet m
++ <
++ 
+  getqflist()						*getqflist()*
+  		Returns a list with all the current quickfix errors.  Each
+  		list item is a dictionary with these entries:
+***************
+*** 3622,3627 ****
+--- 3654,3697 ----
+  		the pattern.  'smartcase' is NOT used.  The matching is always
+  		done like 'magic' is set and 'cpoptions' is empty.
+  
++ 					*matchadd()* *E798* *E799* *E801*
++ matchadd({group}, {pattern}[, {priority}[, {id}]])
++ 		Defines a pattern to be highlighted in the current window (a
++ 		"match").  It will be highlighted with {group}.  Returns an
++ 		identification number (ID), which can be used to delete the
++ 		match using |matchdelete()|.
++ 
++ 		The optional {priority} argument assigns a priority to the
++ 		match.  A match with a high priority will have its
++ 		highlighting overrule that of a match with a lower priority.
++ 		A priority is specified as an integer (negative numbers are no
++ 		exception).  If the {priority} argument is not specified, the
++ 		default priority is 10.  The priority of 'hlsearch' is zero,
++ 		hence all matches with a priority greater than zero will
++ 		overrule it.  Syntax highlighting (see 'syntax') is a separate
++ 		mechanism, and regardless of the chosen priority a match will
++ 		always overrule syntax highlighting.
++ 
++ 		The optional {id} argument allows the request for a specific
++ 		match ID.  If a specified ID is already taken, an error
++ 		message will appear and the match will not be added.  An ID
++ 		is specified as a positive integer (zero excluded).  IDs 1, 2
++ 		and 3 are reserved for |:match|, |:2match| and |:3match|,
++ 		respectively.  If the {id} argument is not specified,
++ 		|matchadd()| automatically chooses a free ID.
++ 
++ 		The number of matches is not limited, as it is the case with
++ 		the |:match| commands.
++ 
++ 		Example: >
++ 			:highlight MyGroup ctermbg=green guibg=green
++ 			:let m = matchadd("MyGroup", "TODO")
++ <		Deletion of the pattern: >
++ 			:call matchdelete(m)
++ 
++ <		A list of matches defined by |matchadd()| and |:match| are
++ 		available from |getmatches()|.  All matches can be deleted in
++ 		one operation by |clearmatches()|.
+  
+  matcharg({nr})							*matcharg()*
+  		Selects the {nr} match item, as set with a |:match|,
+***************
+*** 3631,3638 ****
+  			The pattern used.
+  		When {nr} is not 1, 2 or 3 returns an empty |List|.
+  		When there is no match item set returns ['', ''].
+! 		This is usef to save and restore a |:match|.
+! 
+  
+  matchend({expr}, {pat}[, {start}[, {count}]])			*matchend()*
+  		Same as match(), but return the index of first character after
+--- 3701,3715 ----
+  			The pattern used.
+  		When {nr} is not 1, 2 or 3 returns an empty |List|.
+  		When there is no match item set returns ['', ''].
+! 		This is useful to save and restore a |:match|.
+! 		Highlighting matches using the |:match| commands are limited
+! 		to three matches. |matchadd()| does not have this limitation.
+! 
+! matchdelete({id})			       *matchdelete()* *E802* *E803*
+! 		Deletes a match with ID {id} previously defined by |matchadd()|
+! 		or one of the |:match| commands.  Returns 0 if succesfull,
+! 		otherwise -1.  See example for |matchadd()|.  All matches can
+! 		be deleted in one operation by |clearmatches()|.
+  
+  matchend({expr}, {pat}[, {start}[, {count}]])			*matchend()*
+  		Same as match(), but return the index of first character after
+***************
+*** 4385,4391 ****
+  		When {nr} is zero the current window is used. For a location
+  		list window, the displayed location list is modified.  For an
+  		invalid window number {nr}, -1 is returned.
+! 		Otherwise, same as setqflist().
+  
+  							*setpos()*
+  setpos({expr}, {list})
+--- 4462,4474 ----
+  		When {nr} is zero the current window is used. For a location
+  		list window, the displayed location list is modified.  For an
+  		invalid window number {nr}, -1 is returned.
+! 		Otherwise, same as |setqflist()|.
+! 		Also see |location-list|.
+! 
+! setmatches({list})					*setmatches()*
+! 		Restores a list of matches saved by |getmatches()|.  Returns 0
+! 		if succesfull, otherwise -1.  All current matches are cleared
+! 		before the list is restored.  See example for |getmatches()|.
+  
+  							*setpos()*
+  setpos({expr}, {list})
+*** ../vim-7.1.039/runtime/doc/pattern.txt	Sat May 12 16:57:31 2007
+--- runtime/doc/pattern.txt	Tue Jul 24 15:47:01 2007
+***************
+*** 1212,1218 ****
+  		{group} must exist at the moment this command is executed.
+  
+  		The {group} highlighting still applies when a character is
+! 		to be highlighted for 'hlsearch'.
+  
+  		Note that highlighting the last used search pattern with
+  		'hlsearch' is used in all windows, while the pattern defined
+--- 1212,1221 ----
+  		{group} must exist at the moment this command is executed.
+  
+  		The {group} highlighting still applies when a character is
+! 		to be highlighted for 'hlsearch', as the highlighting for
+! 		matches is given higher priority than that of 'hlsearch'.
+! 		Syntax highlighting (see 'syntax') is also overruled by
+! 		matches.
+  
+  		Note that highlighting the last used search pattern with
+  		'hlsearch' is used in all windows, while the pattern defined
+***************
+*** 1226,1233 ****
+  		display you may get unexpected results.  That is because Vim
+  		looks for a match in the line where redrawing starts.
+  
+! 		Also see |matcharg()|, it returns the highlight group and
+! 		pattern of a previous :match command.
+  
+  		Another example, which highlights all characters in virtual
+  		column 72 and more: >
+--- 1229,1243 ----
+  		display you may get unexpected results.  That is because Vim
+  		looks for a match in the line where redrawing starts.
+  
+! 		Also see |matcharg()|and |getmatches()|. The former returns
+! 		the highlight group and pattern of a previous |:match|
+! 		command.  The latter returns a list with highlight groups and
+! 		patterns defined by both |matchadd()| and |:match|.
+! 
+! 		Highlighting matches using |:match| are limited to three
+! 		matches (aside from |:match|, |:2match| and |:3match|are
+! 		available). |matchadd()| does not have this limitation and in
+! 		addition makes it possible to prioritize matches.
+  
+  		Another example, which highlights all characters in virtual
+  		column 72 and more: >
+*** ../vim-7.1.039/runtime/doc/usr_41.txt	Sat May 12 15:54:55 2007
+--- runtime/doc/usr_41.txt	Tue Jul 24 15:47:01 2007
+***************
+*** 763,775 ****
+--- 763,784 ----
+  	foldtextresult()	get the text displayed for a closed fold
+  
+  Syntax and highlighting:
++ 	clearmatches()		clear all matches defined by |matchadd()| and
++ 				the |:match| commands
++ 	getmatches()		get all matches defined by |matchadd()| and
++ 				the |:match| commands
+  	hlexists()		check if a highlight group exists
+  	hlID()			get ID of a highlight group
+  	synID()			get syntax ID at a specific position
+  	synIDattr()		get a specific attribute of a syntax ID
+  	synIDtrans()		get translated syntax ID
+  	diff_hlID()		get highlight ID for diff mode at a position
++ 	matchadd()		define a pattern to highlight (a "match")
+  	matcharg()		get info about |:match| arguments
++ 	matchdelete()		delete a match defined by |matchadd()| or a
++ 				|:match| command
++ 	setmatches()		restore a list of matches saved by
++ 				|getmatches()|
+  
+  Spelling:
+  	spellbadword()		locate badly spelled word at or after cursor
+*** ../vim-7.1.039/src/eval.c	Tue Jul 24 14:32:44 2007
+--- src/eval.c	Tue Jul 24 20:40:52 2007
+***************
+*** 475,480 ****
+--- 475,481 ----
+  static void f_changenr __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_char2nr __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_cindent __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_clearmatches __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_col __ARGS((typval_T *argvars, typval_T *rettv));
+  #if defined(FEAT_INS_EXPAND)
+  static void f_complete __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 529,534 ****
+--- 530,536 ----
+  static void f_getftime __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getftype __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getline __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_getmatches __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getqflist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getreg __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 577,583 ****
+--- 579,587 ----
+  static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_match __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_matchadd __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matcharg __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_matchdelete __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matchend __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matchlist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matchstr __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 618,623 ****
+--- 622,628 ----
+  static void f_setcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_setline __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_setloclist __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_setmatches __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_setpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_setqflist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_setreg __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7046,7051 ****
+--- 7051,7057 ----
+      {"changenr",	0, 0, f_changenr},
+      {"char2nr",		1, 1, f_char2nr},
+      {"cindent",		1, 1, f_cindent},
++     {"clearmatches",	0, 0, f_clearmatches},
+      {"col",		1, 1, f_col},
+  #if defined(FEAT_INS_EXPAND)
+      {"complete",	2, 2, f_complete},
+***************
+*** 7102,7107 ****
+--- 7108,7114 ----
+      {"getftype",	1, 1, f_getftype},
+      {"getline",		1, 2, f_getline},
+      {"getloclist",	1, 1, f_getqflist},
++     {"getmatches",  	0, 0, f_getmatches},
+      {"getpos",		1, 1, f_getpos},
+      {"getqflist",	0, 0, f_getqflist},
+      {"getreg",		0, 2, f_getreg},
+***************
+*** 7152,7158 ****
+--- 7159,7167 ----
+      {"maparg",		1, 3, f_maparg},
+      {"mapcheck",	1, 3, f_mapcheck},
+      {"match",		2, 4, f_match},
++     {"matchadd",	2, 4, f_matchadd},
+      {"matcharg",	1, 1, f_matcharg},
++     {"matchdelete",	1, 1, f_matchdelete},
+      {"matchend",	2, 4, f_matchend},
+      {"matchlist",	2, 4, f_matchlist},
+      {"matchstr",	2, 4, f_matchstr},
+***************
+*** 7193,7198 ****
+--- 7202,7208 ----
+      {"setcmdpos",	1, 1, f_setcmdpos},
+      {"setline",		2, 2, f_setline},
+      {"setloclist",	2, 3, f_setloclist},
++     {"setmatches",	1, 1, f_setmatches},
+      {"setpos",		2, 2, f_setpos},
+      {"setqflist",	1, 2, f_setqflist},
+      {"setreg",		2, 3, f_setreg},
+***************
+*** 8243,8248 ****
+--- 8253,8272 ----
+  }
+  
+  /*
++  * "clearmatches()" function
++  */
++ /*ARGSUSED*/
++     static void
++ f_clearmatches(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++ #ifdef FEAT_SEARCH_EXTRA
++     clear_matches(curwin);
++ #endif
++ }
++ 
++ /*
+   * "col(string)" function
+   */
+      static void
+***************
+*** 10278,10283 ****
+--- 10302,10341 ----
+  }
+  
+  /*
++  * "getmatches()" function
++  */
++ /*ARGSUSED*/
++     static void
++ f_getmatches(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++ #ifdef FEAT_SEARCH_EXTRA
++     dict_T	*dict;
++     matchitem_T	*cur = curwin->w_match_head;
++ 
++     rettv->vval.v_number = 0;
++ 
++     if (rettv_list_alloc(rettv) == OK)
++     {
++ 	while (cur != NULL)
++ 	{
++ 	    dict = dict_alloc();
++ 	    if (dict == NULL)
++ 		return;
++ 	    ++dict->dv_refcount;
++ 	    dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id));
++ 	    dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
++ 	    dict_add_nr_str(dict, "priority", (long)cur->priority, NULL);
++ 	    dict_add_nr_str(dict, "id", (long)cur->id, NULL);
++ 	    list_append_dict(rettv->vval.v_list, dict);
++ 	    cur = cur->next;
++ 	}
++     }
++ #endif
++ }
++ 
++ /*
+   * "getpos(string)" function
+   */
+      static void
+***************
+*** 12448,12453 ****
+--- 12506,12547 ----
+  }
+  
+  /*
++  * "matchadd()" function
++  */
++     static void
++ f_matchadd(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++ #ifdef FEAT_SEARCH_EXTRA
++     char_u	buf[NUMBUFLEN];
++     char_u	*grp = get_tv_string_buf_chk(&argvars[0], buf);	/* group */
++     char_u	*pat = get_tv_string_buf_chk(&argvars[1], buf);	/* pattern */
++     int		prio = 10;	/* default priority */
++     int		id = -1;
++     int		error = FALSE;
++ 
++     rettv->vval.v_number = -1;
++ 
++     if (grp == NULL || pat == NULL)
++ 	return;
++     if (argvars[2].v_type != VAR_UNKNOWN)
++ 	prio = get_tv_number_chk(&argvars[2], &error);
++     if (argvars[3].v_type != VAR_UNKNOWN)
++ 	id = get_tv_number_chk(&argvars[3], &error);
++     if (error == TRUE)
++ 	return;
++     if (id >= 1 && id <= 3)
++     {
++ 	EMSGN("E798: ID is reserved for \":match\": %ld", id);
++ 	return;
++     }
++ 
++     rettv->vval.v_number = match_add(curwin, grp, pat, prio, id);
++ #endif
++ }
++ 
++ /*
+   * "matcharg()" function
+   */
+      static void
+***************
+*** 12458,12477 ****
+      if (rettv_list_alloc(rettv) == OK)
+      {
+  #ifdef FEAT_SEARCH_EXTRA
+! 	int	mi = get_tv_number(&argvars[0]);
+  
+! 	if (mi >= 1 && mi <= 3)
+  	{
+! 	    list_append_string(rettv->vval.v_list,
+! 				 syn_id2name(curwin->w_match_id[mi - 1]), -1);
+! 	    list_append_string(rettv->vval.v_list,
+! 					     curwin->w_match_pat[mi - 1], -1);
+  	}
+  #endif
+      }
+  }
+  
+  /*
+   * "matchend()" function
+   */
+      static void
+--- 12552,12593 ----
+      if (rettv_list_alloc(rettv) == OK)
+      {
+  #ifdef FEAT_SEARCH_EXTRA
+! 	int	    id = get_tv_number(&argvars[0]);
+! 	matchitem_T *m;
+  
+! 	if (id >= 1 && id <= 3)
+  	{
+! 	    if ((m = (matchitem_T *)get_match(curwin, id)) != NULL)
+! 	    {
+! 		list_append_string(rettv->vval.v_list,
+! 						syn_id2name(m->hlg_id), -1);
+! 		list_append_string(rettv->vval.v_list, m->pattern, -1);
+! 	    }
+! 	    else
+! 	    {
+! 		list_append_string(rettv->vval.v_list, NUL, -1);
+! 		list_append_string(rettv->vval.v_list, NUL, -1);
+! 	    }
+  	}
+  #endif
+      }
+  }
+  
+  /*
++  * "matchdelete()" function
++  */
++     static void
++ f_matchdelete(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++ #ifdef FEAT_SEARCH_EXTRA
++     rettv->vval.v_number = match_delete(curwin,
++ 				       (int)get_tv_number(&argvars[0]), TRUE);
++ #endif
++ }
++ 
++ /*
+   * "matchend()" function
+   */
+      static void
+***************
+*** 14506,14511 ****
+--- 14622,14687 ----
+      win = find_win_by_nr(&argvars[0], NULL);
+      if (win != NULL)
+  	set_qf_ll_list(win, &argvars[1], &argvars[2], rettv);
++ }
++ 
++ /*
++  * "setmatches()" function
++  */
++     static void
++ f_setmatches(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++ #ifdef FEAT_SEARCH_EXTRA
++     list_T	*l;
++     listitem_T	*li;
++     dict_T	*d;
++ 
++     rettv->vval.v_number = -1;
++     if (argvars[0].v_type != VAR_LIST)
++     {
++ 	EMSG(_(e_listreq));
++ 	return;
++     }
++     if ((l = argvars[0].vval.v_list) != NULL)
++     {
++ 
++ 	/* To some extent make sure that we are dealing with a list from
++ 	 * "getmatches()". */
++ 	li = l->lv_first;
++ 	while (li != NULL)
++ 	{
++ 	    if (li->li_tv.v_type != VAR_DICT
++ 		    || (d = li->li_tv.vval.v_dict) == NULL)
++ 	    {
++ 		EMSG(_(e_invarg));
++ 		return;
++ 	    }
++ 	    if (!(dict_find(d, (char_u *)"group", -1) != NULL
++ 			&& dict_find(d, (char_u *)"pattern", -1) != NULL
++ 			&& dict_find(d, (char_u *)"priority", -1) != NULL
++ 			&& dict_find(d, (char_u *)"id", -1) != NULL))
++ 	    {
++ 		EMSG(_(e_invarg));
++ 		return;
++ 	    }
++ 	    li = li->li_next;
++ 	}
++ 
++ 	clear_matches(curwin);
++ 	li = l->lv_first;
++ 	while (li != NULL)
++ 	{
++ 	    d = li->li_tv.vval.v_dict;
++ 	    match_add(curwin, get_dict_string(d, (char_u *)"group", FALSE),
++ 		    get_dict_string(d, (char_u *)"pattern", FALSE),
++ 		    (int)get_dict_number(d, (char_u *)"priority"),
++ 		    (int)get_dict_number(d, (char_u *)"id"));
++ 	    li = li->li_next;
++ 	}
++ 	rettv->vval.v_number = 0;
++     }
++ #endif
+  }
+  
+  /*
+*** ../vim-7.1.039/src/ex_docmd.c	Tue Jul 24 14:32:44 2007
+--- src/ex_docmd.c	Tue Jul 24 15:47:01 2007
+***************
+*** 10817,10828 ****
+      exarg_T	*eap;
+  {
+      char_u	*p;
+      char_u	*end;
+      int		c;
+!     int		mi;
+  
+      if (eap->line2 <= 3)
+! 	mi = eap->line2 - 1;
+      else
+      {
+  	EMSG(e_invcmd);
+--- 10817,10829 ----
+      exarg_T	*eap;
+  {
+      char_u	*p;
++     char_u	*g;
+      char_u	*end;
+      int		c;
+!     int		id;
+  
+      if (eap->line2 <= 3)
+! 	id = eap->line2;
+      else
+      {
+  	EMSG(e_invcmd);
+***************
+*** 10831,10843 ****
+  
+      /* First clear any old pattern. */
+      if (!eap->skip)
+!     {
+! 	vim_free(curwin->w_match[mi].regprog);
+! 	curwin->w_match[mi].regprog = NULL;
+! 	vim_free(curwin->w_match_pat[mi]);
+! 	curwin->w_match_pat[mi] = NULL;
+! 	redraw_later(SOME_VALID);	/* always need a redraw */
+!     }
+  
+      if (ends_excmd(*eap->arg))
+  	end = eap->arg;
+--- 10832,10838 ----
+  
+      /* First clear any old pattern. */
+      if (!eap->skip)
+! 	match_delete(curwin, id, FALSE);
+  
+      if (ends_excmd(*eap->arg))
+  	end = eap->arg;
+***************
+*** 10848,10862 ****
+      {
+  	p = skiptowhite(eap->arg);
+  	if (!eap->skip)
+! 	{
+! 	    curwin->w_match_id[mi] = syn_namen2id(eap->arg,
+! 							 (int)(p - eap->arg));
+! 	    if (curwin->w_match_id[mi] == 0)
+! 	    {
+! 		EMSG2(_(e_nogroup), eap->arg);
+! 		return;
+! 	    }
+! 	}
+  	p = skipwhite(p);
+  	if (*p == NUL)
+  	{
+--- 10843,10849 ----
+      {
+  	p = skiptowhite(eap->arg);
+  	if (!eap->skip)
+! 	    g = vim_strnsave(eap->arg, (int)(p - eap->arg));
+  	p = skipwhite(p);
+  	if (*p == NUL)
+  	{
+***************
+*** 10880,10893 ****
+  
+  	    c = *end;
+  	    *end = NUL;
+! 	    curwin->w_match[mi].regprog = vim_regcomp(p + 1, RE_MAGIC);
+! 	    if (curwin->w_match[mi].regprog == NULL)
+! 	    {
+! 		EMSG2(_(e_invarg2), p);
+! 		*end = c;
+! 		return;
+! 	    }
+! 	    curwin->w_match_pat[mi] = vim_strsave(p + 1);
+  	    *end = c;
+  	}
+      }
+--- 10867,10874 ----
+  
+  	    c = *end;
+  	    *end = NUL;
+! 	    match_add(curwin, g, p + 1, 10, id);
+! 	    vim_free(g);
+  	    *end = c;
+  	}
+      }
+*** ../vim-7.1.039/src/proto/window.pro	Sat May  5 19:52:36 2007
+--- src/proto/window.pro	Tue Jul 24 16:38:19 2007
+***************
+*** 59,62 ****
+--- 59,66 ----
+  int only_one_window __ARGS((void));
+  void check_lnums __ARGS((int do_curwin));
+  int win_hasvertsplit __ARGS((void));
++ int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
++ int match_delete __ARGS((win_T *wp, int id, int perr));
++ void clear_matches __ARGS((win_T *wp));
++ matchitem_T *get_match __ARGS((win_T *wp, int id));
+  /* vim: set ft=c : */
+*** ../vim-7.1.039/src/screen.c	Tue Jun 19 17:49:12 2007
+--- src/screen.c	Thu Jul 26 21:55:40 2007
+***************
+*** 100,126 ****
+  static int	screen_cur_row, screen_cur_col;	/* last known cursor position */
+  
+  #ifdef FEAT_SEARCH_EXTRA
+- /*
+-  * Struct used for highlighting 'hlsearch' matches for the last use search
+-  * pattern or a ":match" item.
+-  * For 'hlsearch' there is one pattern for all windows.  For ":match" there is
+-  * a different pattern for each window.
+-  */
+- typedef struct
+- {
+-     regmmatch_T	rm;	/* points to the regexp program; contains last found
+- 			   match (may continue in next line) */
+-     buf_T	*buf;	/* the buffer to search for a match */
+-     linenr_T	lnum;	/* the line to search for a match */
+-     int		attr;	/* attributes to be used for a match */
+-     int		attr_cur; /* attributes currently active in win_line() */
+-     linenr_T	first_lnum;	/* first lnum to search for multi-line pat */
+-     colnr_T	startcol; /* in win_line() points to char where HL starts */
+-     colnr_T	endcol;	 /* in win_line() points to char where HL ends */
+- } match_T;
+- 
+  static match_T search_hl;	/* used for 'hlsearch' highlight matching */
+- static match_T match_hl[3];	/* used for ":match" highlight matching */
+  #endif
+  
+  #ifdef FEAT_FOLDING
+--- 100,106 ----
+***************
+*** 155,160 ****
+--- 135,141 ----
+  static void redraw_custum_statusline __ARGS((win_T *wp));
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
++ #define SEARCH_HL_PRIORITY 0
+  static void start_search_hl __ARGS((void));
+  static void end_search_hl __ARGS((void));
+  static void prepare_search_hl __ARGS((win_T *wp, linenr_T lnum));
+***************
+*** 787,792 ****
+--- 768,774 ----
+  					   w_topline got smaller a bit */
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
++     matchitem_T *cur;		/* points to the match list */
+      int		top_to_mod = FALSE;    /* redraw above mod_top */
+  #endif
+  
+***************
+*** 848,865 ****
+  #endif
+  
+  #ifdef FEAT_SEARCH_EXTRA
+!     /* Setup for ":match" and 'hlsearch' highlighting.  Disable any previous
+       * match */
+!     for (i = 0; i < 3; ++i)
+      {
+! 	match_hl[i].rm = wp->w_match[i];
+! 	if (wp->w_match_id[i] == 0)
+! 	    match_hl[i].attr = 0;
+  	else
+! 	    match_hl[i].attr = syn_id2attr(wp->w_match_id[i]);
+! 	match_hl[i].buf = buf;
+! 	match_hl[i].lnum = 0;
+! 	match_hl[i].first_lnum = 0;
+      }
+      search_hl.buf = buf;
+      search_hl.lnum = 0;
+--- 830,849 ----
+  #endif
+  
+  #ifdef FEAT_SEARCH_EXTRA
+!     /* Setup for match and 'hlsearch' highlighting.  Disable any previous
+       * match */
+!     cur = wp->w_match_head;
+!     while (cur != NULL)
+      {
+! 	cur->hl.rm = cur->match;
+! 	if (cur->hlg_id == 0)
+! 	    cur->hl.attr = 0;
+  	else
+! 	    cur->hl.attr = syn_id2attr(cur->hlg_id);
+! 	cur->hl.buf = buf;
+! 	cur->hl.lnum = 0;
+! 	cur->hl.first_lnum = 0;
+! 	cur = cur->next;
+      }
+      search_hl.buf = buf;
+      search_hl.lnum = 0;
+***************
+*** 923,941 ****
+  	     * change in one line may make the Search highlighting in a
+  	     * previous line invalid.  Simple solution: redraw all visible
+  	     * lines above the change.
+! 	     * Same for a ":match" pattern.
+  	     */
+  	    if (search_hl.rm.regprog != NULL
+  					&& re_multiline(search_hl.rm.regprog))
+  		top_to_mod = TRUE;
+  	    else
+! 		for (i = 0; i < 3; ++i)
+! 		    if (match_hl[i].rm.regprog != NULL
+! 				      && re_multiline(match_hl[i].rm.regprog))
+  		    {
+  			top_to_mod = TRUE;
+  			break;
+  		    }
+  #endif
+  	}
+  #ifdef FEAT_FOLDING
+--- 907,931 ----
+  	     * change in one line may make the Search highlighting in a
+  	     * previous line invalid.  Simple solution: redraw all visible
+  	     * lines above the change.
+! 	     * Same for a match pattern.
+  	     */
+  	    if (search_hl.rm.regprog != NULL
+  					&& re_multiline(search_hl.rm.regprog))
+  		top_to_mod = TRUE;
+  	    else
+! 	    {
+! 		cur = wp->w_match_head;
+! 		while (cur != NULL)
+! 		{
+! 		    if (cur->match.regprog != NULL
+! 					   && re_multiline(cur->match.regprog))
+  		    {
+  			top_to_mod = TRUE;
+  			break;
+  		    }
++ 		    cur = cur->next;
++ 		}
++ 	    }
+  #endif
+  	}
+  #ifdef FEAT_FOLDING
+***************
+*** 2626,2635 ****
+      int		line_attr = 0;		/* atrribute for the whole line */
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
+!     match_T	*shl;			/* points to search_hl or match_hl */
+! #endif
+! #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_MBYTE)
+!     int		i;
+  #endif
+  #ifdef FEAT_ARABIC
+      int		prev_c = 0;		/* previous Arabic character */
+--- 2634,2646 ----
+      int		line_attr = 0;		/* atrribute for the whole line */
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
+!     matchitem_T *cur;			/* points to the match list */
+!     match_T	*shl;			/* points to search_hl or a match */
+!     int		shl_flag;		/* flag to indicate whether search_hl
+! 					   has been processed or not */
+!     int		prevcol_hl_flag;	/* flag to indicate whether prevcol
+! 					   equals startcol of search_hl or one
+! 					   of the matches */
+  #endif
+  #ifdef FEAT_ARABIC
+      int		prev_c = 0;		/* previous Arabic character */
+***************
+*** 3074,3085 ****
+  
+  #ifdef FEAT_SEARCH_EXTRA
+      /*
+!      * Handle highlighting the last used search pattern and ":match".
+!      * Do this for both search_hl and match_hl[3].
+       */
+!     for (i = 3; i >= 0; --i)
+      {
+! 	shl = (i == 3) ? &search_hl : &match_hl[i];
+  	shl->startcol = MAXCOL;
+  	shl->endcol = MAXCOL;
+  	shl->attr_cur = 0;
+--- 3085,3104 ----
+  
+  #ifdef FEAT_SEARCH_EXTRA
+      /*
+!      * Handle highlighting the last used search pattern and matches.
+!      * Do this for both search_hl and the match list.
+       */
+!     cur = wp->w_match_head;
+!     shl_flag = FALSE;
+!     while (cur != NULL || shl_flag == FALSE)
+      {
+! 	if (shl_flag == FALSE)
+! 	{
+! 	    shl = &search_hl;
+! 	    shl_flag = TRUE;
+! 	}
+! 	else
+! 	    shl = &cur->hl;
+  	shl->startcol = MAXCOL;
+  	shl->endcol = MAXCOL;
+  	shl->attr_cur = 0;
+***************
+*** 3122,3127 ****
+--- 3141,3148 ----
+  		area_highlighting = TRUE;
+  	    }
+  	}
++ 	if (shl != &search_hl && cur != NULL)
++ 	    cur = cur->next;
+      }
+  #endif
+  
+***************
+*** 3388,3400 ****
+  		 * After end, check for start/end of next match.
+  		 * When another match, have to check for start again.
+  		 * Watch out for matching an empty string!
+! 		 * Do this first for search_hl, then for match_hl, so that
+! 		 * ":match" overrules 'hlsearch'.
+  		 */
+  		v = (long)(ptr - line);
+! 		for (i = 3; i >= 0; --i)
+! 		{
+! 		    shl = (i == 3) ? &search_hl : &match_hl[i];
+  		    while (shl->rm.regprog != NULL)
+  		    {
+  			if (shl->startcol != MAXCOL
+--- 3409,3432 ----
+  		 * After end, check for start/end of next match.
+  		 * When another match, have to check for start again.
+  		 * Watch out for matching an empty string!
+! 		 * Do this for 'search_hl' and the match list (ordered by
+! 		 * priority).
+  		 */
+  		v = (long)(ptr - line);
+! 		cur = wp->w_match_head;
+! 		shl_flag = FALSE;
+! 		while (cur != NULL || shl_flag == FALSE)
+! 		{
+! 		    if (shl_flag == FALSE
+! 			    && ((cur != NULL
+! 				    && cur->priority > SEARCH_HL_PRIORITY)
+! 				|| cur == NULL))
+! 		    {
+! 			shl = &search_hl;
+! 			shl_flag = TRUE;
+! 		    }
+! 		    else
+! 			shl = &cur->hl;
+  		    while (shl->rm.regprog != NULL)
+  		    {
+  			if (shl->startcol != MAXCOL
+***************
+*** 3442,3458 ****
+  			}
+  			break;
+  		    }
+  		}
+  
+! 		/* ":match" highlighting overrules 'hlsearch' */
+! 		for (i = 0; i <= 3; ++i)
+! 		    if (i == 3)
+! 			search_attr = search_hl.attr_cur;
+! 		    else if (match_hl[i].attr_cur != 0)
+  		    {
+! 			search_attr = match_hl[i].attr_cur;
+! 			break;
+  		    }
+  	    }
+  #endif
+  
+--- 3474,3505 ----
+  			}
+  			break;
+  		    }
++ 		    if (shl != &search_hl && cur != NULL)
++ 			cur = cur->next;
+  		}
+  
+! 		/* Use attributes from match with highest priority among
+! 		 * 'search_hl' and the match list. */
+! 		search_attr = search_hl.attr_cur;
+! 		cur = wp->w_match_head;
+! 		shl_flag = FALSE;
+! 		while (cur != NULL || shl_flag == FALSE)
+! 		{
+! 		    if (shl_flag == FALSE
+! 			    && ((cur != NULL
+! 				    && cur->priority > SEARCH_HL_PRIORITY)
+! 				|| cur == NULL))
+  		    {
+! 			shl = &search_hl;
+! 			shl_flag = TRUE;
+  		    }
++ 		    else
++ 			shl = &cur->hl;
++ 		    if (shl->attr_cur != 0)
++ 			search_attr = shl->attr_cur;
++ 		    if (shl != &search_hl && cur != NULL)
++ 			cur = cur->next;
++ 		}
+  	    }
+  #endif
+  
+***************
+*** 3613,3618 ****
+--- 3660,3667 ----
+  			 * Draw it as a space with a composing char. */
+  			if (utf_iscomposing(mb_c))
+  			{
++ 			    int i;
++ 
+  			    for (i = Screen_mco - 1; i > 0; --i)
+  				u8cc[i] = u8cc[i - 1];
+  			    u8cc[0] = mb_c;
+***************
+*** 4256,4269 ****
+  	     * highlight match at end of line. If it's beyond the last
+  	     * char on the screen, just overwrite that one (tricky!)  Not
+  	     * needed when a '$' was displayed for 'list'. */
+  	    if (lcs_eol == lcs_eol_one
+  		    && ((area_attr != 0 && vcol == fromcol && c == NUL)
+  #ifdef FEAT_SEARCH_EXTRA
+  			/* highlight 'hlsearch' match at end of line */
+! 			|| ((prevcol == (long)search_hl.startcol
+! 				|| prevcol == (long)match_hl[0].startcol
+! 				|| prevcol == (long)match_hl[1].startcol
+! 				|| prevcol == (long)match_hl[2].startcol)
+  # if defined(LINE_ATTR)
+  			    && did_line_attr <= 1
+  # endif
+--- 4305,4333 ----
+  	     * highlight match at end of line. If it's beyond the last
+  	     * char on the screen, just overwrite that one (tricky!)  Not
+  	     * needed when a '$' was displayed for 'list'. */
++ #ifdef FEAT_SEARCH_EXTRA
++ 	    prevcol_hl_flag = FALSE;
++ 	    if (prevcol == (long)search_hl.startcol)
++ 		prevcol_hl_flag = TRUE;
++ 	    else
++ 	    {
++ 		cur = wp->w_match_head;
++ 		while (cur != NULL)
++ 		{
++ 		    if (prevcol == (long)cur->hl.startcol)
++ 		    {
++ 			prevcol_hl_flag = TRUE;
++ 			break;
++ 		    }
++ 		    cur = cur->next;
++ 		}
++ 	    }
++ #endif
+  	    if (lcs_eol == lcs_eol_one
+  		    && ((area_attr != 0 && vcol == fromcol && c == NUL)
+  #ifdef FEAT_SEARCH_EXTRA
+  			/* highlight 'hlsearch' match at end of line */
+! 			|| (prevcol_hl_flag == TRUE
+  # if defined(LINE_ATTR)
+  			    && did_line_attr <= 1
+  # endif
+***************
+*** 4304,4318 ****
+  #ifdef FEAT_SEARCH_EXTRA
+  		if (area_attr == 0)
+  		{
+! 		    for (i = 0; i <= 3; ++i)
+! 		    {
+! 			if (i == 3)
+! 			    char_attr = search_hl.attr;
+! 			else if ((ptr - line) - 1 == (long)match_hl[i].startcol)
+  			{
+! 			    char_attr = match_hl[i].attr;
+! 			    break;
+  			}
+  		    }
+  		}
+  #endif
+--- 4368,4394 ----
+  #ifdef FEAT_SEARCH_EXTRA
+  		if (area_attr == 0)
+  		{
+! 		    /* Use attributes from match with highest priority among
+! 		     * 'search_hl' and the match list. */
+! 		    char_attr = search_hl.attr;
+! 		    cur = wp->w_match_head;
+! 		    shl_flag = FALSE;
+! 		    while (cur != NULL || shl_flag == FALSE)
+! 		    {
+! 			if (shl_flag == FALSE
+! 				&& ((cur != NULL
+! 					&& cur->priority > SEARCH_HL_PRIORITY)
+! 				    || cur == NULL))
+  			{
+! 			    shl = &search_hl;
+! 			    shl_flag = TRUE;
+  			}
++ 			else
++ 			    shl = &cur->hl;
++ 			if ((ptr - line) - 1 == (long)shl->startcol)
++ 			    char_attr = shl->attr;
++ 			if (shl != &search_hl && cur != NULL)
++ 			    cur = cur->next;
+  		    }
+  		}
+  #endif
+***************
+*** 4462,4467 ****
+--- 4538,4545 ----
+  	    {
+  		if (mb_utf8)
+  		{
++ 		    int i;
++ 
+  		    ScreenLinesUC[off] = mb_c;
+  		    if ((c & 0xff) == 0)
+  			ScreenLines[off] = 0x80;   /* avoid storing zero */
+***************
+*** 6320,6326 ****
+  
+  #ifdef FEAT_SEARCH_EXTRA
+  /*
+!  * Prepare for 'searchhl' highlighting.
+   */
+      static void
+  start_search_hl()
+--- 6398,6404 ----
+  
+  #ifdef FEAT_SEARCH_EXTRA
+  /*
+!  * Prepare for 'hlsearch' highlighting.
+   */
+      static void
+  start_search_hl()
+***************
+*** 6333,6339 ****
+  }
+  
+  /*
+!  * Clean up for 'searchhl' highlighting.
+   */
+      static void
+  end_search_hl()
+--- 6411,6417 ----
+  }
+  
+  /*
+!  * Clean up for 'hlsearch' highlighting.
+   */
+      static void
+  end_search_hl()
+***************
+*** 6353,6370 ****
+      win_T	*wp;
+      linenr_T	lnum;
+  {
+!     match_T	*shl;		/* points to search_hl or match_hl */
+      int		n;
+-     int		i;
+  
+      /*
+       * When using a multi-line pattern, start searching at the top
+       * of the window or just after a closed fold.
+!      * Do this both for search_hl and match_hl[3].
+       */
+!     for (i = 3; i >= 0; --i)
+      {
+! 	shl = (i == 3) ? &search_hl : &match_hl[i];
+  	if (shl->rm.regprog != NULL
+  		&& shl->lnum == 0
+  		&& re_multiline(shl->rm.regprog))
+--- 6431,6458 ----
+      win_T	*wp;
+      linenr_T	lnum;
+  {
+!     matchitem_T *cur;		/* points to the match list */
+!     match_T	*shl;		/* points to search_hl or a match */
+!     int		shl_flag;	/* flag to indicate whether search_hl
+! 				   has been processed or not */
+      int		n;
+  
+      /*
+       * When using a multi-line pattern, start searching at the top
+       * of the window or just after a closed fold.
+!      * Do this both for search_hl and the match list.
+       */
+!     cur = wp->w_match_head;
+!     shl_flag = FALSE;
+!     while (cur != NULL || shl_flag == FALSE)
+      {
+! 	if (shl_flag == FALSE)
+! 	{
+! 	    shl = &search_hl;
+! 	    shl_flag = TRUE;
+! 	}
+! 	else
+! 	    shl = &cur->hl;
+  	if (shl->rm.regprog != NULL
+  		&& shl->lnum == 0
+  		&& re_multiline(shl->rm.regprog))
+***************
+*** 6399,6409 ****
+  		}
+  	    }
+  	}
+      }
+  }
+  
+  /*
+!  * Search for a next 'searchl' or ":match" match.
+   * Uses shl->buf.
+   * Sets shl->lnum and shl->rm contents.
+   * Note: Assumes a previous match is always before "lnum", unless
+--- 6487,6499 ----
+  		}
+  	    }
+  	}
++ 	if (shl != &search_hl && cur != NULL)
++ 	    cur = cur->next;
+      }
+  }
+  
+  /*
+!  * Search for a next 'hlsearch' or match.
+   * Uses shl->buf.
+   * Sets shl->lnum and shl->rm contents.
+   * Note: Assumes a previous match is always before "lnum", unless
+***************
+*** 6413,6419 ****
+      static void
+  next_search_hl(win, shl, lnum, mincol)
+      win_T	*win;
+!     match_T	*shl;		/* points to search_hl or match_hl */
+      linenr_T	lnum;
+      colnr_T	mincol;		/* minimal column for a match */
+  {
+--- 6503,6509 ----
+      static void
+  next_search_hl(win, shl, lnum, mincol)
+      win_T	*win;
+!     match_T	*shl;		/* points to search_hl or a match */
+      linenr_T	lnum;
+      colnr_T	mincol;		/* minimal column for a match */
+  {
+***************
+*** 6481,6487 ****
+  	    /* Error while handling regexp: stop using this regexp. */
+  	    if (shl == &search_hl)
+  	    {
+! 		/* don't free the regprog in match_hl[], it's a copy */
+  		vim_free(shl->rm.regprog);
+  		no_hlsearch = TRUE;
+  	    }
+--- 6571,6577 ----
+  	    /* Error while handling regexp: stop using this regexp. */
+  	    if (shl == &search_hl)
+  	    {
+! 		/* don't free regprog in the match list, it's a copy */
+  		vim_free(shl->rm.regprog);
+  		no_hlsearch = TRUE;
+  	    }
+*** ../vim-7.1.039/src/structs.h	Thu May 10 20:32:30 2007
+--- src/structs.h	Wed Jul 25 21:08:46 2007
+***************
+*** 1694,1699 ****
+--- 1694,1734 ----
+  #define FR_COL	2	/* frame with a column of windows */
+  
+  /*
++  * Struct used for highlighting 'hlsearch' matches, matches defined by
++  * ":match" and matches defined by match functions.
++  * For 'hlsearch' there is one pattern for all windows.  For ":match" and the
++  * match functions there is a different pattern for each window.
++  */
++ typedef struct
++ {
++     regmmatch_T	rm;	/* points to the regexp program; contains last found
++ 			   match (may continue in next line) */
++     buf_T	*buf;	/* the buffer to search for a match */
++     linenr_T	lnum;	/* the line to search for a match */
++     int		attr;	/* attributes to be used for a match */
++     int		attr_cur; /* attributes currently active in win_line() */
++     linenr_T	first_lnum;	/* first lnum to search for multi-line pat */
++     colnr_T	startcol; /* in win_line() points to char where HL starts */
++     colnr_T	endcol;	 /* in win_line() points to char where HL ends */
++ } match_T;
++ 
++ /*
++  * matchitem_T provides a linked list for storing match items for ":match" and
++  * the match functions.
++  */
++ typedef struct matchitem matchitem_T;
++ struct matchitem
++ {
++     matchitem_T	*next;
++     int		id;	    /* match ID */
++     int		priority;   /* match priority */
++     char_u	*pattern;   /* pattern to highlight */
++     int		hlg_id;	    /* highlight group ID */
++     regmmatch_T	match;	    /* regexp program for pattern */
++     match_T	hl;	    /* struct for doing the actual highlighting */
++ };
++ 
++ /*
+   * Structure which contains all information that belongs to a window
+   *
+   * All row numbers are relative to the start of the window, except w_winrow.
+***************
+*** 1934,1942 ****
+  #endif
+  
+  #ifdef FEAT_SEARCH_EXTRA
+!     regmmatch_T	w_match[3];	    /* regexp programs for ":match" */
+!     char_u	*(w_match_pat[3]);  /* patterns for ":match" */
+!     int		w_match_id[3];	    /* highlight IDs for ":match" */
+  #endif
+  
+      /*
+--- 1969,1976 ----
+  #endif
+  
+  #ifdef FEAT_SEARCH_EXTRA
+!     matchitem_T	*w_match_head;		/* head of match list */
+!     int		w_next_match_id;	/* next match ID */
+  #endif
+  
+      /*
+*** ../vim-7.1.039/src/syntax.c	Tue Jul 24 14:32:44 2007
+--- src/syntax.c	Tue Jul 24 15:47:01 2007
+***************
+*** 8504,8510 ****
+  syn_id2name(id)
+      int		id;
+  {
+!     if (id <= 0 || id >= highlight_ga.ga_len)
+  	return (char_u *)"";
+      return HL_TABLE()[id - 1].sg_name;
+  }
+--- 8504,8510 ----
+  syn_id2name(id)
+      int		id;
+  {
+!     if (id <= 0 || id > highlight_ga.ga_len)
+  	return (char_u *)"";
+      return HL_TABLE()[id - 1].sg_name;
+  }
+*** ../vim-7.1.039/src/testdir/Makefile	Sun Apr 30 20:48:47 2006
+--- src/testdir/Makefile	Tue Jul 24 15:34:33 2007
+***************
+*** 1,5 ****
+  #
+! # Makefile to run al tests for Vim
+  #
+  
+  VIMPROG = ../vim
+--- 1,5 ----
+  #
+! # Makefile to run all tests for Vim
+  #
+  
+  VIMPROG = ../vim
+***************
+*** 15,21 ****
+  		test43.out test44.out test45.out test46.out test47.out \
+  		test48.out test49.out test51.out test52.out test53.out \
+  		test54.out test55.out test56.out test57.out test58.out \
+! 		test59.out test60.out test61.out test62.out
+  
+  SCRIPTS_GUI = test16.out
+  
+--- 15,21 ----
+  		test43.out test44.out test45.out test46.out test47.out \
+  		test48.out test49.out test51.out test52.out test53.out \
+  		test54.out test55.out test56.out test57.out test58.out \
+! 		test59.out test60.out test61.out test62.out test63.out
+  
+  SCRIPTS_GUI = test16.out
+  
+*** ../vim-7.1.039/src/testdir/test63.in	Tue Jul 24 16:45:02 2007
+--- src/testdir/test63.in	Tue Jul 24 15:32:30 2007
+***************
+*** 0 ****
+--- 1,157 ----
++ Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
++ "matchadd()", "matcharg()", "matchdelete()", and "setmatches()".
++ 
++ STARTTEST
++ :so small.vim
++ :" --- Check that "matcharg()" returns the correct group and pattern if a match
++ :" --- is defined.
++ :let @r = "*** Test 1: "
++ :highlight MyGroup1 ctermbg=red
++ :highlight MyGroup2 ctermbg=green
++ :highlight MyGroup3 ctermbg=blue
++ :match MyGroup1 /TODO/
++ :2match MyGroup2 /FIXME/
++ :3match MyGroup3 /XXX/
++ :if matcharg(1) == ['MyGroup1', 'TODO'] && matcharg(2) == ['MyGroup2', 'FIXME'] && matcharg(3) == ['MyGroup3', 'XXX']
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :" --- Check that "matcharg()" returns an empty list if the argument is not 1,
++ :" --- 2 or 3 (only 0 and 4 are tested).
++ :let @r .= "*** Test 2: "
++ :if matcharg(0) == [] && matcharg(4) == []
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :" --- Check that "matcharg()" returns ['', ''] if a match is not defined.
++ :let @r .= "*** Test 3: "
++ :match
++ :2match
++ :3match
++ :if matcharg(1) == ['', ''] && matcharg(2) == ['', ''] && matcharg(3) == ['', '']
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :" --- Check that "matchadd()" and "getmatches()" agree on added matches and
++ :" --- that default values apply.
++ :let @r .= "*** Test 4: "
++ :let m1 = matchadd("MyGroup1", "TODO")
++ :let m2 = matchadd("MyGroup2", "FIXME", 42)
++ :let m3 = matchadd("MyGroup3", "XXX", 60, 17)
++ :if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 4}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 42, 'id': 5}, {'group': 'MyGroup3', 'pattern': 'XXX', 'priority': 60, 'id': 17}]
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :" --- Check that "matchdelete()" deletes the matches defined in the previous
++ :" --- test correctly.
++ :let @r .= "*** Test 5: "
++ :call matchdelete(m1)
++ :call matchdelete(m2)
++ :call matchdelete(m3)
++ :unlet m1
++ :unlet m2
++ :unlet m3
++ :if getmatches() == []
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :" --- Check that "matchdelete()" returns 0 if succesfull and otherwise -1.
++ :let @r .= "*** Test 6: "
++ :let m = matchadd("MyGroup1", "TODO")
++ :let r1 = matchdelete(m)
++ :let r2 = matchdelete(42)
++ :if r1 == 0 && r2 == -1
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :unlet m
++ :unlet r1
++ :unlet r2
++ :" --- Check that "clearmatches()" clears all matches defined by ":match" and
++ :" --- "matchadd()".
++ :let @r .= "*** Test 7: "
++ :let m1 = matchadd("MyGroup1", "TODO")
++ :let m2 = matchadd("MyGroup2", "FIXME", 42)
++ :let m3 = matchadd("MyGroup3", "XXX", 60, 17)
++ :match MyGroup1 /COFFEE/
++ :2match MyGroup2 /HUMPPA/
++ :3match MyGroup3 /VIM/
++ :call clearmatches()
++ :if getmatches() == []
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :unlet m1
++ :unlet m2
++ :unlet m3
++ :" --- Check that "setmatches()" restores a list of matches saved by
++ :" --- "getmatches()" without changes. (Matches with equal priority must also
++ :" --- remain in the same order.)
++ :let @r .= "*** Test 8: "
++ :let m1 = matchadd("MyGroup1", "TODO")
++ :let m2 = matchadd("MyGroup2", "FIXME", 42)
++ :let m3 = matchadd("MyGroup3", "XXX", 60, 17)
++ :match MyGroup1 /COFFEE/
++ :2match MyGroup2 /HUMPPA/
++ :3match MyGroup3 /VIM/
++ :let ml = getmatches()
++ :call clearmatches()
++ :call setmatches(ml)
++ :if getmatches() == ml
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :call clearmatches()
++ :unlet m1
++ :unlet m2
++ :unlet m3
++ :unlet ml
++ :" --- Check that "setmatches()" will not add two matches with the same ID. The
++ :" --- expected behaviour (for now) is to add the first match but not the
++ :" --- second and to return 0 (even though it is a matter of debate whether
++ :" --- this can be considered succesfull behaviour).
++ :let @r .= "*** Test 9: "
++ :let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])
++ :if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :call clearmatches()
++ :unlet r1
++ :" --- Check that "setmatches()" returns 0 if succesfull and otherwise -1.
++ :" --- (A range of valid and invalid input values are tried out to generate the
++ :" --- return values.)
++ :let @r .= "*** Test 10: "
++ :let rs1 = setmatches([])
++ :let rs2 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}])
++ :call clearmatches()
++ :let rf1 = setmatches(0)
++ :let rf2 = setmatches([0])
++ :let rf3 = setmatches([{'wrong key': 'wrong value'}])
++ :if rs1 == 0 && rs2 == 0 && rf1 == -1 && rf2 == -1 && rf3 == -1
++ :  let @r .= "OK\n"
++ :else
++ :  let @r .= "FAILED\n"
++ :endif
++ :unlet rs1
++ :unlet rs2
++ :unlet rf1
++ :unlet rf2
++ :unlet rf3
++ :highlight clear MyGroup1
++ :highlight clear MyGroup2
++ :highlight clear MyGroup3
++ G"rp
++ :/^Results/,$wq! test.out
++ ENDTEST
++ 
++ Results of test63:
+*** ../vim-7.1.039/src/testdir/test63.ok	Tue Jul 24 16:45:02 2007
+--- src/testdir/test63.ok	Tue Jul 24 15:32:30 2007
+***************
+*** 0 ****
+--- 1,11 ----
++ Results of test63:
++ *** Test 1: OK
++ *** Test 2: OK
++ *** Test 3: OK
++ *** Test 4: OK
++ *** Test 5: OK
++ *** Test 6: OK
++ *** Test 7: OK
++ *** Test 8: OK
++ *** Test 9: OK
++ *** Test 10: OK
+*** ../vim-7.1.039/src/window.c	Thu May 10 18:42:26 2007
+--- src/window.c	Tue Jul 24 20:38:58 2007
+***************
+*** 75,80 ****
+--- 75,81 ----
+  static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
+  
+  #endif /* FEAT_WINDOWS */
++ 
+  static win_T *win_alloc __ARGS((win_T *after));
+  static void win_new_height __ARGS((win_T *, int));
+  
+***************
+*** 4128,4133 ****
+--- 4129,4138 ----
+  #ifdef FEAT_AUTOCMD
+  	--autocmd_block;
+  #endif
++ #ifdef FEAT_SEARCH_EXTRA
++ 	newwin->w_match_head = NULL;
++ 	newwin->w_next_match_id = 4;
++ #endif
+      }
+      return newwin;
+  }
+***************
+*** 4185,4195 ****
+  	vim_free(wp->w_tagstack[i].tagname);
+  
+      vim_free(wp->w_localdir);
+  #ifdef FEAT_SEARCH_EXTRA
+!     vim_free(wp->w_match[0].regprog);
+!     vim_free(wp->w_match[1].regprog);
+!     vim_free(wp->w_match[2].regprog);
+  #endif
+  #ifdef FEAT_JUMPLIST
+      free_jumplist(wp);
+  #endif
+--- 4190,4200 ----
+  	vim_free(wp->w_tagstack[i].tagname);
+  
+      vim_free(wp->w_localdir);
++ 
+  #ifdef FEAT_SEARCH_EXTRA
+!     clear_matches(wp);
+  #endif
++ 
+  #ifdef FEAT_JUMPLIST
+      free_jumplist(wp);
+  #endif
+***************
+*** 6172,6176 ****
+--- 6177,6351 ----
+  		return TRUE;
+  
+      return FALSE;
++ }
++ #endif
++ 
++ #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
++ /*
++  * Add match to the match list of window 'wp'.  The pattern 'pat' will be
++  * highligted with the group 'grp' with priority 'prio'.
++  * Optionally, a desired ID 'id' can be specified (greater than or equal to 1).
++  * If no particular ID is desired, -1 must be specified for 'id'.
++  * Return ID of added match, -1 on failure.
++  */
++     int
++ match_add(wp, grp, pat, prio, id)
++     win_T	*wp;
++     char_u	*grp;
++     char_u	*pat;
++     int		prio;
++     int		id;
++ {
++     matchitem_T *cur;
++     matchitem_T *prev;
++     matchitem_T *m;
++     int		hlg_id;
++     regmmatch_T match;
++ 
++     if (*grp == NUL || *pat == NUL)
++ 	return -1;
++     if (id < -1 || id == 0)
++     {
++ 	EMSGN("E799: Invalid ID: %ld (must be greater than or equal to 1)", id);
++ 	return -1;
++     }
++     if (id != -1)
++     {
++ 	cur = wp->w_match_head;
++ 	while (cur != NULL)
++ 	{
++ 	    if (cur->id == id)
++ 	    {
++ 		EMSGN("E801: ID already taken: %ld", id);
++ 		return -1;
++ 	    }
++ 	    cur = cur->next;
++ 	}
++     }
++     if ((hlg_id = syn_namen2id(grp, STRLEN(grp))) == 0)
++     {
++ 	EMSG2(_(e_nogroup), grp);
++ 	return -1;
++     }
++     if ((match.regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
++     {
++ 	EMSG2(_(e_invarg2), pat);
++ 	return -1;
++     }
++ 
++     /* Find available match ID. */
++     while (id == -1)
++     {
++ 	cur = wp->w_match_head;
++ 	while (cur != NULL && cur->id != wp->w_next_match_id)
++ 	    cur = cur->next;
++ 	if (cur == NULL)
++ 	    id = wp->w_next_match_id;
++ 	wp->w_next_match_id++;
++     }
++ 
++     /* Build new match. */
++     m = (matchitem_T *)alloc(sizeof(matchitem_T));
++     m->id = id;
++     m->priority = prio;
++     m->pattern = vim_strsave(pat);
++     m->hlg_id = hlg_id;
++     m->match.regprog = match.regprog;
++ 
++     /* Insert new match.  The match list is in ascending order with regard to
++      * the match priorities. */
++     cur = wp->w_match_head;
++     prev = cur;
++     while (cur != NULL && prio >= cur->priority)
++     {
++ 	prev = cur;
++ 	cur = cur->next;
++     }
++     if (cur == prev)
++ 	wp->w_match_head = m;
++     else
++ 	prev->next = m;
++     m->next = cur;
++ 
++     redraw_later(SOME_VALID);
++     return id;
++ }
++ 
++ /*
++  * Delete match with ID 'id' in the match list of window 'wp'.
++  * Print error messages if 'perr' is TRUE.
++  */
++     int
++ match_delete(wp, id, perr)
++     win_T	*wp;
++     int		id;
++     int		perr;
++ {
++     matchitem_T *cur = wp->w_match_head;
++     matchitem_T *prev = cur;
++ 
++     if (id < 1)
++     {
++ 	if (perr == TRUE)
++ 	    EMSGN("E802: Invalid ID: %ld (must be greater than or equal to 1)",
++ 									  id);
++ 	return -1;
++     }
++     while (cur != NULL && cur->id != id)
++     {
++ 	prev = cur;
++ 	cur = cur->next;
++     }
++     if (cur == NULL)
++     {
++ 	if (perr == TRUE)
++ 	    EMSGN("E803: ID not found: %ld", id);
++ 	return -1;
++     }
++     if (cur == prev)
++ 	wp->w_match_head = cur->next;
++     else
++ 	prev->next = cur->next;
++     vim_free(cur->match.regprog);
++     vim_free(cur->pattern);
++     vim_free(cur);
++     redraw_later(SOME_VALID);
++     return 0;
++ }
++ 
++ /*
++  * Delete all matches in the match list of window 'wp'.
++  */
++     void
++ clear_matches(wp)
++     win_T	*wp;
++ {
++     matchitem_T *m;
++ 
++     while (wp->w_match_head != NULL)
++     {
++ 	m = wp->w_match_head->next;
++ 	vim_free(wp->w_match_head->match.regprog);
++ 	vim_free(wp->w_match_head->pattern);
++ 	vim_free(wp->w_match_head);
++ 	wp->w_match_head = m;
++     }
++     redraw_later(SOME_VALID);
++ }
++ 
++ /*
++  * Get match from ID 'id' in window 'wp'.
++  * Return NULL if match not found.
++  */
++     matchitem_T *
++ get_match(wp, id)
++     win_T	*wp;
++     int		id;
++ {
++     matchitem_T *cur = wp->w_match_head;
++ 
++     while (cur != NULL && cur->id != id)
++ 	cur = cur->next;
++     return cur;
+  }
+  #endif
+*** ../vim-7.1.039/src/version.c	Wed Jul 25 22:55:22 2007
+--- src/version.c	Thu Jul 26 22:50:54 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     40,
+  /**/
+
+-- 
+It is hard to understand how a cemetery raised its burial
+cost and blamed it on the cost of living.
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.041
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.041?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.041 (added)
+++ trunk/packages/vim/upstream/patches/7.1.041 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,133 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.041 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.041 (extra, after 7.1.040)
+Problem:    Some changes for patch 7.1.0 are in extra files.
+Solution:   Update the extra files.
+Files:	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.1.040/src/testdir/Make_amiga.mak	Sun Apr 30 20:42:49 2006
+--- src/testdir/Make_amiga.mak	Tue Jul 24 15:36:00 2007
+***************
+*** 25,31 ****
+  		test43.out test44.out test45.out test46.out test47.out \
+  		test48.out test51.out test53.out test54.out test55.out \
+  		test56.out test57.out test58.out test59.out test60.out \
+! 		test61.out test62.out
+  
+  .SUFFIXES: .in .out
+  
+--- 25,31 ----
+  		test43.out test44.out test45.out test46.out test47.out \
+  		test48.out test51.out test53.out test54.out test55.out \
+  		test56.out test57.out test58.out test59.out test60.out \
+! 		test61.out test62.out test63.out
+  
+  .SUFFIXES: .in .out
+  
+***************
+*** 107,109 ****
+--- 107,110 ----
+  test60.out: test60.in
+  test61.out: test61.in
+  test62.out: test62.in
++ test63.out: test63.in
+*** ../vim-7.1.040/src/testdir/Make_dos.mak	Sun Apr 30 20:41:13 2006
+--- src/testdir/Make_dos.mak	Tue Jul 24 15:37:47 2007
+***************
+*** 19,25 ****
+  		test44.out test45.out test46.out test47.out \
+  		test48.out test51.out test53.out test54.out \
+  		test55.out test56.out test57.out test58.out test59.out \
+! 		test60.out test61.out test62.out
+  
+  SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
+  		test8.out test9.out test11.out test13.out test14.out \
+--- 19,25 ----
+  		test44.out test45.out test46.out test47.out \
+  		test48.out test51.out test53.out test54.out \
+  		test55.out test56.out test57.out test58.out test59.out \
+! 		test60.out test61.out test62.out test63.out
+  
+  SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
+  		test8.out test9.out test11.out test13.out test14.out \
+*** ../vim-7.1.040/src/testdir/Make_os2.mak	Sun Apr 30 20:29:29 2006
+--- src/testdir/Make_os2.mak	Tue Jul 24 15:39:15 2007
+***************
+*** 25,31 ****
+  		test43.out test44.out test45.out test46.out test47.out \
+  		test48.out test51.out test53.out test54.out test55.out \
+  		test56.out test57.out test58.out test59.out test60.out \
+! 		test61.out test62.out
+  
+  .SUFFIXES: .in .out
+  
+--- 25,31 ----
+  		test43.out test44.out test45.out test46.out test47.out \
+  		test48.out test51.out test53.out test54.out test55.out \
+  		test56.out test57.out test58.out test59.out test60.out \
+! 		test61.out test62.out test63.out
+  
+  .SUFFIXES: .in .out
+  
+*** ../vim-7.1.040/src/testdir/Make_vms.mms	Sun Apr 30 20:51:12 2006
+--- src/testdir/Make_vms.mms	Tue Jul 24 15:39:23 2007
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy at polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi at mailbox.hu>
+  #
+! # Last change:  2006 Apr 30
+  #
+  # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy at polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi at mailbox.hu>
+  #
+! # Last change:  2007 Jul 24
+  #
+  # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 59,65 ****
+  	 test43.out test44.out test45.out test46.out \
+  	 test48.out test51.out test53.out test54.out test55.out \
+  	 test56.out test57.out test58.out test59.out test60.out \
+! 	 test61.out test62.out
+  
+  .IFDEF WANT_GUI
+  SCRIPT_GUI = test16.out
+--- 59,65 ----
+  	 test43.out test44.out test45.out test46.out \
+  	 test48.out test51.out test53.out test54.out test55.out \
+  	 test56.out test57.out test58.out test59.out test60.out \
+! 	 test61.out test62.out test63.out
+  
+  .IFDEF WANT_GUI
+  SCRIPT_GUI = test16.out
+*** ../vim-7.1.040/src/version.c	Thu Jul 26 22:55:11 2007
+--- src/version.c	Thu Jul 26 22:58:57 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     41,
+  /**/
+
+-- 
+Just remember...if the world didn't suck, we'd all fall off.
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.042
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.042?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.042 (added)
+++ trunk/packages/vim/upstream/patches/7.1.042 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,75 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.042
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.042 (after 7.1.040)
+Problem:    Internal error when using matchadd(). (David Larson)
+Solution:   Check the third argument to be present before using the fourth
+	    argument. (Martin Toft)
+Files:	    src/eval.c
+
+
+*** ../vim-7.1.041/src/eval.c	Thu Jul 26 22:55:11 2007
+--- src/eval.c	Fri Jul 27 21:29:39 2007
+***************
+*** 7108,7114 ****
+      {"getftype",	1, 1, f_getftype},
+      {"getline",		1, 2, f_getline},
+      {"getloclist",	1, 1, f_getqflist},
+!     {"getmatches",  	0, 0, f_getmatches},
+      {"getpos",		1, 1, f_getpos},
+      {"getqflist",	0, 0, f_getqflist},
+      {"getreg",		0, 2, f_getreg},
+--- 7108,7114 ----
+      {"getftype",	1, 1, f_getftype},
+      {"getline",		1, 2, f_getline},
+      {"getloclist",	1, 1, f_getqflist},
+!     {"getmatches",	0, 0, f_getmatches},
+      {"getpos",		1, 1, f_getpos},
+      {"getqflist",	0, 0, f_getqflist},
+      {"getreg",		0, 2, f_getreg},
+***************
+*** 12526,12534 ****
+      if (grp == NULL || pat == NULL)
+  	return;
+      if (argvars[2].v_type != VAR_UNKNOWN)
+  	prio = get_tv_number_chk(&argvars[2], &error);
+!     if (argvars[3].v_type != VAR_UNKNOWN)
+! 	id = get_tv_number_chk(&argvars[3], &error);
+      if (error == TRUE)
+  	return;
+      if (id >= 1 && id <= 3)
+--- 12526,12536 ----
+      if (grp == NULL || pat == NULL)
+  	return;
+      if (argvars[2].v_type != VAR_UNKNOWN)
++     {
+  	prio = get_tv_number_chk(&argvars[2], &error);
+! 	if (argvars[3].v_type != VAR_UNKNOWN)
+! 	    id = get_tv_number_chk(&argvars[3], &error);
+!     }
+      if (error == TRUE)
+  	return;
+      if (id >= 1 && id <= 3)
+*** ../vim-7.1.041/src/version.c	Thu Jul 26 23:10:50 2007
+--- src/version.c	Fri Jul 27 21:31:13 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     42,
+  /**/
+
+-- 
+The future isn't what it used to be.
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.043
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.043?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.043 (added)
+++ trunk/packages/vim/upstream/patches/7.1.043 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,103 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.043
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.043
+Problem:    In Ex mode using CTRL-D twice may cause a crash.  Cursor isn't
+	    positioned properly after CTRL-D.
+Solution:   Set prev_char properly.  Position the cursor correctly. (Antony
+	    Scriven)
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.1.042/src/ex_getln.c	Tue Jul 24 14:32:44 2007
+--- src/ex_getln.c	Wed Jul 25 20:57:05 2007
+***************
+*** 2095,2105 ****
+      garray_T	line_ga;
+      char_u	*pend;
+      int		startcol = 0;
+!     int		c1;
+      int		escaped = FALSE;	/* CTRL-V typed */
+      int		vcol = 0;
+      char_u	*p;
+!     int		prev_char = 0;
+  
+      /* Switch cursor on now.  This avoids that it happens after the "\n", which
+       * confuses the system function that computes tabstops. */
+--- 2095,2105 ----
+      garray_T	line_ga;
+      char_u	*pend;
+      int		startcol = 0;
+!     int		c1 = 0;
+      int		escaped = FALSE;	/* CTRL-V typed */
+      int		vcol = 0;
+      char_u	*p;
+!     int		prev_char;
+  
+      /* Switch cursor on now.  This avoids that it happens after the "\n", which
+       * confuses the system function that computes tabstops. */
+***************
+*** 2152,2157 ****
+--- 2152,2158 ----
+  
+  	/* Get one character at a time.  Don't use inchar(), it can't handle
+  	 * special characters. */
++ 	prev_char = c1;
+  	c1 = vgetc();
+  
+  	/*
+***************
+*** 2209,2215 ****
+  redraw:
+  		/* redraw the line */
+  		msg_col = startcol;
+- 		windgoto(msg_row, msg_col);
+  		vcol = 0;
+  		for (p = (char_u *)line_ga.ga_data;
+  			  p < (char_u *)line_ga.ga_data + line_ga.ga_len; ++p)
+--- 2210,2215 ----
+***************
+*** 2228,2233 ****
+--- 2228,2234 ----
+  		    }
+  		}
+  		msg_clr_eos();
++ 		windgoto(msg_row, msg_col);
+  		continue;
+  	    }
+  
+***************
+*** 2273,2279 ****
+  	if (IS_SPECIAL(c1))
+  	    c1 = '?';
+  	((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
+- 	prev_char = c1;
+  	if (c1 == '\n')
+  	    msg_putchar('\n');
+  	else if (c1 == TAB)
+--- 2274,2279 ----
+*** ../vim-7.1.042/src/version.c	Fri Jul 27 21:32:13 2007
+--- src/version.c	Sat Jul 28 14:19:37 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     43,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+48. You get a tatoo that says "This body best viewed with Netscape 3.1 or
+    higher."
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.044
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.044?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.044 (added)
+++ trunk/packages/vim/upstream/patches/7.1.044 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,54 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.044
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.044
+Problem:    In Insert mode 0 CTRL-T deletes all indent, it should add indent.
+	    (Gautam Iyer)
+Solution:   Check for CTRL-D typed.
+Files:	    src/edit.c
+
+
+*** ../vim-7.1.043/src/edit.c	Thu Jun 28 12:44:56 2007
+--- src/edit.c	Wed Jul 25 22:50:28 2007
+***************
+*** 8000,8006 ****
+      /*
+       * 0^D and ^^D: remove all indent.
+       */
+!     if ((lastc == '0' || lastc == '^') && curwin->w_cursor.col)
+      {
+  	--curwin->w_cursor.col;
+  	(void)del_char(FALSE);		/* delete the '^' or '0' */
+--- 8000,8007 ----
+      /*
+       * 0^D and ^^D: remove all indent.
+       */
+!     if (c == Ctrl_D && (lastc == '0' || lastc == '^')
+! 						  && curwin->w_cursor.col > 0)
+      {
+  	--curwin->w_cursor.col;
+  	(void)del_char(FALSE);		/* delete the '^' or '0' */
+*** ../vim-7.1.043/src/version.c	Sat Jul 28 14:21:04 2007
+--- src/version.c	Sun Jul 29 14:14:36 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     44,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+54. You start tilting your head sideways to smile. :-)
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.045
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.045?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.045 (added)
+++ trunk/packages/vim/upstream/patches/7.1.045 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,101 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.045
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.045
+Problem:    Unnecessary screen redrawing. (Jjgod Jiang)
+Solution:   Reset "must_redraw" after clearing the screen.
+Files:	    src/screen.c
+
+
+*** ../vim-7.1.044/src/screen.c	Thu Jul 26 22:55:11 2007
+--- src/screen.c	Mon Jul 30 21:39:32 2007
+***************
+*** 331,336 ****
+--- 331,341 ----
+      {
+  	if (type < must_redraw)	    /* use maximal type */
+  	    type = must_redraw;
++ 
++ 	/* must_redraw is reset here, so that when we run into some weird
++ 	 * reason to redraw while busy redrawing (e.g., asynchronous
++ 	 * scrolling), or update_topline() in win_update() will cause a
++ 	 * scroll, the screen will be redrawn later or in win_update(). */
+  	must_redraw = 0;
+      }
+  
+***************
+*** 1019,1024 ****
+--- 1024,1036 ----
+  	    type = VALID;
+      }
+  
++     /* Trick: we want to avoid clearning the screen twice.  screenclear() will
++      * set "screen_cleared" to TRUE.  The special value MAYBE (which is still
++      * non-zero and thus not FALSE) will indicate that screenclear() was not
++      * called. */
++     if (screen_cleared)
++ 	screen_cleared = MAYBE;
++ 
+      /*
+       * If there are no changes on the screen that require a complete redraw,
+       * handle three cases:
+***************
+*** 1220,1226 ****
+  	    mid_end = wp->w_height;
+  	    if (lastwin == firstwin)
+  	    {
+! 		screenclear();
+  #ifdef FEAT_WINDOWS
+  		/* The screen was cleared, redraw the tab pages line. */
+  		if (redraw_tabline)
+--- 1232,1242 ----
+  	    mid_end = wp->w_height;
+  	    if (lastwin == firstwin)
+  	    {
+! 		/* Clear the screen when it was not done by win_del_lines() or
+! 		 * win_ins_lines() above, "screen_cleared" is FALSE or MAYBE
+! 		 * then. */
+! 		if (screen_cleared != TRUE)
+! 		    screenclear();
+  #ifdef FEAT_WINDOWS
+  		/* The screen was cleared, redraw the tab pages line. */
+  		if (redraw_tabline)
+***************
+*** 1228,1233 ****
+--- 1244,1256 ----
+  #endif
+  	    }
+  	}
++ 
++ 	/* When win_del_lines() or win_ins_lines() caused the screen to be
++ 	 * cleared (only happens for the first window) or when screenclear()
++ 	 * was called directly above, "must_redraw" will have been set to
++ 	 * NOT_VALID, need to reset it here to avoid redrawing twice. */
++ 	if (screen_cleared == TRUE)
++ 	    must_redraw = 0;
+      }
+      else
+      {
+*** ../vim-7.1.044/src/version.c	Sun Jul 29 15:02:34 2007
+--- src/version.c	Mon Jul 30 21:58:06 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     45,
+  /**/
+
+-- 
+Be thankful to be in a traffic jam, because it means you own a car.
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.046
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.046?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.046 (added)
+++ trunk/packages/vim/upstream/patches/7.1.046 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,60 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.046
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.046
+Problem:    ":s" command removes combining characters. (Ron Aaron)
+Solution:   Copy composing characters individually. (Chris Lubinski)
+Files:	    src/regexp.c
+
+
+*** ../vim-7.1.045/src/regexp.c	Thu May 10 19:58:01 2007
+--- src/regexp.c	Fri Jul 27 21:17:47 2007
+***************
+*** 7014,7020 ****
+  #ifdef FEAT_MBYTE
+  			    if (has_mbyte)
+  			    {
+! 				int l = mb_ptr2len(s) - 1;
+  
+  				s += l;
+  				len -= l;
+--- 7014,7027 ----
+  #ifdef FEAT_MBYTE
+  			    if (has_mbyte)
+  			    {
+! 				int l;
+! 
+! 				/* Copy composing characters separately, one
+! 				 * at a time. */
+! 				if (enc_utf8)
+! 				    l = utf_ptr2len(s) - 1;
+! 				else
+! 				    l = mb_ptr2len(s) - 1;
+  
+  				s += l;
+  				len -= l;
+*** ../vim-7.1.045/src/version.c	Mon Jul 30 21:59:50 2007
+--- src/version.c	Mon Jul 30 22:30:02 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     46,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+57. You begin to wonder how on earth your service provider is allowed to call
+    200 hours per month "unlimited."
+
+ /// Bram Moolenaar -- Bram at 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    ///

Added: trunk/packages/vim/upstream/patches/7.1.047
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim/upstream/patches/7.1.047?rev=999&op=file
==============================================================================
--- trunk/packages/vim/upstream/patches/7.1.047 (added)
+++ trunk/packages/vim/upstream/patches/7.1.047 Wed Aug  1 17:43:01 2007
@@ -1,0 +1,52 @@
+To: vim-dev at vim.org
+Subject: patch 7.1.047
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.047
+Problem:    vim_regcomp() called with invalid argument. (Xiaozhou Liu)
+Solution:   Change TRUE to RE_MAGIC + RE_STRING.
+Files:	    src/ex_eval.c
+
+
+*** ../vim-7.1.046/src/ex_eval.c	Thu May 10 20:23:50 2007
+--- src/ex_eval.c	Sat Jul 28 13:09:00 2007
+***************
+*** 1551,1557 ****
+  		}
+  		save_cpo  = p_cpo;
+  		p_cpo = (char_u *)"";
+! 		regmatch.regprog = vim_regcomp(pat, TRUE);
+  		regmatch.rm_ic = FALSE;
+  		if (end != NULL)
+  		    *end = save_char;
+--- 1551,1557 ----
+  		}
+  		save_cpo  = p_cpo;
+  		p_cpo = (char_u *)"";
+! 		regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
+  		regmatch.rm_ic = FALSE;
+  		if (end != NULL)
+  		    *end = save_char;
+*** ../vim-7.1.046/src/version.c	Mon Jul 30 22:32:11 2007
+--- src/version.c	Wed Aug  1 15:46:28 2007
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     47,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram at 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    ///




More information about the pkg-vim-maintainers mailing list