rpms/vim/F-10 7.2.027, NONE, 1.1 7.2.028, NONE, 1.1 7.2.029, NONE, 1.1 7.2.030, NONE, 1.1 7.2.031, NONE, 1.1 7.2.032, NONE, 1.1 7.2.033, NONE, 1.1 7.2.034, NONE, 1.1 7.2.035, NONE, 1.1 7.2.036, NONE, 1.1 7.2.037, NONE, 1.1 7.2.038, NONE, 1.1 7.2.039, NONE, 1.1 7.2.040, NONE, 1.1 7.2.041, NONE, 1.1 7.2.042, NONE, 1.1 7.2.043, NONE, 1.1 7.2.044, NONE, 1.1 7.2.045, NONE, 1.1 7.2.046, NONE, 1.1 7.2.047, NONE, 1.1 7.2.048, NONE, 1.1 7.2.049, NONE, 1.1 7.2.050, NONE, 1.1 7.2.051, NONE, 1.1 7.2.052, NONE, 1.1 7.2.053, NONE, 1.1 7.2.054, NONE, 1.1 7.2.055, NONE, 1.1 7.2.056, NONE, 1.1 7.2.057, NONE, 1.1 7.2.058, NONE, 1.1 7.2.059, NONE, 1.1 7.2.060, NONE, 1.1 filetype.vim, NONE, 1.1 gzip.vim, NONE, 1.1 netrw.vim, NONE, 1.1 netrwFileHandlers.vim, NONE, 1.1 netrwPlugin.vim, NONE, 1.1 netrwSettings.vim, NONE, 1.1 tar.vim, NONE, 1.1 zip.vim, NONE, 1.1 README.patches, 1.114, 1.115 vim.spec, 1.226, 1.227 vim-6.4-cvim.patch, 1.2, NONE vim-7.1-ada.patch, 1.3, NONE vim-7.1-erlang.patch, 1.1, NONE

Karsten Hopp karsten at fedoraproject.org
Mon Dec 1 15:57:35 UTC 2008


Author: karsten

Update of /cvs/extras/rpms/vim/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14916

Modified Files:
	README.patches vim.spec 
Added Files:
	7.2.027 7.2.028 7.2.029 7.2.030 7.2.031 7.2.032 7.2.033 
	7.2.034 7.2.035 7.2.036 7.2.037 7.2.038 7.2.039 7.2.040 
	7.2.041 7.2.042 7.2.043 7.2.044 7.2.045 7.2.046 7.2.047 
	7.2.048 7.2.049 7.2.050 7.2.051 7.2.052 7.2.053 7.2.054 
	7.2.055 7.2.056 7.2.057 7.2.058 7.2.059 7.2.060 filetype.vim 
	gzip.vim netrw.vim netrwFileHandlers.vim netrwPlugin.vim 
	netrwSettings.vim tar.vim zip.vim 
Removed Files:
	vim-6.4-cvim.patch vim-7.1-ada.patch vim-7.1-erlang.patch 
Log Message:
update to vim-7.2 patchlevel 60


--- NEW FILE 7.2.027 ---
To: vim-dev at vim.org
Subject: Patch 7.2.027
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.2.027
Problem:    Can use cscope commands in the sandbox.
Solution:   Disallow them, they might not be safe.
Files:	    src/ex_cmds.h


*** ../vim-7.2.026/src/ex_cmds.h	Thu Sep 18 12:43:21 2008
--- src/ex_cmds.h	Thu Sep 18 22:18:14 2008
***************
*** 278,284 ****
  EX(CMD_crewind,		"crewind",	ex_cc,
  			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cscope,		"cscope",	do_cscope,
! 			EXTRA|NOTRLCOM|SBOXOK|XFILE),
  EX(CMD_cstag,		"cstag",	do_cstag,
  			BANG|TRLBAR|WORD1),
  EX(CMD_cunmap,		"cunmap",	ex_unmap,
--- 278,284 ----
  EX(CMD_crewind,		"crewind",	ex_cc,
  			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cscope,		"cscope",	do_cscope,
! 			EXTRA|NOTRLCOM|XFILE),
  EX(CMD_cstag,		"cstag",	do_cstag,
  			BANG|TRLBAR|WORD1),
  EX(CMD_cunmap,		"cunmap",	ex_unmap,
***************
*** 506,512 ****
  EX(CMD_lclose,		"lclose",	ex_cclose,
  			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_lcscope,		"lcscope",	do_cscope,
! 			EXTRA|NOTRLCOM|SBOXOK|XFILE),
  EX(CMD_left,		"left",		ex_align,
  			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
--- 506,512 ----
  EX(CMD_lclose,		"lclose",	ex_cclose,
  			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_lcscope,		"lcscope",	do_cscope,
! 			EXTRA|NOTRLCOM|XFILE),
  EX(CMD_left,		"left",		ex_align,
  			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
***************
*** 653,658 ****
--- 653,660 ----
  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_open,		"open",		ex_open,
  			RANGE|EXTRA),
+ EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
+ 			BANG|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_omap,		"omap",		ex_map,
  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
***************
*** 804,810 ****
  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
  			WORD1|TRLBAR|CMDWIN),
  EX(CMD_scscope,		"scscope",	do_scscope,
! 			EXTRA|NOTRLCOM|SBOXOK),
  EX(CMD_set,		"set",		ex_set,
  			TRLBAR|EXTRA|CMDWIN|SBOXOK),
  EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
--- 806,812 ----
  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
  			WORD1|TRLBAR|CMDWIN),
  EX(CMD_scscope,		"scscope",	do_scscope,
! 			EXTRA|NOTRLCOM),
  EX(CMD_set,		"set",		ex_set,
  			TRLBAR|EXTRA|CMDWIN|SBOXOK),
  EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
*** ../vim-7.2.026/src/version.c	Sat Nov  1 13:51:57 2008
--- src/version.c	Thu Nov  6 10:21:21 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     27,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
179. You wonder why your household garbage can doesn't have an
     "empty recycle bin" button.

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


--- NEW FILE 7.2.028 ---
To: vim-dev at vim.org
Subject: Patch 7.2.028
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.2.028
Problem:    Confusing error message for missing ().
Solution:   Change "braces" to "parentheses". (Gary Johnson)
Files:	    src/eval.c


*** ../vim-7.2.027/src/eval.c	Wed Sep 10 15:38:13 2008
--- src/eval.c	Tue Sep 30 21:43:38 2008
***************
*** 3287,3293 ****
  
      if (*startarg != '(')
      {
! 	EMSG2(_("E107: Missing braces: %s"), eap->arg);
  	goto end;
      }
  
--- 3293,3299 ----
  
      if (*startarg != '(')
      {
! 	EMSG2(_("E107: Missing parentheses: %s"), eap->arg);
  	goto end;
      }
  
*** ../vim-7.2.027/src/version.c	Thu Nov  6 10:23:03 2008
--- src/version.c	Thu Nov  6 11:02:51 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     28,
  /**/

-- 
Wizards had always known that the act of observation changed the thing that
was observed, and sometimes forgot that it also changed the observer too.
			Terry Pratchett  -  Interesting times

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


--- NEW FILE 7.2.029 ---
To: vim-dev at vim.org
Subject: Patch 7.2.029
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.2.029
Problem:    No completion for ":doautoall".
Solution:   Complete ":doautoall" like ":doautocmd".  (Doug Kearns)
Files:	    src/ex_docmd.c


*** ../vim-7.2.028/src/ex_docmd.c	Thu Sep 18 21:29:07 2008
--- src/ex_docmd.c	Mon Nov  3 21:21:17 2008
***************
*** 3609,3614 ****
--- 3610,3616 ----
  	    return set_context_in_autocmd(xp, arg, FALSE);
  
  	case CMD_doautocmd:
+ 	case CMD_doautoall:
  	    return set_context_in_autocmd(xp, arg, TRUE);
  #endif
  	case CMD_set:
*** ../vim-7.2.028/src/version.c	Thu Nov  6 11:04:50 2008
--- src/version.c	Thu Nov  6 17:14:58 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     29,
  /**/

-- 
Press any key to continue, press any other key to quit.

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


--- NEW FILE 7.2.030 ---
To: vim-dev at vim.org
Subject: Patch 7.2.030
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.2.030 (after 7.2.027)
Problem:    Can't compile.
Solution:   Remove prematurely added ex_oldfiles.
Files:	    src/ex_cmds.h


*** ../vim-7.2.029/src/ex_cmds.h	Thu Nov  6 10:23:03 2008
--- src/ex_cmds.h	Thu Nov  6 20:45:07 2008
***************
*** 653,660 ****
  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_open,		"open",		ex_open,
  			RANGE|EXTRA),
- EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
- 			BANG|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_omap,		"omap",		ex_map,
  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
--- 653,658 ----
*** ../vim-7.2.029/src/version.c	Thu Nov  6 17:16:06 2008
--- src/version.c	Thu Nov  6 20:46:11 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     30,
  /**/

-- 
% cat /usr/include/sys/errno.h
#define	EPERM		1		/* Operation not permitted */
#define	ENOENT		2		/* No such file or directory */
#define	ESRCH		3		/* No such process */
[...]
#define EMACS		666		/* Too many macros */
%

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


--- NEW FILE 7.2.031 ---
To: vim-dev at vim.org
Subject: Patch 7.2.031
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.2.031
Problem:    Information in the viminfo file about previously edited files is
	    not available to the user.  There is no way to get a complete list
	    of files edited in previous Vim sessions.
Solution:   Add v:oldfiles and fill it with the list of old file names when
	    first reading the viminfo file.  Add the ":oldfiles" command,
	    ":browse oldfiles" and the "#<123" special file name.  Increase
	    the default value for 'viminfo' from '20 to '100.
Files:	    runtime/doc/cmdline.txt, runtime/doc/eval.txt,
	    runtime/doc/starting.txt, runtime/doc/usr_21.txt, src/eval.c,
	    src/ex_cmds.c, src/ex_cmds.h, src/ex_docmd.c, src/feature.h,
	    src/fileio.c, src/main.c, src/mark.c, src/misc1.c,
	    src/proto/eval.pro, src/proto/ex_cmds.pro, src/proto/mark.pro,
	    src/option.c, src/structs.h, src/vim.h


*** ../vim-7.2.030/runtime/doc/cmdline.txt	Sat Aug  9 19:36:46 2008
--- runtime/doc/cmdline.txt	Thu Sep 18 22:55:27 2008
***************
*** 1,4 ****
! *cmdline.txt*   For Vim version 7.2.  Last change: 2008 Jul 29
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *cmdline.txt*   For Vim version 7.2.  Last change: 2008 Sep 18
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 157,162 ****
--- 157,167 ----
  				(doesn't work at the expression prompt; some
  				things such as changing the buffer or current
  				window are not allowed to avoid side effects)
+ 				When the result is a |List| the items are used
+ 				as lines.  They can have line breaks inside
+ 				too.
+ 				When the result is a Float it's automatically
+ 				converted to a String.
  		See |registers| about registers.  {not in Vi}
  		Implementation detail: When using the |expression| register
  		and invoking setcmdpos(), this sets the position before
***************
*** 730,748 ****
  In Ex commands, at places where a file name can be used, the following
  characters have a special meaning.  These can also be used in the expression
  function expand() |expand()|.
! 	%	is replaced with the current file name			*:_%*
! 	#	is replaced with the alternate file name		*:_#*
  	#n	(where n is a number) is replaced with the file name of
! 		buffer n.  "#0" is the same as "#"
! 	##	is replaced with all names in the argument list		*:_##*
  		concatenated, separated by spaces.  Each space in a name
  		is preceded with a backslash.
! Note that these give the file name as it was typed.  If an absolute path is
! needed (when using the file name from a different directory), you need to add
! ":p".  See |filename-modifiers|.
  Note that backslashes are inserted before spaces, so that the command will
  correctly interpret the file name.  But this doesn't happen for shell
! commands.  For those you probably have to use quotes: >
  	:!ls "%"
  	:r !spell "%"
  
--- 735,763 ----
  In Ex commands, at places where a file name can be used, the following
  characters have a special meaning.  These can also be used in the expression
  function expand() |expand()|.
! 	%	Is replaced with the current file name.		  *:_%* *c_%*
! 	#	Is replaced with the alternate file name.	  *:_#* *c_#*
  	#n	(where n is a number) is replaced with the file name of
! 		buffer n.  "#0" is the same as "#".
! 	##	Is replaced with all names in the argument list	  *:_##* *c_##*
  		concatenated, separated by spaces.  Each space in a name
  		is preceded with a backslash.
! 	#<n	(where n is a number > 0) is replaced with old	  *:_#<* *c_#<*
! 		file name n.  See |:oldfiles| or |v:oldfiles| to get the
! 		number.							*E809*
! 		{only when compiled with the +eval and +viminfo features}
! 
! Note that these, except "#<n", give the file name as it was typed.  If an
! absolute path is needed (when using the file name from a different directory),
! you need to add ":p".  See |filename-modifiers|.
! 
! The "#<n" item returns an absolute path, but it will start with "~/" for files
! below your home directory.
! 
  Note that backslashes are inserted before spaces, so that the command will
  correctly interpret the file name.  But this doesn't happen for shell
! commands.  For those you probably have to use quotes (this fails for files
! that contain a quote and wildcards): >
  	:!ls "%"
  	:r !spell "%"
  
*** ../vim-7.2.030/runtime/doc/eval.txt	Sat Aug  9 19:36:47 2008
--- runtime/doc/eval.txt	Sun Nov  2 14:25:38 2008
***************
*** 1,4 ****
! *eval.txt*	For Vim version 7.2.  Last change: 2008 Aug 09
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
--- 1,4 ----
! *eval.txt*	For Vim version 7.2.  Last change: 2008 Nov 02
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
***************
*** 1484,1489 ****
--- 1484,1500 ----
  		This is the screen column number, like with |virtcol()|.  The
  		value is zero when there was no mouse button click.
  
+ 					*v:oldfiles* *oldfiles-variable*
+ v:oldfiles	List of file names that is loaded from the |viminfo| file on
+ 		startup.  These are the files that Vim remembers marks for.
+ 		The length of the List is limited by the ' argument of the
+ 		'viminfo' option (default is 100).
+ 		Also see |:oldfiles| and |c_#<|.
+ 		The List can be modified, but this has no effect on what is
+ 		stored in the |viminfo| file later.  If you use values other
+ 		than String this will cause trouble.
+ 		{only when compiled with the +viminfo feature}
+ 
  					*v:operator* *operator-variable*
  v:operator	The last operator given in Normal mode.  This is a single
  		character except for commands starting with <g> or <z>,
*** ../vim-7.2.030/runtime/doc/starting.txt	Sat Aug  9 19:36:52 2008
--- runtime/doc/starting.txt	Sun Nov  9 12:12:19 2008
***************
*** 1,4 ****
! *starting.txt*  For Vim version 7.2.  Last change: 2008 Jun 21
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *starting.txt*  For Vim version 7.2.  Last change: 2008 Nov 09
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 1337,1344 ****
  							*viminfo-read*
  When Vim is started and the 'viminfo' option is non-empty, the contents of
  the viminfo file are read and the info can be used in the appropriate places.
! The marks are not read in at startup (but file marks are).  See
! |initialization| for how to set the 'viminfo' option upon startup.
  
  							*viminfo-write*
  When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
--- 1335,1343 ----
  							*viminfo-read*
  When Vim is started and the 'viminfo' option is non-empty, the contents of
  the viminfo file are read and the info can be used in the appropriate places.
! The |v:oldfiles| variable is filled.  The marks are not read in at startup
! (but file marks are).  See |initialization| for how to set the 'viminfo'
! option upon startup.
  
  							*viminfo-write*
  When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
***************
*** 1372,1377 ****
--- 1371,1378 ----
  that start with any string given with the "r" flag in 'viminfo'.  This can be
  used to avoid saving marks for files on removable media (for MS-DOS you would
  use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:").
+ The |v:oldfiles| variable is filled with the file names that the viminfo file
+ has marks for.
  
  							*viminfo-file-marks*
  Uppercase marks ('A to 'Z) are stored when writing the viminfo file.  The
***************
*** 1463,1470 ****
  						   *:rv* *:rviminfo* *E195*
  :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
  			If [!] is given, then any information that is
! 			already set (registers, marks, etc.) will be
! 			overwritten.  {not in Vi}
  
  					*:wv* *:wviminfo* *E137* *E138* *E574*
  :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
--- 1464,1471 ----
  						   *:rv* *:rviminfo* *E195*
  :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
  			If [!] is given, then any information that is
! 			already set (registers, marks, |v:oldfiles|, etc.)
! 			will be overwritten   {not in Vi}
  
  					*:wv* *:wviminfo* *E137* *E138* *E574*
  :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
***************
*** 1479,1482 ****
--- 1480,1499 ----
  			the .viminfo file.
  			{not in Vi}
  
+ 						*:ol* *:oldfiles*
+ :ol[dfiles]		List the files that have marks stored in the viminfo
+ 			file.  This list is read on startup and only changes
+ 			afterwards with ":rviminfo!".  Also see |v:oldfiles|.
+ 			The number can be used with |c_#<|.
+ 			{not in Vi, only when compiled with the +eval feature}
+ 
+ :bro[wse] ol[dfiles][!]
+ 			List file names as with |:oldfiles|, and then prompt
+ 			for a number.  When the number is valid that file from
+ 			the list is edited.
+ 			If you get the |press-enter| prompt you can press "q"
+ 			and still get the prompt to enter a file number.
+ 			Use ! to abondon a modified buffer. |abandon|
+ 			{not when compiled with tiny or small features}
+ 
   vim:tw=78:ts=8:ft=help:norl:
*** ../vim-7.2.030/runtime/doc/usr_21.txt	Sat Aug  9 19:36:53 2008
--- runtime/doc/usr_21.txt	Sun Nov  9 12:14:10 2008
***************
*** 1,4 ****
! *usr_21.txt*	For Vim version 7.2.  Last change: 2007 May 01
  
  		     VIM USER MANUAL - by Bram Moolenaar
  
--- 1,4 ----
! *usr_21.txt*	For Vim version 7.2.  Last change: 2008 Nov 09
  
  		     VIM USER MANUAL - by Bram Moolenaar
  
***************
*** 153,159 ****
  to be lost.  Each item can be remembered only once.
  
  
! GETTING BACK TO WHERE YOU WERE
  
  You are halfway editing a file and it's time to leave for holidays.  You exit
  Vim and go enjoy yourselves, forgetting all about your work.  After a couple
--- 153,159 ----
  to be lost.  Each item can be remembered only once.
  
  
! GETTING BACK TO WHERE YOU STOPPED VIM
  
  You are halfway editing a file and it's time to leave for holidays.  You exit
  Vim and go enjoy yourselves, forgetting all about your work.  After a couple
***************
*** 168,173 ****
--- 168,215 ----
     The |:marks| command is useful to find out where '0 to '9 will take you.
  
  
+ GETTING BACK TO SOME FILE
+ 
+ If you want to go back to a file that you edited recently, but not when
+ exiting Vim, there is a slightly more complicated way.  You can see a list of
+ files by typing the command: >
+ 
+ 	:oldfiles
+ <	1: ~/.viminfo ~
+ 	2: ~/text/resume.txt ~
+ 	3: /tmp/draft ~
+ 
+ Now you would like to edit the second file, which is in the list preceded by
+ "2:".  You type: >
+ 
+ 	:e #<2
+ 
+ Instead of ":e" you can use any command that has a file name argument, the
+ "#<2" item works in the same place as "%" (current file name) and "#"
+ (alternate file name).  So you can also split the window to edit the third
+ file: >
+ 
+ 	:split #<3
+ 
+ That #<123 thing is a bit complicated when you just want to edit a file.
+ Fortunately there is a simpler way: >
+ 
+ 	:browse oldfiles
+ <	1: ~/.viminfo ~
+ 	2: ~/text/resume.txt ~
+ 	3: /tmp/draft ~
+ 	-- More --
+ 
+ You get the same list of files as with |:oldfiles|.  If you want to edit
+ "resume.txt" first press "q" to stop the listing.  You will get a prompt:
+ 
+ 	Type number and <Enter> (empty cancels): ~
+ 
+ Type "2" and press <Enter> to edit the second file.
+ 
+ More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
+ 
+ 
  MOVE INFO FROM ONE VIM TO ANOTHER
  
  You can use the ":wviminfo" and ":rviminfo" commands to save and restore the
*** ../vim-7.2.030/src/eval.c	Thu Nov  6 11:04:50 2008
--- src/eval.c	Sun Nov  9 11:59:39 2008
***************
*** 348,353 ****
--- 348,354 ----
      {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
      {VV_NAME("operator",	 VAR_STRING), VV_RO},
      {VV_NAME("searchforward",	 VAR_NUMBER), 0},
+     {VV_NAME("oldfiles",	 VAR_LIST), 0},
  };
  
  /* shorthand */
***************
*** 355,360 ****
--- 356,362 ----
  #define vv_nr		vv_di.di_tv.vval.v_number
  #define vv_float	vv_di.di_tv.vval.v_float
  #define vv_str		vv_di.di_tv.vval.v_string
+ #define vv_list		vv_di.di_tv.vval.v_list
  #define vv_tv		vv_di.di_tv
  
  /*
***************
*** 426,432 ****
  static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
  static void list_append __ARGS((list_T *l, listitem_T *item));
  static int list_append_tv __ARGS((list_T *l, typval_T *tv));
- static int list_append_string __ARGS((list_T *l, char_u *str, int len));
  static int list_append_number __ARGS((list_T *l, varnumber_T n));
  static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
  static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
--- 428,433 ----
***************
*** 845,852 ****
  	p = &vimvars[i];
  	if (p->vv_di.di_tv.v_type == VAR_STRING)
  	{
! 	    vim_free(p->vv_di.di_tv.vval.v_string);
! 	    p->vv_di.di_tv.vval.v_string = NULL;
  	}
      }
      hash_clear(&vimvarht);
--- 846,858 ----
  	p = &vimvars[i];
  	if (p->vv_di.di_tv.v_type == VAR_STRING)
  	{
! 	    vim_free(p->vv_string);
! 	    p->vv_string = NULL;
! 	}
! 	else if (p->vv_di.di_tv.v_type == VAR_LIST)
! 	{
! 	    list_unref(p->vv_list);
! 	    p->vv_list = NULL;
  	}
      }
      hash_clear(&vimvarht);
***************
*** 6057,6062 ****
--- 6063,6087 ----
  }
  
  /*
+  * Get list item "l[idx - 1]" as a string.  Returns NULL for failure.
+  */
+     char_u *
+ list_find_str(l, idx)
+     list_T	*l;
+     long	idx;
+ {
+     listitem_T	*li;
+ 
+     li = list_find(l, idx - 1);
+     if (li == NULL)
+     {
+ 	EMSGN(_(e_listidx), idx);
+ 	return NULL;
+     }
+     return get_tv_string(&li->li_tv);
+ }
+ 
+ /*
   * Locate "item" list "l" and return its index.
   * Returns -1 when "item" is not in the list.
   */
***************
*** 6147,6153 ****
   * When "len" >= 0 use "str[len]".
   * Returns FAIL when out of memory.
   */
!     static int
  list_append_string(l, str, len)
      list_T	*l;
      char_u	*str;
--- 6172,6178 ----
   * When "len" >= 0 use "str[len]".
   * Returns FAIL when out of memory.
   */
!     int
  list_append_string(l, str, len)
      list_T	*l;
      char_u	*str;
***************
*** 6507,6512 ****
--- 6532,6540 ----
  	set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
      }
  
+     /* v: vars */
+     set_ref_in_ht(&vimvarht, copyID);
+ 
      /*
       * 2. Go through the list of dicts and free items without the copyID.
       */
***************
*** 6597,6603 ****
      {
  	case VAR_DICT:
  	    dd = tv->vval.v_dict;
! 	    if (dd->dv_copyID != copyID)
  	    {
  		/* Didn't see this dict yet. */
  		dd->dv_copyID = copyID;
--- 6625,6631 ----
      {
  	case VAR_DICT:
  	    dd = tv->vval.v_dict;
! 	    if (dd != NULL && dd->dv_copyID != copyID)
  	    {
  		/* Didn't see this dict yet. */
  		dd->dv_copyID = copyID;
***************
*** 6607,6613 ****
  
  	case VAR_LIST:
  	    ll = tv->vval.v_list;
! 	    if (ll->lv_copyID != copyID)
  	    {
  		/* Didn't see this list yet. */
  		ll->lv_copyID = copyID;
--- 6635,6641 ----
  
  	case VAR_LIST:
  	    ll = tv->vval.v_list;
! 	    if (ll != NULL && ll->lv_copyID != copyID)
  	    {
  		/* Didn't see this list yet. */
  		ll->lv_copyID = copyID;
***************
*** 18106,18111 ****
--- 18134,18150 ----
  }
  
  /*
+  * Get List v: variable value.  Caller must take care of reference count when
+  * needed.
+  */
+     list_T *
+ get_vim_var_list(idx)
+     int		idx;
+ {
+     return vimvars[idx].vv_list;
+ }
+ 
+ /*
   * Set v:count, v:count1 and v:prevcount.
   */
      void
***************
*** 18141,18146 ****
--- 18180,18199 ----
  }
  
  /*
+  * Set List v: variable to "val".
+  */
+     void
+ set_vim_var_list(idx, val)
+     int		idx;
+     list_T	*val;
+ {
+     list_unref(vimvars[idx].vv_list);
+     vimvars[idx].vv_list = val;
+     if (val != NULL)
+ 	++val->lv_refcount;
+ }
+ 
+ /*
   * Set v:register if needed.
   */
      void
***************
*** 21900,21905 ****
--- 21953,22014 ----
      }
  }
  
+ /*
+  * List v:oldfiles in a nice way.
+  */
+ /*ARGSUSED*/
+     void
+ ex_oldfiles(eap)
+     exarg_T	*eap;
+ {
+     list_T	*l = vimvars[VV_OLDFILES].vv_list;
+     listitem_T	*li;
+     int		nr = 0;
+ 
+     if (l == NULL)
+ 	msg((char_u *)_("No old files"));
+     else
+     {
+ 	msg_start();
+ 	msg_scroll = TRUE;
+ 	for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
+ 	{
+ 	    msg_outnum((long)++nr);
+ 	    MSG_PUTS(": ");
+ 	    msg_outtrans(get_tv_string(&li->li_tv));
+ 	    msg_putchar('\n');
+ 	    out_flush();	    /* output one line at a time */
+ 	    ui_breakcheck();
+ 	}
+ 	/* Assume "got_int" was set to truncate the listing. */
+ 	got_int = FALSE;
+ 
+ #ifdef FEAT_BROWSE_CMD
+ 	if (cmdmod.browse)
+ 	{
+ 	    quit_more = FALSE;
+ 	    nr = prompt_for_number(FALSE);
+ 	    msg_starthere();
+ 	    if (nr > 0)
+ 	    {
+ 		char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
+ 								    (long)nr);
+ 
+ 		if (p != NULL)
+ 		{
+ 		    p = expand_env_save(p);
+ 		    eap->arg = p;
+ 		    eap->cmdidx = CMD_edit;
+ 		    cmdmod.browse = FALSE;
+ 		    do_exedit(eap, NULL);
+ 		    vim_free(p);
+ 		}
+ 	    }
+ 	}
+ #endif
+     }
+ }
+ 
  #endif /* FEAT_EVAL */
  
  
*** ../vim-7.2.030/src/ex_cmds.c	Sun Sep 14 21:40:26 2008
--- src/ex_cmds.c	Sun Sep 14 13:45:03 2008
***************
*** 24,30 ****
  static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
  #ifdef FEAT_VIMINFO
  static char_u *viminfo_filename __ARGS((char_u	*));
! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read));
  static int viminfo_encoding __ARGS((vir_T *virp));
  static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
  #endif
--- 24,30 ----
  static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
  #ifdef FEAT_VIMINFO
  static char_u *viminfo_filename __ARGS((char_u	*));
! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags));
  static int viminfo_encoding __ARGS((vir_T *virp));
  static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
  #endif
***************
*** 1676,1689 ****
  
  /*
   * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
!  * set are not over-written unless force is TRUE. -- webb
   */
      int
! read_viminfo(file, want_info, want_marks, forceit)
!     char_u	*file;
!     int		want_info;
!     int		want_marks;
!     int		forceit;
  {
      FILE	*fp;
      char_u	*fname;
--- 1676,1687 ----
  
  /*
   * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
!  * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb
   */
      int
! read_viminfo(file, flags)
!     char_u	*file;	    /* file name or NULL to use default name */
!     int		flags;	    /* VIF_WANT_INFO et al. */
  {
      FILE	*fp;
      char_u	*fname;
***************
*** 1691,1697 ****
      if (no_viminfo())
  	return FAIL;
  
!     fname = viminfo_filename(file);	    /* may set to default if NULL */
      if (fname == NULL)
  	return FAIL;
      fp = mch_fopen((char *)fname, READBIN);
--- 1689,1695 ----
      if (no_viminfo())
  	return FAIL;
  
!     fname = viminfo_filename(file);	/* get file name in allocated buffer */
      if (fname == NULL)
  	return FAIL;
      fp = mch_fopen((char *)fname, READBIN);
***************
*** 1701,1708 ****
  	verbose_enter();
  	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
  		fname,
! 		want_info ? _(" info") : "",
! 		want_marks ? _(" marks") : "",
  		fp == NULL ? _(" FAILED") : "");
  	verbose_leave();
      }
--- 1699,1707 ----
  	verbose_enter();
  	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
  		fname,
! 		(flags & VIF_WANT_INFO) ? _(" info") : "",
! 		(flags & VIF_WANT_MARKS) ? _(" marks") : "",
! 		(flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "",
  		fp == NULL ? _(" FAILED") : "");
  	verbose_leave();
      }
***************
*** 1712,1721 ****
  	return FAIL;
  
      viminfo_errcnt = 0;
!     do_viminfo(fp, NULL, want_info, want_marks, forceit);
  
      fclose(fp);
- 
      return OK;
  }
  
--- 1711,1719 ----
  	return FAIL;
  
      viminfo_errcnt = 0;
!     do_viminfo(fp, NULL, flags);
  
      fclose(fp);
      return OK;
  }
  
***************
*** 1968,1974 ****
      }
  
      viminfo_errcnt = 0;
!     do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);
  
      fclose(fp_out);	    /* errors are ignored !? */
      if (fp_in != NULL)
--- 1966,1972 ----
      }
  
      viminfo_errcnt = 0;
!     do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS));
  
      fclose(fp_out);	    /* errors are ignored !? */
      if (fp_in != NULL)
***************
*** 2041,2052 ****
   * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
   */
      static void
! do_viminfo(fp_in, fp_out, want_info, want_marks, force_read)
      FILE	*fp_in;
      FILE	*fp_out;
!     int		want_info;
!     int		want_marks;
!     int		force_read;
  {
      int		count = 0;
      int		eof = FALSE;
--- 2039,2048 ----
   * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
   */
      static void
! do_viminfo(fp_in, fp_out, flags)
      FILE	*fp_in;
      FILE	*fp_out;
!     int		flags;
  {
      int		count = 0;
      int		eof = FALSE;
***************
*** 2061,2068 ****
  
      if (fp_in != NULL)
      {
! 	if (want_info)
! 	    eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL);
  	else
  	    /* Skip info, find start of marks */
  	    while (!(eof = viminfo_readline(&vir))
--- 2057,2065 ----
  
      if (fp_in != NULL)
      {
! 	if (flags & VIF_WANT_INFO)
! 	    eof = read_viminfo_up_to_marks(&vir,
! 					 flags & VIF_FORCEIT, fp_out != NULL);
  	else
  	    /* Skip info, find start of marks */
  	    while (!(eof = viminfo_readline(&vir))
***************
*** 2092,2099 ****
  	write_viminfo_bufferlist(fp_out);
  	count = write_viminfo_marks(fp_out);
      }
!     if (fp_in != NULL && want_marks)
! 	copy_viminfo_marks(&vir, fp_out, count, eof);
  
      vim_free(vir.vir_line);
  #ifdef FEAT_MBYTE
--- 2089,2097 ----
  	write_viminfo_bufferlist(fp_out);
  	count = write_viminfo_marks(fp_out);
      }
!     if (fp_in != NULL
! 	    && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)))
! 	copy_viminfo_marks(&vir, fp_out, count, eof, flags);
  
      vim_free(vir.vir_line);
  #ifdef FEAT_MBYTE
*** ../vim-7.2.030/src/ex_cmds.h	Thu Nov  6 20:47:00 2008
--- src/ex_cmds.h	Thu Sep 18 22:18:14 2008
***************
*** 653,658 ****
--- 653,660 ----
  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_open,		"open",		ex_open,
  			RANGE|EXTRA),
+ EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
+ 			BANG|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_omap,		"omap",		ex_map,
  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
*** ../vim-7.2.030/src/ex_docmd.c	Thu Nov  6 17:16:06 2008
--- src/ex_docmd.c	Mon Nov  3 21:21:17 2008
***************
*** 364,369 ****
--- 364,370 ----
  # define ex_function		ex_ni
  # define ex_delfunction		ex_ni
  # define ex_return		ex_ni
+ # define ex_oldfiles		ex_ni
  #endif
  static char_u	*arg_all __ARGS((void));
  #ifdef FEAT_SESSION
***************
*** 1770,1776 ****
  			}
  			if (checkforcmd(&ea.cmd, "browse", 3))
  			{
! #ifdef FEAT_BROWSE
  			    cmdmod.browse = TRUE;
  #endif
  			    continue;
--- 1771,1777 ----
  			}
  			if (checkforcmd(&ea.cmd, "browse", 3))
  			{
! #ifdef FEAT_BROWSE_CMD
  			    cmdmod.browse = TRUE;
  #endif
  			    continue;
***************
*** 9508,9531 ****
  		    break;
  		}
  		s = src + 1;
  		i = (int)getdigits(&s);
  		*usedlen = (int)(s - src); /* length of what we expand */
  
! 		buf = buflist_findnr(i);
! 		if (buf == NULL)
  		{
! 		    *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
  		    return NULL;
  		}
! 		if (lnump != NULL)
! 		    *lnump = ECMD_LAST;
! 		if (buf->b_fname == NULL)
  		{
! 		    result = (char_u *)"";
! 		    valid = 0;	    /* Must have ":p:h" to be valid */
  		}
- 		else
- 		    result = buf->b_fname;
  		break;
  
  #ifdef FEAT_SEARCHPATH
--- 9509,9558 ----
  		    break;
  		}
  		s = src + 1;
+ 		if (*s == '<')		/* "#<99" uses v:oldfiles */
+ 		    ++s;
  		i = (int)getdigits(&s);
  		*usedlen = (int)(s - src); /* length of what we expand */
  
! 		if (src[1] == '<')
  		{
! 		    if (*usedlen < 2)
! 		    {
! 			/* Should we give an error message for #<text? */
! 			*usedlen = 1;
! 			return NULL;
! 		    }
! #ifdef FEAT_EVAL
! 		    result = list_find_str(get_vim_var_list(VV_OLDFILES),
! 								     (long)i);
! 		    if (result == NULL)
! 		    {
! 			*errormsg = (char_u *)"";
! 			return NULL;
! 		    }
! #else
! 		    *errormsg = (char_u *)_("E809: #< is not available without the +eval feature");
  		    return NULL;
+ #endif
  		}
! 		else
  		{
! 		    buf = buflist_findnr(i);
! 		    if (buf == NULL)
! 		    {
! 			*errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
! 			return NULL;
! 		    }
! 		    if (lnump != NULL)
! 			*lnump = ECMD_LAST;
! 		    if (buf->b_fname == NULL)
! 		    {
! 			result = (char_u *)"";
! 			valid = 0;	    /* Must have ":p:h" to be valid */
! 		    }
! 		    else
! 			result = buf->b_fname;
  		}
  		break;
  
  #ifdef FEAT_SEARCHPATH
***************
*** 10700,10706 ****
  	p_viminfo = (char_u *)"'100";
      if (eap->cmdidx == CMD_rviminfo)
      {
! 	if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL)
  	    EMSG(_("E195: Cannot open viminfo file for reading"));
      }
      else
--- 10727,10734 ----
  	p_viminfo = (char_u *)"'100";
      if (eap->cmdidx == CMD_rviminfo)
      {
! 	if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS
! 				  | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL)
  	    EMSG(_("E195: Cannot open viminfo file for reading"));
      }
      else
*** ../vim-7.2.030/src/feature.h	Wed Aug  6 18:45:07 2008
--- src/feature.h	Fri Sep 19 19:14:22 2008
***************
*** 767,775 ****
  
  /*
   * +browse		":browse" command.
   */
! #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
! # define FEAT_BROWSE
  #endif
  
  /*
--- 767,779 ----
  
  /*
   * +browse		":browse" command.
+  *			or just the ":browse" command modifier
   */
! #if defined(FEAT_NORMAL)
! # define FEAT_BROWSE_CMD
! # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
! #  define FEAT_BROWSE
! # endif
  #endif
  
  /*
*** ../vim-7.2.030/src/fileio.c	Thu Sep 18 21:29:07 2008
--- src/fileio.c	Mon Nov  3 21:21:47 2008
***************
*** 2711,2717 ****
  {
      if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
  						  && curbuf->b_ffname != NULL)
! 	read_viminfo(NULL, FALSE, TRUE, FALSE);
  
      /* Always set b_marks_read; needed when 'viminfo' is changed to include
       * the ' parameter after opening a buffer. */
--- 2711,2717 ----
  {
      if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
  						  && curbuf->b_ffname != NULL)
! 	read_viminfo(NULL, VIF_WANT_MARKS);
  
      /* Always set b_marks_read; needed when 'viminfo' is changed to include
       * the ' parameter after opening a buffer. */
***************
*** 9108,9114 ****
  set_context_in_autocmd(xp, arg, doautocmd)
      expand_T	*xp;
      char_u	*arg;
!     int		doautocmd;	/* TRUE for :doautocmd, FALSE for :autocmd */
  {
      char_u	*p;
      int		group;
--- 9109,9115 ----
  set_context_in_autocmd(xp, arg, doautocmd)
      expand_T	*xp;
      char_u	*arg;
!     int		doautocmd;	/* TRUE for :doauto*, FALSE for :autocmd */
  {
      char_u	*p;
      int		group;
*** ../vim-7.2.030/src/main.c	Thu Sep 18 20:55:19 2008
--- src/main.c	Sun Sep 14 13:26:10 2008
***************
*** 645,655 ****
  
  #ifdef FEAT_VIMINFO
      /*
!      * Read in registers, history etc, but not marks, from the viminfo file
       */
      if (*p_viminfo != NUL)
      {
! 	read_viminfo(NULL, TRUE, FALSE, FALSE);
  	TIME_MSG("reading viminfo");
      }
  #endif
--- 645,656 ----
  
  #ifdef FEAT_VIMINFO
      /*
!      * Read in registers, history etc, but not marks, from the viminfo file.
!      * This is where v:oldfiles gets filled.
       */
      if (*p_viminfo != NUL)
      {
! 	read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES);
  	TIME_MSG("reading viminfo");
      }
  #endif
*** ../vim-7.2.030/src/mark.c	Sat Aug  9 19:37:29 2008
--- src/mark.c	Sun Sep 14 13:46:19 2008
***************
*** 1627,1641 ****
  
  /*
   * Handle marks in the viminfo file:
!  * fp_out == NULL   read marks for current buffer only
!  * fp_out != NULL   copy marks for buffers not in buffer list
   */
      void
! copy_viminfo_marks(virp, fp_out, count, eof)
      vir_T	*virp;
      FILE	*fp_out;
      int		count;
      int		eof;
  {
      char_u	*line = virp->vir_line;
      buf_T	*buf;
--- 1627,1643 ----
  
  /*
   * Handle marks in the viminfo file:
!  * fp_out != NULL: copy marks for buffers not in buffer list
!  * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
!  * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
   */
      void
! copy_viminfo_marks(virp, fp_out, count, eof, flags)
      vir_T	*virp;
      FILE	*fp_out;
      int		count;
      int		eof;
+     int		flags;
  {
      char_u	*line = virp->vir_line;
      buf_T	*buf;
***************
*** 1647,1656 ****
--- 1649,1671 ----
      char_u	*p;
      char_u	*name_buf;
      pos_T	pos;
+ #ifdef FEAT_EVAL
+     list_T	*list = NULL;
+ #endif
  
      if ((name_buf = alloc(LSIZE)) == NULL)
  	return;
      *name_buf = NUL;
+ 
+ #ifdef FEAT_EVAL
+     if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT)))
+     {
+ 	list = list_alloc();
+ 	if (list != NULL)
+ 	    set_vim_var_list(VV_OLDFILES, list);
+     }
+ #endif
+ 
      num_marked_files = get_viminfo_parameter('\'');
      while (!eof && (count < num_marked_files || fp_out == NULL))
      {
***************
*** 1681,1686 ****
--- 1696,1706 ----
  	    p++;
  	*p = NUL;
  
+ #ifdef FEAT_EVAL
+ 	if (list != NULL)
+ 	    list_append_string(list, str, -1);
+ #endif
+ 
  	/*
  	 * If fp_out == NULL, load marks for current buffer.
  	 * If fp_out != NULL, copy marks for buffers not in buflist.
***************
*** 1688,1694 ****
  	load_marks = copy_marks_out = FALSE;
  	if (fp_out == NULL)
  	{
! 	    if (curbuf->b_ffname != NULL)
  	    {
  		if (*name_buf == NUL)	    /* only need to do this once */
  		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
--- 1708,1714 ----
  	load_marks = copy_marks_out = FALSE;
  	if (fp_out == NULL)
  	{
! 	    if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL)
  	    {
  		if (*name_buf == NUL)	    /* only need to do this once */
  		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
*** ../vim-7.2.030/src/misc1.c	Wed Jun 25 00:24:52 2008
--- src/misc1.c	Sun Nov  9 11:47:00 2008
***************
*** 3245,3253 ****
  
      /* When using ":silent" assume that <CR> was entered. */
      if (mouse_used != NULL)
! 	MSG_PUTS(_("Type number or click with mouse (<Enter> cancels): "));
      else
! 	MSG_PUTS(_("Choice number (<Enter> cancels): "));
  
      /* Set the state such that text can be selected/copied/pasted and we still
       * get mouse events. */
--- 3245,3253 ----
  
      /* When using ":silent" assume that <CR> was entered. */
      if (mouse_used != NULL)
! 	MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): "));
      else
! 	MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
  
      /* Set the state such that text can be selected/copied/pasted and we still
       * get mouse events. */
*** ../vim-7.2.030/src/proto/eval.pro	Sun Jan  6 20:06:30 2008
--- src/proto/eval.pro	Sun Nov  9 12:05:56 2008
***************
*** 17,23 ****
  int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
  char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
  int skip_expr __ARGS((char_u **pp));
! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
  char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
  int eval_to_number __ARGS((char_u *expr));
  list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
--- 17,23 ----
  int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
  char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
  int skip_expr __ARGS((char_u **pp));
! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert));
  char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
  int eval_to_number __ARGS((char_u *expr));
  list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
***************
*** 46,52 ****
--- 46,54 ----
  void list_unref __ARGS((list_T *l));
  void list_free __ARGS((list_T *l, int recurse));
  dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+ char_u *list_find_str __ARGS((list_T *l, long idx));
  int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ int list_append_string __ARGS((list_T *l, char_u *str, int len));
  int garbage_collect __ARGS((void));
  dict_T *dict_alloc __ARGS((void));
  int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
***************
*** 58,65 ****
--- 60,69 ----
  void set_vim_var_nr __ARGS((int idx, long val));
  long get_vim_var_nr __ARGS((int idx));
  char_u *get_vim_var_str __ARGS((int idx));
+ list_T *get_vim_var_list __ARGS((int idx));
  void set_vcount __ARGS((long count, long count1));
  void set_vim_var_string __ARGS((int idx, char_u *val, int len));
+ void set_vim_var_list __ARGS((int idx, list_T *val));
  void set_reg_var __ARGS((int c));
  char_u *v_exception __ARGS((char_u *oldval));
  char_u *v_throwpoint __ARGS((char_u *oldval));
***************
*** 94,99 ****
--- 98,104 ----
  void write_viminfo_varlist __ARGS((FILE *fp));
  int store_session_globals __ARGS((FILE *fd));
  void last_set_msg __ARGS((scid_T scriptID));
+ void ex_oldfiles __ARGS((exarg_T *eap));
  int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
  char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
  /* vim: set ft=c : */
*** ../vim-7.2.030/src/proto/ex_cmds.pro	Sat May  5 20:13:58 2007
--- src/proto/ex_cmds.pro	Sat Sep 13 17:27:21 2008
***************
*** 11,17 ****
  char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
  void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
  int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
! int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));
  void write_viminfo __ARGS((char_u *file, int forceit));
  int viminfo_readline __ARGS((vir_T *virp));
  char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
--- 11,17 ----
  char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
  void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
  int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
! int read_viminfo __ARGS((char_u *file, int flags));
  void write_viminfo __ARGS((char_u *file, int forceit));
  int viminfo_readline __ARGS((vir_T *virp));
  char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
*** ../vim-7.2.030/src/proto/mark.pro	Sat May  5 19:29:37 2007
--- src/proto/mark.pro	Sat Sep 13 18:06:20 2008
***************
*** 26,30 ****
  void write_viminfo_filemarks __ARGS((FILE *fp));
  int removable __ARGS((char_u *name));
  int write_viminfo_marks __ARGS((FILE *fp_out));
! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
  /* vim: set ft=c : */
--- 26,30 ----
  void write_viminfo_filemarks __ARGS((FILE *fp));
  int removable __ARGS((char_u *name));
  int write_viminfo_marks __ARGS((FILE *fp_out));
! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags));
  /* vim: set ft=c : */
*** ../vim-7.2.030/src/option.c	Thu Oct  2 22:48:01 2008
--- src/option.c	Fri Sep 26 22:20:20 2008
***************
*** 2593,2605 ****
  #ifdef FEAT_VIMINFO
  			    (char_u *)&p_viminfo, PV_NONE,
  #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
! 			    {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"}
  #else
  # ifdef AMIGA
  			    {(char_u *)"",
! 				 (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"}
  # else
! 			    {(char_u *)"", (char_u *)"'20,<50,s10,h"}
  # endif
  #endif
  #else
--- 2593,2605 ----
  #ifdef FEAT_VIMINFO
  			    (char_u *)&p_viminfo, PV_NONE,
  #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
! 			    {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"}
  #else
  # ifdef AMIGA
  			    {(char_u *)"",
! 				 (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"}
  # else
! 			    {(char_u *)"", (char_u *)"'100,<50,s10,h"}
  # endif
  #endif
  #else
*** ../vim-7.2.030/src/structs.h	Thu Jul 31 22:04:27 2008
--- src/structs.h	Fri Sep 19 19:15:18 2008
***************
*** 459,465 ****
  typedef struct
  {
      int		hide;			/* TRUE when ":hide" was used */
! # ifdef FEAT_BROWSE
      int		browse;			/* TRUE to invoke file dialog */
  # endif
  # ifdef FEAT_WINDOWS
--- 459,465 ----
  typedef struct
  {
      int		hide;			/* TRUE when ":hide" was used */
! # ifdef FEAT_BROWSE_CMD
      int		browse;			/* TRUE to invoke file dialog */
  # endif
  # ifdef FEAT_WINDOWS
*** ../vim-7.2.030/src/vim.h	Sat Aug  9 19:37:40 2008
--- src/vim.h	Sat Sep 13 17:41:24 2008
***************
*** 1728,1734 ****
  #define VV_MOUSE_COL	51
  #define VV_OP		52
  #define VV_SEARCHFORWARD 53
! #define VV_LEN		54	/* number of v: vars */
  
  #ifdef FEAT_CLIPBOARD
  
--- 1728,1735 ----
  #define VV_MOUSE_COL	51
  #define VV_OP		52
  #define VV_SEARCHFORWARD 53
! #define VV_OLDFILES	54
! #define VV_LEN		55	/* number of v: vars */
  
  #ifdef FEAT_CLIPBOARD
  
***************
*** 2054,2057 ****
--- 2055,2064 ----
  #define DOSO_VIMRC	1	/* loading vimrc file */
  #define DOSO_GVIMRC	2	/* loading gvimrc file */
  
+ /* flags for read_viminfo() and children */
+ #define VIF_WANT_INFO		1	/* load non-mark info */
+ #define VIF_WANT_MARKS		2	/* load file marks */
+ #define VIF_FORCEIT		4	/* overwrite info already read */
+ #define VIF_GET_OLDFILES	8	/* load v:oldfiles */
+ 
  #endif /* VIM__H */
*** ../vim-7.2.030/src/version.c	Thu Nov  6 20:47:00 2008
--- src/version.c	Sun Nov  9 13:39:19 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     31,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
217. Your sex life has drastically improved...so what if it's only cyber-sex!

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


--- NEW FILE 7.2.032 ---
To: vim-dev at vim.org
Subject: Patch 7.2.032
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.2.032 (after 7.2.031)
Problem:    Can't build with EXITFREE defined. (Dominique Pelle)
Solution:   Change vv_string to vv_str.
Files:	    src/eval.c


*** ../vim-7.2.031/src/eval.c	Sun Nov  9 13:43:25 2008
--- src/eval.c	Sun Nov  9 17:16:06 2008
***************
*** 846,853 ****
  	p = &vimvars[i];
  	if (p->vv_di.di_tv.v_type == VAR_STRING)
  	{
! 	    vim_free(p->vv_string);
! 	    p->vv_string = NULL;
  	}
  	else if (p->vv_di.di_tv.v_type == VAR_LIST)
  	{
--- 846,853 ----
  	p = &vimvars[i];
  	if (p->vv_di.di_tv.v_type == VAR_STRING)
  	{
! 	    vim_free(p->vv_str);
! 	    p->vv_str = NULL;
  	}
  	else if (p->vv_di.di_tv.v_type == VAR_LIST)
  	{
*** ../vim-7.2.031/src/version.c	Sun Nov  9 13:43:25 2008
--- src/version.c	Sun Nov  9 17:21:00 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     32,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
218. Your spouse hands you a gift wrapped magnet with your PC's name
     on it and you accuse him or her of genocide.

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


--- NEW FILE 7.2.033 ---
To: vim-dev at vim.org
Subject: Patch 7.2.033
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.2.033
Problem:    When detecting a little endian BOM "ucs-2le" is used, but the text
	    might be "utf-16le".
Solution:   Default to "utf-16le", it also works for "ucs-2le". (Jia Yanwei)
Files:	    src/fileio.c, src/testdir/test42.ok


*** ../vim-7.2.032/src/fileio.c	Sun Nov  9 13:43:25 2008
--- src/fileio.c	Mon Nov  3 21:21:47 2008
***************
*** 5550,5558 ****
  	    name = "ucs-4le";	/* FF FE 00 00 */
  	    len = 4;
  	}
! 	else if (flags == FIO_ALL || flags == (FIO_UCS2 | FIO_ENDIAN_L))
  	    name = "ucs-2le";	/* FF FE */
! 	else if (flags == (FIO_UTF16 | FIO_ENDIAN_L))
  	    name = "utf-16le";	/* FF FE */
      }
      else if (p[0] == 0xfe && p[1] == 0xff
--- 5550,5559 ----
  	    name = "ucs-4le";	/* FF FE 00 00 */
  	    len = 4;
  	}
! 	else if (flags == (FIO_UCS2 | FIO_ENDIAN_L))
  	    name = "ucs-2le";	/* FF FE */
! 	else if (flags == FIO_ALL || flags == (FIO_UTF16 | FIO_ENDIAN_L))
! 	    /* utf-16le is preferred, it also works for ucs-2le text */
  	    name = "utf-16le";	/* FF FE */
      }
      else if (p[0] == 0xfe && p[1] == 0xff
*** ../vim-7.2.032/src/testdir/test42.ok	Sat Mar  1 13:49:21 2008
--- src/testdir/test42.ok	Sat Nov  1 17:09:29 2008
***************
*** 20,26 ****
  ucs-2
  
  
!   fileencoding=ucs-2le
    bomb
  ucs-2le
  
--- 20,26 ----
  ucs-2
  
  
!   fileencoding=utf-16le
    bomb
  ucs-2le
  
*** ../vim-7.2.032/src/version.c	Sun Nov  9 17:21:10 2008
--- src/version.c	Tue Nov 11 21:54:14 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     33,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
234. You started college as a chemistry major, and walk out four years
     later as an Internet 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    ///


--- NEW FILE 7.2.034 ---
To: vim-dev at vim.org
Subject: Patch 7.2.034
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.2.034
Problem:    Memory leak in spell info when deleting buffer.
Solution:   Free the memory. (Dominique Pelle)
Files:	    src/buffer.c


*** ../vim-7.2.033/src/buffer.c	Mon Sep  1 17:32:40 2008
--- src/buffer.c	Wed Nov 12 11:21:49 2008
***************
*** 647,652 ****
--- 647,655 ----
      vim_free(buf->b_start_fenc);
      buf->b_start_fenc = NULL;
  #endif
+ #ifdef FEAT_SPELL
+     ga_clear(&buf->b_langp);
+ #endif
  }
  
  /*
***************
*** 1237,1243 ****
  	 * "buf" if one exists */
  	if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
  	    return OK;
! 	/* If 'switchbuf' contians "usetab": jump to first window in any tab
  	 * page containing "buf" if one exists */
  	if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
  	    return OK;
--- 1240,1246 ----
  	 * "buf" if one exists */
  	if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
  	    return OK;
! 	/* If 'switchbuf' contains "usetab": jump to first window in any tab
  	 * page containing "buf" if one exists */
  	if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
  	    return OK;
***************
*** 3964,3970 ****
      width = vim_strsize(out);
      if (maxwidth > 0 && width > maxwidth)
      {
! 	/* Result is too long, must trunctate somewhere. */
  	l = 0;
  	if (itemcnt == 0)
  	    s = out;
--- 3967,3973 ----
      width = vim_strsize(out);
      if (maxwidth > 0 && width > maxwidth)
      {
! 	/* Result is too long, must truncate somewhere. */
  	l = 0;
  	if (itemcnt == 0)
  	    s = out;
*** ../vim-7.2.033/src/version.c	Tue Nov 11 21:55:29 2008
--- src/version.c	Wed Nov 12 12:51:21 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     34,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
236. You start saving URL's in your digital watch.

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


--- NEW FILE 7.2.035 ---
To: vim-dev at vim.org
Subject: Patch 7.2.035
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.2.035
Problem:    Mismatches between alloc/malloc, free/vim_free,
	    realloc/vim_realloc.
Solution:   Use the right function. (Dominique Pelle)
Files:	    src/gui_x11.c, src/mbyte.c, src/misc2.c, src/os_unix.c


*** ../vim-7.2.034/src/gui_x11.c	Fri Jun 20 11:59:25 2008
--- src/gui_x11.c	Wed Nov 12 11:47:03 2008
***************
*** 2450,2456 ****
  	*colorPtr = colortable[closest];
      }
  
!     free(colortable);
      return OK;
  }
  
--- 2450,2456 ----
  	*colorPtr = colortable[closest];
      }
  
!     vim_free(colortable);
      return OK;
  }
  
*** ../vim-7.2.034/src/mbyte.c	Sat Sep  6 16:44:06 2008
--- src/mbyte.c	Wed Nov 12 11:24:14 2008
***************
*** 5384,5390 ****
  			draw_feedback = (char *)alloc(draw_data->chg_first
  							      + text->length);
  		    else
! 			draw_feedback = realloc(draw_feedback,
  					 draw_data->chg_first + text->length);
  		    if (draw_feedback != NULL)
  		    {
--- 5384,5390 ----
  			draw_feedback = (char *)alloc(draw_data->chg_first
  							      + text->length);
  		    else
! 			draw_feedback = vim_realloc(draw_feedback,
  					 draw_data->chg_first + text->length);
  		    if (draw_feedback != NULL)
  		    {
*** ../vim-7.2.034/src/misc2.c	Sat Sep  6 16:44:06 2008
--- src/misc2.c	Wed Nov 12 11:42:51 2008
***************
*** 873,879 ****
  	    /* 3. check for available memory: call mch_avail_mem() */
  	    if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
  	    {
! 		vim_free((char *)p);	/* System is low... no go! */
  		p = NULL;
  	    }
  	    else
--- 873,879 ----
  	    /* 3. check for available memory: call mch_avail_mem() */
  	    if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
  	    {
! 		free((char *)p);	/* System is low... no go! */
  		p = NULL;
  	    }
  	    else
*** ../vim-7.2.034/src/os_unix.c	Wed Aug  6 18:45:01 2008
--- src/os_unix.c	Wed Nov 12 11:55:33 2008
***************
*** 2905,2911 ****
       * Ignore any errors.
       */
  #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
!     signal_stack = malloc(SIGSTKSZ);
      init_signal_stack();
  #endif
  }
--- 2905,2911 ----
       * Ignore any errors.
       */
  #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
!     signal_stack = (char *)alloc(SIGSTKSZ);
      init_signal_stack();
  #endif
  }
***************
*** 6814,6820 ****
      if (xsmp_icefd != -1)
      {
  	SmcCloseConnection(xsmp.smcconn, 0, NULL);
! 	vim_free(xsmp.clientid);
  	xsmp.clientid = NULL;
  	xsmp_icefd = -1;
      }
--- 6815,6822 ----
      if (xsmp_icefd != -1)
      {
  	SmcCloseConnection(xsmp.smcconn, 0, NULL);
! 	if (xsmp.clientid != NULL)
! 	    free(xsmp.clientid);
  	xsmp.clientid = NULL;
  	xsmp_icefd = -1;
      }
*** ../vim-7.2.034/src/version.c	Wed Nov 12 12:51:38 2008
--- src/version.c	Wed Nov 12 13:05:40 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     35,
  /**/

-- 
You can tune a file system, but you can't tuna fish
							-- man tunefs

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


--- NEW FILE 7.2.036 ---
To: vim-dev at vim.org
Subject: Patch 7.2.036 (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.2.036 (extra)
Problem:    Mismatches between alloc/malloc, free/vim_free,
	    realloc/vim_realloc.
Solution:   Use the right function. (Dominique Pelle)
Files:	    src/gui_riscos.c, src/gui_w48.c, src/mbyte.c, src/os_vms.c,
	    src/os_w32exe.c, src/os_win16.c


*** ../vim-7.2.035/src/gui_riscos.c	Thu May 10 19:33:26 2007
--- src/gui_riscos.c	Wed Nov 12 11:47:54 2008
***************
*** 695,701 ****
  gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
      int width;		/* In OS units */
      int height;
!     int min_width;	/* Smallest permissable window size (ignored) */
      int min_height;
      int base_width;	/* Space for scroll bars, etc */
      int base_height;
--- 695,701 ----
  gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
      int width;		/* In OS units */
      int height;
!     int min_width;	/* Smallest permissible window size (ignored) */
      int min_height;
      int base_width;	/* Space for scroll bars, etc */
      int base_height;
***************
*** 863,869 ****
      if (strncmp(file, "ZapFont\015", 8) == 0)
  	return file;	/* Loaded OK! */
  
!     free(file);
      return NULL;	/* Not a valid font file */
  }
  
--- 863,869 ----
      if (strncmp(file, "ZapFont\015", 8) == 0)
  	return file;	/* Loaded OK! */
  
!     vim_free(file);
      return NULL;	/* Not a valid font file */
  }
  
*** ../vim-7.2.035/src/gui_w48.c	Thu Jul 24 20:50:23 2008
--- src/gui_w48.c	Wed Nov 12 11:37:41 2008
***************
*** 3335,3341 ****
  
  /*
   * Convert the string s to the proper format for a filter string by replacing
!  * the \t and \n delimeters with \0.
   * Returns the converted string in allocated memory.
   *
   * Keep in sync with convert_filterW() above!
--- 3335,3341 ----
  
  /*
   * Convert the string s to the proper format for a filter string by replacing
!  * the \t and \n delimiters with \0.
   * Returns the converted string in allocated memory.
   *
   * Keep in sync with convert_filterW() above!
***************
*** 3674,3680 ****
   * Use "prog" as the name of the program and "cmdline" as the arguments.
   * Copy the arguments to allocated memory.
   * Return the number of arguments (including program name).
!  * Return pointers to the arguments in "argvp".
   * Return pointer to buffer in "tofree".
   * Returns zero when out of memory.
   */
--- 3674,3681 ----
   * Use "prog" as the name of the program and "cmdline" as the arguments.
   * Copy the arguments to allocated memory.
   * Return the number of arguments (including program name).
!  * Return pointers to the arguments in "argvp".  Memory is allocated with
!  * malloc(), use free() instead of vim_free().
   * Return pointer to buffer in "tofree".
   * Returns zero when out of memory.
   */
***************
*** 3692,3697 ****
--- 3693,3700 ----
      char	**argv = NULL;
      int		round;
  
+     *tofree = NULL;
+ 
  #ifdef FEAT_MBYTE
      /* Try using the Unicode version first, it takes care of conversion when
       * 'encoding' is changed. */
***************
*** 3802,3816 ****
  	    argv = (char **)malloc((argc + 1) * sizeof(char *));
  	    if (argv == NULL )
  	    {
! 		vim_free(newcmdline);
  		return 0;		   /* malloc error */
  	    }
  	    pnew = newcmdline;
  	}
      }
  
  done:
- 
      argv[argc] = NULL;		/* NULL-terminated list */
      *argvp = argv;
      return argc;
--- 3805,3819 ----
  	    argv = (char **)malloc((argc + 1) * sizeof(char *));
  	    if (argv == NULL )
  	    {
! 		free(newcmdline);
  		return 0;		   /* malloc error */
  	    }
  	    pnew = newcmdline;
+ 	    *tofree = newcmdline;
  	}
      }
  
  done:
      argv[argc] = NULL;		/* NULL-terminated list */
      *argvp = argv;
      return argc;
*** ../vim-7.2.035/src/os_vms.c	Wed Aug  6 18:38:52 2008
--- src/os_vms.c	Wed Nov 12 11:42:12 2008
***************
*** 228,234 ****
      else if ((sbuf = getenv((char *)lognam)))
      {
  	lengte = strlen(sbuf) + 1;
! 	cp = (char_u *)malloc((size_t)lengte);
  	if (cp)
  	    strcpy((char *)cp, sbuf);
  	return cp;
--- 228,234 ----
      else if ((sbuf = getenv((char *)lognam)))
      {
  	lengte = strlen(sbuf) + 1;
! 	cp = (char_u *)alloc((size_t)lengte);
  	if (cp)
  	    strcpy((char *)cp, sbuf);
  	return cp;
***************
*** 381,387 ****
      if (--vms_match_free == 0) {
  	/* add more space to store matches */
  	vms_match_alloced += EXPL_ALLOC_INC;
! 	vms_fmatch = (char_u **)realloc(vms_fmatch,
  		sizeof(char **) * vms_match_alloced);
  	if (!vms_fmatch)
  	    return 0;
--- 381,387 ----
      if (--vms_match_free == 0) {
  	/* add more space to store matches */
  	vms_match_alloced += EXPL_ALLOC_INC;
! 	vms_fmatch = (char_u **)vim_realloc(vms_fmatch,
  		sizeof(char **) * vms_match_alloced);
  	if (!vms_fmatch)
  	    return 0;
***************
*** 460,466 ****
  	    if (--files_free < 1)
  	    {
  		files_alloced += EXPL_ALLOC_INC;
! 		*file = (char_u **)realloc(*file,
  		    sizeof(char_u **) * files_alloced);
  		if (*file == NULL)
  		{
--- 460,466 ----
  	    if (--files_free < 1)
  	    {
  		files_alloced += EXPL_ALLOC_INC;
! 		*file = (char_u **)vim_realloc(*file,
  		    sizeof(char_u **) * files_alloced);
  		if (*file == NULL)
  		{
***************
*** 614,627 ****
      {
  	buflen = len + 128;
  	if (buf)
! 	    buf = (char *)realloc(buf, buflen);
  	else
! 	    buf = (char *)calloc(buflen, sizeof(char));
      }
  
  #ifdef DEBUG
       char		 *tmpbuf = NULL;
!      tmpbuf = (char *)calloc(buflen, sizeof(char));
       strcpy(tmpbuf, instring);
  #endif
  
--- 614,627 ----
      {
  	buflen = len + 128;
  	if (buf)
! 	    buf = (char *)vim_realloc(buf, buflen);
  	else
! 	    buf = (char *)alloc(buflen * sizeof(char));
      }
  
  #ifdef DEBUG
       char		 *tmpbuf = NULL;
!      tmpbuf = (char *)alloc(buflen * sizeof(char));
       strcpy(tmpbuf, instring);
  #endif
  
*** ../vim-7.2.035/src/os_w32exe.c	Fri Jul  1 00:06:20 2005
--- src/os_w32exe.c	Wed Nov 12 11:45:43 2008
***************
*** 129,135 ****
  errout:
  #endif
      free(argv);
!     free(tofree);
  #ifdef FEAT_MBYTE
      free_cmd_argsW();
  #endif
--- 129,136 ----
  errout:
  #endif
      free(argv);
!     if (tofree != NULL)
! 	free(tofree);
  #ifdef FEAT_MBYTE
      free_cmd_argsW();
  #endif
*** ../vim-7.2.035/src/os_win16.c	Wed Jun 25 00:49:34 2008
--- src/os_win16.c	Wed Nov 12 11:45:53 2008
***************
*** 121,127 ****
      pmain(argc, argv);
  
      free(argv);
!     free(tofree);
  
      return 0;
  }
--- 121,128 ----
      pmain(argc, argv);
  
      free(argv);
!     if (tofree != NULL)
! 	free(tofree);
  
      return 0;
  }
*** ../vim-7.2.035/src/version.c	Wed Nov 12 13:07:48 2008
--- src/version.c	Wed Nov 12 13:28:51 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     36,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
239. You think "surfing" is something you do on dry land.

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


--- NEW FILE 7.2.037 ---
To: vim-dev at vim.org
Subject: Patch 7.2.037
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.2.037
Problem:    Double free with GTK 1 and compiled with EXITFREE.
Solution:   Don't close display. (Dominique Pelle)
Files:	    src/os_unix.c


*** ../vim-7.2.036/src/os_unix.c	Wed Nov 12 13:07:48 2008
--- src/os_unix.c	Wed Nov 12 11:55:33 2008
***************
*** 2936,2942 ****
      }
  #  endif
  # endif
! # ifdef FEAT_X11
      if (x11_display != NULL
  #  ifdef FEAT_XCLIPBOARD
  	    && x11_display != xterm_dpy
--- 2936,2943 ----
      }
  #  endif
  # endif
!     /* Don't close the display for GTK 1, it is done in exit(). */
! # if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2))
      if (x11_display != NULL
  #  ifdef FEAT_XCLIPBOARD
  	    && x11_display != xterm_dpy
*** ../vim-7.2.036/src/version.c	Wed Nov 12 13:35:31 2008
--- src/version.c	Wed Nov 12 14:08:56 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     37,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
240. You think Webster's Dictionary is a directory of WEB sites.

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


--- NEW FILE 7.2.038 ---
To: vim-dev at vim.org
Subject: Patch 7.2.038
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.2.038
Problem:    Overlapping arguments to memcpy().
Solution:   Use mch_memmove(). (Dominique Pelle)
Files:	    src/if_xcmdsrv.c


*** ../vim-7.2.037/src/if_xcmdsrv.c	Wed Aug  6 18:38:13 2008
--- src/if_xcmdsrv.c	Wed Nov 12 12:09:01 2008
***************
*** 736,742 ****
  		+ serverReply.ga_len;
  	    e.id = w;
  	    ga_init2(&e.strings, 1, 100);
! 	    memcpy(p, &e, sizeof(e));
  	    serverReply.ga_len++;
  	}
      }
--- 736,742 ----
  		+ serverReply.ga_len;
  	    e.id = w;
  	    ga_init2(&e.strings, 1, 100);
! 	    mch_memmove(p, &e, sizeof(e));
  	    serverReply.ga_len++;
  	}
      }
***************
*** 1018,1024 ****
  	p++;
  	count = numItems - (p - regProp);
  	if (count > 0)
! 	    memcpy(entry, p, count);
  	XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING,
  			8, PropModeReplace, regProp,
  			(int)(numItems - (p - entry)));
--- 1018,1024 ----
  	p++;
  	count = numItems - (p - regProp);
  	if (count > 0)
! 	    mch_memmove(entry, p, count);
  	XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING,
  			8, PropModeReplace, regProp,
  			(int)(numItems - (p - entry)));
***************
*** 1072,1078 ****
  		p++;
  		lastHalf = numItems - (p - regProp);
  		if (lastHalf > 0)
! 		    memcpy(entry, p, lastHalf);
  		numItems = (entry - regProp) + lastHalf;
  		p = entry;
  		continue;
--- 1072,1078 ----
  		p++;
  		lastHalf = numItems - (p - regProp);
  		if (lastHalf > 0)
! 		    mch_memmove(entry, p, lastHalf);
  		numItems = (entry - regProp) + lastHalf;
  		p = entry;
  		continue;
*** ../vim-7.2.037/src/version.c	Wed Nov 12 14:09:38 2008
--- src/version.c	Wed Nov 12 14:51:00 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     38,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
241. You try to look for Net Search even when you're in File Manager.

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


--- NEW FILE 7.2.039 ---
To: vim-dev at vim.org
Subject: Patch 7.2.039
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.2.039
Problem:    Accessing freed memory on exit when EXITFREE is defined.
Solution:   Call hash_init() on the v: hash table.
Files:	    src/eval.c


*** ../vim-7.2.038/src/eval.c	Sun Nov  9 17:21:10 2008
--- src/eval.c	Wed Nov 12 12:15:14 2008
***************
*** 856,861 ****
--- 856,862 ----
  	}
      }
      hash_clear(&vimvarht);
+     hash_init(&vimvarht);  /* garbage_collect() will access it */
      hash_clear(&compat_hashtab);
  
      /* script-local variables */
*** ../vim-7.2.038/src/version.c	Wed Nov 12 14:52:11 2008
--- src/version.c	Wed Nov 12 15:09:39 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     39,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
242. You turn down a better-paying job because it doesn't come with
     a free e-mail account.

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


--- NEW FILE 7.2.040 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.040
Problem:    When using ":e ++ff=dos fname" and the file contains a NL without
	    a CR before it and 'ffs' contains "unix" then the fileformat
	    becomes unix.
Solution:   Ignore 'ffs' when using the ++ff argument. (Ben Schmidt)
	    Also remove unreachable code.
Files:	    src/fileio.c


*** ../vim-7.2.039/src/fileio.c	Tue Nov 11 21:55:29 2008
--- src/fileio.c	Wed Nov 12 13:19:42 2008
***************
*** 932,938 ****
--- 932,941 ----
      else
      {
  	if (eap != NULL && eap->force_ff != 0)
+ 	{
  	    fileformat = get_fileformat_force(curbuf, eap);
+ 	    try_unix = try_dos = try_mac = FALSE;
+ 	}
  	else if (curbuf->b_p_bin)
  	    fileformat = EOL_UNIX;		/* binary: use Unix format */
  	else if (*p_ffs == NUL)
***************
*** 2341,2351 ****
  		STRCAT(IObuff, _("[CR missing]"));
  		c = TRUE;
  	    }
- 	    if (ff_error == EOL_MAC)
- 	    {
- 		STRCAT(IObuff, _("[NL found]"));
- 		c = TRUE;
- 	    }
  	    if (split)
  	    {
  		STRCAT(IObuff, _("[long lines split]"));
--- 2344,2349 ----
*** ../vim-7.2.039/src/version.c	Wed Nov 12 15:28:37 2008
--- src/version.c	Wed Nov 12 16:03:44 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     40,
  /**/

-- 
If you're sending someone Styrofoam, what do you pack it in?

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


--- NEW FILE 7.2.041 ---
To: vim-dev at vim.org
Subject: Patch 7.2.041
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.2.041
Problem:    In diff mode, when using two tabs, each with two diffed buffers,
	    editing a buffer of the other tab messes up the diff.  (Matt
	    Mzyzik)
Solution:   Only copy options from a window where the buffer was edited that
	    doesn't have 'diff' set or is for the current tab page.
	    Also fix that window options for a buffer are stored with the
	    wrong window.
Files:	    src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
	    src/ex_getln.c, src/if_sniff.c, src/main.c, src/netbeans.c,
	    src/normal.c, src/popupmnu.c, src/proto/buffer.pro,
	    src/proto/ex_cmds.pro src/quickfix.c, src/window.c


*** ../vim-7.2.040/src/buffer.c	Wed Nov 12 12:51:38 2008
--- src/buffer.c	Wed Nov 12 17:45:01 2008
***************
*** 33,39 ****
  static char_u	*fname_match __ARGS((regprog_T *prog, char_u *name));
  #endif
  static void	buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
! static wininfo_T *find_wininfo __ARGS((buf_T *buf));
  #ifdef UNIX
  static buf_T	*buflist_findname_stat __ARGS((char_u *ffname, struct stat *st));
  static int	otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp));
--- 33,39 ----
  static char_u	*fname_match __ARGS((regprog_T *prog, char_u *name));
  #endif
  static void	buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
! static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
  #ifdef UNIX
  static buf_T	*buflist_findname_stat __ARGS((char_u *ffname, struct stat *st));
  static int	otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp));
***************
*** 1093,1099 ****
  #endif
  	    setpcmark();
  	    retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
! 						  forceit ? ECMD_FORCEIT : 0);
  
  	    /*
  	     * do_ecmd() may create a new buffer, then we have to delete
--- 1093,1099 ----
  #endif
  	    setpcmark();
  	    retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
! 					  forceit ? ECMD_FORCEIT : 0, curwin);
  
  	    /*
  	     * do_ecmd() may create a new buffer, then we have to delete
***************
*** 1316,1322 ****
      setpcmark();
      if (!cmdmod.keepalt)
  	curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
!     buflist_altfpos();			 /* remember curpos */
  
  #ifdef FEAT_VISUAL
      /* Don't restart Select mode after switching to another buffer. */
--- 1316,1322 ----
      setpcmark();
      if (!cmdmod.keepalt)
  	curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
!     buflist_altfpos(curwin);			 /* remember curpos */
  
  #ifdef FEAT_VISUAL
      /* Don't restart Select mode after switching to another buffer. */
***************
*** 2404,2425 ****
      return;
  }
  
  /*
   * Find info for the current window in buffer "buf".
   * If not found, return the info for the most recently used window.
   * Returns NULL when there isn't any info.
   */
      static wininfo_T *
! find_wininfo(buf)
      buf_T	*buf;
  {
      wininfo_T	*wip;
  
      for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
! 	if (wip->wi_win == curwin)
  	    break;
!     if (wip == NULL)	/* if no fpos for curwin, use the first in the list */
! 	wip = buf->b_wininfo;
      return wip;
  }
  
--- 2404,2473 ----
      return;
  }
  
+ #ifdef FEAT_DIFF
+ static int wininfo_other_tab_diff __ARGS((wininfo_T *wip));
+ 
+ /*
+  * Return TRUE when "wip" has 'diff' set and the diff is only for another tab
+  * page.  That's because a diff is local to a tab page.
+  */
+     static int
+ wininfo_other_tab_diff(wip)
+     wininfo_T	*wip;
+ {
+     win_T	*wp;
+ 
+     if (wip->wi_opt.wo_diff)
+     {
+ 	for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ 	    /* return FALSE when it's a window in the current tab page, thus
+ 	     * the buffer was in diff mode here */
+ 	    if (wip->wi_win == wp)
+ 		return FALSE;
+ 	return TRUE;
+     }
+     return FALSE;
+ }
+ #endif
+ 
  /*
   * Find info for the current window in buffer "buf".
   * If not found, return the info for the most recently used window.
+  * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in
+  * another tab page.
   * Returns NULL when there isn't any info.
   */
+ /*ARGSUSED*/
      static wininfo_T *
! find_wininfo(buf, skip_diff_buffer)
      buf_T	*buf;
+     int		skip_diff_buffer;
  {
      wininfo_T	*wip;
  
      for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
! 	if (wip->wi_win == curwin
! #ifdef FEAT_DIFF
! 		&& (!skip_diff_buffer || !wininfo_other_tab_diff(wip))
! #endif
! 	   )
  	    break;
! 
!     /* If no wininfo for curwin, use the first in the list (that doesn't have
!      * 'diff' set and is in another tab page). */
!     if (wip == NULL)
!     {
! #ifdef FEAT_DIFF
! 	if (skip_diff_buffer)
! 	{
! 	    for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
! 		if (!wininfo_other_tab_diff(wip))
! 		    break;
! 	}
! 	else
! #endif
! 	    wip = buf->b_wininfo;
!     }
      return wip;
  }
  
***************
*** 2440,2446 ****
      clearFolding(curwin);
  #endif
  
!     wip = find_wininfo(buf);
      if (wip != NULL && wip->wi_optset)
      {
  	copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
--- 2488,2494 ----
      clearFolding(curwin);
  #endif
  
!     wip = find_wininfo(buf, TRUE);
      if (wip != NULL && wip->wi_optset)
      {
  	copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
***************
*** 2472,2478 ****
      wininfo_T	*wip;
      static pos_T no_position = {1, 0};
  
!     wip = find_wininfo(buf);
      if (wip != NULL)
  	return &(wip->wi_fpos);
      else
--- 2520,2526 ----
      wininfo_T	*wip;
      static pos_T no_position = {1, 0};
  
!     wip = find_wininfo(buf, FALSE);
      if (wip != NULL)
  	return &(wip->wi_fpos);
      else
***************
*** 2793,2806 ****
  #endif
  
  /*
!  * Set alternate cursor position for current window.
   * Also save the local window option values.
   */
      void
! buflist_altfpos()
  {
!     buflist_setfpos(curbuf, curwin, curwin->w_cursor.lnum,
! 						  curwin->w_cursor.col, TRUE);
  }
  
  /*
--- 2841,2854 ----
  #endif
  
  /*
!  * Set alternate cursor position for the current buffer and window "win".
   * Also save the local window option values.
   */
      void
! buflist_altfpos(win)
!     win_T *win;
  {
!     buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE);
  }
  
  /*
***************
*** 4492,4498 ****
  		      ECMD_ONE,
  		      ((P_HID(curwin->w_buffer)
  			   || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
! 							       + ECMD_OLDBUF);
  #ifdef FEAT_AUTOCMD
  	    if (use_firstwin)
  		++autocmd_no_leave;
--- 4540,4546 ----
  		      ECMD_ONE,
  		      ((P_HID(curwin->w_buffer)
  			   || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
! 						       + ECMD_OLDBUF, curwin);
  #ifdef FEAT_AUTOCMD
  	    if (use_firstwin)
  		++autocmd_no_leave;
*** ../vim-7.2.040/src/ex_cmds.c	Sun Nov  9 13:43:25 2008
--- src/ex_cmds.c	Wed Nov 12 22:41:41 2008
***************
*** 3052,3058 ****
  	retval = 0;	/* it's in the same file */
      }
      else if (do_ecmd(fnum, ffname, sfname, NULL, lnum,
! 		(P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0)) == OK)
  	retval = -1;	/* opened another file */
      else
  	retval = 1;	/* error encountered */
--- 3052,3059 ----
  	retval = 0;	/* it's in the same file */
      }
      else if (do_ecmd(fnum, ffname, sfname, NULL, lnum,
! 		(P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0),
! 		curwin) == OK)
  	retval = -1;	/* opened another file */
      else
  	retval = 1;	/* error encountered */
***************
*** 3085,3101 ****
   *	 ECMD_OLDBUF: use existing buffer if it exists
   *	ECMD_FORCEIT: ! used for Ex command
   *	 ECMD_ADDBUF: don't edit, just add to buffer list
   *
   * return FAIL for failure, OK otherwise
   */
      int
! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags)
      int		fnum;
      char_u	*ffname;
      char_u	*sfname;
      exarg_T	*eap;			/* can be NULL! */
      linenr_T	newlnum;
      int		flags;
  {
      int		other_file;		/* TRUE if editing another file */
      int		oldbuf;			/* TRUE if using existing buffer */
--- 3086,3106 ----
   *	 ECMD_OLDBUF: use existing buffer if it exists
   *	ECMD_FORCEIT: ! used for Ex command
   *	 ECMD_ADDBUF: don't edit, just add to buffer list
+  *   oldwin: Should be "curwin" when editing a new buffer in the current
+  *           window, NULL when splitting the window first.  When not NULL info
+  *           of the previous buffer for "oldwin" is stored.
   *
   * return FAIL for failure, OK otherwise
   */
      int
! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
      int		fnum;
      char_u	*ffname;
      char_u	*sfname;
      exarg_T	*eap;			/* can be NULL! */
      linenr_T	newlnum;
      int		flags;
+     win_T	*oldwin;
  {
      int		other_file;		/* TRUE if editing another file */
      int		oldbuf;			/* TRUE if using existing buffer */
***************
*** 3267,3273 ****
  	{
  	    if (!cmdmod.keepalt)
  		curwin->w_alt_fnum = curbuf->b_fnum;
! 	    buflist_altfpos();
  	}
  
  	if (fnum)
--- 3272,3279 ----
  	{
  	    if (!cmdmod.keepalt)
  		curwin->w_alt_fnum = curbuf->b_fnum;
! 	    if (oldwin != NULL)
! 		buflist_altfpos(oldwin);
  	}
  
  	if (fnum)
***************
*** 3371,3377 ****
  
  		/* close the link to the current buffer */
  		u_sync(FALSE);
! 		close_buffer(curwin, curbuf,
  				      (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
  
  #ifdef FEAT_AUTOCMD
--- 3377,3383 ----
  
  		/* close the link to the current buffer */
  		u_sync(FALSE);
! 		close_buffer(oldwin, curbuf,
  				      (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
  
  #ifdef FEAT_AUTOCMD
***************
*** 5609,5615 ****
  	     */
  	    alt_fnum = curbuf->b_fnum;
  	    (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
! 						   ECMD_HIDE + ECMD_SET_HELP);
  	    if (!cmdmod.keepalt)
  		curwin->w_alt_fnum = alt_fnum;
  	    empty_fnum = curbuf->b_fnum;
--- 5615,5627 ----
  	     */
  	    alt_fnum = curbuf->b_fnum;
  	    (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
! 			  ECMD_HIDE + ECMD_SET_HELP,
! #ifdef FEAT_WINDOWS
! 			  NULL  /* buffer is still open, don't store info */
! #else
! 			  curwin
! #endif
! 		    );
  	    if (!cmdmod.keepalt)
  		curwin->w_alt_fnum = alt_fnum;
  	    empty_fnum = curbuf->b_fnum;
*** ../vim-7.2.040/src/ex_cmds2.c	Sun Sep  7 15:49:45 2008
--- src/ex_cmds2.c	Wed Nov 12 17:46:41 2008
***************
*** 2132,2139 ****
  	 * argument index. */
  	if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
  		      eap, ECMD_LAST,
! 		      (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) +
! 				   (eap->forceit ? ECMD_FORCEIT : 0)) == FAIL)
  	    curwin->w_arg_idx = old_arg_idx;
  	/* like Vi: set the mark where the cursor is in the file. */
  	else if (eap->cmdidx != CMD_argdo)
--- 2132,2139 ----
  	 * argument index. */
  	if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
  		      eap, ECMD_LAST,
! 		      (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0)
! 			 + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL)
  	    curwin->w_arg_idx = old_arg_idx;
  	/* like Vi: set the mark where the cursor is in the file. */
  	else if (eap->cmdidx != CMD_argdo)
*** ../vim-7.2.040/src/ex_docmd.c	Sun Nov  9 13:43:25 2008
--- src/ex_docmd.c	Wed Nov 12 18:04:22 2008
***************
*** 7488,7494 ****
  	/* ":new" or ":tabnew" without argument: edit an new empty buffer */
  	setpcmark();
  	(void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
! 			       ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0));
      }
      else if ((eap->cmdidx != CMD_split
  #ifdef FEAT_VERTSPLIT
--- 7488,7495 ----
  	/* ":new" or ":tabnew" without argument: edit an new empty buffer */
  	setpcmark();
  	(void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
! 		      ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
! 		      old_curwin == NULL ? curwin : NULL);
      }
      else if ((eap->cmdidx != CMD_split
  #ifdef FEAT_VERTSPLIT
***************
*** 7525,7531 ****
  #ifdef FEAT_LISTCMDS
  		    + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
  #endif
! 		    ) == FAIL)
  	{
  	    /* Editing the file failed.  If the window was split, close it. */
  #ifdef FEAT_WINDOWS
--- 7526,7532 ----
  #ifdef FEAT_LISTCMDS
  		    + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
  #endif
! 		    , old_curwin == NULL ? curwin : NULL) == FAIL)
  	{
  	    /* Editing the file failed.  If the window was split, close it. */
  #ifdef FEAT_WINDOWS
*** ../vim-7.2.040/src/ex_getln.c	Sun Sep 14 14:41:44 2008
--- src/ex_getln.c	Wed Nov 12 18:06:25 2008
***************
*** 6051,6057 ****
  	cmdwin_type = '-';
  
      /* Create the command-line buffer empty. */
!     (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
      (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
      set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
      set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
--- 6051,6057 ----
  	cmdwin_type = '-';
  
      /* Create the command-line buffer empty. */
!     (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
      (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
      set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
      set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
*** ../vim-7.2.040/src/if_sniff.c	Sat Aug  9 19:41:16 2008
--- src/if_sniff.c	Wed Nov 12 17:48:46 2008
***************
*** 1114,1120 ****
      char *fname;
  {
      ++no_wait_return;
!     do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF);
      curbuf->b_sniff = TRUE;
      --no_wait_return;					/* [ex_docmd.c] */
  }
--- 1114,1121 ----
      char *fname;
  {
      ++no_wait_return;
!     do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF,
! 	    curwin);
      curbuf->b_sniff = TRUE;
      --no_wait_return;					/* [ex_docmd.c] */
  }
*** ../vim-7.2.040/src/main.c	Sun Nov  9 13:43:25 2008
--- src/main.c	Wed Nov 12 17:49:06 2008
***************
*** 2588,2594 ****
  # endif
  	    (void)do_ecmd(0, arg_idx < GARGCOUNT
  			  ? alist_name(&GARGLIST[arg_idx]) : NULL,
! 			  NULL, NULL, ECMD_LASTL, ECMD_HIDE);
  # ifdef HAS_SWAP_EXISTS_ACTION
  	    if (swap_exists_did_quit)
  	    {
--- 2588,2594 ----
  # endif
  	    (void)do_ecmd(0, arg_idx < GARGCOUNT
  			  ? alist_name(&GARGLIST[arg_idx]) : NULL,
! 			  NULL, NULL, ECMD_LASTL, ECMD_HIDE, curwin);
  # ifdef HAS_SWAP_EXISTS_ACTION
  	    if (swap_exists_did_quit)
  	    {
*** ../vim-7.2.040/src/netbeans.c	Sun Jul 13 19:18:03 2008
--- src/netbeans.c	Wed Nov 12 17:49:40 2008
***************
*** 1795,1801 ****
  	    buf->displayname = NULL;
  
  	    netbeansReadFile = 0; /* don't try to open disk file */
! 	    do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF);
  	    netbeansReadFile = 1;
  	    buf->bufp = curbuf;
  	    maketitle();
--- 1795,1801 ----
  	    buf->displayname = NULL;
  
  	    netbeansReadFile = 0; /* don't try to open disk file */
! 	    do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin);
  	    netbeansReadFile = 1;
  	    buf->bufp = curbuf;
  	    maketitle();
***************
*** 1960,1966 ****
  
  	    netbeansReadFile = 0; /* don't try to open disk file */
  	    do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE,
! 						     ECMD_HIDE + ECMD_OLDBUF);
  	    netbeansReadFile = 1;
  	    buf->bufp = curbuf;
  	    maketitle();
--- 1960,1966 ----
  
  	    netbeansReadFile = 0; /* don't try to open disk file */
  	    do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE,
! 					     ECMD_HIDE + ECMD_OLDBUF, curwin);
  	    netbeansReadFile = 1;
  	    buf->bufp = curbuf;
  	    maketitle();
***************
*** 1979,1985 ****
  	    vim_free(buf->displayname);
  	    buf->displayname = nb_unquote(args, NULL);
  	    do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
! 						     ECMD_HIDE + ECMD_OLDBUF);
  	    buf->bufp = curbuf;
  	    buf->initDone = TRUE;
  	    doupdate = 1;
--- 1979,1985 ----
  	    vim_free(buf->displayname);
  	    buf->displayname = nb_unquote(args, NULL);
  	    do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
! 					     ECMD_HIDE + ECMD_OLDBUF, curwin);
  	    buf->bufp = curbuf;
  	    buf->initDone = TRUE;
  	    doupdate = 1;
*** ../vim-7.2.040/src/normal.c	Sat Nov  1 13:51:57 2008
--- src/normal.c	Wed Nov 12 17:49:50 2008
***************
*** 6050,6056 ****
  	    autowrite(curbuf, FALSE);
  	setpcmark();
  	(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
! 					       P_HID(curbuf) ? ECMD_HIDE : 0);
  	if (cap->nchar == 'F' && lnum >= 0)
  	{
  	    curwin->w_cursor.lnum = lnum;
--- 6050,6056 ----
  	    autowrite(curbuf, FALSE);
  	setpcmark();
  	(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
! 				       P_HID(curbuf) ? ECMD_HIDE : 0, curwin);
  	if (cap->nchar == 'F' && lnum >= 0)
  	{
  	    curwin->w_cursor.lnum = lnum;
*** ../vim-7.2.040/src/popupmnu.c	Sun Jul 13 19:33:51 2008
--- src/popupmnu.c	Wed Nov 12 18:08:07 2008
***************
*** 573,579 ****
  		{
  		    /* Don't want to sync undo in the current buffer. */
  		    ++no_u_sync;
! 		    res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0);
  		    --no_u_sync;
  		    if (res == OK)
  		    {
--- 573,579 ----
  		{
  		    /* Don't want to sync undo in the current buffer. */
  		    ++no_u_sync;
! 		    res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL);
  		    --no_u_sync;
  		    if (res == OK)
  		    {
*** ../vim-7.2.040/src/proto/buffer.pro	Sun May  6 13:57:53 2007
--- src/proto/buffer.pro	Wed Nov 12 17:43:39 2008
***************
*** 33,39 ****
  char_u *getaltfname __ARGS((int errmsg));
  int buflist_add __ARGS((char_u *fname, int flags));
  void buflist_slash_adjust __ARGS((void));
! void buflist_altfpos __ARGS((void));
  int otherfile __ARGS((char_u *ffname));
  void buf_setino __ARGS((buf_T *buf));
  void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
--- 33,39 ----
  char_u *getaltfname __ARGS((int errmsg));
  int buflist_add __ARGS((char_u *fname, int flags));
  void buflist_slash_adjust __ARGS((void));
! void buflist_altfpos __ARGS((win_T *win));
  int otherfile __ARGS((char_u *ffname));
  void buf_setino __ARGS((buf_T *buf));
  void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
*** ../vim-7.2.040/src/proto/ex_cmds.pro	Sun Nov  9 13:43:25 2008
--- src/proto/ex_cmds.pro	Wed Nov 12 17:44:27 2008
***************
*** 27,33 ****
  void do_wqall __ARGS((exarg_T *eap));
  int not_writing __ARGS((void));
  int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags));
  void ex_append __ARGS((exarg_T *eap));
  void ex_change __ARGS((exarg_T *eap));
  void ex_z __ARGS((exarg_T *eap));
--- 27,33 ----
  void do_wqall __ARGS((exarg_T *eap));
  int not_writing __ARGS((void));
  int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags, win_T *oldwin));
  void ex_append __ARGS((exarg_T *eap));
  void ex_change __ARGS((exarg_T *eap));
  void ex_z __ARGS((exarg_T *eap));
*** ../vim-7.2.040/src/quickfix.c	Thu Jul 24 18:44:59 2008
--- src/quickfix.c	Wed Nov 12 18:12:00 2008
***************
*** 1420,1425 ****
--- 1420,1426 ----
      win_T		*win;
      win_T		*altwin;
  #endif
+     win_T		*oldwin = curwin;
      int			print_message = TRUE;
      int			len;
  #ifdef FEAT_FOLDING
***************
*** 1744,1750 ****
  	    }
  	    else
  		ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
! 						   ECMD_HIDE + ECMD_SET_HELP);
  	}
  	else
  	    ok = buflist_getfile(qf_ptr->qf_fnum,
--- 1745,1752 ----
  	    }
  	    else
  		ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
! 					   ECMD_HIDE + ECMD_SET_HELP,
! 					   oldwin == curwin ? curwin : NULL);
  	}
  	else
  	    ok = buflist_getfile(qf_ptr->qf_fnum,
***************
*** 2267,2272 ****
--- 2269,2275 ----
      win_T	*win;
      tabpage_T	*prevtab = curtab;
      buf_T	*qf_buf;
+     win_T	*oldwin = curwin;
  
      if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
      {
***************
*** 2326,2339 ****
  	    win->w_llist->qf_refcount++;
  	}
  
  	if (qf_buf != NULL)
  	    /* Use the existing quickfix buffer */
  	    (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
! 						     ECMD_HIDE + ECMD_OLDBUF);
  	else
  	{
  	    /* Create a new quickfix buffer */
! 	    (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
  	    /* switch off 'swapfile' */
  	    set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
  	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
--- 2329,2344 ----
  	    win->w_llist->qf_refcount++;
  	}
  
+ 	if (oldwin != curwin)
+ 	    oldwin = NULL;  /* don't store info when in another window */
  	if (qf_buf != NULL)
  	    /* Use the existing quickfix buffer */
  	    (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
! 					     ECMD_HIDE + ECMD_OLDBUF, oldwin);
  	else
  	{
  	    /* Create a new quickfix buffer */
! 	    (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
  	    /* switch off 'swapfile' */
  	    set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
  	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
*** ../vim-7.2.040/src/window.c	Wed Aug  6 18:32:11 2008
--- src/window.c	Wed Nov 12 18:12:37 2008
***************
*** 531,537 ****
  # ifdef FEAT_SCROLLBIND
  			curwin->w_p_scb = FALSE;
  # endif
! 			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE);
  			if (nchar == 'F' && lnum >= 0)
  			{
  			    curwin->w_cursor.lnum = lnum;
--- 531,538 ----
  # ifdef FEAT_SCROLLBIND
  			curwin->w_p_scb = FALSE;
  # endif
! 			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
! 							   ECMD_HIDE, NULL);
  			if (nchar == 'F' && lnum >= 0)
  			{
  			    curwin->w_cursor.lnum = lnum;
*** ../vim-7.2.040/src/version.c	Wed Nov 12 16:04:43 2008
--- src/version.c	Wed Nov 12 16:54:35 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     41,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
260. Co-workers have to E-mail you about the fire alarm to get
     you out of the building.

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


--- NEW FILE 7.2.042 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.042
Problem:    When using winrestview() in a BufWinEnter autocommand the window
	    is scrolled anyway. (Matt Zyzik)
Solution:   Don't recompute topline when above 'scrolloff' from the bottom.
	    Don't always put the cursor halfway when entering a buffer.  Add
	    "w_topline_was_set".
Files:	    src/buffer.c, src/move.c, src/structs.h


*** ../vim-7.2.041/src/buffer.c	Sat Nov 15 14:10:23 2008
--- src/buffer.c	Sat Nov 15 14:58:52 2008
***************
*** 1401,1406 ****
--- 1401,1409 ----
      curwin->w_cursor.coladd = 0;
  #endif
      curwin->w_set_curswant = TRUE;
+ #ifdef FEAT_AUTOCMD
+     curwin->w_topline_was_set = FALSE;
+ #endif
  
      /* Make sure the buffer is loaded. */
      if (curbuf->b_ml.ml_mfp == NULL)	/* need to load the file */
***************
*** 1440,1446 ****
      maketitle();
  #endif
  #ifdef FEAT_AUTOCMD
!     if (curwin->w_topline == 1)		/* when autocmds didn't change it */
  #endif
  	scroll_cursor_halfway(FALSE);	/* redisplay at correct position */
  
--- 1443,1450 ----
      maketitle();
  #endif
  #ifdef FEAT_AUTOCMD
! 	/* when autocmds didn't change it */
!     if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
  #endif
  	scroll_cursor_halfway(FALSE);	/* redisplay at correct position */
  
*** ../vim-7.2.041/src/move.c	Sun Jul 13 19:25:23 2008
--- src/move.c	Sat Nov 15 14:56:47 2008
***************
*** 280,297 ****
  
  	if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
  	{
! 	    if (curwin->w_cursor.lnum < curwin->w_botline
! 		    && ((long)curwin->w_cursor.lnum
  					     >= (long)curwin->w_botline - p_so
  #ifdef FEAT_FOLDING
  			|| hasAnyFolding(curwin)
  #endif
  			))
! 	    {
  		lineoff_T	loff;
  
! 		/* Cursor is above botline, check if there are 'scrolloff'
! 		 * window lines below the cursor.  If not, need to scroll. */
  		n = curwin->w_empty_rows;
  		loff.lnum = curwin->w_cursor.lnum;
  #ifdef FEAT_FOLDING
--- 280,299 ----
  
  	if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
  	{
! 	    if (curwin->w_cursor.lnum < curwin->w_botline)
! 	    {
! 	      if (((long)curwin->w_cursor.lnum
  					     >= (long)curwin->w_botline - p_so
  #ifdef FEAT_FOLDING
  			|| hasAnyFolding(curwin)
  #endif
  			))
! 	      {
  		lineoff_T	loff;
  
! 		/* Cursor is (a few lines) above botline, check if there are
! 		 * 'scrolloff' window lines below the cursor.  If not, need to
! 		 * scroll. */
  		n = curwin->w_empty_rows;
  		loff.lnum = curwin->w_cursor.lnum;
  #ifdef FEAT_FOLDING
***************
*** 317,322 ****
--- 319,328 ----
  		if (n >= p_so)
  		    /* sufficient context, no need to scroll */
  		    check_botline = FALSE;
+ 	      }
+ 	      else
+ 		  /* sufficient context, no need to scroll */
+ 		  check_botline = FALSE;
  	    }
  	    if (check_botline)
  	    {
***************
*** 509,514 ****
--- 515,523 ----
      /* Approximate the value of w_botline */
      wp->w_botline += lnum - wp->w_topline;
      wp->w_topline = lnum;
+ #ifdef FEAT_AUTOCMD
+     wp->w_topline_was_set = TRUE;
+ #endif
  #ifdef FEAT_DIFF
      wp->w_topfill = 0;
  #endif
*** ../vim-7.2.041/src/structs.h	Sun Nov  9 13:43:25 2008
--- src/structs.h	Sat Nov 15 14:56:42 2008
***************
*** 1784,1793 ****
  #endif
  
      /*
!      * The next three specify the offsets for displaying the buffer:
       */
      linenr_T	w_topline;	    /* buffer line number of the line at the
  				       top of the window */
  #ifdef FEAT_DIFF
      int		w_topfill;	    /* number of filler lines above w_topline */
      int		w_old_topfill;	    /* w_topfill at last redraw */
--- 1784,1798 ----
  #endif
  
      /*
!      * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
!      * displaying the buffer.
       */
      linenr_T	w_topline;	    /* buffer line number of the line at the
  				       top of the window */
+ #ifdef FEAT_AUTOCMD
+     char	w_topline_was_set;  /* flag set to TRUE when topline is set,
+ 				       e.g. by winrestview() */
+ #endif
  #ifdef FEAT_DIFF
      int		w_topfill;	    /* number of filler lines above w_topline */
      int		w_old_topfill;	    /* w_topfill at last redraw */
*** ../vim-7.2.041/src/version.c	Sat Nov 15 14:10:23 2008
--- src/version.c	Sat Nov 15 16:01:29 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     42,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
261. You find diskettes in your pockets when doing laundry.

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


--- NEW FILE 7.2.043 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.043
Problem:    VMS: Too many characters are escaped in filename and shell
	    commands.
Solution:   Escape fewer characters. (Zoltan Arpadffy)
Files:	    src/vim.h


*** ../vim-7.2.042/src/vim.h	Sun Nov  9 13:43:25 2008
--- src/vim.h	Fri Nov 14 21:41:17 2008
***************
*** 341,348 ****
  #ifdef BACKSLASH_IN_FILENAME
  # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
  #else
! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
  #endif
  
  #define NUMBUFLEN 30	    /* length of a buffer to store a number in ASCII */
--- 341,354 ----
  #ifdef BACKSLASH_IN_FILENAME
  # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
  #else
! # ifdef VMS
!     /* VMS allows a lot of characters in the file name */
! #  define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!")
! #  define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&")
! # else
! #  define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
! #  define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
! # endif
  #endif
  
  #define NUMBUFLEN 30	    /* length of a buffer to store a number in ASCII */
***************
*** 370,376 ****
     * Define __w64 as an empty token for everything but MSVC 7.x or later.
     */
  # if !defined(_MSC_VER)	|| (_MSC_VER < 1300)
! #  define __w64 
  # endif
  typedef unsigned long __w64	long_u;
  typedef		 long __w64     long_i;
--- 376,382 ----
     * Define __w64 as an empty token for everything but MSVC 7.x or later.
     */
  # if !defined(_MSC_VER)	|| (_MSC_VER < 1300)
! #  define __w64
  # endif
  typedef unsigned long __w64	long_u;
  typedef		 long __w64     long_i;
*** ../vim-7.2.042/src/version.c	Sat Nov 15 16:05:30 2008
--- src/version.c	Thu Nov 20 10:23:51 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     43,
  /**/

-- 
In his lifetime van Gogh painted 486 oil paintings. Oddly enough, 8975
of them are to be found in the United States.

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


--- NEW FILE 7.2.044 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.044
Problem:    Crash because of STRCPY() being over protective of the destination
	    size. (Dominique Pelle)
Solution:   Add -D_FORTIFY_SOURCE=1 to CFLAGS.  Use an intermediate variable
	    for the pointer to avoid a warning.
Files:	    src/auto/configure, src/configure.in, src/eval.c


*** ../vim-7.2.043/src/auto/configure	Thu Jul 24 17:20:50 2008
--- src/auto/configure	Sun Nov 16 17:08:44 2008
***************
*** 16819,16839 ****
    LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
  fi
  
- { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
- $as_echo_n "checking for GCC 3 or later... " >&6; }
  DEPEND_CFLAGS_FILTER=
  if test "$GCC" = yes; then
    gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
    if test "$gccmajor" -gt "2"; then
      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
!   fi
! fi
! if test "$DEPEND_CFLAGS_FILTER" = ""; then
!   { $as_echo "$as_me:$LINENO: result: no" >&5
  $as_echo "no" >&6; }
! else
!   { $as_echo "$as_me:$LINENO: result: yes" >&5
  $as_echo "yes" >&6; }
  fi
  
  
--- 16819,16847 ----
    LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
  fi
  
  DEPEND_CFLAGS_FILTER=
  if test "$GCC" = yes; then
+   { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
+ $as_echo_n "checking for GCC 3 or later... " >&6; }
    gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
    if test "$gccmajor" -gt "2"; then
      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
!     { $as_echo "$as_me:$LINENO: result: yes" >&5
! $as_echo "yes" >&6; }
!   else
!     { $as_echo "$as_me:$LINENO: result: no" >&5
  $as_echo "no" >&6; }
!   fi
!       { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5
! $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
!   if test "$gccmajor" -gt "3"; then
!     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1"
!     { $as_echo "$as_me:$LINENO: result: yes" >&5
  $as_echo "yes" >&6; }
+   else
+     { $as_echo "$as_me:$LINENO: result: no" >&5
+ $as_echo "no" >&6; }
+   fi
  fi
  
  
*** ../vim-7.2.043/src/configure.in	Thu Jul 24 17:20:31 2008
--- src/configure.in	Sun Nov 16 17:08:40 2008
***************
*** 3152,3169 ****
  dnl But only when making dependencies, cproto and lint don't take "-isystem".
  dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
  dnl the number before the version number.
- AC_MSG_CHECKING(for GCC 3 or later)
  DEPEND_CFLAGS_FILTER=
  if test "$GCC" = yes; then
    gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
    if test "$gccmajor" -gt "2"; then
      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
    fi
- fi
- if test "$DEPEND_CFLAGS_FILTER" = ""; then
-   AC_MSG_RESULT(no)
- else
-   AC_MSG_RESULT(yes)
  fi
  AC_SUBST(DEPEND_CFLAGS_FILTER)
  
--- 3152,3176 ----
  dnl But only when making dependencies, cproto and lint don't take "-isystem".
  dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
  dnl the number before the version number.
  DEPEND_CFLAGS_FILTER=
  if test "$GCC" = yes; then
+   AC_MSG_CHECKING(for GCC 3 or later)
    gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
    if test "$gccmajor" -gt "2"; then
      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
+     AC_MSG_RESULT(yes)
+   else
+     AC_MSG_RESULT(no)
+   fi
+   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
+   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
+   AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+   if test "$gccmajor" -gt "3"; then
+     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1"
+     AC_MSG_RESULT(yes)
+   else
+     AC_MSG_RESULT(no)
    fi
  fi
  AC_SUBST(DEPEND_CFLAGS_FILTER)
  
*** ../vim-7.2.043/src/eval.c	Wed Nov 12 15:28:37 2008
--- src/eval.c	Sun Nov 16 20:46:28 2008
***************
*** 21150,21157 ****
      init_var_dict(&fc.l_avars, &fc.l_avars_var);
      add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
  				(varnumber_T)(argcount - fp->uf_args.ga_len));
      v = &fc.fixvar[fixvar_idx++].var;
!     STRCPY(v->di_key, "000");
      v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
      hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
      v->di_tv.v_type = VAR_LIST;
--- 21150,21160 ----
      init_var_dict(&fc.l_avars, &fc.l_avars_var);
      add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
  				(varnumber_T)(argcount - fp->uf_args.ga_len));
+     /* Use "name" to avoid a warning from some compiler that checks the
+      * destination size. */
      v = &fc.fixvar[fixvar_idx++].var;
!     name = v->di_key;
!     STRCPY(name, "000");
      v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
      hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
      v->di_tv.v_type = VAR_LIST;
*** ../vim-7.2.043/src/version.c	Thu Nov 20 10:26:19 2008
--- src/version.c	Thu Nov 20 10:34:31 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     44,
  /**/

-- 
Error:015 - Unable to exit Windows.  Try the door.

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


--- NEW FILE 7.2.045 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.045
Problem:    The Python interface has an empty entry in sys.path.
Solution:   Filter out the empty entry. (idea from James Vega)
Files:	    src/if_python.c


*** ../vim-7.2.044/src/if_python.c	Thu Jul 24 16:24:48 2008
--- src/if_python.c	Thu Nov 20 11:03:53 2008
***************
*** 531,536 ****
--- 531,542 ----
  	if (PythonMod_Init())
  	    goto fail;
  
+ 	/* Remove the element from sys.path that was added because of our
+ 	 * argv[0] value in PythonMod_Init().  Previously we used an empty
+ 	 * string, but dependinding on the OS we then get an empty entry or
+ 	 * the current directory in sys.path. */
+ 	PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
+ 
  	/* the first python thread is vim's, release the lock */
  	Python_SaveThread();
  
***************
*** 2345,2351 ****
  {
      PyObject *mod;
      PyObject *dict;
!     static char *(argv[2]) = {"", NULL};
  
      /* Fixups... */
      BufferType.ob_type = &PyType_Type;
--- 2351,2358 ----
  {
      PyObject *mod;
      PyObject *dict;
!     /* The special value is removed from sys.path in Python_Init(). */
!     static char *(argv[2]) = {"/must>not&exist/foo", NULL};
  
      /* Fixups... */
      BufferType.ob_type = &PyType_Type;
*** ../vim-7.2.044/src/version.c	Thu Nov 20 10:36:04 2008
--- src/version.c	Thu Nov 20 10:58:11 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     45,
  /**/

-- 
press CTRL-ALT-DEL for more information

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


--- NEW FILE 7.2.046 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.046
Problem:    Wrong check for filling buffer with encoding. (Danek Duvall)
Solution:   Remove pointers. (Dominique Pelle)
Files:	    src/mbyte.c


*** ../vim-7.2.045/src/mbyte.c	Wed Nov 12 13:07:48 2008
--- src/mbyte.c	Wed Nov 19 21:44:50 2008
***************
*** 3131,3137 ****
  	else
  	    s = p + 1;
      }
!     for (i = 0; s[i] != NUL && s + i < buf + sizeof(buf) - 1; ++i)
      {
  	if (s[i] == '_' || s[i] == '-')
  	    buf[i] = '-';
--- 3131,3137 ----
  	else
  	    s = p + 1;
      }
!     for (i = 0; s[i] != NUL && i < sizeof(buf) - 1; ++i)
      {
  	if (s[i] == '_' || s[i] == '-')
  	    buf[i] = '-';
*** ../vim-7.2.045/src/version.c	Thu Nov 20 11:04:01 2008
--- src/version.c	Thu Nov 20 11:54:23 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     46,
  /**/

-- 
       He was not in the least bit scared to be mashed into a pulp
       Or to have his eyes gouged out and his elbows broken;
       To have his kneecaps split and his body burned away
       And his limbs all hacked and mangled, brave Sir Robin.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

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


--- NEW FILE 7.2.047 ---
To: vim-dev at vim.org
Subject: Patch 7.2.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.2.047
Problem:    Starting Vim with the -nb argument while it's not supported causes
	    the other side to hang.
Solution:   When -nb is used while it's not supported exit Vim. (Xavier de
	    Gaye)
Files:	    src/main.c, src/vim.h


*** ../vim-7.2.046/src/main.c	Sat Nov 15 14:10:23 2008
--- src/main.c	Thu Nov 20 14:09:27 2008
***************
*** 1510,1516 ****
  early_arg_scan(parmp)
      mparm_T	*parmp;
  {
! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER)
      int		argc = parmp->argc;
      char	**argv = parmp->argv;
      int		i;
--- 1510,1517 ----
  early_arg_scan(parmp)
      mparm_T	*parmp;
  {
! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \
! 	|| !defined(FEAT_NETBEANS_INTG)
      int		argc = parmp->argc;
      char	**argv = parmp->argv;
      int		i;
***************
*** 1582,1587 ****
--- 1583,1596 ----
  	else if (STRICMP(argv[i], "--echo-wid") == 0)
  	    echo_wid_arg = TRUE;
  # endif
+ # ifndef FEAT_NETBEANS_INTG
+ 	else if (strncmp(argv[i], "-nb", (size_t)3) == 0)
+         {
+             mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n"));
+             mch_exit(2);
+         }
+ # endif
+ 
      }
  #endif
  }
*** ../vim-7.2.046/src/vim.h	Thu Nov 20 10:26:19 2008
--- src/vim.h	Thu Nov 20 12:06:14 2008
***************
*** 1986,1991 ****
--- 1986,1994 ----
  # endif
  #endif
  
+ #ifndef FEAT_NETBEANS_INTG
+ # undef NBDEBUG
+ #endif
  #ifdef NBDEBUG /* Netbeans debugging. */
  # include "nbdebug.h"
  #else
*** ../vim-7.2.046/src/version.c	Thu Nov 20 11:55:53 2008
--- src/version.c	Thu Nov 20 14:07:57 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     47,
  /**/

-- 
FIRST HEAD:  Oh! quick! get the sword out I want to cut his head off.
THIRD HEAD:  Oh, cut your own head off.
SECOND HEAD: Yes - do us all a favour.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

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


--- NEW FILE 7.2.048 ---
To: vim-dev at vim.org
Subject: Patch 7.2.048
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.2.048
Problem:    v:prevcount is changed too often.  Counts are not multiplied when
	    setting v:count.
Solution:   Set v:prevcount properly.  Multiply counts. (idea by Ben Schmidt)
Files:	    src/eval.c, src/normal.c, src/proto/eval.pro


*** ../vim-7.2.047/src/eval.c	Thu Nov 20 10:36:04 2008
--- src/eval.c	Thu Nov 20 15:53:47 2008
***************
*** 18146,18159 ****
  }
  
  /*
!  * Set v:count, v:count1 and v:prevcount.
   */
      void
! set_vcount(count, count1)
      long	count;
      long	count1;
  {
!     vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
      vimvars[VV_COUNT].vv_nr = count;
      vimvars[VV_COUNT1].vv_nr = count1;
  }
--- 18146,18162 ----
  }
  
  /*
!  * Set v:count to "count" and v:count1 to "count1".
!  * When "set_prevcount" is TRUE first set v:prevcount from v:count.
   */
      void
! set_vcount(count, count1, set_prevcount)
      long	count;
      long	count1;
+     int		set_prevcount;
  {
!     if (set_prevcount)
! 	vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
      vimvars[VV_COUNT].vv_nr = count;
      vimvars[VV_COUNT1].vv_nr = count1;
  }
*** ../vim-7.2.047/src/normal.c	Sat Nov 15 14:10:23 2008
--- src/normal.c	Thu Nov 20 16:04:44 2008
***************
*** 580,585 ****
--- 580,588 ----
      static int	old_mapped_len = 0;
  #endif
      int		idx;
+ #ifdef FEAT_EVAL
+     int		set_prevcount = FALSE;
+ #endif
  
      vim_memset(&ca, 0, sizeof(ca));	/* also resets ca.retval */
      ca.oap = oap;
***************
*** 615,621 ****
--- 618,629 ----
      /* When not finishing an operator and no register name typed, reset the
       * count. */
      if (!finish_op && !oap->regname)
+     {
  	ca.opcount = 0;
+ #ifdef FEAT_EVAL
+ 	set_prevcount = TRUE;
+ #endif
+     }
  
  #ifdef FEAT_AUTOCMD
      /* Restore counts from before receiving K_CURSORHOLD.  This means after
***************
*** 719,725 ****
  	     * command, so that v:count can be used in an expression mapping
  	     * right after the count. */
  	    if (toplevel && stuff_empty())
! 		set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0);
  #endif
  	    if (ctrl_w)
  	    {
--- 727,741 ----
  	     * command, so that v:count can be used in an expression mapping
  	     * right after the count. */
  	    if (toplevel && stuff_empty())
! 	    {
! 		long count = ca.count0;
! 
! 		/* multiply with ca.opcount the same way as below */
! 		if (ca.opcount != 0)
! 		    count = ca.opcount * (count == 0 ? 1 : count);
! 		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
! 		set_prevcount = FALSE;  /* only set v:prevcount once */
! 	    }
  #endif
  	    if (ctrl_w)
  	    {
***************
*** 806,812 ****
       * Only set v:count when called from main() and not a stuffed command.
       */
      if (toplevel && stuff_empty())
! 	set_vcount(ca.count0, ca.count1);
  #endif
  
      /*
--- 822,828 ----
       * Only set v:count when called from main() and not a stuffed command.
       */
      if (toplevel && stuff_empty())
! 	set_vcount(ca.count0, ca.count1, set_prevcount);
  #endif
  
      /*
*** ../vim-7.2.047/src/proto/eval.pro	Sun Nov  9 13:43:25 2008
--- src/proto/eval.pro	Thu Nov 20 15:53:54 2008
***************
*** 61,67 ****
  long get_vim_var_nr __ARGS((int idx));
  char_u *get_vim_var_str __ARGS((int idx));
  list_T *get_vim_var_list __ARGS((int idx));
! void set_vcount __ARGS((long count, long count1));
  void set_vim_var_string __ARGS((int idx, char_u *val, int len));
  void set_vim_var_list __ARGS((int idx, list_T *val));
  void set_reg_var __ARGS((int c));
--- 61,67 ----
  long get_vim_var_nr __ARGS((int idx));
  char_u *get_vim_var_str __ARGS((int idx));
  list_T *get_vim_var_list __ARGS((int idx));
! void set_vcount __ARGS((long count, long count1, int set_prevcount));
  void set_vim_var_string __ARGS((int idx, char_u *val, int len));
  void set_vim_var_list __ARGS((int idx, list_T *val));
  void set_reg_var __ARGS((int c));
*** ../vim-7.2.047/src/version.c	Thu Nov 20 14:11:47 2008
--- src/version.c	Thu Nov 20 16:08:19 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     48,
  /**/

-- 
Microsoft's definition of a boolean: TRUE, FALSE, MAYBE
"Embrace and extend"...?

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


--- NEW FILE 7.2.049 ---
To: vim-dev at vim.org
Subject: Patch 7.2.049 (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.2.049 (extra)
Problem:    Win32: the clipboard doesn't support UTF-16.
Solution:   Change UCS-2 support to UTF-16 support. (Jia Yanwei)
Files:	    src/gui_w32.c, src/gui_w48.c, src/mbyte.c, src/misc1.c,
	    src/os_mswin.c, src/os_win32.c, src/proto/os_mswin.pro


*** ../vim-7.2.048/src/gui_w32.c	Tue Jun 24 23:46:14 2008
--- src/gui_w32.c	Thu Nov 20 16:47:10 2008
***************
*** 992,998 ****
  			    SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
  								      0, 500);
  
! 			    tt_text = enc_to_ucs2(str, NULL);
  			    lpdi->lpszText = tt_text;
  			    /* can't show tooltip if failed */
  			}
--- 992,998 ----
  			    SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
  								      0, 500);
  
! 			    tt_text = enc_to_utf16(str, NULL);
  			    lpdi->lpszText = tt_text;
  			    /* can't show tooltip if failed */
  			}
***************
*** 1935,1941 ****
      if (buf == NULL)
  	return NULL;
  
!     convbuf = ucs2_to_enc(buf, lenp);
      pImmReleaseContext(hwnd, hIMC);
      vim_free(buf);
      return convbuf;
--- 1935,1941 ----
      if (buf == NULL)
  	return NULL;
  
!     convbuf = utf16_to_enc(buf, lenp);
      pImmReleaseContext(hwnd, hIMC);
      vim_free(buf);
      return convbuf;
***************
*** 2566,2572 ****
  	    {
  		/* 'encoding' differs from active codepage: convert menu name
  		 * and use wide function */
! 		wn = enc_to_ucs2(menu->name, NULL);
  		if (wn != NULL)
  		{
  		    MENUITEMINFOW	infow;
--- 2566,2572 ----
  	    {
  		/* 'encoding' differs from active codepage: convert menu name
  		 * and use wide function */
! 		wn = enc_to_utf16(menu->name, NULL);
  		if (wn != NULL)
  		{
  		    MENUITEMINFOW	infow;
***************
*** 2728,2734 ****
  	{
  	    /* 'encoding' differs from active codepage: convert menu item name
  	     * and use wide function */
! 	    wn = enc_to_ucs2(menu->name, NULL);
  	    if (wn != NULL)
  	    {
  		n = InsertMenuW(parent->submenu_id, (UINT)idx,
--- 2728,2734 ----
  	{
  	    /* 'encoding' differs from active codepage: convert menu item name
  	     * and use wide function */
! 	    wn = enc_to_utf16(menu->name, NULL);
  	    if (wn != NULL)
  	    {
  		n = InsertMenuW(parent->submenu_id, (UINT)idx,
***************
*** 3570,3576 ****
      if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
      {
  	/* Not a codepage, use our own conversion function. */
! 	wn = enc_to_ucs2(lpAnsiIn, NULL);
  	if (wn != NULL)
  	{
  	    wcscpy(lpWCStr, wn);
--- 3570,3576 ----
      if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
      {
  	/* Not a codepage, use our own conversion function. */
! 	wn = enc_to_utf16(lpAnsiIn, NULL);
  	if (wn != NULL)
  	{
  	    wcscpy(lpWCStr, wn);
*** ../vim-7.2.048/src/gui_w48.c	Wed Nov 12 13:35:31 2008
--- src/gui_w48.c	Thu Nov 20 16:42:32 2008
***************
*** 547,553 ****
  	else
  	{
  	    len = 1;
! 	    ws = ucs2_to_enc(wstring, &len);
  	    if (ws == NULL)
  		len = 0;
  	    else
--- 547,553 ----
  	else
  	{
  	    len = 1;
! 	    ws = utf16_to_enc(wstring, &len);
  	    if (ws == NULL)
  		len = 0;
  	    else
***************
*** 2128,2134 ****
      {
  	/* 'encoding' differs from active codepage: convert text and use wide
  	 * function */
! 	wstr = enc_to_ucs2(str, &wlen);
  	if (wstr != NULL)
  	{
  	    n = GetTextExtentPointW(hdc, wstr, wlen, &size);
--- 2128,2134 ----
      {
  	/* 'encoding' differs from active codepage: convert text and use wide
  	 * function */
! 	wstr = enc_to_utf16(str, &wlen);
  	if (wstr != NULL)
  	{
  	    n = GetTextExtentPointW(hdc, wstr, wlen, &size);
***************
*** 2252,2258 ****
      {
  	/* 'encoding' differs from active codepage: convert menu name
  	 * and use wide function */
! 	wn = enc_to_ucs2(item_text, NULL);
  	if (wn != NULL)
  	{
  	    MENUITEMINFOW	infow;
--- 2252,2258 ----
      {
  	/* 'encoding' differs from active codepage: convert menu name
  	 * and use wide function */
! 	wn = enc_to_utf16(item_text, NULL);
  	if (wn != NULL)
  	{
  	    MENUITEMINFOW	infow;
***************
*** 2422,2428 ****
  	if (use_unicode)
  	{
  	    /* Need to go through Unicode. */
! 	    wstr = enc_to_ucs2(NameBuff, NULL);
  	    if (wstr != NULL)
  	    {
  		TCITEMW		tiw;
--- 2422,2428 ----
  	if (use_unicode)
  	{
  	    /* Need to go through Unicode. */
! 	    wstr = enc_to_utf16(NameBuff, NULL);
  	    if (wstr != NULL)
  	    {
  		TCITEMW		tiw;
***************
*** 2521,2528 ****
  	WCHAR	*wbuf;
  	int	n;
  
! 	/* Convert the title from 'encoding' to ucs2. */
! 	wbuf = (WCHAR *)enc_to_ucs2((char_u *)title, NULL);
  	if (wbuf != NULL)
  	{
  	    n = SetWindowTextW(hwnd, wbuf);
--- 2521,2528 ----
  	WCHAR	*wbuf;
  	int	n;
  
! 	/* Convert the title from 'encoding' to UTF-16. */
! 	wbuf = (WCHAR *)enc_to_utf16((char_u *)title, NULL);
  	if (wbuf != NULL)
  	{
  	    n = SetWindowTextW(hwnd, wbuf);
***************
*** 3222,3228 ****
  	char_u *initdir,
  	char_u *filter)
  {
!     /* We always use the wide function.  This means enc_to_ucs2() must work,
       * otherwise it fails miserably! */
      OPENFILENAMEW	fileStruct;
      WCHAR		fileBuf[MAXPATHL];
--- 3222,3228 ----
  	char_u *initdir,
  	char_u *filter)
  {
!     /* We always use the wide function.  This means enc_to_utf16() must work,
       * otherwise it fails miserably! */
      OPENFILENAMEW	fileStruct;
      WCHAR		fileBuf[MAXPATHL];
***************
*** 3238,3244 ****
  	fileBuf[0] = NUL;
      else
      {
! 	wp = enc_to_ucs2(dflt, NULL);
  	if (wp == NULL)
  	    fileBuf[0] = NUL;
  	else
--- 3238,3244 ----
  	fileBuf[0] = NUL;
      else
      {
! 	wp = enc_to_utf16(dflt, NULL);
  	if (wp == NULL)
  	    fileBuf[0] = NUL;
  	else
***************
*** 3263,3273 ****
  #endif
  
      if (title != NULL)
! 	titlep = enc_to_ucs2(title, NULL);
      fileStruct.lpstrTitle = titlep;
  
      if (ext != NULL)
! 	extp = enc_to_ucs2(ext, NULL);
      fileStruct.lpstrDefExt = extp;
  
      fileStruct.lpstrFile = fileBuf;
--- 3263,3273 ----
  #endif
  
      if (title != NULL)
! 	titlep = enc_to_utf16(title, NULL);
      fileStruct.lpstrTitle = titlep;
  
      if (ext != NULL)
! 	extp = enc_to_utf16(ext, NULL);
      fileStruct.lpstrDefExt = extp;
  
      fileStruct.lpstrFile = fileBuf;
***************
*** 3278,3284 ****
      if (initdir != NULL && *initdir != NUL)
      {
  	/* Must have backslashes here, no matter what 'shellslash' says */
! 	initdirp = enc_to_ucs2(initdir, NULL);
  	if (initdirp != NULL)
  	{
  	    for (wp = initdirp; *wp != NUL; ++wp)
--- 3278,3284 ----
      if (initdir != NULL && *initdir != NUL)
      {
  	/* Must have backslashes here, no matter what 'shellslash' says */
! 	initdirp = enc_to_utf16(initdir, NULL);
  	if (initdirp != NULL)
  	{
  	    for (wp = initdirp; *wp != NUL; ++wp)
***************
*** 3318,3324 ****
      vim_free(extp);
  
      /* Convert from UCS2 to 'encoding'. */
!     p = ucs2_to_enc(fileBuf, NULL);
      if (p != NULL)
  	/* when out of memory we get garbage for non-ASCII chars */
  	STRCPY(fileBuf, p);
--- 3318,3324 ----
      vim_free(extp);
  
      /* Convert from UCS2 to 'encoding'. */
!     p = utf16_to_enc(fileBuf, NULL);
      if (p != NULL)
  	/* when out of memory we get garbage for non-ASCII chars */
  	STRCPY(fileBuf, p);
***************
*** 3518,3524 ****
  	{
  #ifdef FEAT_MBYTE
  	    if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
! 		fnames[i] = ucs2_to_enc(wszFile, NULL);
  	    else
  #endif
  	    {
--- 3518,3524 ----
  	{
  #ifdef FEAT_MBYTE
  	    if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
! 		fnames[i] = utf16_to_enc(wszFile, NULL);
  	    else
  #endif
  	    {
*** ../vim-7.2.048/src/mbyte.c	Thu Nov 20 11:55:53 2008
--- src/mbyte.c	Thu Nov 20 16:47:41 2008
***************
*** 6101,6107 ****
  
  	    /* 1. codepage/UTF-8  ->  ucs-2. */
  	    if (vcp->vc_cpfrom == 0)
! 		tmp_len = utf8_to_ucs2(ptr, len, NULL, NULL);
  	    else
  		tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
  							      ptr, len, 0, 0);
--- 6101,6107 ----
  
  	    /* 1. codepage/UTF-8  ->  ucs-2. */
  	    if (vcp->vc_cpfrom == 0)
! 		tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
  	    else
  		tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
  							      ptr, len, 0, 0);
***************
*** 6109,6121 ****
  	    if (tmp == NULL)
  		break;
  	    if (vcp->vc_cpfrom == 0)
! 		utf8_to_ucs2(ptr, len, tmp, unconvlenp);
  	    else
  		MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len);
  
  	    /* 2. ucs-2  ->  codepage/UTF-8. */
  	    if (vcp->vc_cpto == 0)
! 		retlen = ucs2_to_utf8(tmp, tmp_len, NULL);
  	    else
  		retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
  						    tmp, tmp_len, 0, 0, 0, 0);
--- 6109,6121 ----
  	    if (tmp == NULL)
  		break;
  	    if (vcp->vc_cpfrom == 0)
! 		utf8_to_utf16(ptr, len, tmp, unconvlenp);
  	    else
  		MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len);
  
  	    /* 2. ucs-2  ->  codepage/UTF-8. */
  	    if (vcp->vc_cpto == 0)
! 		retlen = utf16_to_utf8(tmp, tmp_len, NULL);
  	    else
  		retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
  						    tmp, tmp_len, 0, 0, 0, 0);
***************
*** 6123,6129 ****
  	    if (retval != NULL)
  	    {
  		if (vcp->vc_cpto == 0)
! 		    ucs2_to_utf8(tmp, tmp_len, retval);
  		else
  		    WideCharToMultiByte(vcp->vc_cpto, 0,
  					  tmp, tmp_len, retval, retlen, 0, 0);
--- 6123,6129 ----
  	    if (retval != NULL)
  	    {
  		if (vcp->vc_cpto == 0)
! 		    utf16_to_utf8(tmp, tmp_len, retval);
  		else
  		    WideCharToMultiByte(vcp->vc_cpto, 0,
  					  tmp, tmp_len, retval, retlen, 0, 0);
*** ../vim-7.2.048/src/misc1.c	Sun Nov  9 13:43:25 2008
--- src/misc1.c	Thu Nov 20 16:42:59 2008
***************
*** 8728,8734 ****
  	/* The active codepage differs from 'encoding'.  Attempt using the
  	 * wide function.  If it fails because it is not implemented fall back
  	 * to the non-wide version (for Windows 98) */
! 	wn = enc_to_ucs2(buf, NULL);
  	if (wn != NULL)
  	{
  	    hFind = FindFirstFileW(wn, &wfb);
--- 8728,8734 ----
  	/* The active codepage differs from 'encoding'.  Attempt using the
  	 * wide function.  If it fails because it is not implemented fall back
  	 * to the non-wide version (for Windows 98) */
! 	wn = enc_to_utf16(buf, NULL);
  	if (wn != NULL)
  	{
  	    hFind = FindFirstFileW(wn, &wfb);
***************
*** 8756,8762 ****
  #ifdef WIN3264
  # ifdef FEAT_MBYTE
  	if (wn != NULL)
! 	    p = ucs2_to_enc(wfb.cFileName, NULL);   /* p is allocated here */
  	else
  # endif
  	    p = (char_u *)fb.cFileName;
--- 8756,8762 ----
  #ifdef WIN3264
  # ifdef FEAT_MBYTE
  	if (wn != NULL)
! 	    p = utf16_to_enc(wfb.cFileName, NULL);   /* p is allocated here */
  	else
  # endif
  	    p = (char_u *)fb.cFileName;
***************
*** 8830,8836 ****
  	    if (wn != NULL)
  	    {
  		vim_free(wn);
! 		wn = enc_to_ucs2(buf, NULL);
  		if (wn != NULL)
  		    hFind = FindFirstFileW(wn, &wfb);
  	    }
--- 8830,8836 ----
  	    if (wn != NULL)
  	    {
  		vim_free(wn);
! 		wn = enc_to_utf16(buf, NULL);
  		if (wn != NULL)
  		    hFind = FindFirstFileW(wn, &wfb);
  	    }
*** ../vim-7.2.048/src/os_mswin.c	Sat Aug  9 19:37:30 2008
--- src/os_mswin.c	Thu Nov 20 17:05:10 2008
***************
*** 309,315 ****
  	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
  	{
  	    /* Convert the title from 'encoding' to the active codepage. */
! 	    WCHAR	*wp = enc_to_ucs2(title, NULL);
  	    int	n;
  
  	    if (wp != NULL)
--- 309,315 ----
  	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
  	{
  	    /* Convert the title from 'encoding' to the active codepage. */
! 	    WCHAR	*wp = enc_to_utf16(title, NULL);
  	    int	n;
  
  	    if (wp != NULL)
***************
*** 406,415 ****
  	     * - invoke _wfullpath()
  	     * - convert the result from UCS2 to 'encoding'.
  	     */
! 	    wname = enc_to_ucs2(fname, NULL);
  	    if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
  	    {
! 		cname = ucs2_to_enc((short_u *)wbuf, NULL);
  		if (cname != NULL)
  		{
  		    vim_strncpy(buf, cname, len - 1);
--- 406,415 ----
  	     * - invoke _wfullpath()
  	     * - convert the result from UCS2 to 'encoding'.
  	     */
! 	    wname = enc_to_utf16(fname, NULL);
  	    if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
  	    {
! 		cname = utf16_to_enc((short_u *)wbuf, NULL);
  		if (cname != NULL)
  		{
  		    vim_strncpy(buf, cname, len - 1);
***************
*** 507,513 ****
  # endif
         )
      {
! 	WCHAR	*wp = enc_to_ucs2(buf, NULL);
  	int	n;
  
  	if (wp != NULL)
--- 507,513 ----
  # endif
         )
      {
! 	WCHAR	*wp = enc_to_utf16(buf, NULL);
  	int	n;
  
  	if (wp != NULL)
***************
*** 668,674 ****
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_ucs2(path, NULL);
  	int	n;
  
  	if (p != NULL)
--- 668,674 ----
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_utf16(path, NULL);
  	int	n;
  
  	if (p != NULL)
***************
*** 891,909 ****
  
  #if defined(FEAT_MBYTE) || defined(PROTO)
  /*
!  * Convert an UTF-8 string to UCS-2.
   * "instr[inlen]" is the input.  "inlen" is in bytes.
!  * When "outstr" is NULL only return the number of UCS-2 words produced.
   * Otherwise "outstr" must be a buffer of sufficient size.
!  * Returns the number of UCS-2 words produced.
   */
      int
! utf8_to_ucs2(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
  {
      int		outlen = 0;
      char_u	*p = instr;
      int		todo = inlen;
      int		l;
  
      while (todo > 0)
      {
--- 891,910 ----
  
  #if defined(FEAT_MBYTE) || defined(PROTO)
  /*
!  * Convert an UTF-8 string to UTF-16.
   * "instr[inlen]" is the input.  "inlen" is in bytes.
!  * When "outstr" is NULL only return the number of UTF-16 words produced.
   * Otherwise "outstr" must be a buffer of sufficient size.
!  * Returns the number of UTF-16 words produced.
   */
      int
! utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
  {
      int		outlen = 0;
      char_u	*p = instr;
      int		todo = inlen;
      int		l;
+     int		ch;
  
      while (todo > 0)
      {
***************
*** 917,924 ****
  	    break;
  	}
  
! 	if (outstr != NULL)
! 	    *outstr++ = utf_ptr2char(p);
  	++outlen;
  	p += l;
  	todo -= l;
--- 918,936 ----
  	    break;
  	}
  
! 	ch = utf_ptr2char(p);
! 	if (ch >= 0x10000)
! 	{
! 	    /* non-BMP character, encoding with surrogate pairs */
! 	    ++outlen;
! 	    if (outstr != NULL)
! 	    {
! 		*outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
! 		*outstr++ = 0xDC00 | (ch & 0x3FF);
! 	    }
! 	}
! 	else if (outstr != NULL)
! 	    *outstr++ = ch;
  	++outlen;
  	p += l;
  	todo -= l;
***************
*** 928,956 ****
  }
  
  /*
!  * Convert an UCS-2 string to UTF-8.
!  * The input is "instr[inlen]" with "inlen" in number of ucs-2 words.
   * When "outstr" is NULL only return the required number of bytes.
   * Otherwise "outstr" must be a buffer of sufficient size.
   * Return the number of bytes produced.
   */
      int
! ucs2_to_utf8(short_u *instr, int inlen, char_u *outstr)
  {
      int		outlen = 0;
      int		todo = inlen;
      short_u	*p = instr;
      int		l;
  
      while (todo > 0)
      {
  	if (outstr != NULL)
  	{
! 	    l = utf_char2bytes(*p, outstr);
  	    outstr += l;
  	}
  	else
! 	    l = utf_char2len(*p);
  	++p;
  	outlen += l;
  	--todo;
--- 940,981 ----
  }
  
  /*
!  * Convert an UTF-16 string to UTF-8.
!  * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
   * When "outstr" is NULL only return the required number of bytes.
   * Otherwise "outstr" must be a buffer of sufficient size.
   * Return the number of bytes produced.
   */
      int
! utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
  {
      int		outlen = 0;
      int		todo = inlen;
      short_u	*p = instr;
      int		l;
+     int		ch, ch2;
  
      while (todo > 0)
      {
+ 	ch = *p;
+ 	if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
+ 	{
+ 	    /* surrogate pairs handling */
+ 	    ch2 = p[1];
+ 	    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
+ 	    {
+ 		ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
+ 		++p;
+ 		--todo;
+ 	    }
+ 	}
  	if (outstr != NULL)
  	{
! 	    l = utf_char2bytes(ch, outstr);
  	    outstr += l;
  	}
  	else
! 	    l = utf_char2len(ch);
  	++p;
  	outlen += l;
  	--todo;
***************
*** 1079,1092 ****
   */
  
  /*
!  * Convert "str" from 'encoding' to UCS-2.
   * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
   * Output is returned as an allocated string.  "*lenp" is set to the length of
   * the result.  A trailing NUL is always added.
   * Returns NULL when out of memory.
   */
      short_u *
! enc_to_ucs2(char_u *str, int *lenp)
  {
      vimconv_T	conv;
      WCHAR	*ret;
--- 1104,1117 ----
   */
  
  /*
!  * Convert "str" from 'encoding' to UTF-16.
   * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
   * Output is returned as an allocated string.  "*lenp" is set to the length of
   * the result.  A trailing NUL is always added.
   * Returns NULL when out of memory.
   */
      short_u *
! enc_to_utf16(char_u *str, int *lenp)
  {
      vimconv_T	conv;
      WCHAR	*ret;
***************
*** 1102,1108 ****
  
      if (enc_codepage > 0)
      {
! 	/* We can do any CP### -> UCS-2 in one pass, and we can do it
  	 * without iconv() (convert_* may need iconv). */
  	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
      }
--- 1127,1133 ----
  
      if (enc_codepage > 0)
      {
! 	/* We can do any CP### -> UTF-16 in one pass, and we can do it
  	 * without iconv() (convert_* may need iconv). */
  	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
      }
***************
*** 1123,1133 ****
  	}
  	convert_setup(&conv, NULL, NULL);
  
! 	length = utf8_to_ucs2(str, *lenp, NULL, NULL);
  	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
  	if (ret != NULL)
  	{
! 	    utf8_to_ucs2(str, *lenp, (short_u *)ret, NULL);
  	    ret[length] = 0;
  	}
  
--- 1148,1158 ----
  	}
  	convert_setup(&conv, NULL, NULL);
  
! 	length = utf8_to_utf16(str, *lenp, NULL, NULL);
  	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
  	if (ret != NULL)
  	{
! 	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
  	    ret[length] = 0;
  	}
  
***************
*** 1139,1145 ****
  }
  
  /*
!  * Convert an UCS-2 string to 'encoding'.
   * Input in "str" with length (counted in wide characters) "*lenp".  When
   * "lenp" is NULL, use wcslen().
   * Output is returned as an allocated string.  If "*lenp" is not NULL it is
--- 1164,1170 ----
  }
  
  /*
!  * Convert an UTF-16 string to 'encoding'.
   * Input in "str" with length (counted in wide characters) "*lenp".  When
   * "lenp" is NULL, use wcslen().
   * Output is returned as an allocated string.  If "*lenp" is not NULL it is
***************
*** 1147,1153 ****
   * Returns NULL when out of memory.
   */
      char_u *
! ucs2_to_enc(short_u *str, int *lenp)
  {
      vimconv_T	conv;
      char_u	*utf8_str = NULL, *enc_str = NULL;
--- 1172,1178 ----
   * Returns NULL when out of memory.
   */
      char_u *
! utf16_to_enc(short_u *str, int *lenp)
  {
      vimconv_T	conv;
      char_u	*utf8_str = NULL, *enc_str = NULL;
***************
*** 1161,1167 ****
  
      if (enc_codepage > 0)
      {
! 	/* We can do any UCS-2 -> CP### in one pass. */
  	int length;
  
  	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
--- 1186,1192 ----
  
      if (enc_codepage > 0)
      {
! 	/* We can do any UTF-16 -> CP### in one pass. */
  	int length;
  
  	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
***************
*** 1171,1180 ****
      }
  
      /* Avoid allocating zero bytes, it generates an error message. */
!     utf8_str = alloc(ucs2_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
      if (utf8_str != NULL)
      {
! 	*lenp = ucs2_to_utf8(str, *lenp, utf8_str);
  
  	/* We might be called before we have p_enc set up. */
  	conv.vc_type = CONV_NONE;
--- 1196,1205 ----
      }
  
      /* Avoid allocating zero bytes, it generates an error message. */
!     utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
      if (utf8_str != NULL)
      {
! 	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
  
  	/* We might be called before we have p_enc set up. */
  	conv.vc_type = CONV_NONE;
***************
*** 1308,1314 ****
  		    if (hMemWstr[str_size] == NUL)
  			break;
  	    }
! 	    to_free = str = ucs2_to_enc((short_u *)hMemWstr, &str_size);
  	    GlobalUnlock(hMemW);
  	}
      }
--- 1333,1339 ----
  		    if (hMemWstr[str_size] == NUL)
  			break;
  	    }
! 	    to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
  	    GlobalUnlock(hMemW);
  	}
      }
***************
*** 1340,1346 ****
  
  # if defined(FEAT_MBYTE) && defined(WIN3264)
  	    /* The text is in the active codepage.  Convert to 'encoding',
! 	     * going through UCS-2. */
  	    acp_to_enc(str, str_size, &to_free, &maxlen);
  	    if (to_free != NULL)
  	    {
--- 1365,1371 ----
  
  # if defined(FEAT_MBYTE) && defined(WIN3264)
  	    /* The text is in the active codepage.  Convert to 'encoding',
! 	     * going through UTF-16. */
  	    acp_to_enc(str, str_size, &to_free, &maxlen);
  	    if (to_free != NULL)
  	    {
***************
*** 1404,1410 ****
      if (widestr != NULL)
      {
  	++*outlen;	/* Include the 0 after the string */
! 	*out = ucs2_to_enc((short_u *)widestr, outlen);
  	vim_free(widestr);
      }
  }
--- 1429,1435 ----
      if (widestr != NULL)
      {
  	++*outlen;	/* Include the 0 after the string */
! 	*out = utf16_to_enc((short_u *)widestr, outlen);
  	vim_free(widestr);
      }
  }
***************
*** 1466,1474 ****
  	WCHAR		*out;
  	int		len = metadata.txtlen;
  
! 	/* Convert the text to UCS-2. This is put on the clipboard as
  	 * CF_UNICODETEXT. */
! 	out = (WCHAR *)enc_to_ucs2(str, &len);
  	if (out != NULL)
  	{
  	    WCHAR *lpszMemW;
--- 1491,1499 ----
  	WCHAR		*out;
  	int		len = metadata.txtlen;
  
! 	/* Convert the text to UTF-16. This is put on the clipboard as
  	 * CF_UNICODETEXT. */
! 	out = (WCHAR *)enc_to_utf16(str, &len);
  	if (out != NULL)
  	{
  	    WCHAR *lpszMemW;
***************
*** 1488,1494 ****
  	    WideCharToMultiByte(GetACP(), 0, out, len,
  						  str, metadata.txtlen, 0, 0);
  
! 	    /* Allocate memory for the UCS-2 text, add one NUL word to
  	     * terminate the string. */
  	    hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
  						   (len + 1) * sizeof(WCHAR));
--- 1513,1519 ----
  	    WideCharToMultiByte(GetACP(), 0, out, len,
  						  str, metadata.txtlen, 0, 0);
  
! 	    /* Allocate memory for the UTF-16 text, add one NUL word to
  	     * terminate the string. */
  	    hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
  						   (len + 1) * sizeof(WCHAR));
*** ../vim-7.2.048/src/os_win32.c	Thu Jul 24 20:50:30 2008
--- src/os_win32.c	Thu Nov 20 16:44:33 2008
***************
*** 1587,1593 ****
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_ucs2(name, NULL);
  	WCHAR	fnamew[_MAX_PATH];
  	WCHAR	*dumw;
  	long	n;
--- 1587,1593 ----
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_utf16(name, NULL);
  	WCHAR	fnamew[_MAX_PATH];
  	WCHAR	*dumw;
  	long	n;
***************
*** 2440,2446 ****
  
  	if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
  	{
! 	    char_u  *p = ucs2_to_enc(wbuf, NULL);
  
  	    if (p != NULL)
  	    {
--- 2440,2446 ----
  
  	if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
  	{
! 	    char_u  *p = utf16_to_enc(wbuf, NULL);
  
  	    if (p != NULL)
  	    {
***************
*** 2466,2472 ****
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_ucs2(name, NULL);
  	long	n;
  
  	if (p != NULL)
--- 2466,2472 ----
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_utf16(name, NULL);
  	long	n;
  
  	if (p != NULL)
***************
*** 2495,2501 ****
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_ucs2(name, NULL);
  	long	n;
  
  	if (p != NULL)
--- 2495,2501 ----
  #ifdef FEAT_MBYTE
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	WCHAR	*p = enc_to_utf16(name, NULL);
  	long	n;
  
  	if (p != NULL)
***************
*** 2522,2528 ****
      WCHAR	*p = NULL;
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! 	p = enc_to_ucs2(name, NULL);
  #endif
  
  #ifdef FEAT_MBYTE
--- 2522,2528 ----
      WCHAR	*p = NULL;
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! 	p = enc_to_utf16(name, NULL);
  #endif
  
  #ifdef FEAT_MBYTE
***************
*** 2590,2596 ****
      WCHAR	*wn = NULL;
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! 	wn = enc_to_ucs2(fname, NULL);
      if (wn != NULL)
      {
  	hFile = CreateFileW(wn,		/* file name */
--- 2590,2596 ----
      WCHAR	*wn = NULL;
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! 	wn = enc_to_utf16(fname, NULL);
      if (wn != NULL)
      {
  	hFile = CreateFileW(wn,		/* file name */
***************
*** 4239,4245 ****
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	wn = enc_to_ucs2(name, NULL);
  	if (wn != NULL)
  	{
  	    SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
--- 4239,4245 ----
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	wn = enc_to_utf16(name, NULL);
  	if (wn != NULL)
  	{
  	    SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
***************
*** 4382,4389 ****
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	wold = enc_to_ucs2((char_u *)pszOldFile, NULL);
! 	wnew = enc_to_ucs2((char_u *)pszNewFile, NULL);
  	if (wold != NULL && wnew != NULL)
  	    retval = mch_wrename(wold, wnew);
  	vim_free(wold);
--- 4382,4389 ----
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	wold = enc_to_utf16((char_u *)pszOldFile, NULL);
! 	wnew = enc_to_utf16((char_u *)pszNewFile, NULL);
  	if (wold != NULL && wnew != NULL)
  	    retval = mch_wrename(wold, wnew);
  	vim_free(wold);
***************
*** 4492,4498 ****
      WCHAR	*wn = NULL;
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! 	wn = enc_to_ucs2(n, NULL);
  #endif
  
      if (mch_isdir(n))
--- 4492,4498 ----
      WCHAR	*wn = NULL;
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
! 	wn = enc_to_utf16(n, NULL);
  #endif
  
      if (mch_isdir(n))
***************
*** 4618,4624 ****
  
  #if defined(FEAT_MBYTE) || defined(PROTO)
  /*
!  * Version of open() that may use ucs2 file name.
   */
      int
  mch_open(char *name, int flags, int mode)
--- 4618,4624 ----
  
  #if defined(FEAT_MBYTE) || defined(PROTO)
  /*
!  * Version of open() that may use UTF-16 file name.
   */
      int
  mch_open(char *name, int flags, int mode)
***************
*** 4630,4636 ****
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	wn = enc_to_ucs2(name, NULL);
  	if (wn != NULL)
  	{
  	    f = _wopen(wn, flags, mode);
--- 4630,4636 ----
  
      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
      {
! 	wn = enc_to_utf16(name, NULL);
  	if (wn != NULL)
  	{
  	    f = _wopen(wn, flags, mode);
***************
*** 4648,4654 ****
  }
  
  /*
!  * Version of fopen() that may use ucs2 file name.
   */
      FILE *
  mch_fopen(char *name, char *mode)
--- 4648,4654 ----
  }
  
  /*
!  * Version of fopen() that may use UTF-16 file name.
   */
      FILE *
  mch_fopen(char *name, char *mode)
***************
*** 4675,4682 ****
  	else if (newMode == 'b')
  	    _set_fmode(_O_BINARY);
  # endif
! 	wn = enc_to_ucs2(name, NULL);
! 	wm = enc_to_ucs2(mode, NULL);
  	if (wn != NULL && wm != NULL)
  	    f = _wfopen(wn, wm);
  	vim_free(wn);
--- 4675,4682 ----
  	else if (newMode == 'b')
  	    _set_fmode(_O_BINARY);
  # endif
! 	wn = enc_to_utf16(name, NULL);
! 	wm = enc_to_utf16(mode, NULL);
  	if (wn != NULL && wm != NULL)
  	    f = _wfopen(wn, wm);
  	vim_free(wn);
***************
*** 4776,4783 ****
      int			len;
  
      /* Convert the file names to wide characters. */
!     fromw = enc_to_ucs2(from, NULL);
!     tow = enc_to_ucs2(to, NULL);
      if (fromw != NULL && tow != NULL)
      {
  	/* Open the file for reading. */
--- 4776,4783 ----
      int			len;
  
      /* Convert the file names to wide characters. */
!     fromw = enc_to_utf16(from, NULL);
!     tow = enc_to_utf16(to, NULL);
      if (fromw != NULL && tow != NULL)
      {
  	/* Open the file for reading. */
***************
*** 5122,5128 ****
      for (i = 0; i < used_file_count; ++i)
      {
  	idx = used_file_indexes[i];
! 	str = ucs2_to_enc(ArglistW[idx], NULL);
  	if (str != NULL)
  	{
  #ifdef FEAT_DIFF
--- 5122,5128 ----
      for (i = 0; i < used_file_count; ++i)
      {
  	idx = used_file_indexes[i];
! 	str = utf16_to_enc(ArglistW[idx], NULL);
  	if (str != NULL)
  	{
  #ifdef FEAT_DIFF
*** ../vim-7.2.048/src/proto/os_mswin.pro	Sat May  5 19:07:50 2007
--- src/proto/os_mswin.pro	Thu Nov 20 16:41:00 2008
***************
*** 22,35 ****
  int can_end_termcap_mode __ARGS((int give_msg));
  int mch_screenmode __ARGS((char_u *arg));
  int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
! int utf8_to_ucs2 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
! int ucs2_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
  void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
  void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
  int clip_mch_own_selection __ARGS((VimClipboard *cbd));
  void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
! short_u *enc_to_ucs2 __ARGS((char_u *str, int *lenp));
! char_u *ucs2_to_enc __ARGS((short_u *str, int *lenp));
  void clip_mch_request_selection __ARGS((VimClipboard *cbd));
  void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
  void clip_mch_set_selection __ARGS((VimClipboard *cbd));
--- 22,35 ----
  int can_end_termcap_mode __ARGS((int give_msg));
  int mch_screenmode __ARGS((char_u *arg));
  int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
! int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
! int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
  void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
  void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
  int clip_mch_own_selection __ARGS((VimClipboard *cbd));
  void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
! short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
! char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
  void clip_mch_request_selection __ARGS((VimClipboard *cbd));
  void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
  void clip_mch_set_selection __ARGS((VimClipboard *cbd));
*** ../vim-7.2.048/src/version.c	Thu Nov 20 16:11:03 2008
--- src/version.c	Thu Nov 20 17:08:07 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     49,
  /**/

-- 
FIRST HEAD: All right! All right! We'll kill him first and then have tea and
            biscuits.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

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


--- NEW FILE 7.2.050 ---
To: vim-dev at vim.org
Subject: Patch 7.2.050
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.2.050
Problem:    Warnings for not checking return value of fwrite(). (Chip Campbell)
Solution:   Use the return value.
Files:	    src/spell.c


*** ../vim-7.2.049/src/spell.c	Mon Aug 25 04:12:38 2008
--- src/spell.c	Thu Nov 20 17:28:01 2008
***************
*** 7926,7931 ****
--- 7926,7933 ----
      char_u	*p;
      int		rr;
      int		retval = OK;
+     int		fwv = 1;  /* collect return value of fwrite() to avoid
+ 			     warnings from picky compiler */
  
      fd = mch_fopen((char *)fname, "w");
      if (fd == NULL)
***************
*** 7936,7946 ****
  
      /* <HEADER>: <fileID> <versionnr> */
  							    /* <fileID> */
!     if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1)
!     {
! 	EMSG(_(e_write));
! 	retval = FAIL;
!     }
      putc(VIMSPELLVERSION, fd);				    /* <versionnr> */
  
      /*
--- 7938,7944 ----
  
      /* <HEADER>: <fileID> <versionnr> */
  							    /* <fileID> */
!     fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
      putc(VIMSPELLVERSION, fd);				    /* <versionnr> */
  
      /*
***************
*** 7955,7961 ****
  
  	i = (int)STRLEN(spin->si_info);
  	put_bytes(fd, (long_u)i, 4);			/* <sectionlen> */
! 	fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
      }
  
      /* SN_REGION: <regionname> ...
--- 7953,7959 ----
  
  	i = (int)STRLEN(spin->si_info);
  	put_bytes(fd, (long_u)i, 4);			/* <sectionlen> */
! 	fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
      }
  
      /* SN_REGION: <regionname> ...
***************
*** 7966,7972 ****
  	putc(SNF_REQUIRED, fd);				/* <sectionflags> */
  	l = spin->si_region_count * 2;
  	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
! 	fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
  							/* <regionname> ... */
  	regionmask = (1 << spin->si_region_count) - 1;
      }
--- 7964,7970 ----
  	putc(SNF_REQUIRED, fd);				/* <sectionflags> */
  	l = spin->si_region_count * 2;
  	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
! 	fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
  							/* <regionname> ... */
  	regionmask = (1 << spin->si_region_count) - 1;
      }
***************
*** 8016,8022 ****
  	}
  
  	put_bytes(fd, (long_u)l, 2);			/* <folcharslen> */
! 	fwrite(folchars, (size_t)l, (size_t)1, fd);	/* <folchars> */
      }
  
      /* SN_MIDWORD: <midword> */
--- 8014,8020 ----
  	}
  
  	put_bytes(fd, (long_u)l, 2);			/* <folcharslen> */
! 	fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* <folchars> */
      }
  
      /* SN_MIDWORD: <midword> */
***************
*** 8027,8033 ****
  
  	i = (int)STRLEN(spin->si_midword);
  	put_bytes(fd, (long_u)i, 4);			/* <sectionlen> */
! 	fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* <midword> */
      }
  
      /* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
--- 8025,8032 ----
  
  	i = (int)STRLEN(spin->si_midword);
  	put_bytes(fd, (long_u)i, 4);			/* <sectionlen> */
! 	fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd);
! 							/* <midword> */
      }
  
      /* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
***************
*** 8113,8119 ****
  		p = rr == 1 ? ftp->ft_from : ftp->ft_to;
  		l = (int)STRLEN(p);
  		putc(l, fd);
! 		fwrite(p, l, (size_t)1, fd);
  	    }
  	}
  
--- 8112,8118 ----
  		p = rr == 1 ? ftp->ft_from : ftp->ft_to;
  		l = (int)STRLEN(p);
  		putc(l, fd);
! 		fwv &= fwrite(p, l, (size_t)1, fd);
  	    }
  	}
  
***************
*** 8131,8141 ****
  							/* <sectionlen> */
  
  	put_bytes(fd, (long_u)l, 2);			/* <sofofromlen> */
! 	fwrite(spin->si_sofofr, l, (size_t)1, fd);	/* <sofofrom> */
  
  	l = (int)STRLEN(spin->si_sofoto);
  	put_bytes(fd, (long_u)l, 2);			/* <sofotolen> */
! 	fwrite(spin->si_sofoto, l, (size_t)1, fd);	/* <sofoto> */
      }
  
      /* SN_WORDS: <word> ...
--- 8130,8140 ----
  							/* <sectionlen> */
  
  	put_bytes(fd, (long_u)l, 2);			/* <sofofromlen> */
! 	fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */
  
  	l = (int)STRLEN(spin->si_sofoto);
  	put_bytes(fd, (long_u)l, 2);			/* <sofotolen> */
! 	fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */
      }
  
      /* SN_WORDS: <word> ...
***************
*** 8160,8166 ****
  		    l = (int)STRLEN(hi->hi_key) + 1;
  		    len += l;
  		    if (round == 2)			/* <word> */
! 			fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
  		    --todo;
  		}
  	    if (round == 1)
--- 8159,8165 ----
  		    l = (int)STRLEN(hi->hi_key) + 1;
  		    len += l;
  		    if (round == 2)			/* <word> */
! 			fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
  		    --todo;
  		}
  	    if (round == 1)
***************
*** 8176,8182 ****
  	putc(0, fd);					/* <sectionflags> */
  	l = spin->si_map.ga_len;
  	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
! 	fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
  							/* <mapstr> */
      }
  
--- 8175,8181 ----
  	putc(0, fd);					/* <sectionflags> */
  	l = spin->si_map.ga_len;
  	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
! 	fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
  							/* <mapstr> */
      }
  
***************
*** 8232,8241 ****
  	{
  	    p = ((char_u **)(spin->si_comppat.ga_data))[i];
  	    putc((int)STRLEN(p), fd);			/* <comppatlen> */
! 	    fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* <comppattext> */
  	}
  							/* <compflags> */
! 	fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
  							       (size_t)1, fd);
      }
  
--- 8231,8241 ----
  	{
  	    p = ((char_u **)(spin->si_comppat.ga_data))[i];
  	    putc((int)STRLEN(p), fd);			/* <comppatlen> */
! 	    fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);
! 							/* <comppattext> */
  	}
  							/* <compflags> */
! 	fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
  							       (size_t)1, fd);
      }
  
***************
*** 8259,8265 ****
  
  	l = (int)STRLEN(spin->si_syllable);
  	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
! 	fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* <syllable> */
      }
  
      /* end of <SECTIONS> */
--- 8259,8266 ----
  
  	l = (int)STRLEN(spin->si_syllable);
  	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
! 	fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd);
! 							/* <syllable> */
      }
  
      /* end of <SECTIONS> */
***************
*** 8295,8307 ****
  	(void)put_node(fd, tree, 0, regionmask, round == 3);
      }
  
!     /* Write another byte to check for errors. */
      if (putc(0, fd) == EOF)
  	retval = FAIL;
  
      if (fclose(fd) == EOF)
  	retval = FAIL;
  
      return retval;
  }
  
--- 8296,8313 ----
  	(void)put_node(fd, tree, 0, regionmask, round == 3);
      }
  
!     /* Write another byte to check for errors (file system full). */
      if (putc(0, fd) == EOF)
  	retval = FAIL;
  
      if (fclose(fd) == EOF)
  	retval = FAIL;
  
+     if (fwv != 1)
+ 	retval = FAIL;
+     if (retval == FAIL)
+ 	EMSG(_(e_write));
+ 
      return retval;
  }
  
***************
*** 9890,9895 ****
--- 9896,9902 ----
      char_u	*p;
      int		len;
      int		totlen;
+     int		x = 1;  /* collect return value of fwrite() */
  
      if (fd != NULL)
  	put_bytes(fd, (long_u)gap->ga_len, 2);	    /* <prefcondcnt> */
***************
*** 9906,9912 ****
  	    if (fd != NULL)
  	    {
  		fputc(len, fd);
! 		fwrite(p, (size_t)len, (size_t)1, fd);
  	    }
  	    totlen += len;
  	}
--- 9913,9919 ----
  	    if (fd != NULL)
  	    {
  		fputc(len, fd);
! 		x &= fwrite(p, (size_t)len, (size_t)1, fd);
  	    }
  	    totlen += len;
  	}
*** ../vim-7.2.049/src/version.c	Thu Nov 20 17:09:09 2008
--- src/version.c	Fri Nov 28 10:06:13 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     50,
  /**/

-- 
You got to work at a mill?  Lucky!  I got sent back to work in the
acid-mines for my daily crust of stale bread... which not even the
birds would eat.

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


--- NEW FILE 7.2.051 ---
To: vim-dev at vim.org
Subject: Patch 7.2.051
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.2.051
Problem:    Can't avoid 'wildignore' and 'suffixes' for glob() and globpath().
Solution:   Add an extra argument to these functions. (Ingo Karkat)
Files:	    src/eval.c, src/ex_getln.c, src/proto/ex_getln.pro,
	    runtime/doc/eval.txt, runtime/doc/options.txt


*** ../vim-7.2.050/src/eval.c	Thu Nov 20 16:11:03 2008
--- src/eval.c	Thu Nov 27 22:15:40 2008
***************
*** 7564,7571 ****
      {"getwinposx",	0, 0, f_getwinposx},
      {"getwinposy",	0, 0, f_getwinposy},
      {"getwinvar",	2, 2, f_getwinvar},
!     {"glob",		1, 1, f_glob},
!     {"globpath",	2, 2, f_globpath},
      {"has",		1, 1, f_has},
      {"has_key",		2, 2, f_has_key},
      {"haslocaldir",	0, 0, f_haslocaldir},
--- 7564,7571 ----
      {"getwinposx",	0, 0, f_getwinposx},
      {"getwinposy",	0, 0, f_getwinposy},
      {"getwinvar",	2, 2, f_getwinvar},
!     {"glob",		1, 2, f_glob},
!     {"globpath",	2, 3, f_globpath},
      {"has",		1, 1, f_has},
      {"has_key",		2, 2, f_has_key},
      {"haslocaldir",	0, 0, f_haslocaldir},
***************
*** 9557,9563 ****
      else
      {
  	/* When the optional second argument is non-zero, don't remove matches
! 	 * for 'suffixes' and 'wildignore' */
  	if (argvars[1].v_type != VAR_UNKNOWN
  				    && get_tv_number_chk(&argvars[1], &error))
  	    flags |= WILD_KEEP_ALL;
--- 9557,9563 ----
      else
      {
  	/* When the optional second argument is non-zero, don't remove matches
! 	 * for 'wildignore' and don't put matches for 'suffixes' at the end. */
  	if (argvars[1].v_type != VAR_UNKNOWN
  				    && get_tv_number_chk(&argvars[1], &error))
  	    flags |= WILD_KEEP_ALL;
***************
*** 11323,11335 ****
      typval_T	*argvars;
      typval_T	*rettv;
  {
      expand_T	xpc;
  
!     ExpandInit(&xpc);
!     xpc.xp_context = EXPAND_FILES;
!     rettv->v_type = VAR_STRING;
!     rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
! 				     NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
  }
  
  /*
--- 11323,11347 ----
      typval_T	*argvars;
      typval_T	*rettv;
  {
+     int		flags = WILD_SILENT|WILD_USE_NL;
      expand_T	xpc;
+     int		error = FALSE;
  
!     /* When the optional second argument is non-zero, don't remove matches
!     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
!     if (argvars[1].v_type != VAR_UNKNOWN
! 				&& get_tv_number_chk(&argvars[1], &error))
! 	flags |= WILD_KEEP_ALL;
!     rettv->v_type = VAR_STRING;
!     if (!error)
!     {
! 	ExpandInit(&xpc);
! 	xpc.xp_context = EXPAND_FILES;
! 	rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
! 						       NULL, flags, WILD_ALL);
!     }
!     else
! 	rettv->vval.v_string = NULL;
  }
  
  /*
***************
*** 11340,11353 ****
      typval_T	*argvars;
      typval_T	*rettv;
  {
      char_u	buf1[NUMBUFLEN];
      char_u	*file = get_tv_string_buf_chk(&argvars[1], buf1);
  
      rettv->v_type = VAR_STRING;
!     if (file == NULL)
  	rettv->vval.v_string = NULL;
      else
! 	rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file);
  }
  
  /*
--- 11352,11373 ----
      typval_T	*argvars;
      typval_T	*rettv;
  {
+     int		flags = 0;
      char_u	buf1[NUMBUFLEN];
      char_u	*file = get_tv_string_buf_chk(&argvars[1], buf1);
+     int		error = FALSE;
  
+     /* When the optional second argument is non-zero, don't remove matches
+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+     if (argvars[2].v_type != VAR_UNKNOWN
+ 				&& get_tv_number_chk(&argvars[2], &error))
+ 	flags |= WILD_KEEP_ALL;
      rettv->v_type = VAR_STRING;
!     if (file == NULL || error)
  	rettv->vval.v_string = NULL;
      else
! 	rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
! 								       flags);
  }
  
  /*
*** ../vim-7.2.050/src/ex_getln.c	Sat Nov 15 14:10:23 2008
--- src/ex_getln.c	Thu Nov 20 18:37:20 2008
***************
*** 2524,2530 ****
  	    && ccline.xpc->xp_context != EXPAND_NOTHING
  	    && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
      {
! 	int i = ccline.xpc->xp_pattern - p;
  
  	/* If xp_pattern points inside the old cmdbuff it needs to be adjusted
  	 * to point into the newly allocated memory. */
--- 2524,2530 ----
  	    && ccline.xpc->xp_context != EXPAND_NOTHING
  	    && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
      {
! 	int i = (int)(ccline.xpc->xp_pattern - p);
  
  	/* If xp_pattern points inside the old cmdbuff it needs to be adjusted
  	 * to point into the newly allocated memory. */
***************
*** 4897,4903 ****
      if (s == NULL)
  	return FAIL;
      sprintf((char *)s, "%s/%s*.vim", dirname, pat);
!     all = globpath(p_rtp, s);
      vim_free(s);
      if (all == NULL)
  	return FAIL;
--- 4897,4903 ----
      if (s == NULL)
  	return FAIL;
      sprintf((char *)s, "%s/%s*.vim", dirname, pat);
!     all = globpath(p_rtp, s, 0);
      vim_free(s);
      if (all == NULL)
  	return FAIL;
***************
*** 4938,4946 ****
   * newlines.  Returns NULL for an error or no matches.
   */
      char_u *
! globpath(path, file)
      char_u	*path;
      char_u	*file;
  {
      expand_T	xpc;
      char_u	*buf;
--- 4938,4947 ----
   * newlines.  Returns NULL for an error or no matches.
   */
      char_u *
! globpath(path, file, expand_options)
      char_u	*path;
      char_u	*file;
+     int		expand_options;
  {
      expand_T	xpc;
      char_u	*buf;
***************
*** 4969,4978 ****
  	{
  	    add_pathsep(buf);
  	    STRCAT(buf, file);
! 	    if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL
! 								 && num_p > 0)
  	    {
! 		ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT);
  		for (len = 0, i = 0; i < num_p; ++i)
  		    len += (int)STRLEN(p[i]) + 1;
  
--- 4970,4979 ----
  	{
  	    add_pathsep(buf);
  	    STRCAT(buf, file);
! 	    if (ExpandFromContext(&xpc, buf, &num_p, &p,
! 			     WILD_SILENT|expand_options) != FAIL && num_p > 0)
  	    {
! 		ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
  		for (len = 0, i = 0; i < num_p; ++i)
  		    len += (int)STRLEN(p[i]) + 1;
  
*** ../vim-7.2.050/src/proto/ex_getln.pro	Wed May 28 16:49:01 2008
--- src/proto/ex_getln.pro	Thu Nov 20 18:27:57 2008
***************
*** 31,37 ****
  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
! char_u *globpath __ARGS((char_u *path, char_u *file));
  void init_history __ARGS((void));
  int get_histtype __ARGS((char_u *name));
  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
--- 31,37 ----
  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
! char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
  void init_history __ARGS((void));
  int get_histtype __ARGS((char_u *name));
  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
*** ../vim-7.2.050/runtime/doc/eval.txt	Sun Nov  9 13:43:25 2008
--- runtime/doc/eval.txt	Thu Nov 27 22:17:13 2008
***************
*** 1,4 ****
! *eval.txt*	For Vim version 7.2.  Last change: 2008 Nov 02
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
--- 1,4 ----
! *eval.txt*	For Vim version 7.2.  Last change: 2008 Nov 27
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
***************
*** 1706,1712 ****
  exists( {expr})			Number	TRUE if {expr} exists
  extend({expr1}, {expr2} [, {expr3}])
  				List/Dict insert items of {expr2} into {expr1}
! expand( {expr})			String	expand special keywords in {expr}
  feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
  filereadable( {file})		Number	TRUE if {file} is a readable file
  filewritable( {file})		Number	TRUE if {file} is a writable file
--- 1709,1715 ----
  exists( {expr})			Number	TRUE if {expr} exists
  extend({expr1}, {expr2} [, {expr3}])
  				List/Dict insert items of {expr2} into {expr1}
! expand( {expr} [, {flag}])	String	expand special keywords in {expr}
  feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
  filereadable( {file})		Number	TRUE if {file} is a readable file
  filewritable( {file})		Number	TRUE if {file} is a writable file
***************
*** 1758,1765 ****
  getwinposx()			Number	X coord in pixels of GUI Vim window
  getwinposy()			Number	Y coord in pixels of GUI Vim window
  getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
! glob( {expr})			String	expand file wildcards in {expr}
! globpath( {path}, {expr})	String	do glob({expr}) for all dirs in {path}
  has( {feature})			Number	TRUE if feature {feature} supported
  has_key( {dict}, {key})		Number	TRUE if {dict} has entry {key}
  haslocaldir()			Number	TRUE if current window executed |:lcd|
--- 1761,1769 ----
  getwinposx()			Number	X coord in pixels of GUI Vim window
  getwinposy()			Number	Y coord in pixels of GUI Vim window
  getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
! glob( {expr} [, {flag}])	String	expand file wildcards in {expr}
! globpath( {path}, {expr} [, {flag}])
! 				String	do glob({expr}) for all dirs in {path}
  has( {feature})			Number	TRUE if feature {feature} supported
  has_key( {dict}, {key})		Number	TRUE if {dict} has entry {key}
  haslocaldir()			Number	TRUE if current window executed |:lcd|
***************
*** 3286,3299 ****
  			:let list_is_on = getwinvar(2, '&list')
  			:echo "myvar = " . getwinvar(1, 'myvar')
  <
! 							*glob()*
! glob({expr})	Expand the file wildcards in {expr}.  See |wildcards| for the
  		use of special characters.
  		The result is a String.
  		When there are several matches, they are separated by <NL>
  		characters.
! 		The 'wildignore' option applies: Names matching one of the
! 		patterns in 'wildignore' will be skipped.
  		If the expansion fails, the result is an empty string.
  		A name for a non-existing file is not included.
  
--- 3290,3305 ----
  			:let list_is_on = getwinvar(2, '&list')
  			:echo "myvar = " . getwinvar(1, 'myvar')
  <
! glob({expr} [, {flag}])					*glob()*
! 		Expand the file wildcards in {expr}.  See |wildcards| for the
  		use of special characters.
  		The result is a String.
  		When there are several matches, they are separated by <NL>
  		characters.
! 		Unless the optional {flag} argument is given and is non-zero,
! 		the 'suffixes' and 'wildignore' options apply: Names matching
! 		one of the patterns in 'wildignore' will be skipped and
! 		'suffixes' affect the ordering of matches.
  		If the expansion fails, the result is an empty string.
  		A name for a non-existing file is not included.
  
***************
*** 3307,3326 ****
  		See |expand()| for expanding special Vim variables.  See
  		|system()| for getting the raw output of an external command.
  
! globpath({path}, {expr})				*globpath()*
  		Perform glob() on all directories in {path} and concatenate
  		the results.  Example: >
  			:echo globpath(&rtp, "syntax/c.vim")
  <		{path} is a comma-separated list of directory names.  Each
  		directory name is prepended to {expr} and expanded like with
! 		glob().  A path separator is inserted when needed.
  		To add a comma inside a directory name escape it with a
  		backslash.  Note that on MS-Windows a directory may have a
  		trailing backslash, remove it if you put a comma after it.
  		If the expansion fails for one of the directories, there is no
  		error message.
! 		The 'wildignore' option applies: Names matching one of the
! 		patterns in 'wildignore' will be skipped.
  
  		The "**" item can be used to search in a directory tree.
  		For example, to find all "README.txt" files in the directories
--- 3313,3334 ----
  		See |expand()| for expanding special Vim variables.  See
  		|system()| for getting the raw output of an external command.
  
! globpath({path}, {expr} [, {flag}])			*globpath()*
  		Perform glob() on all directories in {path} and concatenate
  		the results.  Example: >
  			:echo globpath(&rtp, "syntax/c.vim")
  <		{path} is a comma-separated list of directory names.  Each
  		directory name is prepended to {expr} and expanded like with
! 		|glob()|.  A path separator is inserted when needed.
  		To add a comma inside a directory name escape it with a
  		backslash.  Note that on MS-Windows a directory may have a
  		trailing backslash, remove it if you put a comma after it.
  		If the expansion fails for one of the directories, there is no
  		error message.
! 		Unless the optional {flag} argument is given and is non-zero,
! 		the 'suffixes' and 'wildignore' options apply: Names matching
! 		one of the patterns in 'wildignore' will be skipped and
! 		'suffixes' affect the ordering of matches.
  
  		The "**" item can be used to search in a directory tree.
  		For example, to find all "README.txt" files in the directories
*** ../vim-7.2.050/runtime/doc/options.txt	Sat Aug  9 19:36:49 2008
--- runtime/doc/options.txt	Tue Nov 25 23:43:55 2008
***************
*** 1,4 ****
! *options.txt*	For Vim version 7.2.  Last change: 2008 Aug 06
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
--- 1,4 ----
! *options.txt*	For Vim version 7.2.  Last change: 2008 Nov 25
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
***************
*** 7472,7478 ****
  			{not available when compiled without the |+wildignore|
  			feature}
  	A list of file patterns.  A file that matches with one of these
! 	patterns is ignored when completing file or directory names.
  	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
  	Also see 'suffixes'.
  	Example: >
--- 7481,7489 ----
  			{not available when compiled without the |+wildignore|
  			feature}
  	A list of file patterns.  A file that matches with one of these
! 	patterns is ignored when completing file or directory names, and
! 	influences the result of |expand()|, |glob()| and |globpath()| unless
! 	a flag is passed to disable this.
  	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
  	Also see 'suffixes'.
  	Example: >
*** ../vim-7.2.050/src/version.c	Fri Nov 28 10:08:05 2008
--- src/version.c	Fri Nov 28 10:55:44 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     51,
  /**/

-- 
Not too long ago, unzipping in public was illegal...

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


--- NEW FILE 7.2.052 ---
To: vim-dev at vim.org
Subject: Patch 7.2.052
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.2.052
Problem:    synIDattr() doesn't support "sp" for special color.
Solution:   Recognize "sp" and "sp#".  (Matt Wozniski)
Files:	    runtime/doc/eval.txt, src/eval.c


*** ../vim-7.2.051/runtime/doc/eval.txt	Fri Nov 28 10:59:57 2008
--- runtime/doc/eval.txt	Thu Nov 27 22:17:13 2008
***************
*** 5348,5357 ****
  		"fg"		foreground color (GUI: color name used to set
  				the color, cterm: color number as a string,
  				term: empty string)
! 		"bg"		background color (like "fg")
  		"fg#"		like "fg", but for the GUI and the GUI is
  				running the name in "#RRGGBB" form
  		"bg#"		like "fg#" for "bg"
  		"bold"		"1" if bold
  		"italic"	"1" if italic
  		"reverse"	"1" if reverse
--- 5359,5370 ----
  		"fg"		foreground color (GUI: color name used to set
  				the color, cterm: color number as a string,
  				term: empty string)
! 		"bg"		background color (as with "fg")
! 		"sp"		special color (as with "fg") |highlight-guisp|
  		"fg#"		like "fg", but for the GUI and the GUI is
  				running the name in "#RRGGBB" form
  		"bg#"		like "fg#" for "bg"
+ 		"sp#"		like "fg#" for "sp"
  		"bold"		"1" if bold
  		"italic"	"1" if italic
  		"reverse"	"1" if reverse
*** ../vim-7.2.051/src/eval.c	Fri Nov 28 10:59:57 2008
--- src/eval.c	Thu Nov 27 22:15:40 2008
***************
*** 16648,16655 ****
  		p = highlight_has_attr(id, HL_INVERSE, modec);
  		break;
  
! 	case 's':					/* standout */
! 		p = highlight_has_attr(id, HL_STANDOUT, modec);
  		break;
  
  	case 'u':
--- 16648,16658 ----
  		p = highlight_has_attr(id, HL_INVERSE, modec);
  		break;
  
! 	case 's':
! 		if (TOLOWER_ASC(what[1]) == 'p')	/* sp[#] */
! 		    p = highlight_color(id, what, modec);
! 		else					/* standout */
! 		    p = highlight_has_attr(id, HL_STANDOUT, modec);
  		break;
  
  	case 'u':
*** ../vim-7.2.051/src/version.c	Fri Nov 28 10:59:57 2008
--- src/version.c	Fri Nov 28 11:13:45 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     52,
  /**/

-- 
Not too long ago, a keyboard was something to make music with...

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


--- NEW FILE 7.2.053 ---
To: vim-dev at vim.org
Subject: Patch 7.2.053
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.2.053
Problem:    Crash when using WorkShop command ":ws foo". (Dominique Pelle)
Solution:   Avoid using a NULL pointer.
Files:	    src/workshop.c


*** ../vim-7.2.052/src/workshop.c	Tue Jun 24 23:34:50 2008
--- src/workshop.c	Thu Nov 27 22:31:27 2008
***************
*** 1121,1128 ****
  				      ? (char *)curbuf->b_sfname : "<None>");
  #endif
  
!     strcpy(ffname, (char *) curbuf->b_ffname);
!     *filename = ffname;		/* copy so nobody can change b_ffname */
      *curLine = curwin->w_cursor.lnum;
      *curCol = curwin->w_cursor.col;
  
--- 1121,1132 ----
  				      ? (char *)curbuf->b_sfname : "<None>");
  #endif
  
!     if (curbuf->b_ffname == NULL)
! 	ffname[0] = NUL;
!     else
! 	/* copy so nobody can change b_ffname */
! 	strcpy(ffname, (char *) curbuf->b_ffname);
!     *filename = ffname;
      *curLine = curwin->w_cursor.lnum;
      *curCol = curwin->w_cursor.col;
  
*** ../vim-7.2.052/src/version.c	Fri Nov 28 11:15:10 2008
--- src/version.c	Fri Nov 28 11:44:23 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     53,
  /**/

-- 
What the word 'politics' means: 'Poli' in Latin meaning 'many' and 'tics'
meaning 'bloodsucking creatures'.

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


--- NEW FILE 7.2.054 ---
To: vim-dev at vim.org
Subject: Patch 7.2.054
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.2.054
Problem:    Compilation warnings for format in getchar.c.
Solution:   Use fputs() instead of fprintf().  (Dominique Pelle)
Files:	    src/getchar.c


*** ../vim-7.2.053/src/getchar.c	Tue Jul 22 18:58:23 2008
--- src/getchar.c	Thu Nov 27 22:38:24 2008
***************
*** 4702,4708 ****
  			return FAIL;
  		    if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
  			return FAIL;
! 		    if (fprintf(fd, cmd) < 0)
  			return FAIL;
  		    if (buf != NULL && fputs(" <buffer>", fd) < 0)
  			return FAIL;
--- 4702,4708 ----
  			return FAIL;
  		    if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
  			return FAIL;
! 		    if (fputs(cmd, fd) < 0)
  			return FAIL;
  		    if (buf != NULL && fputs(" <buffer>", fd) < 0)
  			return FAIL;
***************
*** 4801,4807 ****
  	    }
  	    if (IS_SPECIAL(c) || modifiers)	/* special key */
  	    {
! 		if (fprintf(fd, (char *)get_special_key_name(c, modifiers)) < 0)
  		    return FAIL;
  		continue;
  	    }
--- 4801,4807 ----
  	    }
  	    if (IS_SPECIAL(c) || modifiers)	/* special key */
  	    {
! 		if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0)
  		    return FAIL;
  		continue;
  	    }
*** ../vim-7.2.053/src/version.c	Fri Nov 28 11:47:14 2008
--- src/version.c	Fri Nov 28 12:02:48 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     54,
  /**/

-- 
Not too long ago, compress was something you did to garbage...

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


--- NEW FILE 7.2.055 ---
To: vim-dev at vim.org
Subject: Patch 7.2.055
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.2.055
Problem:    Various compiler warnings with strict checking.
Solution:   Avoid the warnings by using return values and renaming.
Files:	    src/diff.c, src/eval.c, src/ex_cmds.c, src/ex_docmd.c,
	    src/fileio.c, src/fold.c, src/globals.h, src/gui.c,
	    src/gui_at_sb.c, src/gui_gtk_x11.c, src/gui_xmdlg.c,
	    src/gui_xmebw.c, src/main.c, src/mbyte.c, src/message.c,
	    src/netbeans.c, src/option.c, src/os_unix.c, src/spell.c,
	    src/ui.c, src/window.c


*** ../vim-7.2.054/src/diff.c	Fri Jan 18 17:39:32 2008
--- src/diff.c	Fri Nov 28 17:23:35 2008
***************
*** 661,666 ****
--- 665,671 ----
      char_u	*tmp_diff;
      FILE	*fd;
      int		ok;
+     int		io_error = FALSE;
  
      /* Delete all diffblocks. */
      diff_clear(curtab);
***************
*** 697,714 ****
      {
  	ok = FALSE;
  	fd = mch_fopen((char *)tmp_orig, "w");
! 	if (fd != NULL)
  	{
! 	    fwrite("line1\n", (size_t)6, (size_t)1, fd);
  	    fclose(fd);
  	    fd = mch_fopen((char *)tmp_new, "w");
! 	    if (fd != NULL)
  	    {
! 		fwrite("line2\n", (size_t)6, (size_t)1, fd);
  		fclose(fd);
  		diff_file(tmp_orig, tmp_new, tmp_diff);
  		fd = mch_fopen((char *)tmp_diff, "r");
! 		if (fd != NULL)
  		{
  		    char_u	linebuf[LBUFLEN];
  
--- 702,727 ----
      {
  	ok = FALSE;
  	fd = mch_fopen((char *)tmp_orig, "w");
! 	if (fd == NULL)
! 	    io_error = TRUE;
! 	else
  	{
! 	    if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1)
! 		io_error = TRUE;
  	    fclose(fd);
  	    fd = mch_fopen((char *)tmp_new, "w");
! 	    if (fd == NULL)
! 		io_error = TRUE;
! 	    else
  	    {
! 		if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1)
! 		    io_error = TRUE;
  		fclose(fd);
  		diff_file(tmp_orig, tmp_new, tmp_diff);
  		fd = mch_fopen((char *)tmp_diff, "r");
! 		if (fd == NULL)
! 		    io_error = TRUE;
! 		else
  		{
  		    char_u	linebuf[LBUFLEN];
  
***************
*** 761,766 ****
--- 774,781 ----
      }
      if (!ok)
      {
+ 	if (io_error)
+ 	    EMSG(_("E810: Cannot read or write temp files"));
  	EMSG(_("E97: Cannot create diffs"));
  	diff_a_works = MAYBE;
  #if defined(MSWIN) || defined(MSDOS)
***************
*** 925,934 ****
      {
  # ifdef TEMPDIRNAMES
  	if (vim_tempdir != NULL)
! 	    mch_chdir((char *)vim_tempdir);
  	else
  # endif
! 	    mch_chdir("/tmp");
  	shorten_fnames(TRUE);
      }
  #endif
--- 940,949 ----
      {
  # ifdef TEMPDIRNAMES
  	if (vim_tempdir != NULL)
! 	    ignored = mch_chdir((char *)vim_tempdir);
  	else
  # endif
! 	    ignored = mch_chdir("/tmp");
  	shorten_fnames(TRUE);
      }
  #endif
*** ../vim-7.2.054/src/eval.c	Fri Nov 28 11:15:10 2008
--- src/eval.c	Fri Nov 28 12:23:13 2008
***************
*** 10641,10647 ****
  # ifdef FEAT_WINDOWS
  	    win_T	*wp;
  # endif
! 	    int		n = 1;
  
  	    if (row >= 0 && col >= 0)
  	    {
--- 10641,10647 ----
  # ifdef FEAT_WINDOWS
  	    win_T	*wp;
  # endif
! 	    int		winnr = 1;
  
  	    if (row >= 0 && col >= 0)
  	    {
***************
*** 10651,10659 ****
  		(void)mouse_comp_pos(win, &row, &col, &lnum);
  # ifdef FEAT_WINDOWS
  		for (wp = firstwin; wp != win; wp = wp->w_next)
! 		    ++n;
  # endif
! 		vimvars[VV_MOUSE_WIN].vv_nr = n;
  		vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
  		vimvars[VV_MOUSE_COL].vv_nr = col + 1;
  	    }
--- 10651,10659 ----
  		(void)mouse_comp_pos(win, &row, &col, &lnum);
  # ifdef FEAT_WINDOWS
  		for (wp = firstwin; wp != win; wp = wp->w_next)
! 		    ++winnr;
  # endif
! 		vimvars[VV_MOUSE_WIN].vv_nr = winnr;
  		vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
  		vimvars[VV_MOUSE_COL].vv_nr = col + 1;
  	    }
*** ../vim-7.2.054/src/ex_cmds.c	Sat Nov 15 14:10:23 2008
--- src/ex_cmds.c	Fri Nov 28 17:24:08 2008
***************
*** 1941,1947 ****
  	     * root.
  	     */
  	    if (fp_out != NULL)
! 		(void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
  #endif
  	}
      }
--- 1941,1947 ----
  	     * root.
  	     */
  	    if (fp_out != NULL)
! 		ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
  #endif
  	}
      }
*** ../vim-7.2.054/src/ex_docmd.c	Sat Nov 15 14:10:23 2008
--- src/ex_docmd.c	Fri Nov 28 17:26:13 2008
***************
*** 8753,8760 ****
  		else if (*dirnow != NUL
  			&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
  		{
! 		    (void)mch_chdir((char *)globaldir);
! 		    shorten_fnames(TRUE);
  		}
  
  		failed |= (makeopens(fd, dirnow) == FAIL);
--- 8753,8760 ----
  		else if (*dirnow != NUL
  			&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
  		{
! 		    if (mch_chdir((char *)globaldir) == OK)
! 			shorten_fnames(TRUE);
  		}
  
  		failed |= (makeopens(fd, dirnow) == FAIL);
*** ../vim-7.2.054/src/fileio.c	Wed Nov 12 16:04:43 2008
--- src/fileio.c	Fri Nov 28 17:35:54 2008
***************
*** 2214,2220 ****
      {
  	/* Use stderr for stdin, makes shell commands work. */
  	close(0);
! 	dup(2);
      }
  #endif
  
--- 2214,2220 ----
      {
  	/* Use stderr for stdin, makes shell commands work. */
  	close(0);
! 	ignored = dup(2);
      }
  #endif
  
***************
*** 3449,3455 ****
  		{
  # ifdef UNIX
  #  ifdef HAVE_FCHOWN
! 		    fchown(fd, st_old.st_uid, st_old.st_gid);
  #  endif
  		    if (mch_stat((char *)IObuff, &st) < 0
  			    || st.st_uid != st_old.st_uid
--- 3449,3455 ----
  		{
  # ifdef UNIX
  #  ifdef HAVE_FCHOWN
! 		    ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
  #  endif
  		    if (mch_stat((char *)IObuff, &st) < 0
  			    || st.st_uid != st_old.st_uid
***************
*** 4365,4371 ****
  		|| st.st_uid != st_old.st_uid
  		|| st.st_gid != st_old.st_gid)
  	{
! 	    fchown(fd, st_old.st_uid, st_old.st_gid);
  	    if (perm >= 0)	/* set permission again, may have changed */
  		(void)mch_setperm(wfname, perm);
  	}
--- 4365,4371 ----
  		|| st.st_uid != st_old.st_uid
  		|| st.st_gid != st_old.st_gid)
  	{
! 	    ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
  	    if (perm >= 0)	/* set permission again, may have changed */
  		(void)mch_setperm(wfname, perm);
  	}
***************
*** 6030,6038 ****
  	{
  	    tbuf[FGETS_SIZE - 2] = NUL;
  #ifdef USE_CR
! 	    fgets_cr((char *)tbuf, FGETS_SIZE, fp);
  #else
! 	    fgets((char *)tbuf, FGETS_SIZE, fp);
  #endif
  	} while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
      }
--- 6030,6038 ----
  	{
  	    tbuf[FGETS_SIZE - 2] = NUL;
  #ifdef USE_CR
! 	    ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
  #else
! 	    ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
  #endif
  	} while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
      }
*** ../vim-7.2.054/src/fold.c	Wed Aug  6 18:59:40 2008
--- src/fold.c	Fri Nov 28 12:24:16 2008
***************
*** 48,54 ****
  static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
  static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
  static void checkupdate __ARGS((win_T *wp));
! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open));
  static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
  static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
  static void foldOpenNested __ARGS((fold_T *fpr));
--- 48,54 ----
  static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
  static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
  static void checkupdate __ARGS((win_T *wp));
! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open));
  static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
  static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
  static void foldOpenNested __ARGS((fold_T *fpr));
***************
*** 1241,1250 ****
   * Repeat "count" times.
   */
      static void
! setFoldRepeat(lnum, count, open)
      linenr_T	lnum;
      long	count;
!     int		open;
  {
      int		done;
      long	n;
--- 1241,1250 ----
   * Repeat "count" times.
   */
      static void
! setFoldRepeat(lnum, count, do_open)
      linenr_T	lnum;
      long	count;
!     int		do_open;
  {
      int		done;
      long	n;
***************
*** 1252,1258 ****
      for (n = 0; n < count; ++n)
      {
  	done = DONE_NOTHING;
! 	(void)setManualFold(lnum, open, FALSE, &done);
  	if (!(done & DONE_ACTION))
  	{
  	    /* Only give an error message when no fold could be opened. */
--- 1252,1258 ----
      for (n = 0; n < count; ++n)
      {
  	done = DONE_NOTHING;
! 	(void)setManualFold(lnum, do_open, FALSE, &done);
  	if (!(done & DONE_ACTION))
  	{
  	    /* Only give an error message when no fold could be opened. */
*** ../vim-7.2.054/src/globals.h	Thu Sep 18 21:29:07 2008
--- src/globals.h	Fri Nov 28 17:35:50 2008
***************
*** 1549,1554 ****
--- 1549,1562 ----
  EXTERN time_t starttime;
  
  /*
+  * Some compilers warn for not using a return value, but in some situations we
+  * can't do anything useful with the value.  Assign to this variable to avoid
+  * the warning.
+  */
+ EXTERN int ignored;
+ EXTERN char *ignoredp;
+ 
+ /*
   * Optional Farsi support.  Include it here, so EXTERN and INIT are defined.
   */
  #ifdef FEAT_FKMAP
*** ../vim-7.2.054/src/gui.c	Wed Aug  6 14:37:26 2008
--- src/gui.c	Fri Nov 28 18:48:31 2008
***************
*** 139,145 ****
  		/* The read returns when the child closes the pipe (or when
  		 * the child dies for some reason). */
  		close(pipefd[1]);
! 		(void)read(pipefd[0], &dummy, (size_t)1);
  		close(pipefd[0]);
  	    }
  
--- 139,145 ----
  		/* The read returns when the child closes the pipe (or when
  		 * the child dies for some reason). */
  		close(pipefd[1]);
! 		ignored = (int)read(pipefd[0], &dummy, (size_t)1);
  		close(pipefd[0]);
  	    }
  
*** ../vim-7.2.054/src/gui_at_sb.c	Sun Jun 13 21:37:13 2004
--- src/gui_at_sb.c	Fri Nov 28 12:19:19 2008
***************
*** 1078,1083 ****
--- 1078,1089 ----
      Cardinal	*num_params;	/* unused */
  {
      ScrollbarWidget sbw = (ScrollbarWidget)w;
+     /* Use a union to avoid a warning for the weird conversion from float to
+      * XtPointer.  Comes from Xaw/Scrollbar.c. */
+     union {
+ 	XtPointer xtp;
+ 	float xtf;
+     } xtpf;
  
      if (LookAhead(w, event))
  	return;
***************
*** 1085,1091 ****
      /* thumbProc is not pretty, but is necessary for backwards
         compatibility on those architectures for which it work{s,ed};
         the intent is to pass a (truncated) float by value. */
!     XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top);
      XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
  }
  
--- 1091,1098 ----
      /* thumbProc is not pretty, but is necessary for backwards
         compatibility on those architectures for which it work{s,ed};
         the intent is to pass a (truncated) float by value. */
!     xtpf.xtf = sbw->scrollbar.top;
!     XtCallCallbacks(w, XtNthumbProc, xtpf.xtp);
      XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
  }
  
*** ../vim-7.2.054/src/gui_gtk_x11.c	Tue Jul  8 12:46:08 2008
--- src/gui_gtk_x11.c	Fri Nov 28 21:06:38 2008
***************
*** 4070,4083 ****
  
  	if (mask & (XValue | YValue))
  	{
! 	    int w, h;
! 	    gui_mch_get_screen_dimensions(&w, &h);
! 	    h += p_ghr + get_menu_tool_height();
! 	    w += get_menu_tool_width();
  	    if (mask & XNegative)
! 		x += w - pixel_width;
  	    if (mask & YNegative)
! 		y += h - pixel_height;
  #ifdef HAVE_GTK2
  	    gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
  #else
--- 4070,4083 ----
  
  	if (mask & (XValue | YValue))
  	{
! 	    int ww, hh;
! 	    gui_mch_get_screen_dimensions(&ww, &hh);
! 	    hh += p_ghr + get_menu_tool_height();
! 	    ww += get_menu_tool_width();
  	    if (mask & XNegative)
! 		x += ww - pixel_width;
  	    if (mask & YNegative)
! 		y += hh - pixel_height;
  #ifdef HAVE_GTK2
  	    gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
  #else
*** ../vim-7.2.054/src/gui_xmdlg.c	Tue Jun 24 23:39:32 2008
--- src/gui_xmdlg.c	Fri Nov 28 21:04:08 2008
***************
*** 369,378 ****
      char	buf[TEMP_BUF_SIZE];
      XmString	items[MAX_ENTRIES_IN_LIST];
      int		i;
!     int		index;
  
!     for (index = (int)ENCODING; index < (int)NONE; ++index)
! 	count[index] = 0;
  
      /* First we insert the wild char into every single list. */
      if (fix != ENCODING)
--- 369,378 ----
      char	buf[TEMP_BUF_SIZE];
      XmString	items[MAX_ENTRIES_IN_LIST];
      int		i;
!     int		idx;
  
!     for (idx = (int)ENCODING; idx < (int)NONE; ++idx)
! 	count[idx] = 0;
  
      /* First we insert the wild char into every single list. */
      if (fix != ENCODING)
***************
*** 503,516 ****
      /*
       * Now loop trough the remaining lists and set them up.
       */
!     for (index = (int)NAME; index < (int)NONE; ++index)
      {
  	Widget w;
  
! 	if (fix == (enum ListSpecifier)index)
  	    continue;
  
! 	switch ((enum ListSpecifier)index)
  	{
  	    case NAME:
  		w = data->list[NAME];
--- 503,516 ----
      /*
       * Now loop trough the remaining lists and set them up.
       */
!     for (idx = (int)NAME; idx < (int)NONE; ++idx)
      {
  	Widget w;
  
! 	if (fix == (enum ListSpecifier)idx)
  	    continue;
  
! 	switch ((enum ListSpecifier)idx)
  	{
  	    case NAME:
  		w = data->list[NAME];
***************
*** 525,545 ****
  		w = (Widget)0;	/* for lint */
  	}
  
! 	for (i = 0; i < count[index]; ++i)
  	{
! 	    items[i] = XmStringCreateLocalized(list[index][i]);
! 	    XtFree(list[index][i]);
  	}
  	XmListDeleteAllItems(w);
! 	XmListAddItems(w, items, count[index], 1);
! 	if (data->sel[index])
  	{
  	    XmStringFree(items[0]);
! 	    items[0] = XmStringCreateLocalized(data->sel[index]);
  	    XmListSelectItem(w, items[0], False);
  	    XmListSetBottomItem(w, items[0]);
  	}
! 	for (i = 0; i < count[index]; ++i)
  	    XmStringFree(items[i]);
      }
  }
--- 525,545 ----
  		w = (Widget)0;	/* for lint */
  	}
  
! 	for (i = 0; i < count[idx]; ++i)
  	{
! 	    items[i] = XmStringCreateLocalized(list[idx][i]);
! 	    XtFree(list[idx][i]);
  	}
  	XmListDeleteAllItems(w);
! 	XmListAddItems(w, items, count[idx], 1);
! 	if (data->sel[idx])
  	{
  	    XmStringFree(items[0]);
! 	    items[0] = XmStringCreateLocalized(data->sel[idx]);
  	    XmListSelectItem(w, items[0], False);
  	    XmListSetBottomItem(w, items[0]);
  	}
! 	for (i = 0; i < count[idx]; ++i)
  	    XmStringFree(items[i]);
      }
  }
***************
*** 695,708 ****
  	int	    n;
  	XmString    str;
  	Arg	    args[4];
! 	char	    *msg = _("no specific match");
  
  	n = 0;
! 	str = XmStringCreateLocalized(msg);
  	XtSetArg(args[n], XmNlabelString, str); ++n;
  	XtSetValues(data->sample, args, n);
  	apply_fontlist(data->sample);
! 	XmTextSetString(data->name, msg);
  	XmStringFree(str);
  
  	return False;
--- 695,708 ----
  	int	    n;
  	XmString    str;
  	Arg	    args[4];
! 	char	    *nomatch_msg = _("no specific match");
  
  	n = 0;
! 	str = XmStringCreateLocalized(nomatch_msg);
  	XtSetArg(args[n], XmNlabelString, str); ++n;
  	XtSetValues(data->sample, args, n);
  	apply_fontlist(data->sample);
! 	XmTextSetString(data->name, nomatch_msg);
  	XmStringFree(str);
  
  	return False;
***************
*** 886,906 ****
      {
  	int	i;
  	int	max;
! 	int	index = 0;
  	int	size;
! 	char	str[128];
  
  	for (i = 0, max = 0; i < data->num; i++)
  	{
! 	    get_part(fn(data, i), 7, str);
! 	    size = atoi(str);
  	    if ((size > max) && (size < MAX_DISPLAY_SIZE))
  	    {
! 		index = i;
  		max = size;
  	    }
  	}
! 	strcpy(big_font, fn(data, index));
      }
      data->old = XLoadQueryFont(XtDisplay(parent), big_font);
      data->old_list = gui_motif_create_fontlist(data->old);
--- 886,906 ----
      {
  	int	i;
  	int	max;
! 	int	idx = 0;
  	int	size;
! 	char	buf[128];
  
  	for (i = 0, max = 0; i < data->num; i++)
  	{
! 	    get_part(fn(data, i), 7, buf);
! 	    size = atoi(buf);
  	    if ((size > max) && (size < MAX_DISPLAY_SIZE))
  	    {
! 		idx = i;
  		max = size;
  	    }
  	}
! 	strcpy(big_font, fn(data, idx));
      }
      data->old = XLoadQueryFont(XtDisplay(parent), big_font);
      data->old_list = gui_motif_create_fontlist(data->old);
***************
*** 1217,1244 ****
  
  	if (i != 0)
  	{
! 	    char name[TEMP_BUF_SIZE];
! 	    char style[TEMP_BUF_SIZE];
! 	    char size[TEMP_BUF_SIZE];
! 	    char encoding[TEMP_BUF_SIZE];
  	    char *found;
  
  	    found = names[0];
  
! 	    name_part(found, name);
! 	    style_part(found, style);
! 	    size_part(found, size, data->in_pixels);
! 	    encoding_part(found, encoding);
! 
! 	    if (strlen(name) > 0
! 		    && strlen(style) > 0
! 		    && strlen(size) > 0
! 		    && strlen(encoding) > 0)
  	    {
! 		data->sel[NAME] = XtNewString(name);
! 		data->sel[STYLE] = XtNewString(style);
! 		data->sel[SIZE] = XtNewString(size);
! 		data->sel[ENCODING] = XtNewString(encoding);
  		data->font_name = XtNewString(names[0]);
  		display_sample(data);
  		XmTextSetString(data->name, data->font_name);
--- 1217,1244 ----
  
  	if (i != 0)
  	{
! 	    char namebuf[TEMP_BUF_SIZE];
! 	    char stylebuf[TEMP_BUF_SIZE];
! 	    char sizebuf[TEMP_BUF_SIZE];
! 	    char encodingbuf[TEMP_BUF_SIZE];
  	    char *found;
  
  	    found = names[0];
  
! 	    name_part(found, namebuf);
! 	    style_part(found, stylebuf);
! 	    size_part(found, sizebuf, data->in_pixels);
! 	    encoding_part(found, encodingbuf);
! 
! 	    if (strlen(namebuf) > 0
! 		    && strlen(stylebuf) > 0
! 		    && strlen(sizebuf) > 0
! 		    && strlen(encodingbuf) > 0)
  	    {
! 		data->sel[NAME] = XtNewString(namebuf);
! 		data->sel[STYLE] = XtNewString(stylebuf);
! 		data->sel[SIZE] = XtNewString(sizebuf);
! 		data->sel[ENCODING] = XtNewString(encodingbuf);
  		data->font_name = XtNewString(names[0]);
  		display_sample(data);
  		XmTextSetString(data->name, data->font_name);
*** ../vim-7.2.054/src/gui_xmebw.c	Thu Nov  8 20:48:14 2007
--- src/gui_xmebw.c	Fri Nov 28 18:58:53 2008
***************
*** 1256,1262 ****
      }
      else
      {
! 	int adjust = 0;
  
  #if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
  	/*
--- 1256,1262 ----
      }
      else
      {
! 	adjust = 0;
  
  #if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
  	/*
***************
*** 1268,1279 ****
  	{
  	    case XmEXTERNAL_HIGHLIGHT:
  		adjust = (eb->primitive.highlight_thickness -
! 			(eb->pushbutton.default_button_shadow_thickness ?
! 			 Xm3D_ENHANCE_PIXEL : 0));
  		break;
  
  	    case XmINTERNAL_HIGHLIGHT:
- 		adjust = 0;
  		break;
  
  	    default:
--- 1268,1278 ----
  	{
  	    case XmEXTERNAL_HIGHLIGHT:
  		adjust = (eb->primitive.highlight_thickness -
! 			 (eb->pushbutton.default_button_shadow_thickness
! 			  ?  Xm3D_ENHANCE_PIXEL : 0));
  		break;
  
  	    case XmINTERNAL_HIGHLIGHT:
  		break;
  
  	    default:
*** ../vim-7.2.054/src/main.c	Thu Nov 20 14:11:47 2008
--- src/main.c	Fri Nov 28 18:32:48 2008
***************
*** 2372,2378 ****
       * Is there any other system that cannot do this?
       */
      close(0);
!     dup(2);
  #endif
  }
  
--- 2372,2378 ----
       * Is there any other system that cannot do this?
       */
      close(0);
!     ignored = dup(2);
  #endif
  }
  
*** ../vim-7.2.054/src/mbyte.c	Thu Nov 20 17:09:09 2008
--- src/mbyte.c	Fri Nov 28 18:44:05 2008
***************
*** 717,723 ****
  		     * where mblen() returns 0 for invalid character.
  		     * Therefore, following condition includes 0.
  		     */
! 		    (void)mblen(NULL, 0);	/* First reset the state. */
  		    if (mblen(buf, (size_t)1) <= 0)
  			n = 2;
  		    else
--- 717,723 ----
  		     * where mblen() returns 0 for invalid character.
  		     * Therefore, following condition includes 0.
  		     */
! 		    ignored = mblen(NULL, 0);	/* First reset the state. */
  		    if (mblen(buf, (size_t)1) <= 0)
  			n = 2;
  		    else
***************
*** 5278,5284 ****
  
  /*ARGSUSED*/
      static void
! preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data)
  {
  #ifdef XIM_DEBUG
      xim_log("xim_decide_input_style()\n");
--- 5278,5284 ----
  
  /*ARGSUSED*/
      static void
! preedit_start_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
  {
  #ifdef XIM_DEBUG
      xim_log("xim_decide_input_style()\n");
***************
*** 5312,5318 ****
  
  /*ARGSUSED*/
      static void
! preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data)
  {
      XIMPreeditDrawCallbackStruct *draw_data;
      XIMText	*text;
--- 5312,5318 ----
  
  /*ARGSUSED*/
      static void
! preedit_draw_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
  {
      XIMPreeditDrawCallbackStruct *draw_data;
      XIMText	*text;
***************
*** 5453,5459 ****
  
  /*ARGSUSED*/
      static void
! preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data)
  {
  #ifdef XIM_DEBUG
      xim_log("preedit_caret_cbproc()\n");
--- 5453,5459 ----
  
  /*ARGSUSED*/
      static void
! preedit_caret_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
  {
  #ifdef XIM_DEBUG
      xim_log("preedit_caret_cbproc()\n");
***************
*** 5462,5468 ****
  
  /*ARGSUSED*/
      static void
! preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data)
  {
  #ifdef XIM_DEBUG
      xim_log("preedit_done_cbproc()\n");
--- 5462,5468 ----
  
  /*ARGSUSED*/
      static void
! preedit_done_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
  {
  #ifdef XIM_DEBUG
      xim_log("preedit_done_cbproc()\n");
*** ../vim-7.2.054/src/message.c	Sun Jul 13 19:18:44 2008
--- src/message.c	Fri Nov 28 12:26:56 2008
***************
*** 4585,4645 ****
  			if (remove_trailing_zeroes)
  			{
  			    int i;
! 			    char *p;
  
  			    /* Using %g or %G: remove superfluous zeroes. */
  			    if (fmt_spec == 'f')
! 				p = tmp + str_arg_l - 1;
  			    else
  			    {
! 				p = (char *)vim_strchr((char_u *)tmp,
  						 fmt_spec == 'e' ? 'e' : 'E');
! 				if (p != NULL)
  				{
  				    /* Remove superfluous '+' and leading
  				     * zeroes from the exponent. */
! 				    if (p[1] == '+')
  				    {
  					/* Change "1.0e+07" to "1.0e07" */
! 					STRMOVE(p + 1, p + 2);
  					--str_arg_l;
  				    }
! 				    i = (p[1] == '-') ? 2 : 1;
! 				    while (p[i] == '0')
  				    {
  					/* Change "1.0e07" to "1.0e7" */
! 					STRMOVE(p + i, p + i + 1);
  					--str_arg_l;
  				    }
! 				    --p;
  				}
  			    }
  
! 			    if (p != NULL && !precision_specified)
  				/* Remove trailing zeroes, but keep the one
  				 * just after a dot. */
! 				while (p > tmp + 2 && *p == '0' && p[-1] != '.')
  				{
! 				    STRMOVE(p, p + 1);
! 				    --p;
  				    --str_arg_l;
  				}
  			}
  			else
  			{
! 			    char *p;
  
  			    /* Be consistent: some printf("%e") use 1.0e+12
  			     * and some 1.0e+012.  Remove one zero in the last
  			     * case. */
! 			    p = (char *)vim_strchr((char_u *)tmp,
  						 fmt_spec == 'e' ? 'e' : 'E');
! 			    if (p != NULL && (p[1] == '+' || p[1] == '-')
! 					  && p[2] == '0'
! 					  && vim_isdigit(p[3])
! 					  && vim_isdigit(p[4]))
  			    {
! 				STRMOVE(p + 2, p + 3);
  				--str_arg_l;
  			    }
  			}
--- 4585,4646 ----
  			if (remove_trailing_zeroes)
  			{
  			    int i;
! 			    char *tp;
  
  			    /* Using %g or %G: remove superfluous zeroes. */
  			    if (fmt_spec == 'f')
! 				tp = tmp + str_arg_l - 1;
  			    else
  			    {
! 				tp = (char *)vim_strchr((char_u *)tmp,
  						 fmt_spec == 'e' ? 'e' : 'E');
! 				if (tp != NULL)
  				{
  				    /* Remove superfluous '+' and leading
  				     * zeroes from the exponent. */
! 				    if (tp[1] == '+')
  				    {
  					/* Change "1.0e+07" to "1.0e07" */
! 					STRMOVE(tp + 1, tp + 2);
  					--str_arg_l;
  				    }
! 				    i = (tp[1] == '-') ? 2 : 1;
! 				    while (tp[i] == '0')
  				    {
  					/* Change "1.0e07" to "1.0e7" */
! 					STRMOVE(tp + i, tp + i + 1);
  					--str_arg_l;
  				    }
! 				    --tp;
  				}
  			    }
  
! 			    if (tp != NULL && !precision_specified)
  				/* Remove trailing zeroes, but keep the one
  				 * just after a dot. */
! 				while (tp > tmp + 2 && *tp == '0'
! 							     && tp[-1] != '.')
  				{
! 				    STRMOVE(tp, tp + 1);
! 				    --tp;
  				    --str_arg_l;
  				}
  			}
  			else
  			{
! 			    char *tp;
  
  			    /* Be consistent: some printf("%e") use 1.0e+12
  			     * and some 1.0e+012.  Remove one zero in the last
  			     * case. */
! 			    tp = (char *)vim_strchr((char_u *)tmp,
  						 fmt_spec == 'e' ? 'e' : 'E');
! 			    if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
! 					  && tp[2] == '0'
! 					  && vim_isdigit(tp[3])
! 					  && vim_isdigit(tp[4]))
  			    {
! 				STRMOVE(tp + 2, tp + 3);
  				--str_arg_l;
  			    }
  			}
*** ../vim-7.2.054/src/netbeans.c	Sat Nov 15 14:10:23 2008
--- src/netbeans.c	Fri Nov 28 18:51:43 2008
***************
*** 1043,1049 ****
  	nbdebug(("EVT: %s", buf));
  /*	nb_send(buf, "netbeans_end");    avoid "write failed" messages */
  	if (sd >= 0)
! 	    sock_write(sd, buf, (int)STRLEN(buf));  /* ignore errors */
      }
  }
  
--- 1043,1049 ----
  	nbdebug(("EVT: %s", buf));
  /*	nb_send(buf, "netbeans_end");    avoid "write failed" messages */
  	if (sd >= 0)
! 	    ignored = sock_write(sd, buf, (int)STRLEN(buf));
      }
  }
  
***************
*** 2277,2285 ****
  	    int serNum;
  	    int localTypeNum;
  	    int typeNum;
- # ifdef NBDEBUG
- 	    int len;
- # endif
  	    pos_T *pos;
  
  	    if (buf == NULL || buf->bufp == NULL)
--- 2277,2282 ----
***************
*** 2303,2315 ****
  	    pos = get_off_or_lnum(buf->bufp, &args);
  
  	    cp = (char *)args;
! # ifdef NBDEBUG
! 	    len =
! # endif
! 		strtol(cp, &cp, 10);
  	    args = (char_u *)cp;
  # ifdef NBDEBUG
! 	    if (len != -1)
  	    {
  		nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
  	    }
--- 2300,2309 ----
  	    pos = get_off_or_lnum(buf->bufp, &args);
  
  	    cp = (char *)args;
! 	    ignored = (int)strtol(cp, &cp, 10);
  	    args = (char_u *)cp;
  # ifdef NBDEBUG
! 	    if (ignored != -1)
  	    {
  		nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
  	    }
*** ../vim-7.2.054/src/option.c	Sun Nov  9 13:43:25 2008
--- src/option.c	Fri Nov 28 12:27:34 2008
***************
*** 8232,8244 ****
  	    {
  		if (number == 0 && string != NULL)
  		{
! 		    int index;
  
  		    /* Either we are given a string or we are setting option
  		     * to zero. */
! 		    for (index = 0; string[index] == '0'; ++index)
  			;
! 		    if (string[index] != NUL || index == 0)
  		    {
  			/* There's another character after zeros or the string
  			 * is empty.  In both cases, we are trying to set a
--- 8232,8244 ----
  	    {
  		if (number == 0 && string != NULL)
  		{
! 		    int idx;
  
  		    /* Either we are given a string or we are setting option
  		     * to zero. */
! 		    for (idx = 0; string[idx] == '0'; ++idx)
  			;
! 		    if (string[idx] != NUL || idx == 0)
  		    {
  			/* There's another character after zeros or the string
  			 * is empty.  In both cases, we are trying to set a
*** ../vim-7.2.054/src/os_unix.c	Wed Nov 12 14:09:38 2008
--- src/os_unix.c	Fri Nov 28 18:39:55 2008
***************
*** 315,326 ****
      {-1,	    "Unknown!", FALSE}
  };
  
      void
  mch_write(s, len)
      char_u	*s;
      int		len;
  {
!     write(1, (char *)s, len);
      if (p_wd)		/* Unix is too fast, slow down a bit more */
  	RealWaitForChar(read_cmd_fd, p_wd, NULL);
  }
--- 315,329 ----
      {-1,	    "Unknown!", FALSE}
  };
  
+ /*
+  * Write s[len] to the screen.
+  */
      void
  mch_write(s, len)
      char_u	*s;
      int		len;
  {
!     ignored = (int)write(1, (char *)s, len);
      if (p_wd)		/* Unix is too fast, slow down a bit more */
  	RealWaitForChar(read_cmd_fd, p_wd, NULL);
  }
***************
*** 3927,3935 ****
  		 */
  		if (fd >= 0)
  		{
! 		    dup(fd); /* To replace stdin  (file descriptor 0) */
! 		    dup(fd); /* To replace stdout (file descriptor 1) */
! 		    dup(fd); /* To replace stderr (file descriptor 2) */
  
  		    /* Don't need this now that we've duplicated it */
  		    close(fd);
--- 3930,3938 ----
  		 */
  		if (fd >= 0)
  		{
! 		    ignored = dup(fd); /* To replace stdin  (fd 0) */
! 		    ignored = dup(fd); /* To replace stdout (fd 1) */
! 		    ignored = dup(fd); /* To replace stderr (fd 2) */
  
  		    /* Don't need this now that we've duplicated it */
  		    close(fd);
***************
*** 3997,4009 ****
  
  		    /* set up stdin/stdout/stderr for the child */
  		    close(0);
! 		    dup(pty_slave_fd);
  		    close(1);
! 		    dup(pty_slave_fd);
  		    if (gui.in_use)
  		    {
  			close(2);
! 			dup(pty_slave_fd);
  		    }
  
  		    close(pty_slave_fd);    /* has been dupped, close it now */
--- 4000,4012 ----
  
  		    /* set up stdin/stdout/stderr for the child */
  		    close(0);
! 		    ignored = dup(pty_slave_fd);
  		    close(1);
! 		    ignored = dup(pty_slave_fd);
  		    if (gui.in_use)
  		    {
  			close(2);
! 			ignored = dup(pty_slave_fd);
  		    }
  
  		    close(pty_slave_fd);    /* has been dupped, close it now */
***************
*** 4014,4026 ****
  		    /* set up stdin for the child */
  		    close(fd_toshell[1]);
  		    close(0);
! 		    dup(fd_toshell[0]);
  		    close(fd_toshell[0]);
  
  		    /* set up stdout for the child */
  		    close(fd_fromshell[0]);
  		    close(1);
! 		    dup(fd_fromshell[1]);
  		    close(fd_fromshell[1]);
  
  # ifdef FEAT_GUI
--- 4017,4029 ----
  		    /* set up stdin for the child */
  		    close(fd_toshell[1]);
  		    close(0);
! 		    ignored = dup(fd_toshell[0]);
  		    close(fd_toshell[0]);
  
  		    /* set up stdout for the child */
  		    close(fd_fromshell[0]);
  		    close(1);
! 		    ignored = dup(fd_fromshell[1]);
  		    close(fd_fromshell[1]);
  
  # ifdef FEAT_GUI
***************
*** 4028,4034 ****
  		    {
  			/* set up stderr for the child */
  			close(2);
! 			dup(1);
  		    }
  # endif
  		}
--- 4031,4037 ----
  		    {
  			/* set up stderr for the child */
  			close(2);
! 			ignored = dup(1);
  		    }
  # endif
  		}
***************
*** 4159,4165 ****
  					    && (lnum !=
  						    curbuf->b_ml.ml_line_count
  						    || curbuf->b_p_eol)))
! 				    write(toshell_fd, "\n", (size_t)1);
  				++lnum;
  				if (lnum > curbuf->b_op_end.lnum)
  				{
--- 4162,4169 ----
  					    && (lnum !=
  						    curbuf->b_ml.ml_line_count
  						    || curbuf->b_p_eol)))
! 				    ignored = write(toshell_fd, "\n",
! 								   (size_t)1);
  				++lnum;
  				if (lnum > curbuf->b_op_end.lnum)
  				{
*** ../vim-7.2.054/src/spell.c	Fri Nov 28 10:08:05 2008
--- src/spell.c	Fri Nov 28 12:28:24 2008
***************
*** 4950,4956 ****
  static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
  static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
  static void clear_node __ARGS((wordnode_T *node));
! static int put_node __ARGS((FILE *fd, wordnode_T *node, int index, int regionmask, int prefixtree));
  static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
  static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
  static int sug_maketable __ARGS((spellinfo_T *spin));
--- 4950,4956 ----
  static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
  static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
  static void clear_node __ARGS((wordnode_T *node));
! static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree));
  static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
  static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
  static int sug_maketable __ARGS((spellinfo_T *spin));
*** ../vim-7.2.054/src/ui.c	Sun Sep 14 15:57:54 2008
--- src/ui.c	Fri Nov 28 19:04:36 2008
***************
*** 1820,1826 ****
  #ifdef HAVE_DUP
  	    /* Use stderr for stdin, also works for shell commands. */
  	    close(0);
! 	    dup(2);
  #else
  	    read_cmd_fd = 2;	/* read from stderr instead of stdin */
  #endif
--- 1820,1826 ----
  #ifdef HAVE_DUP
  	    /* Use stderr for stdin, also works for shell commands. */
  	    close(0);
! 	    ignored = dup(2);
  #else
  	    read_cmd_fd = 2;	/* read from stderr instead of stdin */
  #endif
*** ../vim-7.2.054/src/window.c	Sat Nov 15 14:10:23 2008
--- src/window.c	Fri Nov 28 18:46:45 2008
***************
*** 4029,4042 ****
  	    if (mch_dirname(cwd, MAXPATHL) == OK)
  		globaldir = vim_strsave(cwd);
  	}
! 	mch_chdir((char *)curwin->w_localdir);
! 	shorten_fnames(TRUE);
      }
      else if (globaldir != NULL)
      {
  	/* Window doesn't have a local directory and we are not in the global
  	 * directory: Change to the global directory. */
! 	mch_chdir((char *)globaldir);
  	vim_free(globaldir);
  	globaldir = NULL;
  	shorten_fnames(TRUE);
--- 4029,4042 ----
  	    if (mch_dirname(cwd, MAXPATHL) == OK)
  		globaldir = vim_strsave(cwd);
  	}
! 	if (mch_chdir((char *)curwin->w_localdir) == 0)
! 	    shorten_fnames(TRUE);
      }
      else if (globaldir != NULL)
      {
  	/* Window doesn't have a local directory and we are not in the global
  	 * directory: Change to the global directory. */
! 	ignored = mch_chdir((char *)globaldir);
  	vim_free(globaldir);
  	globaldir = NULL;
  	shorten_fnames(TRUE);
*** ../vim-7.2.054/src/version.c	Fri Nov 28 12:05:07 2008
--- src/version.c	Fri Nov 28 21:12:42 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     55,
  /**/

-- 
PRINCE:    He's come to rescue me, father.
LAUNCELOT: (embarrassed) Well, let's not jump to conclusions ...
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

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


--- NEW FILE 7.2.056 ---
To: vim-dev at vim.org
Subject: Patch 7.2.056
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.2.056 (after 7.2.050)
Problem:    Tests 58 and 59 fail.
Solution:   Don't invoke fwrite() with a zero length. (Dominique Pelle)
Files:	    src/spell.c


*** ../vim-7.2.055/src/spell.c	Fri Nov 28 21:26:50 2008
--- src/spell.c	Sat Nov 29 19:58:21 2008
***************
*** 8112,8118 ****
  		p = rr == 1 ? ftp->ft_from : ftp->ft_to;
  		l = (int)STRLEN(p);
  		putc(l, fd);
! 		fwv &= fwrite(p, l, (size_t)1, fd);
  	    }
  	}
  
--- 8218,8225 ----
  		p = rr == 1 ? ftp->ft_from : ftp->ft_to;
  		l = (int)STRLEN(p);
  		putc(l, fd);
! 		if (l > 0)
! 		    fwv &= fwrite(p, l, (size_t)1, fd);
  	    }
  	}
  
*** ../vim-7.2.055/src/version.c	Fri Nov 28 21:26:50 2008
--- src/version.c	Sat Nov 29 20:10:05 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     56,
  /**/

-- 
GUARD #1:  Where'd you get the coconut?
ARTHUR:    We found them.
GUARD #1:  Found them?  In Mercea?  The coconut's tropical!
ARTHUR:    What do you mean?
GUARD #1:  Well, this is a temperate zone.
                                  The Quest for the Holy Grail (Monty Python)

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


--- NEW FILE 7.2.057 ---
To: vim-dev at vim.org
Subject: Patch 7.2.057
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.2.057 (after 7.2.056)
Problem:    Combination of int and size_t may not work.
Solution:   Use size_t for variable.
Files:	    src/spell.c


*** ../vim-7.2.056/src/spell.c	Sat Nov 29 20:10:59 2008
--- src/spell.c	Sat Nov 29 20:15:43 2008
***************
*** 7926,7932 ****
      char_u	*p;
      int		rr;
      int		retval = OK;
!     int		fwv = 1;  /* collect return value of fwrite() to avoid
  			     warnings from picky compiler */
  
      fd = mch_fopen((char *)fname, "w");
--- 8028,8034 ----
      char_u	*p;
      int		rr;
      int		retval = OK;
!     size_t	fwv = 1;  /* collect return value of fwrite() to avoid
  			     warnings from picky compiler */
  
      fd = mch_fopen((char *)fname, "w");
***************
*** 7939,7944 ****
--- 8041,8050 ----
      /* <HEADER>: <fileID> <versionnr> */
  							    /* <fileID> */
      fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
+     if (fwv != (size_t)1)
+ 	/* Catch first write error, don't try writing more. */
+ 	goto theend;
+ 
      putc(VIMSPELLVERSION, fd);				    /* <versionnr> */
  
      /*
***************
*** 8300,8310 ****
      /* Write another byte to check for errors (file system full). */
      if (putc(0, fd) == EOF)
  	retval = FAIL;
! 
      if (fclose(fd) == EOF)
  	retval = FAIL;
  
!     if (fwv != 1)
  	retval = FAIL;
      if (retval == FAIL)
  	EMSG(_(e_write));
--- 8406,8416 ----
      /* Write another byte to check for errors (file system full). */
      if (putc(0, fd) == EOF)
  	retval = FAIL;
! theend:
      if (fclose(fd) == EOF)
  	retval = FAIL;
  
!     if (fwv != (size_t)1)
  	retval = FAIL;
      if (retval == FAIL)
  	EMSG(_(e_write));
***************
*** 9897,9903 ****
      char_u	*p;
      int		len;
      int		totlen;
!     int		x = 1;  /* collect return value of fwrite() */
  
      if (fd != NULL)
  	put_bytes(fd, (long_u)gap->ga_len, 2);	    /* <prefcondcnt> */
--- 10003,10009 ----
      char_u	*p;
      int		len;
      int		totlen;
!     size_t	x = 1;  /* collect return value of fwrite() */
  
      if (fd != NULL)
  	put_bytes(fd, (long_u)gap->ga_len, 2);	    /* <prefcondcnt> */
*** ../vim-7.2.056/src/version.c	Sat Nov 29 20:10:59 2008
--- src/version.c	Sat Nov 29 20:13:46 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     57,
  /**/

-- 
GUARD #1:  What -- a swallow carrying a coconut?
ARTHUR:    It could grip it by the husk!
GUARD #1:  It's not a question of where he grips it!  It's a simple question
           of weight ratios!  A five ounce bird could not carry a 1 pound
           coconut.
                                  The Quest for the Holy Grail (Monty Python)

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


--- NEW FILE 7.2.058 ---
To: vim-dev at vim.org
Subject: Patch 7.2.058
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.2.058
Problem:    Can't add a patch name to the ":version" output.
Solution:   Add the extra_patches array.
Files:	    src/version.c


*** ../vim-7.2.057/src/version.c	Sat Nov 29 20:18:44 2008
--- src/version.c	Sun Nov 30 12:12:31 2008
***************
*** 794,799 ****
--- 796,814 ----
      0
  };
  
+ /*
+  * Place to put a short description when adding a feature with a patch.
+  * Keep it short, e.g.,: "relative numbers", "persistent undo".
+  * Also add a comment marker to separate the lines.
+  * See the official Vim patches for the diff format: It must use a context of
+  * one line only.  Use "diff -C2".
+  */
+ static char *(extra_patches[]) =
+ {   /* Add your patch description below this line */
+ /**/
+     NULL
+ };
+ 
      int
  highest_patch()
  {
***************
*** 939,944 ****
--- 954,972 ----
  	}
      }
  
+     /* Print the list of extra patch descriptions if there is at least one. */
+     if (extra_patches[0] != NULL)
+     {
+ 	MSG_PUTS(_("\nExtra patches: "));
+ 	s = "";
+ 	for (i = 0; extra_patches[i] != NULL; ++i)
+ 	{
+ 	    MSG_PUTS(s);
+ 	    s = ", ";
+ 	    MSG_PUTS(extra_patches[i]);
+ 	}
+     }
+ 
  #ifdef MODIFIED_BY
      MSG_PUTS("\n");
      MSG_PUTS(_("Modified by "));
*** ../vim-7.2.057/src/version.c	Sat Nov 29 20:18:44 2008
--- src/version.c	Sun Nov 30 12:12:31 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     58,
  /**/

-- 
ARTHUR:    Well, it doesn't matter.  Will you go and tell your master that
           Arthur from the Court of Camelot is here.
GUARD #1:  Listen, in order to maintain air-speed velocity, a swallow
           needs to beat its wings 43 times every second, right?
ARTHUR:    Please!
                                  The Quest for the Holy Grail (Monty Python)

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


--- NEW FILE 7.2.059 ---
To: vim-dev at vim.org
Subject: Patch 7.2.059
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.2.059
Problem:    Diff display is not always updated.
Solution:   Update the display more often.
Files:	    src/diff.c


*** ../vim-7.2.058/src/diff.c	Fri Nov 28 21:26:50 2008
--- src/diff.c	Fri Nov 28 17:23:35 2008
***************
*** 73,78 ****
--- 73,80 ----
  	{
  	    tp->tp_diffbuf[i] = NULL;
  	    tp->tp_diff_invalid = TRUE;
+ 	    if (tp == curtab)
+ 		diff_redraw(TRUE);
  	}
      }
  }
***************
*** 102,107 ****
--- 104,110 ----
  	    {
  		curtab->tp_diffbuf[i] = NULL;
  		curtab->tp_diff_invalid = TRUE;
+ 		diff_redraw(TRUE);
  	    }
  	}
      }
***************
*** 131,136 ****
--- 134,140 ----
  	{
  	    curtab->tp_diffbuf[i] = buf;
  	    curtab->tp_diff_invalid = TRUE;
+ 	    diff_redraw(TRUE);
  	    return;
  	}
  
*** ../vim-7.2.058/src/version.c	Sun Nov 30 12:14:35 2008
--- src/version.c	Sun Nov 30 15:13:18 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     59,
  /**/

-- 
GUARD #2:  Wait a minute -- supposing two swallows carried it together?
GUARD #1:  No, they'd have to have it on a line.
GUARD #2:  Well, simple!  They'd just use a standard creeper!
GUARD #1:  What, held under the dorsal guiding feathers?
GUARD #2:  Well, why not?
                                  The Quest for the Holy Grail (Monty Python)

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


--- NEW FILE 7.2.060 ---
To: vim-dev at vim.org
Subject: Patch 7.2.060
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.2.060
Problem:    When a spell files has many compound rules it may take a very long
	    time making the list of suggestions.  Displaying also can be slow
	    when there are misspelled words.
	    Can't parse some Hunspell .aff files.
Solution:   Check if a compounding can possibly work before trying a
	    combination, if the compound rules don't contain wildcards.
	    Implement using CHECKCOMPOUNDPATTERN.
	    Ignore COMPOUNDRULES.  Ignore a comment after most items.
	    Accept ONLYINCOMPOUND as an alias for NEEDCOMPOUND.
	    Accept FORBIDDENWORD as an alias for BAD.
Files:	    runtime/doc/spell.txt, src/spell.c


*** ../vim-7.2.059/runtime/doc/spell.txt	Sat Aug  9 19:36:52 2008
--- runtime/doc/spell.txt	Sun Nov 30 16:30:02 2008
***************
*** 1,4 ****
! *spell.txt*	For Vim version 7.2.  Last change: 2008 Jun 21
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
--- 1,4 ----
! *spell.txt*	For Vim version 7.2.  Last change: 2008 Nov 30
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
***************
*** 831,838 ****
  
  	# comment line ~
  
! With some items it's also possible to put a comment after it, but this isn't
! supported in general.
  
  
  ENCODING							*spell-SET*
--- 831,841 ----
  
  	# comment line ~
  
! Items with a fixed number of arguments can be followed by a comment.  But only
! if none of the arguments can contain white space.  The comment must start with
! a "#" character.  Example:
! 
! 	KEEPCASE =  # fix case for words with this flag ~
  
  
  ENCODING							*spell-SET*
***************
*** 965,970 ****
--- 968,976 ----
  
  Note: When using utf-8 only characters up to 65000 may be used for flags.
  
+ Note: even when using "num" or "long" the number of flags available to
+ compounding and prefixes is limited to about 250.
+ 
  
  AFFIXES
  					    *spell-PFX* *spell-SFX*
***************
*** 1178,1183 ****
--- 1185,1193 ----
  The flag also applies to the word with affixes, thus this can be used to mark
  a whole bunch of related words as bad.
  
+ 							*spell-FORBIDDENWORD*
+ FORBIDDENWORD can be used just like BAD.  For compatibility with Hunspell.
+ 
  							*spell-NEEDAFFIX*
  The NEEDAFFIX flag is used to require that a word is used with an affix.  The
  word itself is not a good word (unless there is an empty affix).  Example:
***************
*** 1268,1273 ****
--- 1278,1287 ----
  
  	NEEDCOMPOUND & ~
  
+ 							*spell-ONLYINCOMPOUND*
+ The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND.  Supported for
+ compatiblity with Hunspell.
+ 
  							*spell-COMPOUNDMIN*
  The minimal character length of a word used for compounding is specified with
  COMPOUNDMIN.  Example:
***************
*** 1328,1333 ****
--- 1342,1361 ----
  rules.  Can also be used for an affix to count the affix as a compounding
  word.
  
+ 						*spell-CHECKCOMPOUNDPATTERN*
+ CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the
+ position where two words are compounded together forbids the compound.
+ For example:
+ 	CHECKCOMPOUNDPATTERN o e ~
+ 
+ This forbids compounding if the first word ends in "o" and the second word
+ starts with "e".
+ 
+ The arguments must be plain text, no patterns are actually supported, despite
+ the item name.  Case is always ignored.
+ 
+ The Hunspell feature to use three arguments and flags is not supported.
+ 
  							*spell-SYLLABLE*
  The SYLLABLE item defines characters or character sequences that are used to
  count the number of syllables in a word.  Example:
***************
*** 1496,1501 ****
--- 1524,1533 ----
  ACCENT		(Hunspell)				*spell-ACCENT*
  		Use MAP instead. |spell-MAP|
  
+ BREAK		(Hunspell)				*spell-BREAK*
+ 		Define break points.  Unclear how it works exactly.
+ 		Not supported.
+ 
  CHECKCOMPOUNDCASE  (Hunspell)			*spell-CHECKCOMPOUNDCASE*
  		Disallow uppercase letters at compound word boundaries.
  		Not supported.
***************
*** 1512,1520 ****
  		Forbid three identical characters when compounding.  Not
  		supported.
  
- CHECKCOMPOUNDPATTERN  (Hunspell)		*spell-CHECKCOMPOUNDPATTERN*
- 		Forbid compounding when patterns match.  Not supported.
- 
  COMPLEXPREFIXES  (Hunspell)				*spell-COMPLEXPREFIXES*
  		Enables using two prefixes.  Not supported.
  
--- 1544,1549 ----
***************
*** 1536,1548 ****
  COMPOUNDMIDDLE	(Hunspell)				*spell-COMPOUNDMIDDLE*
  		Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
  
  COMPOUNDSYLLABLE  (Hunspell)			*spell-COMPOUNDSYLLABLE*
  		Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
  		|spell-COMPOUNDSYLMAX|
  
! FORBIDDENWORD	(Hunspell)				*spell-FORBIDDENWORD*
! 		Use BAD instead. |spell-BAD|
! 
  LANG		(Hunspell)				*spell-LANG*
  		This specifies language-specific behavior.  This actually
  		moves part of the language knowledge into the program,
--- 1565,1582 ----
  COMPOUNDMIDDLE	(Hunspell)				*spell-COMPOUNDMIDDLE*
  		Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
  
+ COMPOUNDRULES	(Hunspell)				*spell-COMPOUNDRULES*
+ 		Number of COMPOUNDRULE lines following.  Ignored, but the
+ 		argument must be a number.
+ 
  COMPOUNDSYLLABLE  (Hunspell)			*spell-COMPOUNDSYLLABLE*
  		Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
  		|spell-COMPOUNDSYLMAX|
  
! KEY		(Hunspell)				*spell-KEY*
! 		Define characters that are close together on the keyboard.
! 		Used to give better suggestions.  Not supported.
! 		
  LANG		(Hunspell)				*spell-LANG*
  		This specifies language-specific behavior.  This actually
  		moves part of the language knowledge into the program,
***************
*** 1553,1562 ****
  		Only needed for morphological analysis.
  
  MAXNGRAMSUGS	(Hunspell)				*spell-MAXNGRAMSUGS*
! 		Not supported.
! 
! ONLYINCOMPOUND	(Hunspell)				*spell-ONLYINCOMPOUND*
! 		Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND|
  
  PSEUDOROOT	(Hunspell)				*spell-PSEUDOROOT*
  		Use NEEDAFFIX instead. |spell-NEEDAFFIX|
--- 1587,1593 ----
  		Only needed for morphological analysis.
  
  MAXNGRAMSUGS	(Hunspell)				*spell-MAXNGRAMSUGS*
! 		Set number of n-gram suggestions.  Not supported.
  
  PSEUDOROOT	(Hunspell)				*spell-PSEUDOROOT*
  		Use NEEDAFFIX instead. |spell-NEEDAFFIX|
*** ../vim-7.2.059/src/spell.c	Sat Nov 29 20:18:44 2008
--- src/spell.c	Sun Nov 30 20:59:13 2008
***************
*** 469,474 ****
--- 469,475 ----
      garray_T	sl_comppat;	/* CHECKCOMPOUNDPATTERN items */
      regprog_T	*sl_compprog;	/* COMPOUNDRULE turned into a regexp progrm
  				 * (NULL when no compounding) */
+     char_u	*sl_comprules;	/* all COMPOUNDRULE concatenated (or NULL) */
      char_u	*sl_compstartflags; /* flags for first compound word */
      char_u	*sl_compallflags; /* all flags for compound words */
      char_u	sl_nobreak;	/* When TRUE: no spaces between words */
***************
*** 839,845 ****
--- 840,849 ----
  static void slang_clear __ARGS((slang_T *lp));
  static void slang_clear_sug __ARGS((slang_T *lp));
  static void find_word __ARGS((matchinf_T *mip, int mode));
+ static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap));
  static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags));
+ static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag));
+ static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags));
  static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req));
  static void find_prefix __ARGS((matchinf_T *mip, int mode));
  static int fold_more __ARGS((matchinf_T *mip));
***************
*** 1519,1524 ****
--- 1523,1533 ----
  					    ((unsigned)flags >> 24)))
  		    continue;
  
+ 		/* If there is a match with a CHECKCOMPOUNDPATTERN rule
+ 		 * discard the compound word. */
+ 		if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat))
+ 		    continue;
+ 
  		if (mode == FIND_COMPOUND)
  		{
  		    int	    capflags;
***************
*** 1577,1582 ****
--- 1586,1596 ----
  		    if (!can_compound(slang, fword, mip->mi_compflags))
  			continue;
  		}
+ 		else if (slang->sl_comprules != NULL
+ 			     && !match_compoundrule(slang, mip->mi_compflags))
+ 		    /* The compound flags collected so far do not match any
+ 		     * COMPOUNDRULE, discard the compounded word. */
+ 		    continue;
  	    }
  
  	    /* Check NEEDCOMPOUND: can't use word without compounding. */
***************
*** 1727,1732 ****
--- 1741,1779 ----
  }
  
  /*
+  * Return TRUE if there is a match between the word ptr[wlen] and
+  * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another
+  * word.
+  * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the
+  * end of ptr[wlen] and the second part matches after it.
+  */
+     static int
+ match_checkcompoundpattern(ptr, wlen, gap)
+     char_u	*ptr;
+     int		wlen;
+     garray_T	*gap;  /* &sl_comppat */
+ {
+     int		i;
+     char_u	*p;
+     int		len;
+ 
+     for (i = 0; i + 1 < gap->ga_len; i += 2)
+     {
+ 	p = ((char_u **)gap->ga_data)[i + 1];
+ 	if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0)
+ 	{
+ 	    /* Second part matches at start of following compound word, now
+ 	     * check if first part matches at end of previous word. */
+ 	    p = ((char_u **)gap->ga_data)[i];
+ 	    len = STRLEN(p);
+ 	    if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0)
+ 		return TRUE;
+ 	}
+     }
+     return FALSE;
+ }
+ 
+ /*
   * Return TRUE if "flags" is a valid sequence of compound flags and "word"
   * does not have too many syllables.
   */
***************
*** 1773,1778 ****
--- 1820,1917 ----
  }
  
  /*
+  * Return TRUE when the sequence of flags in "compflags" plus "flag" can
+  * possibly form a valid compounded word.  This also checks the COMPOUNDRULE
+  * lines if they don't contain wildcards.
+  */
+     static int
+ can_be_compound(sp, slang, compflags, flag)
+     trystate_T	*sp;
+     slang_T	*slang;
+     char_u	*compflags;
+     int		flag;
+ {
+     /* If the flag doesn't appear in sl_compstartflags or sl_compallflags
+      * then it can't possibly compound. */
+     if (!byte_in_str(sp->ts_complen == sp->ts_compsplit
+ 		? slang->sl_compstartflags : slang->sl_compallflags, flag))
+ 	return FALSE;
+ 
+     /* If there are no wildcards, we can check if the flags collected so far
+      * possibly can form a match with COMPOUNDRULE patterns.  This only
+      * makes sense when we have two or more words. */
+     if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit)
+     {
+ 	int v;
+ 
+ 	compflags[sp->ts_complen] = flag;
+ 	compflags[sp->ts_complen + 1] = NUL;
+ 	v = match_compoundrule(slang, compflags + sp->ts_compsplit);
+ 	compflags[sp->ts_complen] = NUL;
+ 	return v;
+     }
+ 
+     return TRUE;
+ }
+ 
+ 
+ /*
+  * Return TRUE if the compound flags in compflags[] match the start of any
+  * compound rule.  This is used to stop trying a compound if the flags
+  * collected so far can't possibly match any compound rule.
+  * Caller must check that slang->sl_comprules is not NULL.
+  */
+     static int
+ match_compoundrule(slang, compflags)
+     slang_T	*slang;
+     char_u	*compflags;
+ {
+     char_u	*p;
+     int		i;
+     int		c;
+ 
+     /* loop over all the COMPOUNDRULE entries */
+     for (p = slang->sl_comprules; *p != NUL; ++p)
+     {
+ 	/* loop over the flags in the compound word we have made, match
+ 	 * them against the current rule entry */
+ 	for (i = 0; ; ++i)
+ 	{
+ 	    c = compflags[i];
+ 	    if (c == NUL)
+ 		/* found a rule that matches for the flags we have so far */
+ 		return TRUE;
+ 	    if (*p == '/' || *p == NUL)
+ 		break;  /* end of rule, it's too short */
+ 	    if (*p == '[')
+ 	    {
+ 		int match = FALSE;
+ 
+ 		/* compare against all the flags in [] */
+ 		++p;
+ 		while (*p != ']' && *p != NUL)
+ 		    if (*p++ == c)
+ 			match = TRUE;
+ 		if (!match)
+ 		    break;  /* none matches */
+ 	    }
+ 	    else if (*p != c)
+ 		break;  /* flag of word doesn't match flag in pattern */
+ 	    ++p;
+ 	}
+ 
+ 	/* Skip to the next "/", where the next pattern starts. */
+ 	p = vim_strchr(p, '/');
+ 	if (p == NULL)
+ 	    break;
+     }
+ 
+     /* Checked all the rules and none of them match the flags, so there
+      * can't possibly be a compound starting with these flags. */
+     return FALSE;
+ }
+ 
+ /*
   * Return non-zero if the prefix indicated by "arridx" matches with the prefix
   * ID in "flags" for the word "word".
   * The WF_RAREPFX flag is included in the return value for a rare prefix.
***************
*** 2513,2521 ****
--- 2652,2662 ----
      lp->sl_midword = NULL;
  
      vim_free(lp->sl_compprog);
+     vim_free(lp->sl_comprules);
      vim_free(lp->sl_compstartflags);
      vim_free(lp->sl_compallflags);
      lp->sl_compprog = NULL;
+     lp->sl_comprules = NULL;
      lp->sl_compstartflags = NULL;
      lp->sl_compallflags = NULL;
  
***************
*** 3460,3465 ****
--- 3601,3607 ----
      char_u	*pp;
      char_u	*cp;
      char_u	*ap;
+     char_u	*crp;
      int		cnt;
      garray_T	*gap;
  
***************
*** 3545,3550 ****
--- 3687,3698 ----
      slang->sl_compallflags = ap;
      *ap = NUL;
  
+     /* And a list of all patterns in their original form, for checking whether
+      * compounding may work in match_compoundrule().  This is freed when we
+      * encounter a wildcard, the check doesn't work then. */
+     crp = alloc(todo + 1);
+     slang->sl_comprules = crp;
+ 
      pp = pat;
      *pp++ = '^';
      *pp++ = '\\';
***************
*** 3587,3592 ****
--- 3735,3754 ----
  		    atstart = 0;
  	    }
  	}
+ 
+ 	/* Copy flag to "sl_comprules", unless we run into a wildcard. */
+ 	if (crp != NULL)
+ 	{
+ 	    if (c == '+' || c == '*')
+ 	    {
+ 		vim_free(slang->sl_comprules);
+ 		slang->sl_comprules = NULL;
+ 		crp = NULL;
+ 	    }
+ 	    else
+ 		*crp++ = c;
+ 	}
+ 
  	if (c == '/')	    /* slash separates two items */
  	{
  	    *pp++ = '\\';
***************
*** 3611,3616 ****
--- 3773,3781 ----
      *pp++ = '$';
      *pp = NUL;
  
+     if (crp != NULL)
+ 	*crp = NUL;
+ 
      slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT);
      vim_free(pat);
      if (slang->sl_compprog == NULL)
***************
*** 4915,4920 ****
--- 5080,5086 ----
  } spellinfo_T;
  
  static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname));
+ static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int	 mincount));
  static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry));
  static int spell_info_item __ARGS((char_u *s));
  static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u	*fname, int lnum));
***************
*** 5223,5230 ****
  	/* Handle non-empty lines. */
  	if (itemcnt > 0)
  	{
! 	    if (STRCMP(items[0], "SET") == 0 && itemcnt == 2
! 						       && aff->af_enc == NULL)
  	    {
  #ifdef FEAT_MBYTE
  		/* Setup for conversion from "ENC" to 'encoding'. */
--- 5389,5395 ----
  	/* Handle non-empty lines. */
  	if (itemcnt > 0)
  	{
! 	    if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL)
  	    {
  #ifdef FEAT_MBYTE
  		/* Setup for conversion from "ENC" to 'encoding'. */
***************
*** 5239,5245 ****
  		    smsg((char_u *)_("Conversion in %s not supported"), fname);
  #endif
  	    }
! 	    else if (STRCMP(items[0], "FLAG") == 0 && itemcnt == 2
  					      && aff->af_flagtype == AFT_CHAR)
  	    {
  		if (STRCMP(items[1], "long") == 0)
--- 5404,5410 ----
  		    smsg((char_u *)_("Conversion in %s not supported"), fname);
  #endif
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "FLAG", 2)
  					      && aff->af_flagtype == AFT_CHAR)
  	    {
  		if (STRCMP(items[1], "long") == 0)
***************
*** 5284,5352 ****
  			spin->si_info = p;
  		    }
  	    }
! 	    else if (STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 2
  							   && midword == NULL)
  	    {
  		midword = getroom_save(spin, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "TRY") == 0 && itemcnt == 2)
  	    {
  		/* ignored, we look in the tree for what chars may appear */
  	    }
  	    /* TODO: remove "RAR" later */
! 	    else if ((STRCMP(items[0], "RAR") == 0
! 			|| STRCMP(items[0], "RARE") == 0) && itemcnt == 2
! 						       && aff->af_rare == 0)
  	    {
  		aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
  	    /* TODO: remove "KEP" later */
! 	    else if ((STRCMP(items[0], "KEP") == 0
! 		    || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 2
  						     && aff->af_keepcase == 0)
  	    {
  		aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2
! 						       && aff->af_bad == 0)
  	    {
  		aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 2
  						    && aff->af_needaffix == 0)
  	    {
  		aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 2
  						    && aff->af_circumfix == 0)
  	    {
  		aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 2
  						    && aff->af_nosuggest == 0)
  	    {
  		aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2
  						     && aff->af_needcomp == 0)
  	    {
  		aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 2
  						     && aff->af_comproot == 0)
  	    {
  		aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 0
! 				   && itemcnt == 2 && aff->af_compforbid == 0)
  	    {
  		aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
--- 5449,5519 ----
  			spin->si_info = p;
  		    }
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "MIDWORD", 2)
  							   && midword == NULL)
  	    {
  		midword = getroom_save(spin, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "TRY", 2))
  	    {
  		/* ignored, we look in the tree for what chars may appear */
  	    }
  	    /* TODO: remove "RAR" later */
! 	    else if ((is_aff_rule(items, itemcnt, "RAR", 2)
! 			|| is_aff_rule(items, itemcnt, "RARE", 2))
! 							 && aff->af_rare == 0)
  	    {
  		aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
  	    /* TODO: remove "KEP" later */
! 	    else if ((is_aff_rule(items, itemcnt, "KEP", 2)
! 			|| is_aff_rule(items, itemcnt, "KEEPCASE", 2))
  						     && aff->af_keepcase == 0)
  	    {
  		aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if ((is_aff_rule(items, itemcnt, "BAD", 2)
! 			|| is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2))
! 							  && aff->af_bad == 0)
  	    {
  		aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2)
  						    && aff->af_needaffix == 0)
  	    {
  		aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2)
  						    && aff->af_circumfix == 0)
  	    {
  		aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2)
  						    && aff->af_nosuggest == 0)
  	    {
  		aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2)
! 			|| is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2))
  						     && aff->af_needcomp == 0)
  	    {
  		aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2)
  						     && aff->af_comproot == 0)
  	    {
  		aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2)
! 						   && aff->af_compforbid == 0)
  	    {
  		aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
***************
*** 5354,5361 ****
  		    smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
  			    fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDPERMITFLAG") == 0
! 				   && itemcnt == 2 && aff->af_comppermit == 0)
  	    {
  		aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
--- 5521,5528 ----
  		    smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
  			    fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2)
! 						   && aff->af_comppermit == 0)
  	    {
  		aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
  								 fname, lnum);
***************
*** 5363,5369 ****
  		    smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
  			    fname, lnum);
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 2
  							 && compflags == NULL)
  	    {
  		/* Turn flag "c" into COMPOUNDRULE compatible string "c+",
--- 5530,5536 ----
  		    smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
  			    fname, lnum);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2)
  							 && compflags == NULL)
  	    {
  		/* Turn flag "c" into COMPOUNDRULE compatible string "c+",
***************
*** 5376,5382 ****
  		    compflags = p;
  		}
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2)
  	    {
  		/* Concatenate this string to previously defined ones, using a
  		 * slash to separate them. */
--- 5543,5557 ----
  		    compflags = p;
  		}
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2))
! 	    {
! 		/* We don't use the count, but do check that it's a number and
! 		 * not COMPOUNDRULE mistyped. */
! 		if (atoi((char *)items[1]) == 0)
! 		    smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"),
! 						       fname, lnum, items[1]);
! 	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
  	    {
  		/* Concatenate this string to previously defined ones, using a
  		 * slash to separate them. */
***************
*** 5395,5401 ****
  		    compflags = p;
  		}
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 2
  							      && compmax == 0)
  	    {
  		compmax = atoi((char *)items[1]);
--- 5570,5576 ----
  		    compflags = p;
  		}
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
  							      && compmax == 0)
  	    {
  		compmax = atoi((char *)items[1]);
***************
*** 5403,5409 ****
  		    smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 2
  							   && compminlen == 0)
  	    {
  		compminlen = atoi((char *)items[1]);
--- 5578,5584 ----
  		    smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2)
  							   && compminlen == 0)
  	    {
  		compminlen = atoi((char *)items[1]);
***************
*** 5411,5417 ****
  		    smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 2
  							   && compsylmax == 0)
  	    {
  		compsylmax = atoi((char *)items[1]);
--- 5586,5592 ----
  		    smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2)
  							   && compsylmax == 0)
  	    {
  		compsylmax = atoi((char *)items[1]);
***************
*** 5419,5450 ****
  		    smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1)
  	    {
  		compoptions |= COMP_CHECKDUP;
  	    }
! 	    else if (STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1)
  	    {
  		compoptions |= COMP_CHECKREP;
  	    }
! 	    else if (STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1)
  	    {
  		compoptions |= COMP_CHECKCASE;
  	    }
! 	    else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0
! 							      && itemcnt == 1)
  	    {
  		compoptions |= COMP_CHECKTRIPLE;
  	    }
! 	    else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
! 							      && itemcnt == 2)
  	    {
  		if (atoi((char *)items[1]) == 0)
  		    smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
! 							      && itemcnt == 3)
  	    {
  		garray_T    *gap = &spin->si_comppat;
  		int	    i;
--- 5594,5622 ----
  		    smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1))
  	    {
  		compoptions |= COMP_CHECKDUP;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1))
  	    {
  		compoptions |= COMP_CHECKREP;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1))
  	    {
  		compoptions |= COMP_CHECKCASE;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1))
  	    {
  		compoptions |= COMP_CHECKTRIPLE;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2))
  	    {
  		if (atoi((char *)items[1]) == 0)
  		    smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
  						       fname, lnum, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3))
  	    {
  		garray_T    *gap = &spin->si_comppat;
  		int	    i;
***************
*** 5463,5486 ****
  					       = getroom_save(spin, items[2]);
  		}
  	    }
! 	    else if (STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 2
  							  && syllable == NULL)
  	    {
  		syllable = getroom_save(spin, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1)
  	    {
  		spin->si_nobreak = TRUE;
  	    }
! 	    else if (STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1)
  	    {
  		spin->si_nosplitsugs = TRUE;
  	    }
! 	    else if (STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1)
  	    {
  		spin->si_nosugfile = TRUE;
  	    }
! 	    else if (STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1)
  	    {
  		aff->af_pfxpostpone = TRUE;
  	    }
--- 5635,5658 ----
  					       = getroom_save(spin, items[2]);
  		}
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2)
  							  && syllable == NULL)
  	    {
  		syllable = getroom_save(spin, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "NOBREAK", 1))
  	    {
  		spin->si_nobreak = TRUE;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1))
  	    {
  		spin->si_nosplitsugs = TRUE;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1))
  	    {
  		spin->si_nosugfile = TRUE;
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1))
  	    {
  		aff->af_pfxpostpone = TRUE;
  	    }
***************
*** 5771,5794 ****
  		    }
  		}
  	    }
! 	    else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2
! 							       && fol == NULL)
  	    {
  		fol = vim_strsave(items[1]);
  	    }
! 	    else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2
! 							       && low == NULL)
  	    {
  		low = vim_strsave(items[1]);
  	    }
! 	    else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2
! 							       && upp == NULL)
  	    {
  		upp = vim_strsave(items[1]);
  	    }
! 	    else if ((STRCMP(items[0], "REP") == 0
! 			|| STRCMP(items[0], "REPSAL") == 0)
! 		    && itemcnt == 2)
  	    {
  		/* Ignore REP/REPSAL count */;
  		if (!isdigit(*items[1]))
--- 5943,5962 ----
  		    }
  		}
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL)
  	    {
  		fol = vim_strsave(items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL)
  	    {
  		low = vim_strsave(items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL)
  	    {
  		upp = vim_strsave(items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "REP", 2)
! 		     || is_aff_rule(items, itemcnt, "REPSAL", 2))
  	    {
  		/* Ignore REP/REPSAL count */;
  		if (!isdigit(*items[1]))
***************
*** 5819,5825 ****
  					 : &spin->si_rep, items[1], items[2]);
  		}
  	    }
! 	    else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
  	    {
  		/* MAP item or count */
  		if (!found_map)
--- 5987,5993 ----
  					 : &spin->si_rep, items[1], items[2]);
  		}
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "MAP", 2))
  	    {
  		/* MAP item or count */
  		if (!found_map)
***************
*** 5856,5864 ****
  		    ga_append(&spin->si_map, '/');
  		}
  	    }
! 	    /* Accept "SAL from to" and "SAL from to # comment". */
! 	    else if (STRCMP(items[0], "SAL") == 0
! 		    && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#')))
  	    {
  		if (do_sal)
  		{
--- 6024,6031 ----
  		    ga_append(&spin->si_map, '/');
  		}
  	    }
! 	    /* Accept "SAL from to" and "SAL from to  #comment". */
! 	    else if (is_aff_rule(items, itemcnt, "SAL", 3))
  	    {
  		if (do_sal)
  		{
***************
*** 5877,5888 ****
  								: items[2]);
  		}
  	    }
! 	    else if (STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 2
  							  && sofofrom == NULL)
  	    {
  		sofofrom = getroom_save(spin, items[1]);
  	    }
! 	    else if (STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 2
  							    && sofoto == NULL)
  	    {
  		sofoto = getroom_save(spin, items[1]);
--- 6044,6055 ----
  								: items[2]);
  		}
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2)
  							  && sofofrom == NULL)
  	    {
  		sofofrom = getroom_save(spin, items[1]);
  	    }
! 	    else if (is_aff_rule(items, itemcnt, "SOFOTO", 2)
  							    && sofoto == NULL)
  	    {
  		sofoto = getroom_save(spin, items[1]);
***************
*** 6017,6022 ****
--- 6184,6205 ----
  }
  
  /*
+  * Return TRUE when items[0] equals "rulename", there are "mincount" items or
+  * a comment is following after item "mincount".
+  */
+     static int
+ is_aff_rule(items, itemcnt, rulename, mincount)
+     char_u	**items;
+     int		itemcnt;
+     char	*rulename;
+     int		mincount;
+ {
+     return (STRCMP(items[0], rulename) == 0
+ 	    && (itemcnt == mincount
+ 		|| (itemcnt > mincount && items[mincount][0] == '#')));
+ }
+ 
+ /*
   * For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from
   * ae_flags to ae_comppermit and ae_compforbid.
   */
***************
*** 11492,11506 ****
  		    vim_strncpy(preword + sp->ts_prewordlen,
  			    tword + sp->ts_splitoff,
  			    sp->ts_twordlen - sp->ts_splitoff);
! 		    p = preword;
! 		    while (*skiptowhite(p) != NUL)
! 			p = skipwhite(skiptowhite(p));
! 		    if (fword_ends && !can_compound(slang, p,
! 						compflags + sp->ts_compsplit))
! 			/* Compound is not allowed.  But it may still be
! 			 * possible if we add another (short) word. */
  			compound_ok = FALSE;
  
  		    /* Get pointer to last char of previous word. */
  		    p = preword + sp->ts_prewordlen;
  		    mb_ptr_back(preword, p);
--- 11675,11698 ----
  		    vim_strncpy(preword + sp->ts_prewordlen,
  			    tword + sp->ts_splitoff,
  			    sp->ts_twordlen - sp->ts_splitoff);
! 
! 		    /* Verify CHECKCOMPOUNDPATTERN  rules. */
! 		    if (match_checkcompoundpattern(preword,  sp->ts_prewordlen,
! 							  &slang->sl_comppat))
  			compound_ok = FALSE;
  
+ 		    if (compound_ok)
+ 		    {
+ 			p = preword;
+ 			while (*skiptowhite(p) != NUL)
+ 			    p = skipwhite(skiptowhite(p));
+ 			if (fword_ends && !can_compound(slang, p,
+ 						compflags + sp->ts_compsplit))
+ 			    /* Compound is not allowed.  But it may still be
+ 			     * possible if we add another (short) word. */
+ 			    compound_ok = FALSE;
+ 		    }
+ 
  		    /* Get pointer to last char of previous word. */
  		    p = preword + sp->ts_prewordlen;
  		    mb_ptr_back(preword, p);
***************
*** 11697,11706 ****
  			&& (slang->sl_compsylmax < MAXWLEN
  			    || sp->ts_complen + 1 - sp->ts_compsplit
  							  < slang->sl_compmax)
! 			&& (byte_in_str(sp->ts_complen == sp->ts_compsplit
! 					    ? slang->sl_compstartflags
! 					    : slang->sl_compallflags,
! 						    ((unsigned)flags >> 24))))
  		{
  		    try_compound = TRUE;
  		    compflags[sp->ts_complen] = ((unsigned)flags >> 24);
--- 11889,11897 ----
  			&& (slang->sl_compsylmax < MAXWLEN
  			    || sp->ts_complen + 1 - sp->ts_compsplit
  							  < slang->sl_compmax)
! 			&& (can_be_compound(sp, slang,
! 					 compflags, ((unsigned)flags >> 24))))
! 
  		{
  		    try_compound = TRUE;
  		    compflags[sp->ts_complen] = ((unsigned)flags >> 24);
*** ../vim-7.2.059/src/version.c	Sun Nov 30 15:15:56 2008
--- src/version.c	Sun Nov 30 21:09:23 2008
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     60,
  /**/

-- 
DEAD PERSON:  I'm getting better!
CUSTOMER:     No, you're not -- you'll be stone dead in a moment.
MORTICIAN:    Oh, I can't take him like that -- it's against regulations.
                                  The Quest for the Holy Grail (Monty Python)

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


--- NEW FILE filetype.vim ---
" Vim support file to detect file types
"
" Maintainer:	Bram Moolenaar <Bram at vim.org>
" Last Change:	2008 Nov 01

" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
  finish
endif
let did_load_filetypes = 1

" Line continuation is used here, remove 'C' from 'cpoptions'
let s:cpo_save = &cpo
set cpo&vim

augroup filetypedetect

" Ignored extensions
if exists("*fnameescape")
au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew
	\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
au BufNewFile,BufRead *~
	\ let s:name = expand("<afile>") |
	\ let s:short = substitute(s:name, '\~$', '', '') |
	\ if s:name != s:short && s:short != "" |
	\   exe "doau filetypedetect BufRead " . fnameescape(s:short) |
	\ endif |
	\ unlet! s:name s:short
au BufNewFile,BufRead ?\+.in
	\ if expand("<afile>:t") != "configure.in" |
	\   exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
	\ endif
elseif &verbose > 0
  echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
endif

" Pattern used to match file names which should not be inspected.
" Currently finds compressed files.
if !exists("g:ft_ignore_pat")
  let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
endif

" Function used for patterns that end in a star: don't set the filetype if the
" file name matches ft_ignore_pat.
func! s:StarSetf(ft)
  if expand("<amatch>") !~ g:ft_ignore_pat
    exe 'setf ' . a:ft
  endif
endfunc

" Abaqus or Trasys
au BufNewFile,BufRead *.inp			call s:Check_inp()

func! s:Check_inp()
  if getline(1) =~ '^\*'
    setf abaqus
  else
    let n = 1
    if line("$") > 500
      let nmax = 500
    else
      let nmax = line("$")
    endif
    while n <= nmax
      if getline(n) =~? "^header surface data"
	setf trasys
	break
      endif
      let n = n + 1
    endwhile
  endif
endfunc

" A-A-P recipe
au BufNewFile,BufRead *.aap			setf aap

" A2ps printing utility
au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps

" ABAB/4
au BufNewFile,BufRead *.abap			setf abap

" ABC music notation
au BufNewFile,BufRead *.abc			setf abc

" ABEL
au BufNewFile,BufRead *.abl			setf abel

" AceDB
au BufNewFile,BufRead *.wrm			setf acedb

" Ada (83, 9X, 95)
au BufNewFile,BufRead *.adb,*.ads,*.ada		setf ada
if has("vms")
  au BufNewFile,BufRead *.gpr,*.ada_m,*.adc	setf ada
else
  au BufNewFile,BufRead *.gpr			setf ada
endif

" AHDL
au BufNewFile,BufRead *.tdf			setf ahdl

" AMPL
au BufNewFile,BufRead *.run			setf ampl

" Ant
au BufNewFile,BufRead build.xml			setf ant

" Apache style config file
au BufNewFile,BufRead proftpd.conf*		call s:StarSetf('apachestyle')

" Apache config file
au BufNewFile,BufRead .htaccess			 setf apache
au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf* call s:StarSetf('apache')

" XA65 MOS6510 cross assembler
au BufNewFile,BufRead *.a65			setf a65

" Applescript
au BufNewFile,BufRead *.scpt			setf applescript

" Applix ELF
au BufNewFile,BufRead *.am
	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif

" ALSA configuration
au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf	setf alsaconf

" Arc Macro Language
au BufNewFile,BufRead *.aml			setf aml

" Arch Inventory file
au BufNewFile,BufRead .arch-inventory,=tagging-method	setf arch

" ART*Enterprise (formerly ART-IM)
au BufNewFile,BufRead *.art			setf art

" ASN.1
au BufNewFile,BufRead *.asn,*.asn1		setf asn

" Active Server Pages (with Visual Basic Script)
au BufNewFile,BufRead *.asa
	\ if exists("g:filetype_asa") |
	\   exe "setf " . g:filetype_asa |
	\ else |
	\   setf aspvbs |
	\ endif

" Active Server Pages (with Perl or Visual Basic Script)
au BufNewFile,BufRead *.asp
	\ if exists("g:filetype_asp") |
	\   exe "setf " . g:filetype_asp |
	\ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
	\   setf aspperl |
	\ else |
	\   setf aspvbs |
	\ endif

" Grub (must be before catch *.lst)
au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf	setf grub

" Assembly (all kinds)
" *.lst is not pure assembly, it has two extra columns (address, byte codes)
au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst	call s:FTasm()

" This function checks for the kind of assembly that is wanted by the user, or
" can be detected from the first five lines of the file.
func! s:FTasm()
  " make sure b:asmsyntax exists
  if !exists("b:asmsyntax")
    let b:asmsyntax = ""
  endif

  if b:asmsyntax == ""
    call s:FTasmsyntax()
  endif

  " if b:asmsyntax still isn't set, default to asmsyntax or GNU
  if b:asmsyntax == ""
    if exists("g:asmsyntax")
      let b:asmsyntax = g:asmsyntax
    else
      let b:asmsyntax = "asm"
    endif
  endif

  exe "setf " . fnameescape(b:asmsyntax)
endfunc

func! s:FTasmsyntax()
  " see if file contains any asmsyntax=foo overrides. If so, change
  " b:asmsyntax appropriately
  let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
	\" ".getline(5)." "
  let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
  if match != ''
    let b:asmsyntax = match
  elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
    let b:asmsyntax = "vmasm"
[...2050 lines suppressed...]
  endwhile
  setf yacc
endfunc


" Yaml
au BufNewFile,BufRead *.yaml,*.yml		setf yaml

" Zope
"   dtml (zope dynamic template markup language), pt (zope page template),
"   cpt (zope form controller page template)
au BufNewFile,BufRead *.dtml,*.pt,*.cpt		call s:FThtml()
"   zsql (zope sql method)
au BufNewFile,BufRead *.zsql			call s:SQL()

" Z80 assembler asz80
au BufNewFile,BufRead *.z8a			setf z8a

augroup END


" Source the user-specified filetype file, for backwards compatibility with
" Vim 5.x.
if exists("myfiletypefile") && filereadable(expand(myfiletypefile))
  execute "source " . myfiletypefile
endif


" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
" when there are no matching file name extensions.
" Don't do this for compressed files.
augroup filetypedetect
au BufNewFile,BufRead *
	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
	\ | runtime! scripts.vim | endif
au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif


" Extra checks for when no filetype has been detected now.  Mostly used for
" patterns that end in "*".  E.g., "zsh*" matches "zsh.vim", but that's a Vim
" script file.
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
" like are used.

" More Apache files.
au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/*		call s:StarSetf('apache')

" Asterisk config file
au BufNewFile,BufRead *asterisk/*.conf*		call s:StarSetf('asterisk')
au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm')

" Bazaar version control
au BufNewFile,BufRead bzr_log.*			setf bzr

" BIND zone
au BufNewFile,BufRead */named/db.*,*/bind/db.*	call s:StarSetf('bindzone')

" Changelog
au BufNewFile,BufRead [cC]hange[lL]og*
	\ if getline(1) =~ '; urgency='
	\|  call s:StarSetf('debchangelog')
	\|else
	\|  call s:StarSetf('changelog')
	\|endif

" Crontab
au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/*		call s:StarSetf('crontab')

" Debian Sources.list
au BufNewFile,BufRead /etc/apt/sources.list.d/*	call s:StarSetf('debsources')

" Dracula
au BufNewFile,BufRead drac.*			call s:StarSetf('dracula')

" Fvwm
au BufNewFile,BufRead */.fvwm/*			call s:StarSetf('fvwm')
au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
	\ let b:fvwm_version = 1 | call s:StarSetf('fvwm')
au BufNewFile,BufRead *fvwm2rc*
	\ if expand("<afile>:e") == "m4"
	\|  call s:StarSetf('fvwm2m4')
	\|else
	\|  let b:fvwm_version = 2 | call s:StarSetf('fvwm')
	\|endif

" GTK RC
au BufNewFile,BufRead .gtkrc*,gtkrc*		call s:StarSetf('gtkrc')

" Jam
au BufNewFile,BufRead Prl*.*,JAM*.*		call s:StarSetf('jam')

" Jargon
au! BufNewFile,BufRead *jarg*
	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE'
	\|  call s:StarSetf('jargon')
	\|endif

" Kconfig
au BufNewFile,BufRead Kconfig.*			call s:StarSetf('kconfig')

" Makefile
au BufNewFile,BufRead [mM]akefile*		call s:StarSetf('make')

" Ruby Makefile
au BufNewFile,BufRead [rR]akefile*		call s:StarSetf('ruby')

" Mail (also matches muttrc.vim, so this is below the other checks)
au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\}	setf mail

" Modconf
au BufNewFile,BufRead /etc/modprobe.*		call s:StarSetf('modconf')

" Mutt setup file
au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc*	call s:StarSetf('muttrc')
au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc*		call s:StarSetf('muttrc')

" Nroff macros
au BufNewFile,BufRead tmac.*			call s:StarSetf('nroff')

" Pam conf
au BufNewFile,BufRead /etc/pam.d/*		call s:StarSetf('pamconf')

" Printcap and Termcap
au BufNewFile,BufRead *printcap*
	\ if !did_filetype()
	\|  let b:ptcap_type = "print" | call s:StarSetf('ptcap')
	\|endif
au BufNewFile,BufRead *termcap*
	\ if !did_filetype()
	\|  let b:ptcap_type = "term" | call s:StarSetf('ptcap')
	\|endif

" Vim script
au BufNewFile,BufRead *vimrc*			call s:StarSetf('vim')

" Subversion commit file
au BufNewFile,BufRead svn-commit*.tmp		setf svn

" X resources file
au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults')

" XFree86 config
au BufNewFile,BufRead XF86Config-4*
	\ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf')
au BufNewFile,BufRead XF86Config*
	\ if getline(1) =~ '\<XConfigurator\>'
	\|  let b:xf86c_xfree86_version = 3
	\|endif
	\|call s:StarSetf('xf86conf')

" X11 xmodmap
au BufNewFile,BufRead *xmodmap*			call s:StarSetf('xmodmap')

" Xinetd conf
au BufNewFile,BufRead /etc/xinetd.d/*		call s:StarSetf('xinetd')

" Z-Shell script
au BufNewFile,BufRead zsh*,zlog*		call s:StarSetf('zsh')


" Generic configuration file (check this last, it's just guessing!)
au BufNewFile,BufRead,StdinReadPost *
	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
	\   setf conf |
	\ endif

" Use the plugin-filetype checks last, they may overrule any of the previously
" detected filetypes.
runtime! ftdetect/*.vim

augroup END


" If the GUI is already running, may still need to install the Syntax menu.
" Don't do it when the 'M' flag is included in 'guioptions'.
if has("menu") && has("gui_running")
      \ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
  source <sfile>:p:h/menu.vim
endif

" Function called for testing all functions defined here.  These are
" script-local, thus need to be executed here.
" Returns a string with error messages (hopefully empty).
func! TestFiletypeFuncs(testlist)
  let output = ''
  for f in a:testlist
    try
      exe f
    catch
      let output = output . "\n" . f . ": " . v:exception
    endtry
  endfor
  return output
endfunc

" Restore 'cpoptions'
let &cpo = s:cpo_save
unlet s:cpo_save


--- NEW FILE gzip.vim ---
" Vim plugin for editing compressed files.
" Maintainer: Bram Moolenaar <Bram at vim.org>
" Last Change: 2005 Jul 26

" Exit quickly when:
" - this plugin was already loaded
" - when 'compatible' is set
" - some autocommands are already taking care of compressed files
if exists("loaded_gzip") || &cp || exists("#BufReadPre#*.gz")
  finish
endif
let loaded_gzip = 1

augroup gzip
  " Remove all gzip autocommands
  au!

  " Enable editing of gzipped files.
  " The functions are defined in autoload/gzip.vim.
  "
  " Set binary mode before reading the file.
  " Use "gzip -d", gunzip isn't always available.
  autocmd BufReadPre,FileReadPre	*.gz,*.bz2,*.Z setlocal bin
  autocmd BufReadPost,FileReadPost	*.gz  call gzip#read("gzip -dn")
  autocmd BufReadPost,FileReadPost	*.bz2 call gzip#read("bzip2 -d")
  autocmd BufReadPost,FileReadPost	*.Z   call gzip#read("uncompress")
  autocmd BufWritePost,FileWritePost	*.gz  call gzip#write("gzip")
  autocmd BufWritePost,FileWritePost	*.bz2 call gzip#write("bzip2")
  autocmd BufWritePost,FileWritePost	*.Z   call gzip#write("compress -f")
  autocmd FileAppendPre			*.gz  call gzip#appre("gzip -dn")
  autocmd FileAppendPre			*.bz2 call gzip#appre("bzip2 -d")
  autocmd FileAppendPre			*.Z   call gzip#appre("uncompress")
  autocmd FileAppendPost		*.gz  call gzip#write("gzip")
  autocmd FileAppendPost		*.bz2 call gzip#write("bzip2")
  autocmd FileAppendPost		*.Z   call gzip#write("compress -f")
augroup END


--- NEW FILE netrw.vim ---
" netrw.vim: Handles file transfer and remote directory listing across
"            AUTOLOAD SECTION
" Date:		Oct 23, 2008
" Version:	134
" Maintainer:	Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
"               Permission is hereby granted to use and distribute this code,
"               with or without modifications, provided that this copyright
"               notice is copied with it. Like anything else that's free,
"               netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
"               *as is* and come with no warranty of any kind, either
"               expressed or implied. By using this plugin, you agree that
"               in no event will the copyright holder be liable for any damages
"               resulting from the use of this software.
"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
"
"  But be doers of the Word, and not only hearers, deluding your own selves {{{1
"  (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
" Load Once: {{{1
if &cp || exists("g:loaded_netrw")
  finish
endif
let g:loaded_netrw = "v134"
if v:version < 702
 echohl WarningMsg
 echo "***warning*** this version of netrw needs vim 7.2"
 echohl Normal
 finish
endif
if !exists("s:NOTE")
 let s:NOTE    = 0
 let s:WARNING = 1
 let s:ERROR   = 2
endif

" sanity checks
if v:version < 700
 call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
 finish
endif

let s:keepcpo= &cpo
setlocal cpo&vim
"DechoTabOn
"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)

" ======================
"  Netrw Variables: {{{1
" ======================

" ---------------------------------------------------------------------
"  Netrw Constants: {{{2
if !exists("g:netrw_dirhist_cnt")
 let g:netrw_dirhist_cnt= 0
endif
if !exists("s:LONGLIST")
 let s:THINLIST = 0
 let s:LONGLIST = 1
 let s:WIDELIST = 2
 let s:TREELIST = 3
 let s:MAXLIST  = 4
endif

" ---------------------------------------------------------------------
" Default values for netrw's global protocol variables {{{2
if !exists("g:netrw_dav_cmd")
 if executable("cadaver")
  let g:netrw_dav_cmd	= "cadaver"
 elseif executable("curl")
  let g:netrw_dav_cmd	= "curl"
 else
  let g:netrw_dav_cmd   = ""
 endif
endif
if !exists("g:netrw_fetch_cmd")
 if executable("fetch")
  let g:netrw_fetch_cmd	= "fetch -o"
 else
  let g:netrw_fetch_cmd	= ""
 endif
endif
if !exists("g:netrw_ftp_cmd")
  let g:netrw_ftp_cmd	= "ftp"
endif
if !exists("g:netrw_http_cmd")
 if executable("elinks")
  let g:netrw_http_cmd = "elinks"
  if !exists("g:netrw_http_xcmd")
   let g:netrw_http_xcmd= "-dump >"
  endif
 elseif executable("links")
  let g:netrw_http_cmd = "links"
  if !exists("g:netrw_http_xcmd")
   let g:netrw_http_xcmd= "-dump >"
  endif
 elseif executable("curl")
  let g:netrw_http_cmd	= "curl"
  if !exists("g:netrw_http_xcmd")
   let g:netrw_http_xcmd= "-o"
  endif
 elseif executable("wget")
  let g:netrw_http_cmd	= "wget"
  if !exists("g:netrw_http_xcmd")
   let g:netrw_http_xcmd= "-q -O"
  endif
 elseif executable("fetch")
  let g:netrw_http_cmd	= "fetch"
  if !exists("g:netrw_http_xcmd")
   let g:netrw_http_xcmd= "-o"
  endif
 else
  let g:netrw_http_cmd	= ""
 endif
endif
if !exists("g:netrw_rcp_cmd")
  let g:netrw_rcp_cmd	= "rcp"
endif
if !exists("g:netrw_rsync_cmd")
  let g:netrw_rsync_cmd	= "rsync"
endif
if !exists("g:netrw_scp_cmd")
  let g:netrw_scp_cmd	= "scp -q"
endif
if !exists("g:netrw_sftp_cmd")
  let g:netrw_sftp_cmd	= "sftp"
endif
if !exists("g:netrw_ssh_cmd")
 let g:netrw_ssh_cmd= "ssh"
endif

if (has("win32") || has("win95") || has("win64") || has("win16"))
  \ && exists("g:netrw_use_nt_rcp")
  \ && g:netrw_use_nt_rcp
  \ && executable( $SystemRoot .'/system32/rcp.exe')
 let s:netrw_has_nt_rcp = 1
 let s:netrw_rcpmode    = '-b'
else
 let s:netrw_has_nt_rcp = 0
 let s:netrw_rcpmode    = ''
endif

" ---------------------------------------------------------------------
" Default values for netrw's global variables {{{2
" Cygwin Detection ------- {{{3
if !exists("g:netrw_cygwin")
 if has("win32") || has("win95") || has("win64") || has("win16")
  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
   let g:netrw_cygwin= 1
  else
   let g:netrw_cygwin= 0
  endif
 else
  let g:netrw_cygwin= 0
 endif
endif
" Default values - a-c ---------- {{{3
if !exists("g:netrw_alto")
 let g:netrw_alto= &sb
endif
if !exists("g:netrw_altv")
 let g:netrw_altv= &spr
endif
if !exists("g:netrw_browse_split")
 let g:netrw_browse_split= 0
endif
if !exists("g:netrw_chgwin")
 let g:netrw_chgwin    = -1
endif
if !exists("g:netrw_compress")
 let g:netrw_compress= "gzip"
endif
if !exists("g:netrw_ctags")
 let g:netrw_ctags= "ctags"
endif
if !exists("g:netrw_cursorline")
 let g:netrw_cursorline= 1
 let s:netrw_usercul   = &cursorline
 let s:netrw_usercuc   = &cursorcolumn
endif
" Default values - d-g ---------- {{{3
if !exists("g:netrw_dirhist_cnt")
 let g:netrw_dirhist_cnt= 0
endif
if !exists("g:netrw_decompress")
 let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
endif
if !exists("g:netrw_dirhistmax")
 let g:netrw_dirhistmax= 10
endif
if !exists("g:netrw_fastbrowse")
 let g:netrw_fastbrowse= 1
endif
if !exists("g:netrw_ftp_browse_reject")
 let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
endif
if !exists("g:netrw_ftp_list_cmd")
 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
[...7612 lines suppressed...]
"   UseBufWinVars() get around that.
fun! s:SetBufWinVars()
"  call Dfunc("s:SetBufWinVars()")
  if exists("w:netrw_liststyle")      |let b:netrw_liststyle      = w:netrw_liststyle      |endif
  if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt      = w:netrw_bannercnt      |endif
  if exists("w:netrw_method")         |let b:netrw_method         = w:netrw_method         |endif
  if exists("w:netrw_prvdir")         |let b:netrw_prvdir         = w:netrw_prvdir         |endif
  if exists("w:netrw_explore_indx")   |let b:netrw_explore_indx   = w:netrw_explore_indx   |endif
  if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif
  if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif
  if exists("w:netrw_explore_bufnr")  |let b:netrw_explore_bufnr  = w:netrw_explore_bufnr  |endif
  if exists("w:netrw_explore_line")   |let b:netrw_explore_line   = w:netrw_explore_line   |endif
  if exists("w:netrw_explore_list")   |let b:netrw_explore_list   = w:netrw_explore_list   |endif
"  call Dret("s:SetBufWinVars")
endfun

" ---------------------------------------------------------------------
" s:SetRexDir: set directory for :Rexplore {{{2
fun! s:SetRexDir(islocal,dirname)
"  call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
  " set up Rex and leftmouse-double-click
  if a:islocal
   exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
   if g:netrw_retmap
    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
    endif
    let dir = escape(a:dirname, s:netrw_map_escape)
    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(1,"'.dir.'")<cr>'
   endif
  else
   exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
   if g:netrw_retmap
    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
    endif
    let dir = escape(a:dirname, s:netrw_map_escape)
    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(0,"'.dir.'")<cr>'
   endif
  endif
"  call Dret("s:SetRexDir")
endfun

" ---------------------------------------------------------------------
" s:Strlen: this function returns the length of a string, even if its {{{2
"           using two-byte etc characters.
"           Currently, its only used if g:Align_xstrlen is set to a
"           nonzero value.  Solution from Nicolai Weibull, vim docs
"           (:help strlen()), Tony Mechelynck, and my own invention.
fun! s:Strlen(x)
"  call Dfunc("s:Strlen(x<".a:x.">")
  if g:netrw_xstrlen == 1
   " number of codepoints (Latin a + combining circumflex is two codepoints)
   " (comment from TM, solution from NW)
   let ret= strlen(substitute(a:x,'.','c','g'))

  elseif g:netrw_xstrlen == 2
   " number of spacing codepoints (Latin a + combining circumflex is one spacing 
   " codepoint; a hard tab is one; wide and narrow CJK are one each; etc.)
   " (comment from TM, solution from TM)
   let ret=strlen(substitute(a:x, '.\Z', 'x', 'g')) 

  elseif g:netrw_xstrlen == 3
   " virtual length (counting, for instance, tabs as anything between 1 and 
   " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately 
   " preceded by lam, one otherwise, etc.)
   " (comment from TM, solution from me)
   let modkeep= &mod
   exe "norm! o\<esc>"
   call setline(line("."),a:x)
   let ret= virtcol("$") - 1
   d
   let &mod= modkeep

  else
   " at least give a decent default
   ret= strlen(a:x)
  endif
"  call Dret("s:Strlen ".ret)
  return ret
endfun

" ---------------------------------------------------------------------
" s:TreeListMove: {{{2
fun! s:TreeListMove(dir)
"  call Dfunc("s:TreeListMove(dir<".a:dir.">)")
  let curline  = getline('.')
  let prvline  = (line(".") > 1)?         getline(line(".")-1) : ''
  let nxtline  = (line(".") < line("$"))? getline(line(".")+1) : ''
  let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','')
  let indentm1 = substitute(curindent,'^| ','','')
"  call Decho("prvline  <".prvline."> #".line(".")-1)
"  call Decho("curline  <".curline."> #".line("."))
"  call Decho("nxtline  <".nxtline."> #".line(".")+1)
"  call Decho("curindent<".curindent.">")
"  call Decho("indentm1 <".indentm1.">")

  if curline !~ '/$'
"   call Decho('regfile')
   if     a:dir == '[' && prvline != ''
    norm! 0
    let nl = search('^'.indentm1.'[^|]','bWe')    " search backwards from regular file
"    call Decho("regfile srch back: ".nl)
   elseif a:dir == ']' && nxtline != ''
    norm! $
    let nl = search('^'.indentm1.'[^|]','We')     " search forwards from regular file
"    call Decho("regfile srch fwd: ".nl)
   endif

  elseif a:dir == '[' && prvline != ''
   norm! 0
   let curline= line(".")
   let nl     = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation
"   call Decho("dir srch back ind: ".nl)
   if nl != 0
    if line(".") == curline-1
     let nl= search('^'.indentm1.'[^|]','bWe')     " search backwards from directory, indentation - 1
"     call Decho("dir srch back ind-1: ".nl)
    endif
   endif

  elseif a:dir == ']' && nxtline != ''
   norm! $
   let curline = line(".")
   let nl      = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation
"   call Decho("dir srch fwd ind: ".nl)
   if nl != 0
    if line(".") == curline+1
     let nl= search('^'.indentm1.'[^|]','We')         " search forwards from directory, indentation - 1
"     call Decho("dir srch fwd ind-1: ".nl)
    endif
   endif

  endif

"  call Dret("s:TreeListMove")
endfun

" ---------------------------------------------------------------------
" s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2
"                      The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function
"                      can't be called except via emenu.  But due to locale, that menu line may not be called
"                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
fun! s:UpdateBuffersMenu()
"  call Dfunc("s:UpdateBuffersMenu()")
  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
   try
    silent emenu Buffers.Refresh\ menu
   catch /^Vim\%((\a\+)\)\=:E/
    let v:errmsg= ""
    silent call s:NetrwBMShow()
   endtry
  endif
"  call Dret("s:UpdateBuffersMenu")
endfun

" ---------------------------------------------------------------------
" s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
"              Matching function to BufferWinVars()
fun! s:UseBufWinVars()
"  call Dfunc("s:UseBufWinVars()")
  if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
  if exists("b:netrw_bannercnt")       && !exists("w:netrw_bannercnt")      |let w:netrw_bannercnt       = b:netrw_bannercnt      |endif
  if exists("b:netrw_method")          && !exists("w:netrw_method")         |let w:netrw_method          = b:netrw_method         |endif
  if exists("b:netrw_prvdir")          && !exists("w:netrw_prvdir")         |let w:netrw_prvdir          = b:netrw_prvdir         |endif
  if exists("b:netrw_explore_indx")    && !exists("w:netrw_explore_indx")   |let w:netrw_explore_indx    = b:netrw_explore_indx   |endif
  if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
  if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
  if exists("b:netrw_explore_bufnr")   && !exists("w:netrw_explore_bufnr")  |let w:netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
  if exists("b:netrw_explore_line")    && !exists("w:netrw_explore_line")   |let w:netrw_explore_line    = b:netrw_explore_line   |endif
  if exists("b:netrw_explore_list")    && !exists("w:netrw_explore_list")   |let w:netrw_explore_list    = b:netrw_explore_list   |endif
"  call Dret("s:UseBufWinVars")
endfun

" ---------------------------------------------------------------------
" s:WinPath: {{{2
fun! s:WinPath(path)
"  call Dfunc("s:WinPath(path<".a:path.">)")
  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
   " remove trailing slash (Win95)
   let path = substitute(a:path, '\(\\\|/\)$', '', 'g')
   " remove escaped spaces
   let path = substitute(path, '\ ', ' ', 'g')
   " convert slashes to backslashes
   let path = substitute(path, '/', '\', 'g')
  else
   let path= a:path
  endif
"  call Dret("s:WinPath <".path.">")
  return path
endfun

" ---------------------------------------------------------------------
" Settings Restoration: {{{2
let &cpo= s:keepcpo
unlet s:keepcpo

" ------------------------------------------------------------------------
" Modelines: {{{1
" vim:ts=8 fdm=marker


--- NEW FILE netrwFileHandlers.vim ---
" netrwFileHandlers: contains various extension-based file handlers for
"                    netrw's browsers' x command ("eXecute launcher")
" Author:	Charles E. Campbell, Jr.
" Date:		Sep 30, 2008
" Version:	10
" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
"               Permission is hereby granted to use and distribute this code,
"               with or without modifications, provided that this copyright
"               notice is copied with it. Like anything else that's free,
"               netrwFileHandlers.vim is provided *as is* and comes with no
"               warranty of any kind, either expressed or implied. In no
"               event will the copyright holder be liable for any damages
"               resulting from the use of this software.
"
" Rom 6:23 (WEB) For the wages of sin is death, but the free gift of God {{{1
"                is eternal life in Christ Jesus our Lord.

" ---------------------------------------------------------------------
" Load Once: {{{1
if exists("g:loaded_netrwFileHandlers") || &cp
 finish
endif
let g:loaded_netrwFileHandlers= "v10"
if v:version < 702
 echohl WarningMsg
 echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
 echohl Normal
 finish
endif
let s:keepcpo= &cpo
set cpo&vim

" ---------------------------------------------------------------------
" netrwFileHandlers#Invoke: {{{1
fun! netrwFileHandlers#Invoke(exten,fname)
"  call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
  let fname= a:fname
  " list of supported special characters.  Consider rcs,v --- that can be
  " supported with a NFH_rcsCOMMAv() handler
  if a:fname =~ '[@:,$!=\-+%?;~]'
   let specials= {
\   '@' : 'AT',
\   ':' : 'COLON',
\   ',' : 'COMMA',
\   '$' : 'DOLLAR',
\   '!' : 'EXCLAMATION',
\   '=' : 'EQUAL',
\   '-' : 'MINUS',
\   '+' : 'PLUS',
\   '%' : 'PERCENT',
\   '?' : 'QUESTION',
\   ';' : 'SEMICOLON',
\   '~' : 'TILDE'}
   let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
"   call Decho('fname<'.fname.'> done with dictionary')
  endif

  if a:exten != "" && exists("*NFH_".a:exten)
   " support user NFH_*() functions
"   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
   exe "let ret= NFH_".a:exten.'("'.fname.'")'
  elseif a:exten != "" && exists("*s:NFH_".a:exten)
   " use builtin-NFH_*() functions
"   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
   exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
  endif
  
"  call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
  return 0
endfun

" ---------------------------------------------------------------------
" s:NFH_html: handles html when the user hits "x" when the {{{1
"                        cursor is atop a *.html file
fun! s:NFH_html(pagefile)
"  call Dfunc("s:NFH_html(".a:pagefile.")")

  let page= substitute(a:pagefile,'^','file://','')

  if executable("mozilla")
"   call Decho("executing !mozilla ".page)
   exe "!mozilla ".shellescape(page,1)
  elseif executable("netscape")
"   call Decho("executing !netscape ".page)
   exe "!netscape ".shellescape(page,1)
  else
"   call Dret("s:NFH_html 0")
   return 0
  endif

"  call Dret("s:NFH_html 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_htm: handles html when the user hits "x" when the {{{1
"                        cursor is atop a *.htm file
fun! s:NFH_htm(pagefile)
"  call Dfunc("s:NFH_htm(".a:pagefile.")")

  let page= substitute(a:pagefile,'^','file://','')

  if executable("mozilla")
"   call Decho("executing !mozilla ".page)
   exe "!mozilla ".shellescape(page,1)
  elseif executable("netscape")
"   call Decho("executing !netscape ".page)
   exe "!netscape ".shellescape(page,1)
  else
"   call Dret("s:NFH_htm 0")
   return 0
  endif

"  call Dret("s:NFH_htm 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_jpg: {{{1
fun! s:NFH_jpg(jpgfile)
"  call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")

  if executable("gimp")
   exe "silent! !gimp -s ".shellescape(a:jpgfile,1)
  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
"   call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
   exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:jpgfile,1)
  else
"   call Dret("s:NFH_jpg 0")
   return 0
  endif

"  call Dret("s:NFH_jpg 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_gif: {{{1
fun! s:NFH_gif(giffile)
"  call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")

  if executable("gimp")
   exe "silent! !gimp -s ".shellescape(a:giffile,1)
  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:giffile,1)
  else
"   call Dret("s:NFH_gif 0")
   return 0
  endif

"  call Dret("s:NFH_gif 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_png: {{{1
fun! s:NFH_png(pngfile)
"  call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")

  if executable("gimp")
   exe "silent! !gimp -s ".shellescape(a:pngfile,1)
  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pngfile,1)
  else
"   call Dret("s:NFH_png 0")
   return 0
  endif

"  call Dret("s:NFH_png 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_pnm: {{{1
fun! s:NFH_pnm(pnmfile)
"  call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")

  if executable("gimp")
   exe "silent! !gimp -s ".shellescape(a:pnmfile,1)
  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pnmfile,1)
  else
"   call Dret("s:NFH_pnm 0")
   return 0
  endif

"  call Dret("s:NFH_pnm 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_bmp: visualize bmp files {{{1
fun! s:NFH_bmp(bmpfile)
"  call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)")

  if executable("gimp")
   exe "silent! !gimp -s ".a:bmpfile
  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:bmpfile,1)
  else
"   call Dret("s:NFH_bmp 0")
   return 0
  endif

"  call Dret("s:NFH_bmp 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_pdf: visualize pdf files {{{1
fun! s:NFH_pdf(pdf)
"  call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
  if executable("gs")
   exe 'silent! !gs '.shellescape(a:pdf,1)
  elseif executable("pdftotext")
   exe 'silent! pdftotext -nopgbrk '.shellescape(a:pdf,1)
  else
"  call Dret("s:NFH_pdf 0")
   return 0
  endif

"  call Dret("s:NFH_pdf 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_doc: visualize doc files {{{1
fun! s:NFH_doc(doc)
"  call Dfunc("s:NFH_doc(doc<".a:doc.">)")

  if executable("oowriter")
   exe 'silent! !oowriter '.shellescape(a:doc,1)
   redraw!
  else
"  call Dret("s:NFH_doc 0")
   return 0
  endif

"  call Dret("s:NFH_doc 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_sxw: visualize sxw files {{{1
fun! s:NFH_sxw(sxw)
"  call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")

  if executable("oowriter")
   exe 'silent! !oowriter '.shellescape(a:sxw,1)
   redraw!
  else
"   call Dret("s:NFH_sxw 0")
   return 0
  endif

"  call Dret("s:NFH_sxw 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_xls: visualize xls files {{{1
fun! s:NFH_xls(xls)
"  call Dfunc("s:NFH_xls(xls<".a:xls.">)")

  if executable("oocalc")
   exe 'silent! !oocalc '.shellescape(a:xls,1)
   redraw!
  else
"  call Dret("s:NFH_xls 0")
   return 0
  endif

"  call Dret("s:NFH_xls 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_ps: handles PostScript files {{{1
fun! s:NFH_ps(ps)
"  call Dfunc("s:NFH_ps(ps<".a:ps.">)")
  if executable("gs")
"   call Decho("exe silent! !gs ".a:ps)
   exe "silent! !gs ".shellescape(a:ps,1)
   redraw!
  elseif executable("ghostscript")
"   call Decho("exe silent! !ghostscript ".a:ps)
   exe "silent! !ghostscript ".shellescape(a:ps,1)
   redraw!
  elseif executable("gswin32")
"   call Decho("exe silent! !gswin32 ".shellescape(a:ps,1))
   exe "silent! !gswin32 ".shellescape(a:ps,1)
   redraw!
  else
"   call Dret("s:NFH_ps 0")
   return 0
  endif

"  call Dret("s:NFH_ps 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_eps: handles encapsulated PostScript files {{{1
fun! s:NFH_eps(eps)
"  call Dfunc("s:NFH_eps()")
  if executable("gs")
   exe "silent! !gs ".shellescape(a:eps,1)
   redraw!
  elseif executable("ghostscript")
   exe "silent! !ghostscript ".shellescape(a:eps,1)
   redraw!
  elseif executable("ghostscript")
   exe "silent! !ghostscript ".shellescape(a:eps,1)
   redraw!
  elseif executable("gswin32")
   exe "silent! !gswin32 ".shellescape(a:eps,1)
   redraw!
  else
"   call Dret("s:NFH_eps 0")
   return 0
  endif
"  call Dret("s:NFH_eps 0")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_fig: handles xfig files {{{1
fun! s:NFH_fig(fig)
"  call Dfunc("s:NFH_fig()")
  if executable("xfig")
   exe "silent! !xfig ".a:fig
   redraw!
  else
"   call Dret("s:NFH_fig 0")
   return 0
  endif

"  call Dret("s:NFH_fig 1")
  return 1
endfun

" ---------------------------------------------------------------------
" s:NFH_obj: handles tgif's obj files {{{1
fun! s:NFH_obj(obj)
"  call Dfunc("s:NFH_obj()")
  if has("unix") && executable("tgif")
   exe "silent! !tgif ".a:obj
   redraw!
  else
"   call Dret("s:NFH_obj 0")
   return 0
  endif

"  call Dret("s:NFH_obj 1")
  return 1
endfun

let &cpo= s:keepcpo
" ---------------------------------------------------------------------
"  Modelines: {{{1
"  vim: fdm=marker


--- NEW FILE netrwPlugin.vim ---
" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
"            PLUGIN SECTION
" Date:		Aug 10, 2008
" Maintainer:	Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
"               Permission is hereby granted to use and distribute this code,
"               with or without modifications, provided that this copyright
"               notice is copied with it. Like anything else that's free,
"               netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
"               *as is* and comes with no warranty of any kind, either
"               expressed or implied. By using this plugin, you agree that
"               in no event will the copyright holder be liable for any damages
"               resulting from the use of this software.
"
"  But be doers of the Word, and not only hearers, deluding your own selves {{{1
"  (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
" Load Once: {{{1
if &cp || exists("g:loaded_netrwPlugin")
 finish
endif
let g:loaded_netrwPlugin = "v134"
if v:version < 702
 echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
 finish
endif
let s:keepcpo = &cpo
set cpo&vim

" ---------------------------------------------------------------------
" Public Interface: {{{1

" Local Browsing: {{{2
augroup FileExplorer
 au!
 au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
 if has("win32") || has("win95") || has("win64") || has("win16")
  au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
 endif
augroup END

" Network Browsing Reading Writing: {{{2
augroup Network
 au!
 if has("win32") || has("win95") || has("win64") || has("win16")
  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
 else
  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
 endif
 au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|exe '2Nread '.fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
 au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|exe 'Nread '.fnameescape(expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
 au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
 try
  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
 catch /^Vim\%((\a\+)\)\=:E216/
  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
 endtry
augroup END

" Commands: :Nread, :Nwrite, :NetUserPass {{{2
com! -count=1 -nargs=*	Nread		call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
com! -range=% -nargs=*	Nwrite		call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
com! -nargs=*	        Nsource		call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()

" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
com! -nargs=* -bar -bang -count=0 -complete=dir	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
com! -nargs=* -bar       -count=0 -complete=dir	Texplore	call netrw#Explore(<count>,0,6        ,<q-args>)
com! -nargs=* -bar -bang			Nexplore	call netrw#Explore(-1,0,0,<q-args>)
com! -nargs=* -bar -bang			Pexplore	call netrw#Explore(-2,0,0,<q-args>)

" Commands: NetrwSettings {{{2
com! -nargs=0	NetrwSettings	call netrwSettings#NetrwSettings()
com! -bang	NetrwClean	call netrw#NetrwClean(<bang>0)

" Maps:
if !exists("g:netrw_nogx") && maparg('g','n') == ""
 if !hasmapto('<Plug>NetrwBrowseX')
  nmap <unique> gx <Plug>NetrwBrowseX
 endif
 nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
endif

" ---------------------------------------------------------------------
" LocalBrowse: {{{2
fun! s:LocalBrowse(dirname)
  " unfortunate interaction -- debugging calls can't be used here;
  " the BufEnter event causes triggering when attempts to write to
  " the DBG buffer are made.
"  echomsg "dirname<".a:dirname.">"
  if has("amiga")
   " The check against '' is made for the Amiga, where the empty
   " string is the current directory and not checking would break
   " things such as the help command.
   if a:dirname != '' && isdirectory(a:dirname)
    silent! call netrw#LocalBrowseCheck(a:dirname)
   endif
  elseif isdirectory(a:dirname)
"   echomsg "dirname<".dirname."> isdir"
   silent! call netrw#LocalBrowseCheck(a:dirname)
  endif
  " not a directory, ignore it
endfun

" ---------------------------------------------------------------------
" NetrwStatusLine: {{{1
fun! NetrwStatusLine()
"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
   let &stl= s:netrw_explore_stl
   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
   return ""
  else
   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
  endif
endfun

" ------------------------------------------------------------------------
" NetUserPass: set username and password for subsequent ftp transfer {{{1
"   Usage:  :call NetUserPass()			-- will prompt for userid and password
"	    :call NetUserPass("uid")		-- will prompt for password
"	    :call NetUserPass("uid","password") -- sets global userid and password
fun! NetUserPass(...)

 " get/set userid
 if a:0 == 0
"  call Dfunc("NetUserPass(a:0<".a:0.">)")
  if !exists("g:netrw_uid") || g:netrw_uid == ""
   " via prompt
   let g:netrw_uid= input('Enter username: ')
  endif
 else	" from command line
"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
  let g:netrw_uid= a:1
 endif

 " get password
 if a:0 <= 1 " via prompt
"  call Decho("a:0=".a:0." case <=1:")
  let g:netrw_passwd= inputsecret("Enter Password: ")
 else " from command line
"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
  let g:netrw_passwd=a:2
 endif
"  call Dret("NetUserPass")
endfun

" ------------------------------------------------------------------------
" Modelines And Restoration: {{{1
let &cpo= s:keepcpo
unlet s:keepcpo
" vim:ts=8 fdm=marker


--- NEW FILE netrwSettings.vim ---
" netrwSettings.vim: makes netrw settings simpler
" Date:		Sep 03, 2008
" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" Version:	13
" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
"               Permission is hereby granted to use and distribute this code,
"               with or without modifications, provided that this copyright
"               notice is copied with it. Like anything else that's free,
"               netrwSettings.vim is provided *as is* and comes with no
"               warranty of any kind, either expressed or implied. By using
"               this plugin, you agree that in no event will the copyright
"               holder be liable for any damages resulting from the use
"               of this software.
"
" Mat 4:23 (WEB) Jesus went about in all Galilee, teaching in their {{{1
"                synagogues, preaching the gospel of the kingdom, and healing
"                every disease and every sickness among the people.
" Load Once: {{{1
if exists("g:loaded_netrwSettings") || &cp
  finish
endif
let g:loaded_netrwSettings = "v13"
if v:version < 700
 echohl WarningMsg
 echo "***warning*** this version of netrwSettings needs vim 7.0"
 echohl Normal
 finish
endif

" ---------------------------------------------------------------------
" NetrwSettings: {{{1
fun! netrwSettings#NetrwSettings()
  " this call is here largely just to insure that netrw has been loaded
  call netrw#NetrwSavePosn()
  if !exists("g:loaded_netrw")
   echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None
   return
  endif

  above wincmd s
  enew
  setlocal noswapfile bh=wipe
  set ft=vim
  file Netrw\ Settings

  " these variables have the following default effects when they don't
  " exist (ie. have not been set by the user in his/her .vimrc)
  if !exists("g:netrw_liststyle")
   let g:netrw_liststyle= 0
   let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
  endif
  if !exists("g:netrw_silent")
   let g:netrw_silent= 0
  endif
  if !exists("g:netrw_use_nt_rcp")
   let g:netrw_use_nt_rcp= 0
  endif
  if !exists("g:netrw_ftp")
   let g:netrw_ftp= 0
  endif
  if !exists("g:netrw_ignorenetrc")
   let g:netrw_ignorenetrc= 0
  endif

  put ='+ ---------------------------------------------'
  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
  put ='+ Press <F1> with cursor atop any line for help'
  put ='+ ---------------------------------------------'
  let s:netrw_settings_stop= line(".")

  put =''
  put ='+ Netrw Protocol Commands'
  put = 'let g:netrw_dav_cmd           = '.g:netrw_dav_cmd
  put = 'let g:netrw_fetch_cmd         = '.g:netrw_fetch_cmd
  put = 'let g:netrw_ftp_cmd           = '.g:netrw_ftp_cmd
  put = 'let g:netrw_http_cmd          = '.g:netrw_http_cmd
  put = 'let g:netrw_rcp_cmd           = '.g:netrw_rcp_cmd
  put = 'let g:netrw_rsync_cmd         = '.g:netrw_rsync_cmd
  put = 'let g:netrw_scp_cmd           = '.g:netrw_scp_cmd
  put = 'let g:netrw_sftp_cmd          = '.g:netrw_sftp_cmd
  put = 'let g:netrw_ssh_cmd           = '.g:netrw_ssh_cmd
  let s:netrw_protocol_stop= line(".")
  put = ''

  put ='+Netrw Transfer Control'
  put = 'let g:netrw_cygwin            = '.g:netrw_cygwin
  put = 'let g:netrw_ftp               = '.g:netrw_ftp
  put = 'let g:netrw_ftpmode           = '.g:netrw_ftpmode
  put = 'let g:netrw_ignorenetrc       = '.g:netrw_ignorenetrc
  put = 'let g:netrw_sshport           = '.g:netrw_sshport
  put = 'let g:netrw_use_nt_rcp        = '.g:netrw_use_nt_rcp
  put = 'let g:netrw_win95ftp          = '.g:netrw_win95ftp
  let s:netrw_xfer_stop= line(".")
  put =''
  put ='+ Netrw Messages'
  put ='let g:netrw_use_errorwindow    = '.g:netrw_use_errorwindow

  put = ''
  put ='+ Netrw Browser Control'
  put = 'let g:netrw_alto              = '.g:netrw_alto
  put = 'let g:netrw_altv              = '.g:netrw_altv
  put = 'let g:netrw_browse_split      = '.g:netrw_browse_split
  if exists("g:netrw_browsex_viewer")
   put = 'let g:netrw_browsex_viewer    = '.g:netrw_browsex_viewer
  else
   put = 'let g:netrw_browsex_viewer    = (not defined)'
  endif
  put = 'let g:netrw_compress          = '.g:netrw_compress
  put = 'let g:netrw_cursorline        = '.g:netrw_cursorline
  let decompressline= line("$")
  put ='let g:netrw_decompress...'
  put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
  put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
  let fnameescline= line("$")
  put = 'let g:netrw_fname_escape...'
  put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
  put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
  put = 'let g:netrw_ftp_sizelist_cmd  = '.g:netrw_ftp_sizelist_cmd
  put = 'let g:netrw_ftp_timelist_cmd  = '.g:netrw_ftp_timelist_cmd
  let globescline= line("$")
  put ='let g:netrw_glob_escape...'
  put = 'let g:netrw_hide              = '.g:netrw_hide
  put = 'let g:netrw_keepdir           = '.g:netrw_keepdir
  put = 'let g:netrw_list_cmd          = '.g:netrw_list_cmd
  put = 'let g:netrw_list_hide         = '.g:netrw_list_hide
  put = 'let g:netrw_liststyle         = '.g:netrw_liststyle
  put = 'let g:netrw_localcopycmd      = '.g:netrw_localcopycmd
  put = 'let g:netrw_local_mkdir       = '.g:netrw_local_mkdir
  put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
  put = 'let g:netrw_local_rmdir       = '.g:netrw_local_rmdir
  put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
  put = 'let g:netrw_menu              = '.g:netrw_menu
  put = 'let g:netrw_mkdir_cmd         = '.g:netrw_mkdir_cmd
  put = 'let g:netrw_preview           = '.g:netrw_preview
  put = 'let g:netrw_rename_cmd        = '.g:netrw_rename_cmd
  put = 'let g:netrw_retmap            = '.g:netrw_retmap
  put = 'let g:netrw_rm_cmd            = '.g:netrw_rm_cmd
  put = 'let g:netrw_rmdir_cmd         = '.g:netrw_rmdir_cmd
  put = 'let g:netrw_rmf_cmd           = '.g:netrw_rmf_cmd
  put = 'let g:netrw_silent            = '.g:netrw_silent
  put = 'let g:netrw_sort_by           = '.g:netrw_sort_by
  put = 'let g:netrw_sort_direction    = '.g:netrw_sort_direction
  put = 'let g:netrw_sort_options      = '.g:netrw_sort_options
  put = 'let g:netrw_sort_sequence     = '.g:netrw_sort_sequence
  put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
  put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
  put = 'let g:netrw_scpport           = '.g:netrw_scpport
  put = 'let g:netrw_sshport           = '.g:netrw_sshport
  put = 'let g:netrw_timefmt           = '.g:netrw_timefmt
  let tmpfileescline= line("$")
  put ='let g:netrw_tmpfile_escape...'
  put = 'let g:netrw_use_noswf         = '.g:netrw_use_noswf
  put = 'let g:netrw_xstrlen           = '.g:netrw_xstrlen
  put = 'let g:netrw_winsize           = '.g:netrw_winsize

  put =''
  put ='+ For help, place cursor on line and press <F1>'

  1d
  silent %s/^+/"/e
  res 99
  silent %s/= \([^0-9].*\)$/= '\1'/e
  silent %s/= $/= ''/e
  1

  call setline(decompressline,"let g:netrw_decompress        = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1',''))
  call setline(fnameescline,  "let g:netrw_fname_escape      = '".escape(g:netrw_fname_escape,"'")."'")
  call setline(globescline,   "let g:netrw_glob_escape       = '".escape(g:netrw_glob_escape,"'")."'")
  call setline(tmpfileescline,"let g:netrw_tmpfile_escape    = '".escape(g:netrw_tmpfile_escape,"'")."'")

  set nomod

  nmap <buffer> <silent> <F1>                       :call NetrwSettingHelp()<cr>
  nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call NetrwSettingHelp()<cr>
  let tmpfile= tempname()
  exe 'au BufWriteCmd	Netrw\ Settings	silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
endfun

" ---------------------------------------------------------------------
" NetrwSettingHelp: {{{2
fun! NetrwSettingHelp()
"  call Dfunc("NetrwSettingHelp()")
  let curline = getline(".")
  if curline =~ '='
   let varhelp = substitute(curline,'^\s*let ','','e')
   let varhelp = substitute(varhelp,'\s*=.*$','','e')
"   call Decho("trying help ".varhelp)
   try
    exe "he ".varhelp
   catch /^Vim\%((\a\+)\)\=:E149/
   	echo "***sorry*** no help available for <".varhelp.">"
   endtry
  elseif line(".") < s:netrw_settings_stop
   he netrw-settings
  elseif line(".") < s:netrw_protocol_stop
   he netrw-externapp
  elseif line(".") < s:netrw_xfer_stop
   he netrw-variables
  else
   he netrw-browse-var
  endif
"  call Dret("NetrwSettingHelp")
endfun

" ---------------------------------------------------------------------
" Modelines: {{{1
" vim:ts=8 fdm=marker


--- NEW FILE tar.vim ---
" tar.vim: Handles browsing tarfiles
"            AUTOLOAD PORTION
" Date:			Aug 08, 2008
" Version:		23 + modifications by Bram
" Maintainer:	Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" License:		Vim License  (see vim's :help license)
"
"	Contains many ideas from Michael Toren's <tar.vim>
"
" Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
"               Permission is hereby granted to use and distribute this code,
"               with or without modifications, provided that this copyright
"               notice is copied with it. Like anything else that's free,
"               tar.vim and tarPlugin.vim are provided *as is* and comes
"               with no warranty of any kind, either expressed or implied.
"               By using this plugin, you agree that in no event will the
"               copyright holder be liable for any damages resulting from
"               the use of this software.

" ---------------------------------------------------------------------
" Load Once: {{{1
let s:keepcpo= &cpo
set cpo&vim
if &cp || exists("g:loaded_tar") || v:version < 700
 finish
endif
let g:loaded_tar= "v23b"
"call Decho("loading autoload/tar.vim")
if v:version < 701 || (v:version == 701 && !has("patch299"))
 echoerr "(autoload/tar.vim) need vim v7.1 with patchlevel 299"
endif

" ---------------------------------------------------------------------
"  Default Settings: {{{1
if !exists("g:tar_browseoptions")
 let g:tar_browseoptions= "Ptf"
endif
if !exists("g:tar_readoptions")
 let g:tar_readoptions= "OPxf"
endif
if !exists("g:tar_cmd")
 let g:tar_cmd= "tar"
endif
if !exists("g:tar_writeoptions")
 let g:tar_writeoptions= "uf"
endif

if !exists("g:netrw_cygwin")
 if has("win32") || has("win95") || has("win64") || has("win16")
  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
   let g:netrw_cygwin= 1
  else
   let g:netrw_cygwin= 0
  endif
 else
  let g:netrw_cygwin= 0
 endif
endif

" set up shell quoting character
if !exists("g:tar_shq")
 if exists("&shq") && &shq != ""
  let g:tar_shq= &shq
 elseif has("win32") || has("win95") || has("win64") || has("win16")
  if exists("g:netrw_cygwin") && g:netrw_cygwin
   let g:tar_shq= "'"
  else
   let g:tar_shq= '"'
  endif
 else
  let g:tar_shq= "'"
 endif
" call Decho("g:tar_shq<".g:tar_shq.">")
endif

" ----------------
"  Functions: {{{1
" ----------------

" ---------------------------------------------------------------------
" tar#Browse: {{{2
fun! tar#Browse(tarfile)
"  call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
  let repkeep= &report
  set report=10

  " sanity checks
  if !executable(g:tar_cmd)
   redraw!
   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("tar#Browse")
   return
  endif
  if !filereadable(a:tarfile)
"   call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
   if a:tarfile !~# '^\a\+://'
    " if its an url, don't complain, let url-handlers such as vim do its thing
    redraw!
    echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   endif
   let &report= repkeep
"   call Dret("tar#Browse : file<".a:tarfile."> not readable")
   return
  endif
  if &ma != 1
   set ma
  endif
  let w:tarfile= a:tarfile

  setlocal noswapfile
  setlocal buftype=nofile
  setlocal bufhidden=hide
  setlocal nobuflisted
  setlocal nowrap
  set ft=tar

  " give header
"  call Decho("printing header")
  let lastline= line("$")
  call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
  call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
  call setline(lastline+3,'" Select a file with cursor and press ENTER')
  $put =''
  0d
  $

  let tarfile= a:tarfile
  if has("win32") && executable("cygpath")
   " assuming cygwin
   let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
  endif
  let curlast= line("$")
  if tarfile =~# '\.\(gz\|tgz\)$'
"   call Decho("1: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
   exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
  elseif tarfile =~# '\.lrp'
"   call Decho("2: exe silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
   exe "silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
  elseif tarfile =~# '\.bz2$'
"   call Decho("3: exe silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
   exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
  else
   if tarfile =~ '^\s*-'
    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
    let tarfile = substitute(tarfile, '-', './-', '')
   endif
"   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1))
   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1)
  endif
  if v:shell_error != 0
   redraw!
   echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
   return
  endif
  if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
   redraw!
   echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   silent %d
   let eikeep= &ei
   set ei=BufReadCmd,FileReadCmd
   exe "r ".fnameescape(a:tarfile)
   let &ei= eikeep
   1d
"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
   return
  endif

  setlocal noma nomod ro
  noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>

  let &report= repkeep
"  call Dret("tar#Browse : w:tarfile<".w:tarfile.">")
endfun

" ---------------------------------------------------------------------
" TarBrowseSelect: {{{2
fun! s:TarBrowseSelect()
"  call Dfunc("TarBrowseSelect() w:tarfile<".w:tarfile."> curfile<".expand("%").">")
  let repkeep= &report
  set report=10
  let fname= getline(".")
"  call Decho("fname<".fname.">")

  if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-'
   redraw!
   echohl WarningMsg | echo '***error*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"; See :help tar-options'
"   call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"')
   return
  endif

  " sanity check
  if fname =~ '^"'
   let &report= repkeep
"   call Dret("TarBrowseSelect")
   return
  endif

  " about to make a new window, need to use w:tarfile
  let tarfile= w:tarfile
  let curfile= expand("%")
  if has("win32") && executable("cygpath")
   " assuming cygwin
   let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
  endif

  new
  if !exists("g:tar_nomax") || g:tar_nomax == 0
   wincmd _
  endif
  let s:tblfile_{winnr()}= curfile
  call tar#Read("tarfile:".tarfile.'::'.fname,1)
  filetype detect

  let &report= repkeep
"  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
endfun

" ---------------------------------------------------------------------
" tar#Read: {{{2
fun! tar#Read(fname,mode)
"  call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")")
  let repkeep= &report
  set report=10
  let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
  let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
  if has("win32") && executable("cygpath")
   " assuming cygwin
   let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
  endif
"  call Decho("tarfile<".tarfile.">")
"  call Decho("fname<".fname.">")

  if      fname =~ '\.gz$'  && executable("zcat")
   let decmp= "|zcat"
   let doro = 1
  elseif  fname =~ '\.bz2$' && executable("bzcat")
   let decmp= "|bzcat"
   let doro = 1
  else
   let decmp=""
   let doro = 0
   if fname =~ '\.gz$\|\.bz2$\|\.Z$\|\.zip$'
    setlocal bin
   endif
  endif

  if exists("g:tar_secure")
   let tar_secure= " -- "
  else
   let tar_secure= " "
  endif
  if tarfile =~# '\.\(gz\|tgz\)$'
"   call Decho("5: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.s:Escape(fname,1))
   exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
  elseif tarfile =~# '\.lrp$'
"   call Decho("6: exe silent r! cat ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp)
   exe "silent r! cat -- ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
  elseif tarfile =~# '\.bz2$'
"   call Decho("7: exe silent r! bzip2 -d -c ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp)
   exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
  else
   if tarfile =~ '^\s*-'
    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
    let tarfile = substitute(tarfile, '-', './-', '')
   endif
"   call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions." "s:Escape(tarfile,1).tar_secure..s:Escape(fname,1).decmp)
   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." ".s:Escape(tarfile,1).tar_secure.s:Escape(fname,1).decmp
  endif

  if doro
   " because the reverse process of compressing changed files back into the tarball is not currently supported
   setlocal ro
  endif

  let w:tarfile= a:fname
  exe "file tarfile::".fnameescape(fname)

  " cleanup
  0d
  set nomod

  let &report= repkeep
"  call Dret("tar#Read : w:tarfile<".w:tarfile.">")
endfun

" ---------------------------------------------------------------------
" tar#Write: {{{2
fun! tar#Write(fname)
"  call Dfunc("tar#Write(fname<".a:fname.">) w:tarfile<".w:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
  let repkeep= &report
  set report=10

  if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-'
   redraw!
   echohl WarningMsg | echo '***error*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"; See :help tar-options'
"   call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"')
   return
  endif

  " sanity checks
  if !executable(g:tar_cmd)
   redraw!
   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("tar#Write")
   return
  endif
  if !exists("*mkdir")
   redraw!
   echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("tar#Write")
   return
  endif

  let curdir= getcwd()
  let tmpdir= tempname()
"  call Decho("orig tempname<".tmpdir.">")
  if tmpdir =~ '\.'
   let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
  endif
"  call Decho("tmpdir<".tmpdir.">")
  call mkdir(tmpdir,"p")

  " attempt to change to the indicated directory
  try
   exe "cd ".fnameescape(tmpdir)
  catch /^Vim\%((\a\+)\)\=:E344/
   redraw!
   echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("tar#Write")
   return
  endtry
"  call Decho("current directory now: ".getcwd())

  " place temporary files under .../_ZIPVIM_/
  if isdirectory("_ZIPVIM_")
   call s:Rmdir("_ZIPVIM_")
  endif
  call mkdir("_ZIPVIM_")
  cd _ZIPVIM_
"  call Decho("current directory now: ".getcwd())

  let tarfile = substitute(w:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
  let fname   = substitute(w:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')

  " handle compressed archives
  if tarfile =~# '\.gz'
   call system("gzip -d -- ".s:Escape(tarfile,0))
   let tarfile = substitute(tarfile,'\.gz','','e')
   let compress= "gzip -- ".s:Escape(tarfile,0)
"   call Decho("compress<".compress.">")
  elseif tarfile =~# '\.tgz'
   call system("gzip -d -- ".s:Escape(tarfile,0))
   let tarfile = substitute(tarfile,'\.tgz','.tar','e')
   let compress= "gzip -- ".s:Escape(tarfile,0)
   let tgz     = 1
"   call Decho("compress<".compress.">")
  elseif tarfile =~# '\.bz2'
   call system("bzip2 -d -- ".s:Escape(tarfile,0))
   let tarfile = substitute(tarfile,'\.bz2','','e')
   let compress= "bzip2 -- ".s:Escape(tarfile,0)
"   call Decho("compress<".compress.">")
  endif
"  call Decho("tarfile<".tarfile.">")

  if v:shell_error != 0
   redraw!
   echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
  else

"   call Decho("tarfile<".tarfile."> fname<".fname.">")
 
   if fname =~ '/'
    let dirpath = substitute(fname,'/[^/]\+$','','e')
    if executable("cygpath")
     let dirpath = substitute(system("cygpath ".s:Escape(dirpath, 0)),'\n','','e')
    endif
    call mkdir(dirpath,"p")
   endif
   if tarfile !~ '/'
    let tarfile= curdir.'/'.tarfile
   endif
   if tarfile =~ '^\s*-'
    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
    let tarfile = substitute(tarfile, '-', './-', '')
   endif
"   call Decho("tarfile<".tarfile."> fname<".fname.">")
 
   if exists("g:tar_secure")
    let tar_secure= " -- "
   else
    let tar_secure= " "
   endif
   exe "w! ".fnameescape(fname)
   if executable("cygpath")
    let tarfile = substitute(system("cygpath ".s:Escape(tarfile,0)),'\n','','e')
   endif
 
   " delete old file from tarfile
"   call Decho("system(".g:tar_cmd." --delete -f ".s:Escape(tarfile,0)." -- ".s:Escape(fname,0).")")
   call system(g:tar_cmd." --delete -f ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
   if v:shell_error != 0
    redraw!
    echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   else
 
    " update tarfile with new file 
"    call Decho(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
    call system(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
    if v:shell_error != 0
     redraw!
     echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
"     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    elseif exists("compress")
"     call Decho("call system(".compress.")")
     call system(compress)
     if exists("tgz")
"      call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")")
      call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e'))
     endif
    endif
   endif

   " support writing tarfiles across a network
   if s:tblfile_{winnr()} =~ '^\a\+://'
"    call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
    let tblfile= s:tblfile_{winnr()}
    1split|enew
    let binkeep= &binary
    let eikeep = &ei
    set binary ei=all
    exe "e! ".fnameescape(tarfile)
    call netrw#NetWrite(tblfile)
    let &ei     = eikeep
    let &binary = binkeep
    q!
    unlet s:tblfile_{winnr()}
   endif
  endif
  
  " cleanup and restore current directory
  cd ..
  call s:Rmdir("_ZIPVIM_")
  exe "cd ".fnameescape(curdir)
  setlocal nomod

  let &report= repkeep
"  call Dret("tar#Write")
endfun

" ---------------------------------------------------------------------
" Rmdir: {{{2
fun! s:Rmdir(fname)
"  call Dfunc("Rmdir(fname<".a:fname.">)")
  if has("unix")
   call system("/bin/rm -rf -- ".s:Escape(a:fname,0))
  elseif has("win32") || has("win95") || has("win64") || has("win16")
   if &shell =~? "sh$"
    call system("/bin/rm -rf -- ".s:Escape(a:fname,0))
   else
    call system("del /S ".s:Escape(a:fname,0))
   endif
  endif
"  call Dret("Rmdir")
endfun

" ---------------------------------------------------------------------
" s:Escape: {{{2
fun s:Escape(name,isfilt)
  " shellescape() was added by patch 7.0.111
  if exists("*shellescape")
   if a:isfilt
    let qnameq= shellescape(a:name,1)
   else
    let qnameq= shellescape(a:name)
   endif
  else
   let qnameq= g:tar_shq . a:name . g:tar_shq
  endif
  return qnameq
endfun

" ---------------------------------------------------------------------
" Modelines And Restoration: {{{1
let &cpo= s:keepcpo
unlet s:keepcpo
" vim:ts=8 fdm=marker


--- NEW FILE zip.vim ---
" zip.vim: Handles browsing zipfiles
"            AUTOLOAD PORTION
" Date:		Jul 30, 2008
" Version:	22
" Maintainer:	Charles E Campbell, Jr <NdrOchip at ScampbellPfamily.AbizM-NOSPAM>
" License:	Vim License  (see vim's :help license)
" Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
"               Permission is hereby granted to use and distribute this code,
"               with or without modifications, provided that this copyright
"               notice is copied with it. Like anything else that's free,
"               zip.vim and zipPlugin.vim are provided *as is* and comes with
"               no warranty of any kind, either expressed or implied. By using
"               this plugin, you agree that in no event will the copyright
"               holder be liable for any damages resulting from the use
"               of this software.

" ---------------------------------------------------------------------
" Load Once: {{{1
let s:keepcpo= &cpo
set cpo&vim
if &cp || exists("g:loaded_zip") || v:version < 700
 finish
endif

let g:loaded_zip     = "v22"
let s:zipfile_escape = ' ?&;\'
let s:ERROR          = 2
let s:WARNING        = 1
let s:NOTE           = 0

" ---------------------------------------------------------------------
"  Global Values: {{{1
if !exists("g:zip_shq")
 if &shq != ""
  let g:zip_shq= &shq
 elseif has("unix")
  let g:zip_shq= "'"
 else
  let g:zip_shq= '"'
 endif
endif
if !exists("g:zip_zipcmd")
 let g:zip_zipcmd= "zip"
endif
if !exists("g:zip_unzipcmd")
 let g:zip_unzipcmd= "unzip"
endif

" ----------------
"  Functions: {{{1
" ----------------

" ---------------------------------------------------------------------
" zip#Browse: {{{2
fun! zip#Browse(zipfile)
"  call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
  let repkeep= &report
  set report=10

  " sanity checks
  if !exists("*fnameescape")
   if &verbose > 1
    echoerr "the zip plugin is not available (your vim doens't support fnameescape())"
   endif
   return
  endif
  if !executable(g:zip_unzipcmd)
   redraw!
   echohl Error | echo "***error*** (zip#Browse) unzip not available on your system"
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("zip#Browse")
   return
  endif
  if !filereadable(a:zipfile)
   if a:zipfile !~# '^\a\+://'
    " if its an url, don't complain, let url-handlers such as vim do its thing
    redraw!
    echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   endif
   let &report= repkeep
"   call Dret("zip#Browse : file<".a:zipfile."> not readable")
   return
  endif
"  call Decho("passed sanity checks")
  if &ma != 1
   set ma
  endif
  let b:zipfile= a:zipfile

  setlocal noswapfile
  setlocal buftype=nofile
  setlocal bufhidden=hide
  setlocal nobuflisted
  setlocal nowrap
  set ft=tar

  " give header
  let lastline= line("$")
  call setline(lastline+1,'" zip.vim version '.g:loaded_zip)
  call setline(lastline+2,'" Browsing zipfile '.a:zipfile)
  call setline(lastline+3,'" Select a file with cursor and press ENTER')
  $put =''
  0d
  $

"  call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
  exe "silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1)
  if v:shell_error != 0
   redraw!
   echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   silent %d
   let eikeep= &ei
   set ei=BufReadCmd,FileReadCmd
   exe "r ".fnameescape(a:zipfile)
   let &ei= eikeep
   1d
"   call Dret("zip#Browse")
   return
  endif
"  call Decho("line 6: ".getline(6))
  let namecol= stridx(getline(6),'Name') + 1
"  call Decho("namecol=".namecol)
  4,$g/^\s*----/d
  4,$g/^\s*\a/d
  $d
  if namecol > 0
   exe 'silent 4,$s/^.*\%'.namecol.'c//'
  endif

  setlocal noma nomod ro
  noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>

  let &report= repkeep
"  call Dret("zip#Browse")
endfun

" ---------------------------------------------------------------------
" ZipBrowseSelect: {{{2
fun! s:ZipBrowseSelect()
"  call Dfunc("ZipBrowseSelect() zipfile<".b:zipfile."> curfile<".expand("%").">")
  let repkeep= &report
  set report=10
  let fname= getline(".")

  " sanity check
  if fname =~ '^"'
   let &report= repkeep
"   call Dret("ZipBrowseSelect")
   return
  endif
  if fname =~ '/$'
   redraw!
   echohl Error | echo "***error*** (zip#Browse) Please specify a file, not a directory" | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("ZipBrowseSelect")
   return
  endif

"  call Decho("fname<".fname.">")

  " get zipfile to the new-window
  let zipfile = b:zipfile
  let curfile= expand("%")
"  call Decho("zipfile<".zipfile.">")
"  call Decho("curfile<".curfile.">")

  new
  if !exists("g:zip_nomax") || g:zip_nomax == 0
   wincmd _
  endif
  let s:zipfile_{winnr()}= curfile
"  call Decho("exe e ".fnameescape("zipfile:".zipfile.'::'.fname))
  exe "e ".fnameescape("zipfile:".zipfile.'::'.fname)
  filetype detect

  let &report= repkeep
"  call Dret("ZipBrowseSelect : s:zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
endfun

" ---------------------------------------------------------------------
" zip#Read: {{{2
fun! zip#Read(fname,mode)
"  call Dfunc("zip#Read(fname<".a:fname.">,mode=".a:mode.")")
  let repkeep= &report
  set report=10

  if has("unix")
   let zipfile = substitute(a:fname,'zipfile:\(.\{-}\)::[^\\].*$','\1','')
   let fname   = substitute(a:fname,'zipfile:.\{-}::\([^\\].*\)$','\1','')
  else
   let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
   let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
   let fname = substitute(fname, '[', '[[]', 'g')
  endif
"  call Decho("zipfile<".zipfile.">")
"  call Decho("fname  <".fname.">")

"  call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1))
  exe "silent r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)

  " cleanup
  0d
  set nomod

  let &report= repkeep
"  call Dret("zip#Read")
endfun

" ---------------------------------------------------------------------
" zip#Write: {{{2
fun! zip#Write(fname)
"  call Dfunc("zip#Write(fname<".a:fname.">) zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
  let repkeep= &report
  set report=10

  " sanity checks
  if !executable(g:zip_zipcmd)
   redraw!
   echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("zip#Write")
   return
  endif
  if !exists("*mkdir")
   redraw!
   echohl Error | echo "***error*** (zip#Write) sorry, mkdir() doesn't work on your system" | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   let &report= repkeep
"   call Dret("zip#Write")
   return
  endif

  let curdir= getcwd()
  let tmpdir= tempname()
"  call Decho("orig tempname<".tmpdir.">")
  if tmpdir =~ '\.'
   let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
  endif
"  call Decho("tmpdir<".tmpdir.">")
  call mkdir(tmpdir,"p")

  " attempt to change to the indicated directory
  if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory")
   let &report= repkeep
"   call Dret("zip#Write")
   return
  endif
"  call Decho("current directory now: ".getcwd())

  " place temporary files under .../_ZIPVIM_/
  if isdirectory("_ZIPVIM_")
   call s:Rmdir("_ZIPVIM_")
  endif
  call mkdir("_ZIPVIM_")
  cd _ZIPVIM_
"  call Decho("current directory now: ".getcwd())

  if has("unix")
   let zipfile = substitute(a:fname,'zipfile:\(.\{-}\)::[^\\].*$','\1','')
   let fname   = substitute(a:fname,'zipfile:.\{-}::\([^\\].*\)$','\1','')
  else
   let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
   let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
  endif
"  call Decho("zipfile<".zipfile.">")
"  call Decho("fname  <".fname.">")

  if fname =~ '/'
   let dirpath = substitute(fname,'/[^/]\+$','','e')
   if executable("cygpath")
    let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
   endif
"   call Decho("mkdir(dirpath<".dirpath.">,p)")
   call mkdir(dirpath,"p")
  endif
  if zipfile !~ '/'
   let zipfile= curdir.'/'.zipfile
  endif
"  call Decho("zipfile<".zipfile."> fname<".fname.">")

  exe "w! ".fnameescape(fname)
  if executable("cygpath")
   let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
  endif

  if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
    let fname = substitute(fname, '[', '[[]', 'g')
  endif

"  call Decho(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0))
  call system(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0))
  if v:shell_error != 0
   redraw!
   echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()

  elseif s:zipfile_{winnr()} =~ '^\a\+://'
   " support writing zipfiles across a network
   let netzipfile= s:zipfile_{winnr()}
"   call Decho("handle writing <".zipfile."> across network as <".netzipfile.">")
   1split|enew
   let binkeep= &binary
   let eikeep = &ei
   set binary ei=all
   exe "e! ".fnameescape(zipfile)
   call netrw#NetWrite(netzipfile)
   let &ei     = eikeep
   let &binary = binkeep
   q!
   unlet s:zipfile_{winnr()}
  endif
  
  " cleanup and restore current directory
  cd ..
  call s:Rmdir("_ZIPVIM_")
  call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
  call s:Rmdir(tmpdir)
  setlocal nomod

  let &report= repkeep
"  call Dret("zip#Write")
endfun

" ---------------------------------------------------------------------
" s:Escape: {{{2
fun! s:Escape(fname,isfilt)
"  call Dfunc("QuoteFileDir(fname<".a:fname."> isfilt=".a:isfilt.")")
  if exists("*shellescape")
   if a:isfilt
    let qnameq= shellescape(a:fname,1)
   else
    let qnameq= shellescape(a:fname)
   endif
  else
   let qnameq= g:zip_shq.escape(a:fname,g:zip_shq).g:zip_shq
  endif
"  call Dret("QuoteFileDir <".qnameq.">")
  return qnameq
endfun

" ---------------------------------------------------------------------
" ChgDir: {{{2
fun! s:ChgDir(newdir,errlvl,errmsg)
"  call Dfunc("ChgDir(newdir<".a:newdir."> errlvl=".a:errlvl."  errmsg<".a:errmsg.">)")

  try
   exe "cd ".fnameescape(a:newdir)
  catch /^Vim\%((\a\+)\)\=:E344/
   redraw!
   if a:errlvl == s:NOTE
    echo "***note*** ".a:errmsg
   elseif a:errlvl == s:WARNING
    echohl WarningMsg | echo "***warning*** ".a:errmsg | echohl NONE
   elseif a:errlvl == s:ERROR
    echohl Error | echo "***error*** ".a:errmsg | echohl NONE
   endif
"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
"   call Dret("ChgDir 1")
   return 1
  endtry

"  call Dret("ChgDir 0")
  return 0
endfun

" ---------------------------------------------------------------------
" s:Rmdir: {{{2
fun! s:Rmdir(fname)
"  call Dfunc("Rmdir(fname<".a:fname.">)")
  if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
   call system("rmdir /S/Q ".s:Escape(a:fname,0))
  else
   call system("/bin/rm -rf ".s:Escape(a:fname,0))
  endif
"  call Dret("Rmdir")
endfun

" ------------------------------------------------------------------------
" Modelines And Restoration: {{{1
let &cpo= s:keepcpo
unlet s:keepcpo
" vim:ts=8 fdm=marker


Index: README.patches
===================================================================
RCS file: /cvs/extras/rpms/vim/F-10/README.patches,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -r1.114 -r1.115
--- README.patches	3 Nov 2008 11:44:50 -0000	1.114
+++ README.patches	1 Dec 2008 15:57:03 -0000	1.115
@@ -51,3 +51,37 @@
   1452  7.2.024  'history' can be made negative, causes out-of-memory error
   1470  7.2.025  a CursorHold event that invokes system() is retriggered
   2969  7.2.026  (after 7.2.010) 'K' uses the rest of the line
+  3235  7.2.027  can use cscope commands in the sandbox, might not be safe
+  1466  7.2.028  confusing error message for missing ()
+  1291  7.2.029  no completion for ":doautoall" like for ":doautocmd"
+  1546  7.2.030  (after 7.2.027) can't compile, ex_oldfiles undefined
+ 39400  7.2.031  file names from viminfo are not available to the user
+  1583  7.2.032  (after 7.2.031) can't compile with EXITFREE defined
+  2270  7.2.033  using "ucs-2le" for two-byte BOM, but text might be "utf-16le"
+  2372  7.2.034  memory leak in spell info when deleting a buffer
+  3522  7.2.035  mismatches for library and Vim alloc/free functions
+  7545  7.2.036  (extra) mismatches for library and Vim alloc/free functions
+  1576  7.2.037  double free with GTK 1 and compiled with EXITFREE
+  2438  7.2.038  overlapping arguments to memcpy()
+  1378  7.2.039  accessing freed memory on exit when EXITFREE is defined
+  1836  7.2.040  ":e ++ff=dos foo" gets "unix" 'ff' when CR before NL missing
+ 22993  7.2.041  diff messed up when editing a diff buffer in another tab page
+  4987  7.2.042  restoring view in autocmd sometimes doesn't work completely
+  2550  7.2.043  VMS: Too many chars escaped in filename and shell commands
+  5639  7.2.044  crash because of gcc 4 being over protective for strcpy()
+  2056  7.2.045  the Python interface has an empty entry in sys.path
+  1704  7.2.046  wrong check for filling buffer with encoding
+  2470  7.2.047  using -nb while it is not supported makes other side hang
+  4758  7.2.048  v:count and v:prevcount are not set correctly
+ 32552  7.2.049  (extra) Win32: the clipboard doesn't support UTF-16
+  8484  7.2.050  compiler warnings for not using return value of fwrite()
+ 15179  7.2.051  can't avoid 'wig' and 'suffixes' for glob() and globpath()
+  2611  7.2.052  synIDattr() doesn't support "sp" for special color
+  1754  7.2.053  crash when using WorkShop command ":ws foo"
+  2006  7.2.054  compilation warnings for fprintf format
+ 34319  7.2.055  various compiler warnings with strict checking
+  1635  7.2.056  (after 7.2.050) tests 58 and 59 fail
+  3210  7.2.057  (after 7.2.056) trying to put size_t in int variable
+  2338  7.2.058  can't add a feature name in the :version output
+  1847  7.2.059  diff is not always displayed properly
+ 34772  7.2.060  spell checking doesn't work well for compound words


Index: vim.spec
===================================================================
RCS file: /cvs/extras/rpms/vim/F-10/vim.spec,v
retrieving revision 1.226
retrieving revision 1.227
diff -u -r1.226 -r1.227
--- vim.spec	3 Nov 2008 13:48:56 -0000	1.226
+++ vim.spec	1 Dec 2008 15:57:05 -0000	1.227
@@ -8,7 +8,7 @@
 %define desktop_file_utils_version 0.2.93
 %endif
 
-%define withnetbeans 0
+%define withnetbeans 1
 
 %define withvimspell 0
 %define withhunspell 0
@@ -18,13 +18,13 @@
 #used for pre-releases:
 %define beta %{nil}
 %define vimdir vim72%{?beta}
-%define patchlevel 026
+%define patchlevel 060
 
 Summary: The VIM editor
 URL:     http://www.vim.org/
 Name: vim
 Version: %{baseversion}.%{beta}%{patchlevel}
-Release: 2%{?dist}
+Release: 1%{?dist}
 License: Vim
 Group: Applications/Editors
 Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}%{?beta}%{?CVSDATE}.tar.bz2
@@ -45,6 +45,16 @@
 Source14: spec-template
 Source15: http://www.cvjb.de/comp/vim/forth.vim
 
+# remove this for the next major version, CVE fixes:
+Source16: ftp://ftp.vim.org/vol/2/vim/runtime/plugin/netrwPlugin.vim
+Source17: ftp://ftp.vim.org/vol/2/vim/runtime/plugin/gzip.vim
+Source18: ftp://ftp.vim.org/vol/2/vim/runtime/filetype.vim
+Source19: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/zip.vim
+Source20: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/tar.vim
+Source21: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrwFileHandlers.vim
+Source22: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrw.vim
+Source23: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrwSettings.vim
+
 Patch2002: vim-7.0-fixkeys.patch
 Patch2003: vim-6.2-specsyntax.patch
 Patch2004: vim-7.0-crv.patch
@@ -56,32 +66,66 @@
 # Patches 001 < 999 are patches from the base maintainer.
 # If you're as lazy as me, generate the list using
 # for i in `seq 1 14`; do printf "Patch%03d: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.%03d\n" $i $i; done
-Patch001: 7.2.001
-Patch002: 7.2.002
-Patch003: 7.2.003
-Patch004: 7.2.004
-Patch005: 7.2.005
-Patch006: 7.2.006
-Patch007: 7.2.007
-Patch008: 7.2.008
-Patch009: 7.2.009
-Patch010: 7.2.010
-Patch011: 7.2.011
-Patch012: 7.2.012
-Patch013: 7.2.013
-Patch014: 7.2.014
-Patch015: 7.2.015
-Patch016: 7.2.016
-Patch017: 7.2.017
-Patch018: 7.2.018
-Patch019: 7.2.019
-Patch020: 7.2.020
-Patch021: 7.2.021
-Patch022: 7.2.022
-Patch023: 7.2.023
-Patch024: 7.2.024
-Patch025: 7.2.025
-Patch026: 7.2.026
+Patch001: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.001
+Patch002: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.002
+Patch003: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.003
+Patch004: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.004
+Patch005: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.005
+Patch006: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.006
+Patch007: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.007
+Patch008: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.008
+Patch009: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.009
+Patch010: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.010
+Patch011: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.011
+Patch012: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.012
+Patch013: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.013
+Patch014: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.014
+Patch015: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.015
+Patch016: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.016
+Patch017: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.017
+Patch018: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.018
+Patch019: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.019
+Patch020: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.020
+Patch021: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.021
+Patch022: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.022
+Patch023: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.023
+Patch024: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.024
+Patch025: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.025
+Patch026: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.026
+Patch027: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.027
+Patch028: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.028
+Patch029: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.029
+Patch030: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.030
+Patch031: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.031
+Patch032: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.032
+Patch033: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.033
+Patch034: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.034
+Patch035: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.035
+Patch036: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.036
+Patch037: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.037
+Patch038: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.038
+Patch039: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.039
+Patch040: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.040
+Patch041: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.041
+Patch042: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.042
+Patch043: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.043
+Patch044: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.044
+Patch045: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.045
+Patch046: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.046
+Patch047: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.047
+Patch048: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.048
+Patch049: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.049
+Patch050: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.050
+Patch051: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.051
+Patch052: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.052
+Patch053: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.053
+Patch054: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.054
+Patch055: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.055
+Patch056: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.056
+Patch057: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.057
+Patch058: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.058
+Patch059: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.059
+Patch060: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.060
 
 Patch3000: vim-7.0-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
@@ -241,6 +285,41 @@
 %patch024 -p0
 %patch025 -p0
 %patch026 -p0
+%patch027 -p0
+%patch028 -p0
+%patch029 -p0
+%patch030 -p0
+%patch031 -p0
+%patch032 -p0
+%patch033 -p0
+%patch034 -p0
+%patch035 -p0
+%patch036 -p0
+%patch037 -p0
+%patch038 -p0
+%patch039 -p0
+%patch040 -p0
+%patch041 -p0
+%patch042 -p0
+%patch043 -p0
+%patch044 -p0
+%patch045 -p0
+%patch046 -p0
+%patch047 -p0
+%patch048 -p0
+%patch049 -p0
+%patch050 -p0
+%patch051 -p0
+%patch052 -p0
+%patch053 -p0
+%patch054 -p0
+%patch055 -p0
+%patch056 -p0
+%patch057 -p0
+%patch058 -p0
+%patch059 -p0
+%patch060 -p0
+
 
 # install spell files
 %if %{withvimspell}
@@ -260,6 +339,14 @@
 %patch3011 -p1
 
 cp -f %{SOURCE15} runtime/syntax/forth.vim
+cp -f %{SOURCE16} runtime/plugin/netrwPlugin.vim
+cp -f %{SOURCE17} runtime/plugin/gzip.vim
+cp -f %{SOURCE18} runtime/plugin/filetype.vim
+cp -f %{SOURCE19} runtime/autoload/zip.vim
+cp -f %{SOURCE20} runtime/autoload/tar.vim
+cp -f %{SOURCE21} runtime/autoload/netrwFileHandlers.vim
+cp -f %{SOURCE22} runtime/autoload/netrw.vim
+cp -f %{SOURCE23} runtime/autoload/netrwSettings.vim
 
 
 %build
@@ -691,6 +778,12 @@
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
+* Mon Dec 01 2008 Karsten Hopp <karsten at redhat.com> 7.2.060-1
+- patchlevel 60
+
+* Mon Nov 10 2008 Karsten Hopp <karsten at redhat.com> 7.2.032-1
+- patchlevel 32
+
 * Mon Nov 03 2008 Karsten Hopp <karsten at redhat.com> 7.2.026-2
 - add more /usr/share/vim/vimfiles directories (#444387)
 


--- vim-6.4-cvim.patch DELETED ---


--- vim-7.1-ada.patch DELETED ---


--- vim-7.1-erlang.patch DELETED ---




More information about the fedora-extras-commits mailing list