diff --git a/7.3.623 b/7.3.623
new file mode 100644
index 0000000..72aea71
--- /dev/null
+++ b/7.3.623
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.623
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.623
+Problem:    Perl 5.14 commands crash Vim on MS-Windows.
+Solution:   Use perl_get_sv() instead of GvSV(). (Raymond Ko)
+Files:	    src/if_perl.xs
+
+
+*** ../vim-7.3.622/src/if_perl.xs	2012-03-16 19:34:43.000000000 +0100
+--- src/if_perl.xs	2012-08-08 13:15:29.000000000 +0200
+***************
+*** 76,81 ****
+--- 76,87 ----
+  # define EXTERN_C
+  #endif
+  
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
++ /* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
++  * with MSVC and Perl version 5.14. */
++ # define AVOID_PL_ERRGV
++ #endif
++ 
+  /* Compatibility hacks over */
+  
+  static PerlInterpreter *perl_interp = NULL;
+***************
+*** 796,802 ****
+--- 802,812 ----
+  
+      SvREFCNT_dec(sv);
+  
++ #ifdef AVOID_PL_ERRGV
++     err = SvPV(perl_get_sv("@", GV_ADD), length);
++ #else
+      err = SvPV(GvSV(PL_errgv), length);
++ #endif
+  
+      FREETMPS;
+      LEAVE;
+***************
+*** 866,872 ****
+--- 876,886 ----
+      sv_catpvn(sv, "}", 1);
+      perl_eval_sv(sv, G_DISCARD | G_NOARGS);
+      SvREFCNT_dec(sv);
++ #ifdef AVOID_PL_ERRGV
++     str = SvPV(perl_get_sv("@", GV_ADD), length);
++ #else
+      str = SvPV(GvSV(PL_errgv), length);
++ #endif
+      if (length)
+  	goto err;
+  
+***************
+*** 880,886 ****
+--- 894,904 ----
+  	sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
+  	PUSHMARK(sp);
+  	perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
++ #ifdef AVOID_PL_ERRGV
++ 	str = SvPV(perl_get_sv("@", GV_ADD), length);
++ #else
+  	str = SvPV(GvSV(PL_errgv), length);
++ #endif
+  	if (length)
+  	    break;
+  	SPAGAIN;
+*** ../vim-7.3.622/src/version.c	2012-08-02 21:48:20.000000000 +0200
+--- src/version.c	2012-08-08 13:08:10.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     623,
+  /**/
+
+-- 
+Don't be humble ... you're not that great.
+                      -- Golda Meir
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.624 b/7.3.624
new file mode 100644
index 0000000..f1150b6
--- /dev/null
+++ b/7.3.624
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.624
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.624
+Problem:    When cancelling input() it returns the third argument. That should
+	    only happen for inputdialog().
+Solution:   Check if inputdialog() was used. (Hirohito Higashi)
+Files:	    src/eval.c
+
+
+*** ../vim-7.3.623/src/eval.c	2012-07-25 16:46:59.000000000 +0200
+--- src/eval.c	2012-08-08 14:31:48.000000000 +0200
+***************
+*** 12966,12972 ****
+  	    rettv->vval.v_string =
+  		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+  				  xp_type, xp_arg);
+! 	if (rettv->vval.v_string == NULL
+  		&& argvars[1].v_type != VAR_UNKNOWN
+  		&& argvars[2].v_type != VAR_UNKNOWN)
+  	    rettv->vval.v_string = vim_strsave(get_tv_string_buf(
+--- 12966,12972 ----
+  	    rettv->vval.v_string =
+  		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+  				  xp_type, xp_arg);
+! 	if (inputdialog && rettv->vval.v_string == NULL
+  		&& argvars[1].v_type != VAR_UNKNOWN
+  		&& argvars[2].v_type != VAR_UNKNOWN)
+  	    rettv->vval.v_string = vim_strsave(get_tv_string_buf(
+*** ../vim-7.3.623/src/version.c	2012-08-08 13:17:26.000000000 +0200
+--- src/version.c	2012-08-08 14:28:46.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     624,
+  /**/
+
+-- 
+Your fault: core dumped
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.625 b/7.3.625
new file mode 100644
index 0000000..5334bc8
--- /dev/null
+++ b/7.3.625
@@ -0,0 +1,140 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.625
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.625
+Problem:    "gn" does not handle zero-width matches correctly.
+Solution:   Handle zero-width patterns specially. (Christian Brabandt)
+Files:	    src/search.c
+
+
+*** ../vim-7.3.624/src/search.c	2012-08-02 21:24:38.000000000 +0200
+--- src/search.c	2012-08-08 15:25:12.000000000 +0200
+***************
+*** 4546,4551 ****
+--- 4546,4554 ----
+      int		visual_active = FALSE;
+      int		flags = 0;
+      pos_T	save_VIsual;
++     regmmatch_T	regmatch;
++     int		nmatched = 0;
++     int		zerowidth = FALSE;
+  
+  
+      /* wrapping should not occur */
+***************
+*** 4581,4603 ****
+  	orig_pos = pos = start_pos = curwin->w_cursor;
+  
+      /*
+       * The trick is to first search backwards and then search forward again,
+       * so that a match at the current cursor position will be correctly
+       * captured.
+       */
+      for (i = 0; i < 2; i++)
+      {
+- 	if (i && count == 1)
+- 	    flags = SEARCH_START;
+- 
+  	if (forward)
+  	    dir = i;
+  	else
+  	    dir = !i;
+  	result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+  		spats[last_idx].pat, (long) (i ? count : 1),
+! 		SEARCH_KEEP | flags | (dir ? 0 : SEARCH_END),
+! 		RE_SEARCH, 0, NULL);
+  
+  	/* First search may fail, but then start searching from the
+  	 * beginning of the file (cursor might be on the search match)
+--- 4584,4625 ----
+  	orig_pos = pos = start_pos = curwin->w_cursor;
+  
+      /*
++      * Check for zero-width pattern.
++      */
++     if (search_regcomp(spats[last_idx].pat, RE_SEARCH, RE_SEARCH,
++ 			     ((SEARCH_HIS + SEARCH_KEEP)), &regmatch) == FAIL)
++ 	return FAIL;
++ 
++     /* Zero-width pattern should match somewhere, then we can check if start
++      * and end are in the same position. */
++     nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
++ 				     curwin->w_cursor.lnum, (colnr_T)0, NULL);
++     if (called_emsg)
++ 	return FAIL;
++     if (nmatched && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
++ 		 && regmatch.endpos[0].col == regmatch.startpos[0].col)
++ 	zerowidth = TRUE;
++     vim_free(regmatch.regprog);
++ 
++     /*
+       * The trick is to first search backwards and then search forward again,
+       * so that a match at the current cursor position will be correctly
+       * captured.
+       */
+      for (i = 0; i < 2; i++)
+      {
+  	if (forward)
+  	    dir = i;
+  	else
+  	    dir = !i;
++ 
++ 	flags = 0;
++ 	if (!dir && !zerowidth)
++ 	    flags = SEARCH_END;
++ 
+  	result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+  		spats[last_idx].pat, (long) (i ? count : 1),
+! 		SEARCH_KEEP | flags, RE_SEARCH, 0, NULL);
+  
+  	/* First search may fail, but then start searching from the
+  	 * beginning of the file (cursor might be on the search match)
+***************
+*** 4629,4638 ****
+      }
+  
+      start_pos = pos;
+!     flags = (forward ? SEARCH_END : 0);
+  
+!     /* move to match */
+!     result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+  	    spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+  
+      if (!VIsual_active)
+--- 4651,4662 ----
+      }
+  
+      start_pos = pos;
+!     flags = forward ? SEARCH_END : 0;
+  
+!     /* move to match, except for zero-width matches, in which case, we are
+!      * already on the next match */
+!     if (!zerowidth)
+! 	result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+  	    spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+  
+      if (!VIsual_active)
+*** ../vim-7.3.624/src/version.c	2012-08-08 14:33:16.000000000 +0200
+--- src/version.c	2012-08-08 15:21:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     625,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+222. You send more than 20 personal e-mails a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.626 b/7.3.626
new file mode 100644
index 0000000..33b1545
--- /dev/null
+++ b/7.3.626
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.626
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.626
+Problem:    Python interface doesn't build with Python 2.4 or older.
+Solution:   Define Py_ssize_t. (Benjamin Bannier)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.3.625/src/if_py_both.h	2012-07-25 15:36:00.000000000 +0200
+--- src/if_py_both.h	2012-08-08 15:53:24.000000000 +0200
+***************
+*** 12,17 ****
+--- 12,21 ----
+   * Common code for if_python.c and if_python3.c.
+   */
+  
++ #if PY_VERSION_HEX < 0x02050000
++ typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
++ #endif
++ 
+  #ifdef FEAT_MBYTE
+  # define ENC_OPT p_enc
+  #else
+*** ../vim-7.3.625/src/version.c	2012-08-08 15:27:54.000000000 +0200
+--- src/version.c	2012-08-08 15:52:07.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     626,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+224. You set up your own Web page. You set up a Web page for each
+     of your kids... and your pets.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.627 b/7.3.627
new file mode 100644
index 0000000..97a0298
--- /dev/null
+++ b/7.3.627
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.627
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.627
+Problem:    When using the "n" flag with the ":s" command a \= substitution
+	    will not be evaluated.
+Solution:   Do perform the evaluation, so that a function can be invoked at
+	    every matching position without changing the text. (Christian
+	    Brabandt)
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.3.626/src/ex_cmds.c	2012-07-10 15:18:18.000000000 +0200
+--- src/ex_cmds.c	2012-08-08 16:44:16.000000000 +0200
+***************
+*** 4264,4269 ****
+--- 4264,4272 ----
+      int		endcolumn = FALSE;	/* cursor in last column when done */
+      pos_T	old_cursor = curwin->w_cursor;
+      int		start_nsubs;
++ #ifdef FEAT_EVAL
++     int         save_ma = 0;
++ #endif
+  
+      cmd = eap->arg;
+      if (!global_busy)
+***************
+*** 4668,4674 ****
+  		    }
+  		    sub_nsubs++;
+  		    did_sub = TRUE;
+! 		    goto skip;
+  		}
+  
+  		if (do_ask)
+--- 4671,4682 ----
+  		    }
+  		    sub_nsubs++;
+  		    did_sub = TRUE;
+! #ifdef FEAT_EVAL
+! 		    /* Skip the substitution, unless an expression is used,
+! 		     * then it is evaluated in the sandbox. */
+! 		    if (!(sub[0] == '\\' && sub[1] == '='))
+! #endif
+! 			goto skip;
+  		}
+  
+  		if (do_ask)
+***************
+*** 4840,4849 ****
+--- 4848,4874 ----
+  		/*
+  		 * 3. substitute the string.
+  		 */
++ #ifdef FEAT_EVAL
++ 		if (do_count)
++ 		{
++ 		    /* prevent accidently changing the buffer by a function */
++ 		    save_ma = curbuf->b_p_ma;
++ 		    curbuf->b_p_ma = FALSE;
++ 		    sandbox++;
++ 		}
++ #endif
+  		/* get length of substitution part */
+  		sublen = vim_regsub_multi(&regmatch,
+  				    sub_firstlnum - regmatch.startpos[0].lnum,
+  				    sub, sub_firstline, FALSE, p_magic, TRUE);
++ #ifdef FEAT_EVAL
++ 		if (do_count)
++ 		{
++ 		    curbuf->b_p_ma = save_ma;
++ 		    sandbox--;
++ 		    goto skip;
++ 		}
++ #endif
+  
+  		/* When the match included the "$" of the last line it may
+  		 * go beyond the last line of the buffer. */
+*** ../vim-7.3.626/src/version.c	2012-08-08 16:05:03.000000000 +0200
+--- src/version.c	2012-08-08 16:48:45.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     627,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+225. You sign up for free subscriptions for all the computer magazines
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.628 b/7.3.628
new file mode 100644
index 0000000..bab3147
--- /dev/null
+++ b/7.3.628
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.628
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.628
+Problem:    ":open" does not allow for a !, which results in a confusing error
+	    message. (Shawn Wilson)
+Solution:   Allow ! on ":open". (Christian Brabandt)
+Files:	    src/ex_cmds.h
+
+
+*** ../vim-7.3.627/src/ex_cmds.h	2012-07-06 18:27:34.000000000 +0200
+--- src/ex_cmds.h	2012-08-08 17:15:45.000000000 +0200
+***************
+*** 662,668 ****
+  EX(CMD_nunmenu,		"nunmenu",	ex_menu,
+  			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,
+--- 662,668 ----
+  EX(CMD_nunmenu,		"nunmenu",	ex_menu,
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_open,		"open",		ex_open,
+! 			RANGE|BANG|EXTRA),
+  EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
+  			BANG|TRLBAR|SBOXOK|CMDWIN),
+  EX(CMD_omap,		"omap",		ex_map,
+*** ../vim-7.3.627/src/version.c	2012-08-08 16:50:40.000000000 +0200
+--- src/version.c	2012-08-08 17:30:14.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     628,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+226. You sit down at the computer right after dinner and your spouse
+     says "See you in the morning."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.629 b/7.3.629
new file mode 100644
index 0000000..8e26dd4
--- /dev/null
+++ b/7.3.629
@@ -0,0 +1,437 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.629
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.629
+Problem:    There is no way to make 'shiftwidth' follow 'tabstop'.
+Solution:   When 'shiftwidth' is zero use the value of 'tabstop'. (Christian
+	    Brabandt)
+Files:	    src/edit.c, src/ex_getln.c, src/fold.c, src/misc1.c, src/ops.c,
+	    src/option.c, src/proto/option.pro
+
+
+*** ../vim-7.3.628/src/edit.c	2012-07-25 16:46:59.000000000 +0200
+--- src/edit.c	2012-08-08 17:55:37.000000000 +0200
+***************
+*** 8899,8907 ****
+  
+  	    *inserted_space_p = FALSE;
+  	    if (p_sta && in_indent)
+! 		ts = curbuf->b_p_sw;
+  	    else
+! 		ts = curbuf->b_p_sts;
+  	    /* Compute the virtual column where we want to be.  Since
+  	     * 'showbreak' may get in the way, need to get the last column of
+  	     * the previous character. */
+--- 8899,8907 ----
+  
+  	    *inserted_space_p = FALSE;
+  	    if (p_sta && in_indent)
+! 		ts = (int)get_sw_value();
+  	    else
+! 		ts = (int)curbuf->b_p_sts;
+  	    /* Compute the virtual column where we want to be.  Since
+  	     * 'showbreak' may get in the way, need to get the last column of
+  	     * the previous character. */
+***************
+*** 9589,9595 ****
+       * When nothing special, insert TAB like a normal character
+       */
+      if (!curbuf->b_p_et
+! 	    && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw)
+  	    && curbuf->b_p_sts == 0)
+  	return TRUE;
+  
+--- 9589,9595 ----
+       * When nothing special, insert TAB like a normal character
+       */
+      if (!curbuf->b_p_et
+! 	    && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
+  	    && curbuf->b_p_sts == 0)
+  	return TRUE;
+  
+***************
+*** 9605,9611 ****
+      AppendToRedobuff((char_u *)"\t");
+  
+      if (p_sta && ind)		/* insert tab in indent, use 'shiftwidth' */
+! 	temp = (int)curbuf->b_p_sw;
+      else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
+  	temp = (int)curbuf->b_p_sts;
+      else			/* otherwise use 'tabstop' */
+--- 9605,9611 ----
+      AppendToRedobuff((char_u *)"\t");
+  
+      if (p_sta && ind)		/* insert tab in indent, use 'shiftwidth' */
+! 	temp = (int)get_sw_value();
+      else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
+  	temp = (int)curbuf->b_p_sts;
+      else			/* otherwise use 'tabstop' */
+*** ../vim-7.3.628/src/ex_getln.c	2012-06-29 13:44:37.000000000 +0200
+--- src/ex_getln.c	2012-08-08 17:39:40.000000000 +0200
+***************
+*** 2268,2277 ****
+  
+  	    if (c1 == Ctrl_T)
+  	    {
+  		p = (char_u *)line_ga.ga_data;
+  		p[line_ga.ga_len] = NUL;
+  		indent = get_indent_str(p, 8);
+! 		indent += curbuf->b_p_sw - indent % curbuf->b_p_sw;
+  add_indent:
+  		while (get_indent_str(p, 8) < indent)
+  		{
+--- 2268,2279 ----
+  
+  	    if (c1 == Ctrl_T)
+  	    {
++ 		long        sw = get_sw_value();
++ 
+  		p = (char_u *)line_ga.ga_data;
+  		p[line_ga.ga_len] = NUL;
+  		indent = get_indent_str(p, 8);
+! 		indent += sw - indent % sw;
+  add_indent:
+  		while (get_indent_str(p, 8) < indent)
+  		{
+***************
+*** 2323,2329 ****
+  		    p[line_ga.ga_len] = NUL;
+  		    indent = get_indent_str(p, 8);
+  		    --indent;
+! 		    indent -= indent % curbuf->b_p_sw;
+  		}
+  		while (get_indent_str(p, 8) > indent)
+  		{
+--- 2325,2331 ----
+  		    p[line_ga.ga_len] = NUL;
+  		    indent = get_indent_str(p, 8);
+  		    --indent;
+! 		    indent -= indent % get_sw_value();
+  		}
+  		while (get_indent_str(p, 8) > indent)
+  		{
+*** ../vim-7.3.628/src/fold.c	2012-02-29 19:19:57.000000000 +0100
+--- src/fold.c	2012-08-08 17:40:11.000000000 +0200
+***************
+*** 3025,3031 ****
+  	    flp->lvl = -1;
+      }
+      else
+! 	flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
+      if (flp->lvl > flp->wp->w_p_fdn)
+      {
+  	flp->lvl = flp->wp->w_p_fdn;
+--- 3025,3031 ----
+  	    flp->lvl = -1;
+      }
+      else
+! 	flp->lvl = get_indent_buf(buf, lnum) / get_sw_value();
+      if (flp->lvl > flp->wp->w_p_fdn)
+      {
+  	flp->lvl = flp->wp->w_p_fdn;
+*** ../vim-7.3.628/src/misc1.c	2012-07-25 16:09:59.000000000 +0200
+--- src/misc1.c	2012-08-08 17:43:07.000000000 +0200
+***************
+*** 1389,1397 ****
+  #ifdef FEAT_SMARTINDENT
+  	if (did_si)
+  	{
+  	    if (p_sr)
+! 		newindent -= newindent % (int)curbuf->b_p_sw;
+! 	    newindent += (int)curbuf->b_p_sw;
+  	}
+  #endif
+  	/* Copy the indent */
+--- 1389,1399 ----
+  #ifdef FEAT_SMARTINDENT
+  	if (did_si)
+  	{
++ 	    int        sw = (int)get_sw_value();
++ 
+  	    if (p_sr)
+! 		newindent -= newindent % sw;
+! 	    newindent += sw;
+  	}
+  #endif
+  	/* Copy the indent */
+***************
+*** 6461,6471 ****
+      int
+  get_c_indent()
+  {
+      /*
+       * spaces from a block's opening brace the prevailing indent for that
+       * block should be
+       */
+!     int ind_level = curbuf->b_p_sw;
+  
+      /*
+       * spaces from the edge of the line an open brace that's at the end of a
+--- 6463,6476 ----
+      int
+  get_c_indent()
+  {
++     int sw = (int)get_sw_value();
++ 
+      /*
+       * spaces from a block's opening brace the prevailing indent for that
+       * block should be
+       */
+! 
+!     int ind_level = sw;
+  
+      /*
+       * spaces from the edge of the line an open brace that's at the end of a
+***************
+*** 6512,6523 ****
+      /*
+       * spaces from the switch() indent a "case xx" label should be located
+       */
+!     int ind_case = curbuf->b_p_sw;
+  
+      /*
+       * spaces from the "case xx:" code after a switch() should be located
+       */
+!     int ind_case_code = curbuf->b_p_sw;
+  
+      /*
+       * lineup break at end of case in switch() with case label
+--- 6517,6528 ----
+      /*
+       * spaces from the switch() indent a "case xx" label should be located
+       */
+!     int ind_case = sw;
+  
+      /*
+       * spaces from the "case xx:" code after a switch() should be located
+       */
+!     int ind_case_code = sw;
+  
+      /*
+       * lineup break at end of case in switch() with case label
+***************
+*** 6528,6572 ****
+       * spaces from the class declaration indent a scope declaration label
+       * should be located
+       */
+!     int ind_scopedecl = curbuf->b_p_sw;
+  
+      /*
+       * spaces from the scope declaration label code should be located
+       */
+!     int ind_scopedecl_code = curbuf->b_p_sw;
+  
+      /*
+       * amount K&R-style parameters should be indented
+       */
+!     int ind_param = curbuf->b_p_sw;
+  
+      /*
+       * amount a function type spec should be indented
+       */
+!     int ind_func_type = curbuf->b_p_sw;
+  
+      /*
+       * amount a cpp base class declaration or constructor initialization
+       * should be indented
+       */
+!     int ind_cpp_baseclass = curbuf->b_p_sw;
+  
+      /*
+       * additional spaces beyond the prevailing indent a continuation line
+       * should be located
+       */
+!     int ind_continuation = curbuf->b_p_sw;
+  
+      /*
+       * spaces from the indent of the line with an unclosed parentheses
+       */
+!     int ind_unclosed = curbuf->b_p_sw * 2;
+  
+      /*
+       * spaces from the indent of the line with an unclosed parentheses, which
+       * itself is also unclosed
+       */
+!     int ind_unclosed2 = curbuf->b_p_sw;
+  
+      /*
+       * suppress ignoring spaces from the indent of a line starting with an
+--- 6533,6577 ----
+       * spaces from the class declaration indent a scope declaration label
+       * should be located
+       */
+!     int ind_scopedecl = sw;
+  
+      /*
+       * spaces from the scope declaration label code should be located
+       */
+!     int ind_scopedecl_code = sw;
+  
+      /*
+       * amount K&R-style parameters should be indented
+       */
+!     int ind_param = sw;
+  
+      /*
+       * amount a function type spec should be indented
+       */
+!     int ind_func_type = sw;
+  
+      /*
+       * amount a cpp base class declaration or constructor initialization
+       * should be indented
+       */
+!     int ind_cpp_baseclass = sw;
+  
+      /*
+       * additional spaces beyond the prevailing indent a continuation line
+       * should be located
+       */
+!     int ind_continuation = sw;
+  
+      /*
+       * spaces from the indent of the line with an unclosed parentheses
+       */
+!     int ind_unclosed = sw * 2;
+  
+      /*
+       * spaces from the indent of the line with an unclosed parentheses, which
+       * itself is also unclosed
+       */
+!     int ind_unclosed2 = sw;
+  
+      /*
+       * suppress ignoring spaces from the indent of a line starting with an
+***************
+*** 6719,6730 ****
+  	if (*options == 's')	    /* "2s" means two times 'shiftwidth' */
+  	{
+  	    if (options == digits)
+! 		n = curbuf->b_p_sw;	/* just "s" is one 'shiftwidth' */
+  	    else
+  	    {
+! 		n *= curbuf->b_p_sw;
+  		if (divider)
+! 		    n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
+  	    }
+  	    ++options;
+  	}
+--- 6724,6735 ----
+  	if (*options == 's')	    /* "2s" means two times 'shiftwidth' */
+  	{
+  	    if (options == digits)
+! 		n = sw;	/* just "s" is one 'shiftwidth' */
+  	    else
+  	    {
+! 		n *= sw;
+  		if (divider)
+! 		    n += (sw * fraction + divider / 2) / divider;
+  	    }
+  	    ++options;
+  	}
+*** ../vim-7.3.628/src/ops.c	2012-07-10 16:49:08.000000000 +0200
+--- src/ops.c	2012-08-08 17:34:28.000000000 +0200
+***************
+*** 332,338 ****
+  {
+      int		count;
+      int		i, j;
+!     int		p_sw = (int)curbuf->b_p_sw;
+  
+      count = get_indent();	/* get current indent */
+  
+--- 332,338 ----
+  {
+      int		count;
+      int		i, j;
+!     int		p_sw = (int)get_sw_value();
+  
+      count = get_indent();	/* get current indent */
+  
+***************
+*** 388,394 ****
+      int			total;
+      char_u		*newp, *oldp;
+      int			oldcol = curwin->w_cursor.col;
+!     int			p_sw = (int)curbuf->b_p_sw;
+      int			p_ts = (int)curbuf->b_p_ts;
+      struct block_def	bd;
+      int			incr;
+--- 388,394 ----
+      int			total;
+      char_u		*newp, *oldp;
+      int			oldcol = curwin->w_cursor.col;
+!     int			p_sw = (int)get_sw_value();
+      int			p_ts = (int)curbuf->b_p_ts;
+      struct block_def	bd;
+      int			incr;
+*** ../vim-7.3.628/src/option.c	2012-07-10 18:31:49.000000000 +0200
+--- src/option.c	2012-08-08 17:45:01.000000000 +0200
+***************
+*** 8125,8131 ****
+      need_mouse_correct = TRUE;
+  #endif
+  
+!     if (curbuf->b_p_sw <= 0)
+      {
+  	errmsg = e_positive;
+  	curbuf->b_p_sw = curbuf->b_p_ts;
+--- 8125,8131 ----
+      need_mouse_correct = TRUE;
+  #endif
+  
+!     if (curbuf->b_p_sw < 0)
+      {
+  	errmsg = e_positive;
+  	curbuf->b_p_sw = curbuf->b_p_ts;
+***************
+*** 11419,11421 ****
+--- 11419,11431 ----
+  {
+      return check_opt_strings(p, p_ff_values, FALSE);
+  }
++ 
++ /*
++  * Return the effective shiftwidth value for current buffer, using the
++  * 'tabstop' value when 'shiftwidth' is zero.
++  */
++     long
++ get_sw_value()
++ {
++     return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts;
++ }
+*** ../vim-7.3.628/src/proto/option.pro	2011-01-22 00:11:42.000000000 +0100
+--- src/proto/option.pro	2012-08-08 17:34:33.000000000 +0200
+***************
+*** 56,59 ****
+--- 56,60 ----
+  void save_file_ff __ARGS((buf_T *buf));
+  int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
+  int check_ff_value __ARGS((char_u *p));
++ long get_sw_value __ARGS((void));
+  /* vim: set ft=c : */
+*** ../vim-7.3.628/src/version.c	2012-08-08 17:31:36.000000000 +0200
+--- src/version.c	2012-08-08 17:57:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     629,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+228. You spend Saturday night making the counter on your home page
+     pass that 2000 mark.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.630 b/7.3.630
new file mode 100644
index 0000000..d89cfbf
--- /dev/null
+++ b/7.3.630
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.630
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.630
+Problem:    "|" does not behave correctly when 'virtualedit' is set.
+Solution:   Call validate_virtcol(). (David Bürgin)
+Files:	    src/normal.c
+
+
+*** ../vim-7.3.629/src/normal.c	2012-07-29 12:55:21.000000000 +0200
+--- src/normal.c	2012-08-15 13:20:13.000000000 +0200
+***************
+*** 7786,7792 ****
+--- 7786,7795 ----
+       * virtualedit.  Recalculate curwin->w_cursor to avoid bad hilighting.
+       */
+      if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
++     {
++ 	validate_virtcol();
+  	coladvance(curwin->w_virtcol);
++     }
+  #endif
+      VIsual = curwin->w_cursor;
+  
+*** ../vim-7.3.629/src/version.c	2012-08-08 18:01:00.000000000 +0200
+--- src/version.c	2012-08-15 13:30:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     630,
+  /**/
+
+-- 
+"Marriage is when a man and woman become as one; the trouble starts
+when they try to decide which one"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.631 b/7.3.631
new file mode 100644
index 0000000..b7bff4f
--- /dev/null
+++ b/7.3.631
@@ -0,0 +1,322 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.631
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.631
+Problem:    Cannot complete user names.
+Solution:   Add user name completion.  (Dominique Pelle)
+Files:	    runtime/doc/map.txt, src/auto/configure, src/config.h.in,
+	    src/configure.in, src/ex_docmd.c, src/ex_getln.c,
+	    src/misc1.c, src/misc2.c, src/proto/misc1.pro, src/vim.h
+
+
+*** ../vim-7.3.630/runtime/doc/map.txt	2012-04-30 18:48:38.000000000 +0200
+--- runtime/doc/map.txt	2012-08-15 13:46:34.000000000 +0200
+***************
+*** 1227,1232 ****
+--- 1244,1250 ----
+  	-complete=syntax	syntax file names |'syntax'|
+  	-complete=tag		tags
+  	-complete=tag_listfiles	tags, file names are shown when CTRL-D is hit
++ 	-complete=user		user names
+  	-complete=var		user variables
+  	-complete=custom,{func} custom completion, defined via {func}
+  	-complete=customlist,{func} custom completion, defined via {func}
+*** ../vim-7.3.630/src/auto/configure	2012-07-25 16:32:03.000000000 +0200
+--- src/auto/configure	2012-08-15 13:48:06.000000000 +0200
+***************
+*** 10631,10637 ****
+  fi
+  
+  for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
+! 	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+  	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+  	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+  	sigvec strcasecmp strerror strftime stricmp strncasecmp \
+--- 10631,10637 ----
+  fi
+  
+  for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
+! 	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+  	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+  	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+  	sigvec strcasecmp strerror strftime stricmp strncasecmp \
+*** ../vim-7.3.630/src/config.h.in	2012-02-05 22:51:27.000000000 +0100
+--- src/config.h.in	2012-08-15 13:46:35.000000000 +0200
+***************
+*** 161,166 ****
+--- 161,167 ----
+  #undef HAVE_FSYNC
+  #undef HAVE_GETCWD
+  #undef HAVE_GETPSEUDOTTY
++ #undef HAVE_GETPWENT
+  #undef HAVE_GETPWNAM
+  #undef HAVE_GETPWUID
+  #undef HAVE_GETRLIMIT
+*** ../vim-7.3.630/src/configure.in	2012-07-25 16:32:03.000000000 +0200
+--- src/configure.in	2012-08-15 13:46:35.000000000 +0200
+***************
+*** 2994,3000 ****
+  dnl Check for functions in one big call, to reduce the size of configure.
+  dnl Can only be used for functions that do not require any include.
+  AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
+! 	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+  	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+  	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+  	sigvec strcasecmp strerror strftime stricmp strncasecmp \
+--- 2994,3000 ----
+  dnl Check for functions in one big call, to reduce the size of configure.
+  dnl Can only be used for functions that do not require any include.
+  AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
+! 	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+  	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+  	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+  	sigvec strcasecmp strerror strftime stricmp strncasecmp \
+*** ../vim-7.3.630/src/ex_docmd.c	2012-08-02 21:24:38.000000000 +0200
+--- src/ex_docmd.c	2012-08-15 13:54:29.000000000 +0200
+***************
+*** 3515,3520 ****
+--- 3515,3537 ----
+  #endif
+  	    }
+  	}
++ #if defined(FEAT_CMDL_COMPL)
++ 	/* Check for user names */
++ 	if (*xp->xp_pattern == '~')
++ 	{
++ 	    for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
++ 		;
++ 	    /* Complete ~user only if it partially matches a user name.
++ 	     * A full match ~user<Tab> will be replaced by user's home
++ 	     * directory i.e. something like ~user<Tab> -> /home/user/ */
++ 	    if (*p == NUL && p > xp->xp_pattern + 1
++ 				       && match_user(xp->xp_pattern + 1) == 1)
++ 	    {
++ 		xp->xp_context = EXPAND_USER;
++ 		++xp->xp_pattern;
++ 	    }
++ 	}
++ #endif
+      }
+  
+  /*
+***************
+*** 5396,5401 ****
+--- 5413,5419 ----
+  #endif
+      {EXPAND_TAGS, "tag"},
+      {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
++     {EXPAND_USER, "user"},
+      {EXPAND_USER_VARS, "var"},
+      {0, NULL}
+  };
+*** ../vim-7.3.630/src/ex_getln.c	2012-08-08 18:01:00.000000000 +0200
+--- src/ex_getln.c	2012-08-15 13:46:35.000000000 +0200
+***************
+*** 4336,4341 ****
+--- 4336,4342 ----
+   *  EXPAND_EXPRESSION	    Complete internal or user defined function/variable
+   *			    names in expressions, eg :while s^I
+   *  EXPAND_ENV_VARS	    Complete environment variable names
++  *  EXPAND_USER		    Complete user names
+   */
+      static void
+  set_expand_context(xp)
+***************
+*** 4681,4686 ****
+--- 4682,4688 ----
+  	    {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+  #endif
+  	    {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
++ 	    {EXPAND_USER, get_users, TRUE, FALSE},
+  	};
+  	int	i;
+  
+*** ../vim-7.3.630/src/misc1.c	2012-08-08 18:01:00.000000000 +0200
+--- src/misc1.c	2012-08-15 13:57:53.000000000 +0200
+***************
+*** 18,23 ****
+--- 18,28 ----
+  static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name));
+  static int copy_indent __ARGS((int size, char_u	*src));
+  
++ /* All user names (for ~user completion as done by shell). */
++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++ static garray_T	ga_users;
++ #endif
++ 
+  /*
+   * Count the size (in window cells) of the indent in the current line.
+   */
+***************
+*** 3782,3787 ****
+--- 3787,3800 ----
+  {
+      vim_free(homedir);
+  }
++ 
++ # ifdef FEAT_CMDL_COMPL
++     void
++ free_users()
++ {
++     ga_clear_strings(&ga_users);
++ }
++ # endif
+  #endif
+  
+  /*
+***************
+*** 4451,4456 ****
+--- 4464,4543 ----
+      return name;
+  # endif
+  }
++ 
++ /*
++  * Find all user names for user completion.
++  * Done only once and then cached.
++  */
++     static void
++ init_users() {
++     static int	lazy_init_done = FALSE;
++ 
++     if (lazy_init_done)
++ 	return;
++ 
++     lazy_init_done = TRUE;
++     ga_init2(&ga_users, sizeof(char_u *), 20);
++ 
++ # if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
++     {
++ 	char_u*		user;
++ 	struct passwd*	pw;
++ 
++ 	setpwent();
++ 	while ((pw = getpwent()) != NULL)
++ 	    /* pw->pw_name shouldn't be NULL but just in case... */
++ 	    if (pw->pw_name != NULL)
++ 	    {
++ 		if (ga_grow(&ga_users, 1) == FAIL)
++ 		    break;
++ 		user = vim_strsave((char_u*)pw->pw_name);
++ 		if (user == NULL)
++ 		    break;
++ 		((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
++ 	    }
++ 	endpwent();
++     }
++ # endif
++ }
++ 
++ /*
++  * Function given to ExpandGeneric() to obtain an user names.
++  */
++     char_u*
++ get_users(xp, idx)
++     expand_T	*xp UNUSED;
++     int		idx;
++ {
++     init_users();
++     if (idx < ga_users.ga_len)
++ 	return ((char_u **)ga_users.ga_data)[idx];
++     return NULL;
++ }
++ 
++ /*
++  * Check whether name matches a user name. Return:
++  * 0 if name does not match any user name.
++  * 1 if name partially matches the beginning of a user name.
++  * 2 is name fully matches a user name.
++  */
++ int match_user(name)
++     char_u* name;
++ {
++     int i;
++     int n = (int)STRLEN(name);
++     int result = 0;
++ 
++     init_users();
++     for (i = 0; i < ga_users.ga_len; i++)
++     {
++ 	if (STRCMP(((char_u **)ga_users.ga_data)[i], name) == 0)
++ 	    return 2; /* full match */
++ 	if (STRNCMP(((char_u **)ga_users.ga_data)[i], name, n) == 0)
++ 	    result = 1; /* partial match */
++     }
++     return result;
++ }
+  #endif
+  
+  /*
+*** ../vim-7.3.630/src/misc2.c	2012-06-29 15:51:26.000000000 +0200
+--- src/misc2.c	2012-08-15 13:46:35.000000000 +0200
+***************
+*** 1110,1115 ****
+--- 1110,1118 ----
+      free_all_marks();
+      alist_clear(&global_alist);
+      free_homedir();
++ # if defined(FEAT_CMDL_COMPL)
++     free_users();
++ # endif
+      free_search_patterns();
+      free_old_sub();
+      free_last_insert();
+*** ../vim-7.3.630/src/proto/misc1.pro	2012-06-06 16:12:54.000000000 +0200
+--- src/proto/misc1.pro	2012-08-15 13:46:35.000000000 +0200
+***************
+*** 50,55 ****
+--- 50,56 ----
+  void vim_beep __ARGS((void));
+  void init_homedir __ARGS((void));
+  void free_homedir __ARGS((void));
++ void free_users __ARGS((void));
+  char_u *expand_env_save __ARGS((char_u *src));
+  char_u *expand_env_save_opt __ARGS((char_u *src, int one));
+  void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
+***************
+*** 57,62 ****
+--- 58,65 ----
+  char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
+  void vim_setenv __ARGS((char_u *name, char_u *val));
+  char_u *get_env_name __ARGS((expand_T *xp, int idx));
++ char_u *get_users __ARGS((expand_T *xp, int idx));
++ int match_user __ARGS((char_u* name));
+  void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
+  char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
+  int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
+*** ../vim-7.3.630/src/vim.h	2012-07-10 17:14:50.000000000 +0200
+--- src/vim.h	2012-08-15 13:46:35.000000000 +0200
+***************
+*** 782,787 ****
+--- 782,788 ----
+  #define EXPAND_OWNSYNTAX	39
+  #define EXPAND_LOCALES		40
+  #define EXPAND_HISTORY		41
++ #define EXPAND_USER		42
+  
+  /* Values for exmode_active (0 is no exmode) */
+  #define EXMODE_NORMAL		1
+*** ../vim-7.3.630/src/version.c	2012-08-15 13:30:55.000000000 +0200
+--- src/version.c	2012-08-15 14:01:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     631,
+  /**/
+
+-- 
+"Marriage is the process of finding out what kind of man your wife
+would have preferred"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.632 b/7.3.632
new file mode 100644
index 0000000..9e38969
--- /dev/null
+++ b/7.3.632
@@ -0,0 +1,537 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.632
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.632
+Problem:    Cannot select beyond 222 columns with the mouse in xterm.
+Solution:   Add support for SGR mouse tracking. (Hayaki Saito)
+Files:      runtime/doc/options.txt, src/feature.h, src/keymap.h, src/misc2.c,
+            src/option.h, src/os_unix.c, src/term.c, src/version.c
+
+
+*** ../vim-7.3.631/runtime/doc/options.txt	2012-07-10 16:49:08.000000000 +0200
+--- runtime/doc/options.txt	2012-08-15 16:04:26.000000000 +0200
+***************
+*** 7383,7388 ****
+--- 7424,7435 ----
+  	   jsbterm	JSB term mouse handling.
+  							*pterm-mouse*
+  	   pterm	QNX pterm mouse handling.
++ 							*urxvt-mouse*
++ 	   urxvt	Mouse handling for the urxvt (rxvt-unicode) terminal.
++ 							*sgr-mouse*
++ 	   sgr		Mouse handling for the terminal that emits SGR-styled
++ 			mouse reporting. Works with xterm version 277 or
++ 			later.
+  
+  	The mouse handling must be enabled at compile time |+mouse_xterm|
+  	|+mouse_dec| |+mouse_netterm|.
+***************
+*** 7395,7400 ****
+--- 7442,7448 ----
+  	or "xterm2" already.  The main use of this option is to set it to
+  	"xterm", when the terminal name doesn't start with "xterm", but it can
+  	handle xterm mouse codes.
++ 	The "sgr" value will be set if the xterm version is 277 or later.
+  	The "xterm2" value will be set if the xterm version is reported to be
+  	95 or higher.  This only works when compiled with the |+termresponse|
+  	feature and if |t_RV| is set to the escape sequence to request the
+*** ../vim-7.3.631/src/feature.h	2012-04-25 16:50:44.000000000 +0200
+--- src/feature.h	2012-08-15 15:46:07.000000000 +0200
+***************
+*** 1056,1061 ****
+--- 1056,1064 ----
+  # ifdef FEAT_BIG
+  #  define FEAT_MOUSE_URXVT
+  # endif
++ # ifdef FEAT_BIG
++ #  define FEAT_MOUSE_SGR
++ # endif
+  # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
+  #  define DOS_MOUSE
+  # endif
+***************
+*** 1077,1082 ****
+--- 1080,1090 ----
+  # define FEAT_MOUSE_XTERM
+  #endif
+  
++ /* sgr is a small variation of mouse_xterm, and shares its code */
++ #if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
++ # define FEAT_MOUSE_XTERM
++ #endif
++ 
+  /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+  #if !defined(FEAT_MOUSE_TTY) \
+  	&& (defined(FEAT_MOUSE_XTERM) \
+***************
+*** 1087,1093 ****
+  	    || defined(FEAT_MOUSE_JSB) \
+  	    || defined(FEAT_MOUSE_PTERM) \
+  	    || defined(FEAT_SYSMOUSE) \
+! 	    || defined(FEAT_MOUSE_URXVT))
+  # define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
+  #endif
+  #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+--- 1095,1102 ----
+  	    || defined(FEAT_MOUSE_JSB) \
+  	    || defined(FEAT_MOUSE_PTERM) \
+  	    || defined(FEAT_SYSMOUSE) \
+! 	    || defined(FEAT_MOUSE_URXVT) \
+! 	    || defined(FEAT_MOUSE_SGR))
+  # define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
+  #endif
+  #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+*** ../vim-7.3.631/src/keymap.h	2012-01-20 17:15:47.000000000 +0100
+--- src/keymap.h	2012-08-15 15:46:07.000000000 +0200
+***************
+*** 110,115 ****
+--- 110,118 ----
+  /* Used for the urxvt mouse. */
+  #define KS_URXVT_MOUSE		238
+  
++ /* Used for the sgr mouse. */
++ #define KS_SGR_MOUSE		237
++ 
+  /*
+   * Filler used after KS_SPECIAL and others
+   */
+***************
+*** 412,417 ****
+--- 415,421 ----
+  #define K_JSBTERM_MOUSE	TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
+  #define K_PTERM_MOUSE	TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
+  #define K_URXVT_MOUSE	TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
++ #define K_SGR_MOUSE	TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
+  
+  #define K_SELECT	TERMCAP2KEY(KS_SELECT, KE_FILLER)
+  #define K_TEAROFF	TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
+*** ../vim-7.3.631/src/misc2.c	2012-08-15 14:04:50.000000000 +0200
+--- src/misc2.c	2012-08-15 15:46:07.000000000 +0200
+***************
+*** 2433,2438 ****
+--- 2433,2441 ----
+  #ifdef FEAT_MOUSE_URXVT
+      {K_URXVT_MOUSE,	(char_u *)"UrxvtMouse"},
+  #endif
++ #ifdef FEAT_MOUSE_SGR
++     {K_SGR_MOUSE,	(char_u *)"SgrMouse"},
++ #endif
+      {K_LEFTMOUSE,	(char_u *)"LeftMouse"},
+      {K_LEFTMOUSE_NM,	(char_u *)"LeftMouseNM"},
+      {K_LEFTDRAG,	(char_u *)"LeftDrag"},
+*** ../vim-7.3.631/src/option.h	2012-07-10 16:49:08.000000000 +0200
+--- src/option.h	2012-08-15 15:46:07.000000000 +0200
+***************
+*** 822,828 ****
+  EXTERN char_u	*p_ttym;	/* 'ttymouse' */
+  EXTERN unsigned ttym_flags;
+  # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", NULL};
+  # endif
+  # define TTYM_XTERM		0x01
+  # define TTYM_XTERM2		0x02
+--- 822,828 ----
+  EXTERN char_u	*p_ttym;	/* 'ttymouse' */
+  EXTERN unsigned ttym_flags;
+  # ifdef IN_OPTION_C
+! static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
+  # endif
+  # define TTYM_XTERM		0x01
+  # define TTYM_XTERM2		0x02
+***************
+*** 831,836 ****
+--- 831,837 ----
+  # define TTYM_JSBTERM		0x10
+  # define TTYM_PTERM		0x20
+  # define TTYM_URXVT		0x40
++ # define TTYM_SGR		0x80
+  #endif
+  EXTERN char_u	*p_udir;	/* 'undodir' */
+  EXTERN long	p_ul;		/* 'undolevels' */
+*** ../vim-7.3.631/src/os_unix.c	2012-04-20 15:55:10.000000000 +0200
+--- src/os_unix.c	2012-08-15 16:06:54.000000000 +0200
+***************
+*** 2159,2168 ****
+--- 2159,2171 ----
+   * Return 1 for "xterm".
+   * Return 2 for "xterm2".
+   * Return 3 for "urxvt".
++  * Return 4 for "sgr".
+   */
+      int
+  use_xterm_mouse()
+  {
++     if (ttym_flags == TTYM_SGR)
++ 	return 4;
+      if (ttym_flags == TTYM_URXVT)
+  	return 3;
+      if (ttym_flags == TTYM_XTERM2)
+***************
+*** 3339,3345 ****
+      xterm_mouse_vers = use_xterm_mouse();
+  
+  # ifdef FEAT_MOUSE_URXVT
+!     if (ttym_flags == TTYM_URXVT) {
+  	out_str_nf((char_u *)
+  		   (on
+  		   ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+--- 3342,3349 ----
+      xterm_mouse_vers = use_xterm_mouse();
+  
+  # ifdef FEAT_MOUSE_URXVT
+!     if (ttym_flags == TTYM_URXVT)
+!     {
+  	out_str_nf((char_u *)
+  		   (on
+  		   ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+***************
+*** 3348,3353 ****
+--- 3352,3368 ----
+      }
+  # endif
+  
++ # ifdef FEAT_MOUSE_SGR
++     if (ttym_flags == TTYM_SGR)
++     {
++ 	out_str_nf((char_u *)
++ 		   (on
++ 		   ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
++ 		   : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
++ 	ison = on;
++     }
++ # endif
++ 
+      if (xterm_mouse_vers > 0)
+      {
+  	if (on)	/* enable mouse events, use mouse tracking if available */
+***************
+*** 3577,3582 ****
+--- 3592,3618 ----
+      else
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+  # endif
++ # ifdef FEAT_MOUSE_SGR
++     /* same as the dec mouse */
++     if (use_xterm_mouse() == 4
++ #  ifdef FEAT_GUI
++ 	    && !gui.in_use
++ #  endif
++ 	    )
++     {
++ 	set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
++ 		    ? IF_EB("\233<", CSI_STR "<")
++ 		    : IF_EB("\033[<", ESC_STR "[<")));
++ 
++ 	if (*p_mouse != NUL)
++ 	{
++ 	    mch_setmouse(FALSE);
++ 	    setmouse();
++ 	}
++     }
++     else
++ 	del_mouse_termcode(KS_SGR_MOUSE);
++ # endif
+  }
+  #endif
+  
+*** ../vim-7.3.631/src/term.c	2012-02-05 22:05:44.000000000 +0100
+--- src/term.c	2012-08-15 16:14:09.000000000 +0200
+***************
+*** 1997,2002 ****
+--- 1997,2003 ----
+  #  define HMT_JSBTERM	8
+  #  define HMT_PTERM	16
+  #  define HMT_URXVT	32
++ #  define HMT_SGR	64
+  static int has_mouse_termcode = 0;
+  # endif
+  
+***************
+*** 2037,2042 ****
+--- 2038,2048 ----
+  	has_mouse_termcode |= HMT_URXVT;
+      else
+  #   endif
++ #   ifdef FEAT_MOUSE_SGR
++     if (n == KS_SGR_MOUSE)
++ 	has_mouse_termcode |= HMT_SGR;
++     else
++ #   endif
+  	has_mouse_termcode |= HMT_NORMAL;
+  #  endif
+  }
+***************
+*** 2079,2084 ****
+--- 2085,2095 ----
+  	has_mouse_termcode &= ~HMT_URXVT;
+      else
+  #   endif
++ #   ifdef FEAT_MOUSE_SGR
++     if (n == KS_SGR_MOUSE)
++ 	has_mouse_termcode &= ~HMT_SGR;
++     else
++ #   endif
+  	has_mouse_termcode &= ~HMT_NORMAL;
+  #  endif
+  }
+***************
+*** 4023,4029 ****
+  #ifdef FEAT_TERMRESPONSE
+  	if (key_name[0] == NUL
+  	    /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! 	    || key_name[0] == KS_URXVT_MOUSE)
+  	{
+  	    /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
+  	     * eat other possible responses to t_RV, rxvt returns
+--- 4034,4041 ----
+  #ifdef FEAT_TERMRESPONSE
+  	if (key_name[0] == NUL
+  	    /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! 	    || key_name[0] == KS_URXVT_MOUSE
+! 	    || key_name[0] == KS_SGR_MOUSE)
+  	{
+  	    /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
+  	     * eat other possible responses to t_RV, rxvt returns
+***************
+*** 4061,4066 ****
+--- 4073,4088 ----
+  
+  		    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+  		    {
++ # ifdef TTYM_SGR
++ 			if (extra >= 277
++ # ifdef TTYM_URXVT
++ 				&& ttym_flags != TTYM_URXVT
++ # endif
++ 				)
++ 			    set_option_value((char_u *)"ttym", 0L,
++ 							  (char_u *)"sgr", 0);
++                         else
++ # endif
+  			/* if xterm version >= 95 use mouse dragging */
+  			if (extra >= 95
+  # ifdef TTYM_URXVT
+***************
+*** 4147,4167 ****
+  	/*
+  	 * If it is a mouse click, get the coordinates.
+  	 */
+! 	if (key_name[0] == (int)KS_MOUSE
+  # ifdef FEAT_MOUSE_JSB
+! 		|| key_name[0] == (int)KS_JSBTERM_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_NET
+! 		|| key_name[0] == (int)KS_NETTERM_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_DEC
+! 		|| key_name[0] == (int)KS_DEC_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+! 		|| key_name[0] == (int)KS_PTERM_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+! 		|| key_name[0] == (int)KS_URXVT_MOUSE
+  # endif
+  		)
+  	{
+--- 4169,4192 ----
+  	/*
+  	 * If it is a mouse click, get the coordinates.
+  	 */
+! 	if (key_name[0] == KS_MOUSE
+  # ifdef FEAT_MOUSE_JSB
+! 		|| key_name[0] == KS_JSBTERM_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_NET
+! 		|| key_name[0] == KS_NETTERM_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_DEC
+! 		|| key_name[0] == KS_DEC_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+! 		|| key_name[0] == KS_PTERM_MOUSE
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+! 		|| key_name[0] == KS_URXVT_MOUSE
+! # endif
+! # ifdef FEAT_MOUSE_SGR
+! 		|| key_name[0] == KS_SGR_MOUSE
+  # endif
+  		)
+  	{
+***************
+*** 4243,4250 ****
+  		}
+  	    }
+  
+! # ifdef FEAT_MOUSE_URXVT
+! 	    if (key_name[0] == (int)KS_URXVT_MOUSE)
+  	    {
+  		for (;;)
+  		{
+--- 4268,4276 ----
+  		}
+  	    }
+  
+! # if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
+! 	    if (key_name[0] == KS_URXVT_MOUSE
+! 		|| key_name[0] == KS_SGR_MOUSE)
+  	    {
+  		for (;;)
+  		{
+***************
+*** 4256,4261 ****
+--- 4282,4301 ----
+  		     *		  ^-- row
+  		     *	       ^----- column
+  		     *	    ^-------- code
++ 		     *
++ 		     * SGR 1006 mouse reporting mode:
++ 		     * Almost identical to xterm mouse mode, except the values
++ 		     * are decimal instead of bytes.
++ 		     *
++ 		     * \033[<%d;%d;%dM
++ 		     *		   ^-- row
++ 		     *	        ^----- column
++ 		     *	     ^-------- code
++ 		     *
++ 		     * \033[<%d;%d;%dm        : mouse release event
++ 		     *		   ^-- row
++ 		     *	        ^----- column
++ 		     *	     ^-------- code
+  		     */
+  		    p = tp + slen;
+  
+***************
+*** 4263,4294 ****
+  		    if (*p++ != ';')
+  			return -1;
+  
+  		    mouse_col = getdigits(&p) - 1;
+  		    if (*p++ != ';')
+  			return -1;
+  
+  		    mouse_row = getdigits(&p) - 1;
+! 		    if (*p++ != 'M')
+  			return -1;
+  
+  		    slen += (int)(p - (tp + slen));
+  
+  		    /* skip this one if next one has same code (like xterm
+  		     * case) */
+  		    j = termcodes[idx].len;
+! 		    if (STRNCMP(tp, tp + slen, (size_t)j) == 0) {
+! 			/* check if the command is complete by looking for the
+! 			 * M */
+  			int slen2;
+  			int cmd_complete = 0;
+! 			for (slen2 = slen; slen2 < len; slen2++) {
+! 			    if (tp[slen2] == 'M') {
+  				cmd_complete = 1;
+  				break;
+  			    }
+  			}
+  			p += j;
+! 			if (cmd_complete && getdigits(&p) == mouse_code) {
+  			    slen += j; /* skip the \033[ */
+  			    continue;
+  			}
+--- 4303,4348 ----
+  		    if (*p++ != ';')
+  			return -1;
+  
++ 		    /* when mouse reporting is SGR, add 32 to mouse code */
++                     if (key_name[0] == KS_SGR_MOUSE)
++                         mouse_code += 32;
++ 
+  		    mouse_col = getdigits(&p) - 1;
+  		    if (*p++ != ';')
+  			return -1;
+  
+  		    mouse_row = getdigits(&p) - 1;
+!                     if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+! 			mouse_code |= MOUSE_RELEASE;
+!                     else if (*p != 'M')
+  			return -1;
++                     p++;
+  
+  		    slen += (int)(p - (tp + slen));
+  
+  		    /* skip this one if next one has same code (like xterm
+  		     * case) */
+  		    j = termcodes[idx].len;
+! 		    if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
+! 		    {
+  			int slen2;
+  			int cmd_complete = 0;
+! 
+! 			/* check if the command is complete by looking for the
+! 			 * 'M' */
+! 			for (slen2 = slen; slen2 < len; slen2++)
+! 			{
+! 			    if (tp[slen2] == 'M'
+!                                 || (key_name[0] == KS_SGR_MOUSE
+! 							 && tp[slen2] == 'm'))
+! 			    {
+  				cmd_complete = 1;
+  				break;
+  			    }
+  			}
+  			p += j;
+! 			if (cmd_complete && getdigits(&p) == mouse_code)
+! 			{
+  			    slen += j; /* skip the \033[ */
+  			    continue;
+  			}
+***************
+*** 4302,4307 ****
+--- 4356,4364 ----
+  #ifdef FEAT_MOUSE_URXVT
+  	    || key_name[0] == (int)KS_URXVT_MOUSE
+  #endif
++ #ifdef FEAT_MOUSE_SGR
++ 	    || key_name[0] == KS_SGR_MOUSE
++ #endif
+  	    )
+  	{
+  #  if !defined(MSWIN) && !defined(MSDOS)
+*** ../vim-7.3.631/src/version.c	2012-08-15 14:04:50.000000000 +0200
+--- src/version.c	2012-08-15 15:47:30.000000000 +0200
+***************
+*** 384,389 ****
+--- 384,394 ----
+  # else
+  	"-mouse_urxvt",
+  # endif
++ # ifdef FEAT_MOUSE_SGR
++ 	"+mouse_sgr",
++ # else
++ 	"-mouse_sgr",
++ # endif
+  #endif
+  #ifdef __QNX__
+  # ifdef FEAT_MOUSE_PTERM
+*** ../vim-7.3.631/src/version.c	2012-08-15 14:04:50.000000000 +0200
+--- src/version.c	2012-08-15 15:47:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     632,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+243. You unsuccessfully try to download a pizza from www.dominos.com.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.633 b/7.3.633
new file mode 100644
index 0000000..899ccb3
--- /dev/null
+++ b/7.3.633
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.633
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.633
+Problem:    Selection remains displayed as selected after selecting another
+	    text.
+Solution:   Call xterm_update() before select(). (Andrew Pimlott)
+Files:	    src/os_unix.c
+
+
+*** ../vim-7.3.632/src/os_unix.c	2012-08-15 16:20:59.000000000 +0200
+--- src/os_unix.c	2012-08-15 17:15:58.000000000 +0200
+***************
+*** 5196,5201 ****
+--- 5196,5205 ----
+  	    FD_SET(ConnectionNumber(xterm_dpy), &rfds);
+  	    if (maxfd < ConnectionNumber(xterm_dpy))
+  		maxfd = ConnectionNumber(xterm_dpy);
++ 
++ 	    /* An event may have already been read but not handled.  In
++ 	     * particulary, XFlush may cause this. */
++ 	    xterm_update();
+  	}
+  # endif
+  # ifdef FEAT_MOUSE_GPM
+***************
+*** 5216,5229 ****
+  		maxfd = xsmp_icefd;
+  	}
+  # endif
+! #ifdef FEAT_NETBEANS_INTG
+  	if (nb_fd != -1)
+  	{
+  	    FD_SET(nb_fd, &rfds);
+  	    if (maxfd < nb_fd)
+  		maxfd = nb_fd;
+  	}
+! #endif
+  
+  # ifdef OLD_VMS
+  	/* Old VMS as v6.2 and older have broken select(). It waits more than
+--- 5220,5233 ----
+  		maxfd = xsmp_icefd;
+  	}
+  # endif
+! # ifdef FEAT_NETBEANS_INTG
+  	if (nb_fd != -1)
+  	{
+  	    FD_SET(nb_fd, &rfds);
+  	    if (maxfd < nb_fd)
+  		maxfd = nb_fd;
+  	}
+! # endif
+  
+  # ifdef OLD_VMS
+  	/* Old VMS as v6.2 and older have broken select(). It waits more than
+*** ../vim-7.3.632/src/version.c	2012-08-15 16:20:59.000000000 +0200
+--- src/version.c	2012-08-15 17:22:17.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     633,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+245. You use Real Audio to listen to a radio station from a distant
+     city rather than turn on your stereo system.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.634 b/7.3.634
new file mode 100644
index 0000000..3262bab
--- /dev/null
+++ b/7.3.634
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.634
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.634
+Problem:    Month/Day format for undo is confusing. (Marcin Szamotulski)
+Solution:   Always use Year/Month/Day, should work for everybody.
+Files:      src/undo.c
+
+
+*** ../vim-7.3.633/src/undo.c	2012-06-01 13:46:06.000000000 +0200
+--- src/undo.c	2012-08-23 12:43:24.000000000 +0200
+***************
+*** 2880,2890 ****
+  	if (time(NULL) - tt < (60L * 60L * 12L))
+  	    /* within 12 hours */
+  	    (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+- 	else if (time(NULL) - tt < (60L * 60L * 24L * 180L))
+- 	    /* within 6 months */
+- 	    (void)strftime((char *)buf, buflen, "%m/%d %H:%M:%S", curtime);
+  	else
+! 	    /* long ago */
+  	    (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
+      }
+      else
+--- 2880,2887 ----
+  	if (time(NULL) - tt < (60L * 60L * 12L))
+  	    /* within 12 hours */
+  	    (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+  	else
+! 	    /* longer ago */
+  	    (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
+      }
+      else
+*** ../vim-7.3.633/src/version.c	2012-08-15 17:26:53.000000000 +0200
+--- src/version.c	2012-08-23 12:58:36.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     634,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+10E. You start counting in hex.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.635 b/7.3.635
new file mode 100644
index 0000000..4a67702
--- /dev/null
+++ b/7.3.635
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.635
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.635
+Problem:    Issue 21: System call during startup sets 'lines' to a wrong
+	    value. (Karl Yngve)
+Solution:   Don't set the shell size while the GUI is still starting up.
+	    (Christian Brabandt)
+Files:	    src/ui.c
+
+
+*** ../vim-7.3.634/src/ui.c	2012-07-10 16:49:08.000000000 +0200
+--- src/ui.c	2012-08-23 13:25:26.000000000 +0200
+***************
+*** 298,303 ****
+--- 298,306 ----
+      int	    retval;
+  
+  #ifdef FEAT_GUI
++     if (gui.starting)
++ 	/* possibly a system call during startup, check later */
++ 	return OK;
+      if (gui.in_use)
+  	retval = gui_get_shellsize();
+      else
+*** ../vim-7.3.634/src/version.c	2012-08-23 12:58:56.000000000 +0200
+--- src/version.c	2012-08-23 13:27:00.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     635,
+  /**/
+
+-- 
+ARTHUR: This new learning amazes me, Sir Bedevere.  Explain again how sheep's
+        bladders may be employed to prevent earthquakes.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.636 b/7.3.636
new file mode 100644
index 0000000..453a7fc
--- /dev/null
+++ b/7.3.636
@@ -0,0 +1,148 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.636
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.636 (after 7.3.625)
+Problem:    Not all zero-width matches handled correctly for "gn".
+Solution:   Move zero-width detection to a separate function. (Christian
+	    Brabandt)
+Files:	    src/search.c
+
+
+*** ../vim-7.3.635/src/search.c	2012-08-08 15:27:54.000000000 +0200
+--- src/search.c	2012-08-23 15:52:50.000000000 +0200
+***************
+*** 4526,4531 ****
+--- 4526,4533 ----
+  #endif /* FEAT_TEXTOBJ */
+  
+  #if defined(FEAT_VISUAL) || defined(PROTO)
++ static int is_zerowidth __ARGS((char_u *pattern));
++ 
+  /*
+   * Find next search match under cursor, cursor at end.
+   * Used while an operator is pending, and in Visual mode.
+***************
+*** 4546,4556 ****
+      int		visual_active = FALSE;
+      int		flags = 0;
+      pos_T	save_VIsual;
+-     regmmatch_T	regmatch;
+-     int		nmatched = 0;
+      int		zerowidth = FALSE;
+  
+- 
+      /* wrapping should not occur */
+      p_ws = FALSE;
+  
+--- 4548,4555 ----
+***************
+*** 4583,4606 ****
+      else
+  	orig_pos = pos = start_pos = curwin->w_cursor;
+  
+!     /*
+!      * Check for zero-width pattern.
+!      */
+!     if (search_regcomp(spats[last_idx].pat, RE_SEARCH, RE_SEARCH,
+! 			     ((SEARCH_HIS + SEARCH_KEEP)), &regmatch) == FAIL)
+  	return FAIL;
+  
+-     /* Zero-width pattern should match somewhere, then we can check if start
+-      * and end are in the same position. */
+-     nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+- 				     curwin->w_cursor.lnum, (colnr_T)0, NULL);
+-     if (called_emsg)
+- 	return FAIL;
+-     if (nmatched && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+- 		 && regmatch.endpos[0].col == regmatch.startpos[0].col)
+- 	zerowidth = TRUE;
+-     vim_free(regmatch.regprog);
+- 
+      /*
+       * The trick is to first search backwards and then search forward again,
+       * so that a match at the current cursor position will be correctly
+--- 4582,4592 ----
+      else
+  	orig_pos = pos = start_pos = curwin->w_cursor;
+  
+!     /* Is the pattern is zero-width? */
+!     zerowidth = is_zerowidth(spats[last_idx].pat);
+!     if (zerowidth == -1)
+  	return FAIL;
+  
+      /*
+       * The trick is to first search backwards and then search forward again,
+       * so that a match at the current cursor position will be correctly
+***************
+*** 4693,4698 ****
+--- 4679,4721 ----
+  
+      return OK;
+  }
++ 
++ /*
++  * Check if the pattern is zero-width.
++  * Returns TRUE, FALSE or -1 for failure.
++  */
++     static int
++ is_zerowidth(pattern)
++     char_u	*pattern;
++ {
++     regmmatch_T	regmatch;
++     int		nmatched = 0;
++     int		result = -1;
++     pos_T       pos;
++ 
++     if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
++ 					      SEARCH_KEEP, &regmatch) == FAIL)
++ 	return -1;
++ 
++     /* move to match */
++     clearpos(&pos);
++     if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
++ 				     SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
++     {
++ 	/* Zero-width pattern should match somewhere, then we can check if
++ 	 * start and end are in the same position. */
++ 	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
++ 						  pos.lnum, (colnr_T)0, NULL);
++ 
++ 	if (!called_emsg)
++ 	    result = (nmatched != 0
++ 		    && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
++ 		    && regmatch.startpos[0].col == regmatch.endpos[0].col);
++     }
++ 
++     vim_free(regmatch.regprog);
++     return result;
++ }
+  #endif /* FEAT_VISUAL */
+  
+  #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+*** ../vim-7.3.635/src/version.c	2012-08-23 13:28:50.000000000 +0200
+--- src/version.c	2012-08-23 15:25:23.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     636,
+  /**/
+
+-- 
+Edison's greatest achievement came in 1879, when he invented the
+electric company.  Edison's design was a brilliant adaptation of the
+simple electrical circuit: the electric company sends electricity
+through a wire to a customer, then immediately gets the electricity
+back through another wire
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.637 b/7.3.637
new file mode 100644
index 0000000..f7f1d90
--- /dev/null
+++ b/7.3.637
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.637
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.637
+Problem:    Cannot catch the error caused by a foldopen when there is no fold.
+	    (ZyX, Issue 48)
+Solution:   Do not break out of the loop early when inside try/catch.
+	    (Christian Brabandt) Except when there is a syntax error.
+Files:	    src/ex_docmd.c, src/globals.h
+
+
+*** ../vim-7.3.636/src/ex_docmd.c	2012-08-15 14:04:50.000000000 +0200
+--- src/ex_docmd.c	2012-08-23 18:39:08.000000000 +0200
+***************
+*** 1295,1301 ****
+  		&& cstack.cs_trylevel == 0
+  #endif
+  	    )
+! 	    && !(did_emsg && used_getline
+  			    && (getline_equal(fgetline, cookie, getexmodeline)
+  			       || getline_equal(fgetline, cookie, getexline)))
+  	    && (next_cmdline != NULL
+--- 1295,1308 ----
+  		&& cstack.cs_trylevel == 0
+  #endif
+  	    )
+! 	    && !(did_emsg
+! #ifdef FEAT_EVAL
+! 		/* Keep going when inside try/catch, so that the error can be
+! 		 * dealth with, except when it is a syntax error, it may cause
+! 		 * the :endtry to be missed. */
+! 		&& (cstack.cs_trylevel == 0 || did_emsg_syntax)
+! #endif
+! 		&& used_getline
+  			    && (getline_equal(fgetline, cookie, getexmodeline)
+  			       || getline_equal(fgetline, cookie, getexline)))
+  	    && (next_cmdline != NULL
+***************
+*** 1305,1310 ****
+--- 1312,1318 ----
+  			|| (flags & DOCMD_REPEAT)));
+  
+      vim_free(cmdline_copy);
++     did_emsg_syntax = FALSE;
+  #ifdef FEAT_EVAL
+      free_cmdlines(&lines_ga);
+      ga_clear(&lines_ga);
+***************
+*** 2137,2142 ****
+--- 2145,2151 ----
+  	    if (!sourcing)
+  		append_command(*cmdlinep);
+  	    errormsg = IObuff;
++ 	    did_emsg_syntax = TRUE;
+  	}
+  	goto doend;
+      }
+*** ../vim-7.3.636/src/globals.h	2012-07-10 16:49:08.000000000 +0200
+--- src/globals.h	2012-08-23 18:29:09.000000000 +0200
+***************
+*** 183,188 ****
+--- 183,190 ----
+  #endif
+  EXTERN int	did_emsg;		    /* set by emsg() when the message
+  					       is displayed or thrown */
++ EXTERN int	did_emsg_syntax;	    /* did_emsg set because of a
++ 					       syntax error */
+  EXTERN int	called_emsg;		    /* always set by emsg() */
+  EXTERN int	ex_exitval INIT(= 0);	    /* exit value for ex mode */
+  EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */
+*** ../vim-7.3.636/src/version.c	2012-08-23 15:53:00.000000000 +0200
+--- src/version.c	2012-08-23 17:59:12.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     637,
+  /**/
+
+-- 
+GOD: That is your purpose Arthur ... the Quest for the Holy Grail ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.638 b/7.3.638
new file mode 100644
index 0000000..f88a939
--- /dev/null
+++ b/7.3.638
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.638
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.638
+Problem:    Unecessary redraw of the previous character.
+Solution:   Check if the character is double-width. (Jon Long)
+Files:	    src/screen.c
+
+
+*** ../vim-7.3.637/src/screen.c	2012-07-10 16:49:08.000000000 +0200
+--- src/screen.c	2012-08-23 18:49:33.000000000 +0200
+***************
+*** 5332,5339 ****
+  		    && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
+  			|| (ScreenLinesUC[off_from] != 0
+  			    && comp_char_differs(off_from, off_to))
+! 			|| (cols > 1 && ScreenLines[off_from + 1]
+! 						 != ScreenLines[off_to + 1])))
+  #endif
+  	       ))
+  	return TRUE;
+--- 5332,5340 ----
+  		    && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
+  			|| (ScreenLinesUC[off_from] != 0
+  			    && comp_char_differs(off_from, off_to))
+! 			|| ((*mb_off2cells)(off_from, off_from + cols) > 1
+! 			    && ScreenLines[off_from + 1]
+! 						  != ScreenLines[off_to + 1])))
+  #endif
+  	       ))
+  	return TRUE;
+*** ../vim-7.3.637/src/version.c	2012-08-23 18:43:06.000000000 +0200
+--- src/version.c	2012-08-23 18:47:11.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     638,
+  /**/
+
+-- 
+There is a fine line between courage and foolishness.
+Unfortunately, it's not a fence.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/README.patches b/README.patches
index 63d94e6..dfe8b80 100644
--- a/README.patches
+++ b/README.patches
@@ -653,3 +653,19 @@ Individual patches for Vim 7.3:
   4897  7.3.620  building with recent Ruby on Win32 doesn't work
   2259  7.3.621  compiler warnings on 64 bit windows
   1867  7.3.622  XPM library for Win32 can't be found
+  2426  7.3.623  Perl 5.14 commands crash Vim on MS-Windows
+  1800  7.3.624  when cancelling input() it returns the third argument
+  4327  7.3.625  "gn" does not handle zero-width matches correctly
+  1500  7.3.626  Python interface doesn't build with Python 2.4 or older
+  2803  7.3.627  expression not evaluated when using "n" flag with ":s"
+  1802  7.3.628  ":open!" results in a confusing error message
+ 12019  7.3.629  there is no way to make 'shiftwidth' follow 'tabstop'
+  1487  7.3.630  "|" does not behave correctly when 'virtualedit' is set
+ 10100  7.3.631  cannot complete user names
+ 14770  7.3.632  cannot select beyond 222 columns with the mouse in xterm
+  2238  7.3.633  selection remains highlighted after selecting another text
+  1884  7.3.634  Month/Day format for undo is confusing
+  1586  7.3.635  system call during startup sets 'lines' to a wrong value
+  4539  7.3.636  (after 7.3.625) "gn" fails for some zero-width matches
+  3117  7.3.637  cannot catch error caused by a foldopen when there is no fold
+  1783  7.3.638  unecessary redraw of the previous character
diff --git a/vim-7.3-manpage-typo-668894-675480.patch b/vim-7.3-manpage-typo-668894-675480.patch
new file mode 100644
index 0000000..cb4ccd1
--- /dev/null
+++ b/vim-7.3-manpage-typo-668894-675480.patch
@@ -0,0 +1,21 @@
+diff -up vim73/runtime/doc/vim.1.668894 vim73/runtime/doc/vim.1
+--- vim73/runtime/doc/vim.1.668894	2010-05-15 13:04:00.000000000 +0200
++++ vim73/runtime/doc/vim.1	2012-08-28 12:41:36.000000000 +0200
+@@ -73,7 +73,7 @@ To edit a file that starts with a dash, 
+ .TP
+ \-
+ The file to edit is read from stdin.  Commands are read from stderr, which
+-should be a tty.
++should be a TTY.
+ .TP
+ \-t {tag}
+ The file to edit and the initial cursor position depends on a "tag", a sort
+@@ -321,7 +321,7 @@ When N is omitted, open one tab page for
+ \-R
+ Read-only mode.
+ The 'readonly' option will be set.
+-You can still edit the buffer, but will be prevented from accidently
++You can still edit the buffer, but will be prevented from accidentally
+ overwriting a file.
+ If you do want to overwrite a file, add an exclamation mark to the Ex command,
+ as in ":w!".
diff --git a/vim.spec b/vim.spec
index 6d569b2..527c445 100644
--- a/vim.spec
+++ b/vim.spec
@@ -18,7 +18,7 @@
 #used for pre-releases:
 %define beta %{nil}
 %define vimdir vim73%{?beta}
-%define patchlevel 622
+%define patchlevel 638
 
 Summary: The VIM editor
 URL:     http://www.vim.org/
@@ -678,18 +678,34 @@ Patch619: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.619
 Patch620: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.620
 Patch621: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.621
 Patch622: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.622
+Patch623: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.623
+Patch624: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.624
+Patch625: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.625
+Patch626: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.626
+Patch627: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.627
+Patch628: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.628
+Patch629: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.629
+Patch630: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.630
+Patch631: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.631
+Patch632: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.632
+Patch633: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.633
+Patch634: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.634
+Patch635: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.635
+Patch636: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.636
+Patch637: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.637
+Patch638: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.638
 
 Patch3000: vim-7.3-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
-Patch3003: vim-7.0-rclocation.patch
-Patch3004: vim-6.4-checkhl.patch
-Patch3005: vim-7.3-fstabsyntax.patch
-Patch3006: vim-7.0-warning.patch
-Patch3007: vim-7.0-syncolor.patch
-Patch3008: vim-7.0-specedit.patch
-Patch3009: vim72-rh514717.patch
-Patch3010: vim-7.3-bug816848.patch
-Patch3011: vim-7.3-spec-epoch.patch
+Patch3004: vim-7.0-rclocation.patch
+Patch3006: vim-6.4-checkhl.patch
+Patch3007: vim-7.3-fstabsyntax.patch
+Patch3008: vim-7.0-warning.patch
+Patch3009: vim-7.0-syncolor.patch
+Patch3010: vim-7.0-specedit.patch
+Patch3011: vim72-rh514717.patch
+Patch3012: vim-7.3-bug816848.patch
+Patch3013: vim-7.3-manpage-typo-668894-675480.patch
 
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: python-devel ncurses-devel gettext perl-devel
@@ -1446,6 +1462,22 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch620 -p0
 %patch621 -p0
 %patch622 -p0
+%patch623 -p0
+%patch624 -p0
+%patch625 -p0
+%patch626 -p0
+%patch627 -p0
+%patch628 -p0
+%patch629 -p0
+%patch630 -p0
+%patch631 -p0
+%patch632 -p0
+%patch633 -p0
+%patch634 -p0
+%patch635 -p0
+%patch636 -p0
+%patch637 -p0
+%patch638 -p0
 
 
 # install spell files
@@ -1455,15 +1487,15 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 
 %patch3000 -p1
 %patch3002 -p1
-%patch3003 -p1
 %patch3004 -p1
-%patch3005 -p1
 %patch3006 -p1
 %patch3007 -p1
 %patch3008 -p1
 %patch3009 -p1
 %patch3010 -p1
 %patch3011 -p1
+%patch3012 -p1
+%patch3013 -p1
 
 %build
 cp -f %{SOURCE5} .
@@ -1699,6 +1731,7 @@ done
 for i in rvim.1 gvim.1 gvimdiff.1; do 
   echo ".so man1/vim.1" > $RPM_BUILD_ROOT/%{_mandir}/man1/$i
 done
+touch $RPM_BUILD_ROOT/%{_datadir}/%{name}/vimfiles/doc/tags
 
 %post X11
 touch --no-create %{_datadir}/icons/hicolor
@@ -1871,6 +1904,7 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{_datadir}/%{name}/vimfiles/colors
 %dir %{_datadir}/%{name}/vimfiles/compiler
 %dir %{_datadir}/%{name}/vimfiles/doc
+%ghost %{_datadir}/%{name}/vimfiles/doc/tags
 %dir %{_datadir}/%{name}/vimfiles/ftdetect
 %dir %{_datadir}/%{name}/vimfiles/ftplugin
 %dir %{_datadir}/%{name}/vimfiles/indent
@@ -1901,6 +1935,14 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
+* Tue Aug 28 2012 Karsten Hopp <karsten@redhat.com> 7.3.638-2
+- fix some man page typos (#668894, #675480)
+- own usr/share/vim/vimfiles/doc/tags (#845564)
+- add path to csope database (#844843)
+
+* Tue Aug 28 2012 Karsten Hopp <karsten@redhat.com> 7.3.638-1
+- patchlevel 638
+
 * Mon Aug 06 2012 Karsten Hopp <karsten@redhat.com> 2:7.3.622-2
 - add epoch to spec.vim and automatic changelog entries
 
diff --git a/vimrc b/vimrc
index b02134d..6707ae4 100644
--- a/vimrc
+++ b/vimrc
@@ -36,7 +36,7 @@ if has("cscope") && filereadable("/usr/bin/cscope")
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
-      cs add cscope.out
+      cs add $PWD/cscope.out
    " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
       cs add $CSCOPE_DB