[packages/vim] - up to 7.3.618

arekm arekm at pld-linux.org
Thu Aug 2 09:48:33 CEST 2012


commit 46534d20411fb72b2f3b3eefc9aa7623dc9848a9
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Thu Aug 2 09:48:27 2012 +0200

    - up to 7.3.618

 7.3.601  |  51 ++++++++
 7.3.602  |  55 +++++++++
 7.3.603  | 370 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 7.3.604  |  60 ++++++++++
 7.3.605  |  86 ++++++++++++++
 7.3.606  |  76 ++++++++++++
 7.3.607  |  56 +++++++++
 7.3.608  | 119 +++++++++++++++++++
 7.3.609  | 251 +++++++++++++++++++++++++++++++++++++++
 7.3.610  | 400 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 7.3.611  |  58 +++++++++
 7.3.612  |  83 +++++++++++++
 7.3.613  | 149 ++++++++++++++++++++++++
 7.3.614  | 176 ++++++++++++++++++++++++++++
 7.3.615  | 107 +++++++++++++++++
 7.3.616  |  46 ++++++++
 7.3.617  |  65 +++++++++++
 7.3.618  | 367 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 vim.spec |   2 +-
 19 files changed, 2576 insertions(+), 1 deletion(-)
---
diff --git a/7.3.601 b/7.3.601
new file mode 100644
index 0000000..b61a933
--- /dev/null
+++ b/7.3.601
@@ -0,0 +1,51 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.601
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.601
+Problem:    Bad code style.
+Solution:   Insert space, remove parens.
+Files:	    src/farsi.c
+
+
+*** ../vim-7.3.600/src/farsi.c	2010-08-15 21:57:28.000000000 +0200
+--- src/farsi.c	2012-07-12 21:59:15.000000000 +0200
+***************
+*** 1813,1819 ****
+  		ptr[i] = toF_leading(ptr[i]);
+  		++i;
+  
+! 		while(canF_Rjoin(ptr[i]) && (i < llen))
+  		{
+  		    ptr[i] = toF_Rjoin(ptr[i]);
+  		    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
+--- 1813,1819 ----
+  		ptr[i] = toF_leading(ptr[i]);
+  		++i;
+  
+! 		while (canF_Rjoin(ptr[i]) && i < llen)
+  		{
+  		    ptr[i] = toF_Rjoin(ptr[i]);
+  		    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
+*** ../vim-7.3.600/src/version.c	2012-07-10 19:25:06.000000000 +0200
+--- src/version.c	2012-07-16 17:25:48.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     601,
+  /**/
+
+-- 
+There are three kinds of persons: Those who can count and those who can't.
+
+ /// Bram Moolenaar -- Bram at 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.602 b/7.3.602
new file mode 100644
index 0000000..fd5f3cf
--- /dev/null
+++ b/7.3.602
@@ -0,0 +1,55 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.602
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.602
+Problem:    Missing files in distribution.
+Solution:   Update the list of files.
+Files:	    Filelist
+
+
+*** ../vim-7.3.601/Filelist	2011-10-20 16:35:25.000000000 +0200
+--- Filelist	2012-06-20 12:06:41.000000000 +0200
+***************
+*** 463,468 ****
+--- 463,469 ----
+  		runtime/macros/hanoi/hanoi.vim \
+  		runtime/macros/hanoi/poster \
+  		runtime/macros/justify.vim \
++ 		runtime/macros/less.bat \
+  		runtime/macros/less.sh \
+  		runtime/macros/less.vim \
+  		runtime/macros/life/click.me \
+***************
+*** 666,671 ****
+--- 667,674 ----
+  
+  # generic language files
+  LANG_GEN = \
++ 		runtime/doc/*-de.1 \
++ 		runtime/doc/*-de.UTF-8.1 \
+  		runtime/doc/*-fr.1 \
+  		runtime/doc/*-fr.UTF-8.1 \
+  		runtime/doc/*-it.1 \
+*** ../vim-7.3.601/src/version.c	2012-07-16 17:26:18.000000000 +0200
+--- src/version.c	2012-07-16 17:27:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     602,
+  /**/
+
+-- 
+Never eat yellow snow.
+
+ /// Bram Moolenaar -- Bram at 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.603 b/7.3.603
new file mode 100644
index 0000000..00a024b
--- /dev/null
+++ b/7.3.603
@@ -0,0 +1,370 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.603
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.603
+Problem:    It is possible to add replace builtin functions by calling
+	    extend() on g:.
+Solution:   Add a flag to a dict to indicate it is a scope.  Check for
+	    existing functions. (ZyX)
+Files:	    src/buffer.c, src/eval.c, src/proto/eval.pro, src/structs.h,
+	    src/testdir/test34.in, src/testdir/test34.ok, src/window.c
+
+
+*** ../vim-7.3.602/src/buffer.c	2012-07-10 15:18:18.000000000 +0200
+--- src/buffer.c	2012-07-16 16:52:58.000000000 +0200
+***************
+*** 1747,1753 ****
+      buf->b_wininfo->wi_win = curwin;
+  
+  #ifdef FEAT_EVAL
+!     init_var_dict(&buf->b_vars, &buf->b_bufvar);    /* init b: variables */
+  #endif
+  #ifdef FEAT_SYN_HL
+      hash_init(&buf->b_s.b_keywtab);
+--- 1747,1754 ----
+      buf->b_wininfo->wi_win = curwin;
+  
+  #ifdef FEAT_EVAL
+!     /* init b: variables */
+!     init_var_dict(&buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
+  #endif
+  #ifdef FEAT_SYN_HL
+      hash_init(&buf->b_s.b_keywtab);
+*** ../vim-7.3.602/src/eval.c	2012-07-10 13:41:09.000000000 +0200
+--- src/eval.c	2012-07-16 17:18:11.000000000 +0200
+***************
+*** 850,857 ****
+      int		    i;
+      struct vimvar   *p;
+  
+!     init_var_dict(&globvardict, &globvars_var);
+!     init_var_dict(&vimvardict, &vimvars_var);
+      vimvardict.dv_lock = VAR_FIXED;
+      hash_init(&compat_hashtab);
+      hash_init(&func_hashtab);
+--- 850,857 ----
+      int		    i;
+      struct vimvar   *p;
+  
+!     init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
+!     init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
+      vimvardict.dv_lock = VAR_FIXED;
+      hash_init(&compat_hashtab);
+      hash_init(&func_hashtab);
+***************
+*** 2725,2738 ****
+  	    lp->ll_dict = lp->ll_tv->vval.v_dict;
+  	    lp->ll_di = dict_find(lp->ll_dict, key, len);
+  
+! 	    /* When assigning to g: check that a function and variable name is
+! 	     * valid. */
+! 	    if (rettv != NULL && lp->ll_dict == &globvardict)
+  	    {
+! 		if (rettv->v_type == VAR_FUNC
+  			       && var_check_func_name(key, lp->ll_di == NULL))
+! 		    return NULL;
+! 		if (!valid_varname(key))
+  		    return NULL;
+  	    }
+  
+--- 2725,2750 ----
+  	    lp->ll_dict = lp->ll_tv->vval.v_dict;
+  	    lp->ll_di = dict_find(lp->ll_dict, key, len);
+  
+! 	    /* When assigning to a scope dictionary check that a function and
+! 	     * variable name is valid (only variable name unless it is l: or
+! 	     * g: dictionary). Disallow overwriting a builtin function. */
+! 	    if (rettv != NULL && lp->ll_dict->dv_scope != 0)
+  	    {
+! 		int prevval;
+! 		int wrong;
+! 
+! 		if (len != -1)
+! 		{
+! 		    prevval = key[len];
+! 		    key[len] = NUL;
+! 		}
+! 		wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
+! 			       && rettv->v_type == VAR_FUNC
+  			       && var_check_func_name(key, lp->ll_di == NULL))
+! 			|| !valid_varname(key);
+! 		if (len != -1)
+! 		    key[len] = prevval;
+! 		if (wrong)
+  		    return NULL;
+  	    }
+  
+***************
+*** 6951,6957 ****
+      d = (dict_T *)alloc(sizeof(dict_T));
+      if (d != NULL)
+      {
+! 	/* Add the list to the list of dicts for garbage collection. */
+  	if (first_dict != NULL)
+  	    first_dict->dv_used_prev = d;
+  	d->dv_used_next = first_dict;
+--- 6963,6969 ----
+      d = (dict_T *)alloc(sizeof(dict_T));
+      if (d != NULL)
+      {
+! 	/* Add the dict to the list of dicts for garbage collection. */
+  	if (first_dict != NULL)
+  	    first_dict->dv_used_prev = d;
+  	d->dv_used_next = first_dict;
+***************
+*** 6960,6965 ****
+--- 6972,6978 ----
+  
+  	hash_init(&d->dv_hashtab);
+  	d->dv_lock = 0;
++ 	d->dv_scope = 0;
+  	d->dv_refcount = 0;
+  	d->dv_copyID = 0;
+      }
+***************
+*** 10203,10208 ****
+--- 10216,10234 ----
+  		{
+  		    --todo;
+  		    di1 = dict_find(d1, hi2->hi_key, -1);
++ 		    if (d1->dv_scope != 0)
++ 		    {
++ 			/* Disallow replacing a builtin function in l: and g:.
++ 			 * Check the key to be valid when adding to any
++ 			 * scope. */
++ 		        if (d1->dv_scope == VAR_DEF_SCOPE
++ 				&& HI2DI(hi2)->di_tv.v_type == VAR_FUNC
++ 				&& var_check_func_name(hi2->hi_key,
++ 								 di1 == NULL))
++ 			    break;
++ 			if (!valid_varname(hi2->hi_key))
++ 			    break;
++ 		    }
+  		    if (di1 == NULL)
+  		    {
+  			di1 = dictitem_copy(HI2DI(hi2));
+***************
+*** 20027,20033 ****
+  	{
+  	    sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
+  		(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
+! 	    init_var_dict(&sv->sv_dict, &sv->sv_var);
+  	    ++ga_scripts.ga_len;
+  	}
+      }
+--- 20053,20059 ----
+  	{
+  	    sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
+  		(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
+! 	    init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
+  	    ++ga_scripts.ga_len;
+  	}
+      }
+***************
+*** 20038,20049 ****
+   * point to it.
+   */
+      void
+! init_var_dict(dict, dict_var)
+      dict_T	*dict;
+      dictitem_T	*dict_var;
+  {
+      hash_init(&dict->dv_hashtab);
+      dict->dv_lock = 0;
+      dict->dv_refcount = DO_NOT_FREE_CNT;
+      dict->dv_copyID = 0;
+      dict_var->di_tv.vval.v_dict = dict;
+--- 20064,20077 ----
+   * point to it.
+   */
+      void
+! init_var_dict(dict, dict_var, scope)
+      dict_T	*dict;
+      dictitem_T	*dict_var;
++     int		scope;
+  {
+      hash_init(&dict->dv_hashtab);
+      dict->dv_lock = 0;
++     dict->dv_scope = scope;
+      dict->dv_refcount = DO_NOT_FREE_CNT;
+      dict->dv_copyID = 0;
+      dict_var->di_tv.vval.v_dict = dict;
+***************
+*** 22304,22310 ****
+      /*
+       * Init l: variables.
+       */
+!     init_var_dict(&fc->l_vars, &fc->l_vars_var);
+      if (selfdict != NULL)
+      {
+  	/* Set l:self to "selfdict".  Use "name" to avoid a warning from
+--- 22332,22338 ----
+      /*
+       * Init l: variables.
+       */
+!     init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
+      if (selfdict != NULL)
+      {
+  	/* Set l:self to "selfdict".  Use "name" to avoid a warning from
+***************
+*** 22325,22331 ****
+       * Set a:0 to "argcount".
+       * Set a:000 to a list with room for the "..." arguments.
+       */
+!     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
+--- 22353,22359 ----
+       * Set a:0 to "argcount".
+       * Set a:000 to a list with room for the "..." arguments.
+       */
+!     init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
+      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
+*** ../vim-7.3.602/src/proto/eval.pro	2012-06-29 12:54:32.000000000 +0200
+--- src/proto/eval.pro	2012-07-16 16:55:16.000000000 +0200
+***************
+*** 93,99 ****
+  char_u *get_tv_string_chk __ARGS((typval_T *varp));
+  char_u *get_var_value __ARGS((char_u *name));
+  void new_script_vars __ARGS((scid_T id));
+! void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
+  void vars_clear __ARGS((hashtab_T *ht));
+  void copy_tv __ARGS((typval_T *from, typval_T *to));
+  void ex_echo __ARGS((exarg_T *eap));
+--- 93,99 ----
+  char_u *get_tv_string_chk __ARGS((typval_T *varp));
+  char_u *get_var_value __ARGS((char_u *name));
+  void new_script_vars __ARGS((scid_T id));
+! void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
+  void vars_clear __ARGS((hashtab_T *ht));
+  void copy_tv __ARGS((typval_T *from, typval_T *to));
+  void ex_echo __ARGS((exarg_T *eap));
+*** ../vim-7.3.602/src/structs.h	2012-06-06 19:02:40.000000000 +0200
+--- src/structs.h	2012-07-16 16:56:43.000000000 +0200
+***************
+*** 1106,1111 ****
+--- 1106,1116 ----
+  #define VAR_DICT    5	/* "v_dict" is used */
+  #define VAR_FLOAT   6	/* "v_float" is used */
+  
++ /* Values for "dv_scope". */
++ #define VAR_SCOPE     1	/* a:, v:, s:, etc. scope dictionaries */
++ #define VAR_DEF_SCOPE 2	/* l:, g: scope dictionaries: here funcrefs are not
++ 			   allowed to mask existing functions */
++ 
+  /* Values for "v_lock". */
+  #define VAR_LOCKED  1	/* locked with lock(), can use unlock() */
+  #define VAR_FIXED   2	/* locked forever */
+***************
+*** 1181,1186 ****
+--- 1186,1192 ----
+      int		dv_copyID;	/* ID used by deepcopy() */
+      dict_T	*dv_copydict;	/* copied dict used by deepcopy() */
+      char	dv_lock;	/* zero, VAR_LOCKED, VAR_FIXED */
++     char	dv_scope;	/* zero, VAR_SCOPE, VAR_DEF_SCOPE */
+      dict_T	*dv_used_next;	/* next dict in used dicts list */
+      dict_T	*dv_used_prev;	/* previous dict in used dicts list */
+  };
+*** ../vim-7.3.602/src/testdir/test34.in	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test34.in	2012-07-16 16:51:29.000000000 +0200
+***************
+*** 1,5 ****
+--- 1,6 ----
+  Test for user functions.
+  Also test an <expr> mapping calling a function.
++ Also test that a builtin function cannot be replaced.
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 58,64 ****
+  ---*---
+  (one
+  (two
+! [(one again:$-5,$w! test.out
+  :delfunc Table
+  :delfunc Compute
+  :delfunc Expr1
+--- 59,68 ----
+  ---*---
+  (one
+  (two
+! [(one again:call append(line('$'), max([1, 2, 3]))
+! :call extend(g:, {'max': function('min')})
+! :call append(line('$'), max([1, 2, 3]))
+! :$-7,$w! test.out
+  :delfunc Table
+  :delfunc Compute
+  :delfunc Expr1
+*** ../vim-7.3.602/src/testdir/test34.ok	2011-10-12 22:02:07.000000000 +0200
+--- src/testdir/test34.ok	2012-07-16 16:43:15.000000000 +0200
+***************
+*** 4,6 ****
+--- 4,8 ----
+  1. one
+  2. two
+  1. one again
++ 3
++ 3
+*** ../vim-7.3.602/src/window.c	2012-07-06 18:27:34.000000000 +0200
+--- src/window.c	2012-07-16 16:53:45.000000000 +0200
+***************
+*** 3468,3474 ****
+  # endif
+  #ifdef FEAT_EVAL
+  	/* init t: variables */
+! 	init_var_dict(&tp->tp_vars, &tp->tp_winvar);
+  #endif
+  	tp->tp_ch_used = p_ch;
+      }
+--- 3468,3474 ----
+  # endif
+  #ifdef FEAT_EVAL
+  	/* init t: variables */
+! 	init_var_dict(&tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
+  #endif
+  	tp->tp_ch_used = p_ch;
+      }
+***************
+*** 4410,4416 ****
+  #endif
+  #ifdef FEAT_EVAL
+  	/* init w: variables */
+! 	init_var_dict(&new_wp->w_vars, &new_wp->w_winvar);
+  #endif
+  #ifdef FEAT_FOLDING
+  	foldInitWin(new_wp);
+--- 4410,4416 ----
+  #endif
+  #ifdef FEAT_EVAL
+  	/* init w: variables */
+! 	init_var_dict(&new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
+  #endif
+  #ifdef FEAT_FOLDING
+  	foldInitWin(new_wp);
+*** ../vim-7.3.602/src/version.c	2012-07-16 17:27:57.000000000 +0200
+--- src/version.c	2012-07-16 17:29:06.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     603,
+  /**/
+
+-- 
+Birthdays are healthy.  The more you have them, the longer you live.
+
+ /// Bram Moolenaar -- Bram at 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.604 b/7.3.604
new file mode 100644
index 0000000..f7e63bd
--- /dev/null
+++ b/7.3.604
@@ -0,0 +1,60 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.604
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.604
+Problem:    inputdialog() doesn't use the cancel argument in the console.
+	    (David Fishburn)
+Solution:   Use the third argument. (Christian Brabant)
+Files:	    src/eval.c
+
+
+*** ../vim-7.3.603/src/eval.c	2012-07-16 17:31:48.000000000 +0200
+--- src/eval.c	2012-07-16 19:20:47.000000000 +0200
+***************
+*** 12940,12945 ****
+--- 12940,12946 ----
+  		int	xp_namelen;
+  		long	argt;
+  
++ 		/* input() with a third argument: completion */
+  		rettv->vval.v_string = NULL;
+  
+  		xp_name = get_tv_string_buf_chk(&argvars[2], buf);
+***************
+*** 12958,12963 ****
+--- 12959,12969 ----
+  	    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(
++ 							   &argvars[2], buf));
+  
+  	vim_free(xp_arg);
+  
+*** ../vim-7.3.603/src/version.c	2012-07-16 17:31:48.000000000 +0200
+--- src/version.c	2012-07-16 19:23:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     604,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+135. You cut classes or miss work so you can stay home and browse the web.
+
+ /// Bram Moolenaar -- Bram at 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.605 b/7.3.605
new file mode 100644
index 0000000..7033825
--- /dev/null
+++ b/7.3.605
@@ -0,0 +1,86 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.605
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.605 (after 7.3.577)
+Problem:    MS-Windows: Can't compile with older compilers. (Titov Anatoly)
+Solution:   Add #ifdef for MEMORYSTATUSEX.
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.3.604/src/os_win32.c	2012-06-29 15:51:26.000000000 +0200
+--- src/os_win32.c	2012-07-19 11:35:00.000000000 +0200
+***************
+*** 4999,5020 ****
+      long_u
+  mch_avail_mem(int special)
+  {
+!     if (g_PlatformId != VER_PLATFORM_WIN32_NT)
+!     {
+! 	MEMORYSTATUS	ms;
+! 
+! 	ms.dwLength = sizeof(MEMORYSTATUS);
+! 	GlobalMemoryStatus(&ms);
+! 	return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
+!     }
+!     else
+      {
+  	MEMORYSTATUSEX	ms;
+  
+  	ms.dwLength = sizeof(MEMORYSTATUSEX);
+  	GlobalMemoryStatusEx(&ms);
+  	return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
+      }
+  }
+  
+  #ifdef FEAT_MBYTE
+--- 4999,5025 ----
+      long_u
+  mch_avail_mem(int special)
+  {
+! #ifdef MEMORYSTATUSEX
+!     PlatformId();
+!     if (g_PlatformId == VER_PLATFORM_WIN32_NT)
+      {
+  	MEMORYSTATUSEX	ms;
+  
++ 	/* Need to use GlobalMemoryStatusEx() when there is more memory than
++ 	 * what fits in 32 bits. But it's not always available. */
+  	ms.dwLength = sizeof(MEMORYSTATUSEX);
+  	GlobalMemoryStatusEx(&ms);
+  	return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
+      }
++     else
++ #endif
++     {
++ 	MEMORYSTATUS	ms;
++ 
++ 	ms.dwLength = sizeof(MEMORYSTATUS);
++ 	GlobalMemoryStatus(&ms);
++ 	return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
++     }
+  }
+  
+  #ifdef FEAT_MBYTE
+*** ../vim-7.3.604/src/version.c	2012-07-16 19:27:25.000000000 +0200
+--- src/version.c	2012-07-19 11:36:12.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     605,
+  /**/
+
+-- 
+Fingers not found - Pound head on keyboard to continue.
+
+ /// Bram Moolenaar -- Bram at 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.606 b/7.3.606
new file mode 100644
index 0000000..2296653
--- /dev/null
+++ b/7.3.606
@@ -0,0 +1,76 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.606
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.606
+Problem:    CTRL-P completion has a problem with multi-byte characters.
+Solution:   Check for next character being NUL properly.  (Yasuhiro Matsumoto)
+Files:	    src/search.c, src/macros.h
+
+
+*** ../vim-7.3.605/src/search.c	2012-06-06 16:12:54.000000000 +0200
+--- src/search.c	2012-07-19 17:09:20.000000000 +0200
+***************
+*** 5141,5147 ****
+  		    && !(compl_cont_status & CONT_SOL)
+  #endif
+  		    && *startp != NUL
+! 		    && *(p = startp + 1) != NUL)
+  		goto search_line;
+  	}
+  	line_breakcheck();
+--- 5141,5147 ----
+  		    && !(compl_cont_status & CONT_SOL)
+  #endif
+  		    && *startp != NUL
+! 		    && *(p = startp + MB_PTR2LEN(startp)) != NUL)
+  		goto search_line;
+  	}
+  	line_breakcheck();
+*** ../vim-7.3.605/src/macros.h	2010-09-21 16:56:29.000000000 +0200
+--- src/macros.h	2012-07-19 17:08:38.000000000 +0200
+***************
+*** 259,264 ****
+--- 259,266 ----
+   * PTR2CHAR(): get character from pointer.
+   */
+  #ifdef FEAT_MBYTE
++ /* Get the length of the character p points to */
++ # define MB_PTR2LEN(p)		(has_mbyte ? (*mb_ptr2len)(p) : 1)
+  /* Advance multi-byte pointer, skip over composing chars. */
+  # define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
+  /* Advance multi-byte pointer, do not skip over composing chars. */
+***************
+*** 272,277 ****
+--- 274,280 ----
+  # define MB_CHARLEN(p)	    (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
+  # define PTR2CHAR(p)	    (has_mbyte ? mb_ptr2char(p) : (int)*(p))
+  #else
++ # define MB_PTR2LEN(p)		1
+  # define mb_ptr_adv(p)		++p
+  # define mb_cptr_adv(p)		++p
+  # define mb_ptr_back(s, p)	--p
+*** ../vim-7.3.605/src/version.c	2012-07-19 11:37:22.000000000 +0200
+--- src/version.c	2012-07-19 17:13:53.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     606,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+151. You find yourself engaged to someone you've never actually met,
+     except through e-mail.
+
+ /// Bram Moolenaar -- Bram at 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.607 b/7.3.607
new file mode 100644
index 0000000..4dbf559
--- /dev/null
+++ b/7.3.607
@@ -0,0 +1,56 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.607
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.607
+Problem:    With an 8 color terminal the selected menu item is black on black,
+	    because darkGrey as bg is the same as black.
+Solution:   Swap fg and bg colors. (James McCoy)
+Files:	    src/syntax.c
+
+
+*** ../vim-7.3.606/src/syntax.c	2012-06-01 13:18:48.000000000 +0200
+--- src/syntax.c	2012-07-19 17:34:42.000000000 +0200
+***************
+*** 6653,6660 ****
+  	     "PmenuThumb ctermbg=White guibg=White"),
+  	CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+  	     "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+! 	CENT("PmenuSel ctermbg=DarkGrey ctermfg=Black",
+! 	     "PmenuSel ctermbg=DarkGrey ctermfg=Black guibg=DarkGrey"),
+  #endif
+  	CENT("Title term=bold ctermfg=LightMagenta",
+  	     "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+--- 6653,6660 ----
+  	     "PmenuThumb ctermbg=White guibg=White"),
+  	CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+  	     "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+! 	CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
+! 	     "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
+  #endif
+  	CENT("Title term=bold ctermfg=LightMagenta",
+  	     "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+*** ../vim-7.3.606/src/version.c	2012-07-19 17:18:21.000000000 +0200
+--- src/version.c	2012-07-19 17:38:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     607,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+152. You find yourself falling for someone you've never seen or hardly
+     know, but, boy can he/she TYPE!!!!!!
+
+ /// Bram Moolenaar -- Bram at 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.608 b/7.3.608
new file mode 100644
index 0000000..148bc49
--- /dev/null
+++ b/7.3.608
@@ -0,0 +1,119 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.608
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.608
+Problem:    winrestview() does not always restore the view correctly.
+Solution:   Call win_new_height() and win_new_width(). (Lech Lorens)
+Files:	    src/eval.c, src/proto/window.pro, src/window.c
+
+
+*** ../vim-7.3.607/src/eval.c	2012-07-16 19:27:25.000000000 +0200
+--- src/eval.c	2012-07-19 17:50:16.000000000 +0200
+***************
+*** 18601,18606 ****
+--- 18601,18610 ----
+  	curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+  
+  	check_cursor();
++ 	win_new_height(curwin, curwin->w_height);
++ # ifdef FEAT_VERTSPLIT
++ 	win_new_width(curwin, W_WIDTH(curwin));
++ # endif
+  	changed_window_setting();
+  
+  	if (curwin->w_topline == 0)
+*** ../vim-7.3.607/src/proto/window.pro	2012-06-13 14:28:16.000000000 +0200
+--- src/proto/window.pro	2012-07-19 18:05:10.000000000 +0200
+***************
+*** 51,56 ****
+--- 51,58 ----
+  void win_setminheight __ARGS((void));
+  void win_drag_status_line __ARGS((win_T *dragwin, int offset));
+  void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
++ void win_new_height __ARGS((win_T *wp, int height));
++ void win_new_width __ARGS((win_T *wp, int width));
+  void win_comp_scroll __ARGS((win_T *wp));
+  void command_height __ARGS((void));
+  void last_status __ARGS((int morewin));
+*** ../vim-7.3.607/src/window.c	2012-07-16 17:31:48.000000000 +0200
+--- src/window.c	2012-07-19 18:05:18.000000000 +0200
+***************
+*** 54,60 ****
+  static void frame_insert __ARGS((frame_T *before, frame_T *frp));
+  static void frame_remove __ARGS((frame_T *frp));
+  #ifdef FEAT_VERTSPLIT
+- static void win_new_width __ARGS((win_T *wp, int width));
+  static void win_goto_ver __ARGS((int up, long count));
+  static void win_goto_hor __ARGS((int left, long count));
+  #endif
+--- 54,59 ----
+***************
+*** 71,77 ****
+  
+  static win_T *win_alloc __ARGS((win_T *after, int hidden));
+  static void set_fraction __ARGS((win_T *wp));
+- static void win_new_height __ARGS((win_T *wp, int height));
+  
+  #define URL_SLASH	1		/* path_is_url() has found "://" */
+  #define URL_BACKSLASH	2		/* path_is_url() has found ":\\" */
+--- 70,75 ----
+***************
+*** 5557,5563 ****
+   * This takes care of the things inside the window, not what happens to the
+   * window position, the frame or to other windows.
+   */
+!     static void
+  win_new_height(wp, height)
+      win_T	*wp;
+      int		height;
+--- 5555,5561 ----
+   * This takes care of the things inside the window, not what happens to the
+   * window position, the frame or to other windows.
+   */
+!     void
+  win_new_height(wp, height)
+      win_T	*wp;
+      int		height;
+***************
+*** 5697,5703 ****
+  /*
+   * Set the width of a window.
+   */
+!     static void
+  win_new_width(wp, width)
+      win_T	*wp;
+      int		width;
+--- 5695,5701 ----
+  /*
+   * Set the width of a window.
+   */
+!     void
+  win_new_width(wp, width)
+      win_T	*wp;
+      int		width;
+*** ../vim-7.3.607/src/version.c	2012-07-19 17:39:01.000000000 +0200
+--- src/version.c	2012-07-19 17:53:37.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     608,
+  /**/
+
+-- 
+Although the scythe isn't pre-eminent among the weapons of war, anyone who
+has been on the wrong end of, say, a peasants' revolt will know that in
+skilled hands it is fearsome.
+					-- (Terry Pratchett, Mort)
+
+ /// Bram Moolenaar -- Bram at 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.609 b/7.3.609
new file mode 100644
index 0000000..ed731f5
--- /dev/null
+++ b/7.3.609
@@ -0,0 +1,251 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.609
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.609
+Problem:    File names in :checkpath! output are garbled.
+Solution:   Check for \zs in the pattern. (Lech Lorens)
+Files:	    src/search.c, src/testdir/test17.in, src/testdir/test17.ok
+
+
+*** ../vim-7.3.608/src/search.c	2012-07-19 17:18:21.000000000 +0200
+--- src/search.c	2012-07-25 13:33:08.000000000 +0200
+***************
+*** 4740,4756 ****
+  			 * Isolate the file name.
+  			 * Include the surrounding "" or <> if present.
+  			 */
+! 			for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
+! 			    ;
+! 			for (i = 0; vim_isfilec(p[i]); i++)
+! 			    ;
+  			if (i == 0)
+  			{
+  			    /* Nothing found, use the rest of the line. */
+  			    p = incl_regmatch.endp[0];
+  			    i = (int)STRLEN(p);
+  			}
+! 			else
+  			{
+  			    if (p[-1] == '"' || p[-1] == '<')
+  			    {
+--- 4740,4772 ----
+  			 * Isolate the file name.
+  			 * Include the surrounding "" or <> if present.
+  			 */
+! 			if (inc_opt != NULL
+! 				   && strstr((char *)inc_opt, "\\zs") != NULL)
+! 			{
+! 			    /* pattern contains \zs, use the match */
+! 			    p = incl_regmatch.startp[0];
+! 			    i = (int)(incl_regmatch.endp[0]
+! 						   - incl_regmatch.startp[0]);
+! 			}
+! 			else
+! 			{
+! 			    /* find the file name after the end of the match */
+! 			    for (p = incl_regmatch.endp[0];
+! 						  *p && !vim_isfilec(*p); p++)
+! 				;
+! 			    for (i = 0; vim_isfilec(p[i]); i++)
+! 				;
+! 			}
+! 
+  			if (i == 0)
+  			{
+  			    /* Nothing found, use the rest of the line. */
+  			    p = incl_regmatch.endp[0];
+  			    i = (int)STRLEN(p);
+  			}
+! 			/* Avoid checking before the start of the line, can
+! 			 * happen if \zs appears in the regexp. */
+! 			else if (p > line)
+  			{
+  			    if (p[-1] == '"' || p[-1] == '<')
+  			    {
+*** ../vim-7.3.608/src/testdir/test17.in	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test17.in	2012-07-25 13:41:43.000000000 +0200
+***************
+*** 1,4 ****
+! Tests for "gf" on ${VAR}
+  
+  STARTTEST
+  :so small.vim
+--- 1,6 ----
+! Tests for:
+! - "gf" on ${VAR},
+! - ":checkpath!" with various 'include' settings.
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 20,27 ****
+  :endif
+  gf
+  :w! test.out
+! :qa!
+  ENDTEST
+  
+  	${CDIR}/test17a.in
+  	$TDIR/test17a.in
+--- 22,120 ----
+  :endif
+  gf
+  :w! test.out
+! :brewind
+  ENDTEST
+  
+  	${CDIR}/test17a.in
+  	$TDIR/test17a.in
++ 
++ STARTTEST
++ :" check for 'include' without \zs or \ze
++ :lang C
++ :!rm -f ./Xbase.a
++ :!rm -rf ./Xdir1
++ :!mkdir -p Xdir1/dir2
++ :e Xdir1/dir2/foo.a
++ i#include   "bar.a"
++ :w
++ :e Xdir1/dir2/bar.a
++ i#include      "baz.a"
++ :w
++ :e Xdir1/dir2/baz.a
++ i#include            "foo.a"
++ :w
++ :e Xbase.a
++ :set path=Xdir1/dir2
++ i#include    <foo.a>
++ :w
++ :redir! >>test.out
++ :checkpath!
++ :redir END
++ :brewind
++ ENDTEST
++ 
++ STARTTEST
++ :" check for 'include' with \zs and \ze
++ :!rm -f ./Xbase.b
++ :!rm -rf ./Xdir1
++ :!mkdir -p Xdir1/dir2
++ :let &include='^\s*%inc\s*/\zs[^/]\+\ze'
++ :function! DotsToSlashes()
++ :  return substitute(v:fname, '\.', '/', 'g') . '.b'
++ :endfunction
++ :let &includeexpr='DotsToSlashes()'
++ :e Xdir1/dir2/foo.b
++ i%inc   /bar/
++ :w
++ :e Xdir1/dir2/bar.b
++ i%inc      /baz/
++ :w
++ :e Xdir1/dir2/baz.b
++ i%inc            /foo/
++ :w
++ :e Xbase.b
++ :set path=Xdir1/dir2
++ i%inc    /foo/
++ :w
++ :redir! >>test.out
++ :checkpath!
++ :redir END
++ :brewind
++ ENDTEST
++ 
++ STARTTEST
++ :" check for 'include' with \zs and no \ze
++ :!rm -f ./Xbase.c
++ :!rm -rf ./Xdir1
++ :!mkdir -p Xdir1/dir2
++ :let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
++ :function! StripNewlineChar()
++ :  if v:fname =~ '\n$'
++ :    return v:fname[:-2]
++ :  endif
++ :  return v:fname
++ :endfunction
++ :let &includeexpr='StripNewlineChar()'
++ :e Xdir1/dir2/foo.c
++ i%inc   bar.c
++ :w
++ :e Xdir1/dir2/bar.c
++ i%inc      baz.c
++ :w
++ :e Xdir1/dir2/baz.c
++ i%inc            foo.c
++ :w
++ :e Xdir1/dir2/FALSE.c
++ i%inc            foo.c
++ :w
++ :e Xbase.c
++ :set path=Xdir1/dir2
++ i%inc    FALSE.c foo.c
++ :w
++ :redir! >>test.out
++ :checkpath!
++ :redir END
++ :brewind
++ :q
++ ENDTEST
++ 
+*** ../vim-7.3.608/src/testdir/test17.ok	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test17.ok	2012-07-25 13:45:37.000000000 +0200
+***************
+*** 1,3 ****
+--- 1,33 ----
+  This file is just to test "gf" in test 17.
+  The contents is not important.
+  Just testing!
++ 
++ 
++ --- Included files in path ---
++ Xdir1/dir2/foo.a
++ Xdir1/dir2/foo.a -->
++   Xdir1/dir2/bar.a
++   Xdir1/dir2/bar.a -->
++     Xdir1/dir2/baz.a
++     Xdir1/dir2/baz.a -->
++       "foo.a"  (Already listed)
++ 
++ 
++ --- Included files in path ---
++ Xdir1/dir2/foo.b
++ Xdir1/dir2/foo.b -->
++   Xdir1/dir2/bar.b
++   Xdir1/dir2/bar.b -->
++     Xdir1/dir2/baz.b
++     Xdir1/dir2/baz.b -->
++       foo  (Already listed)
++ 
++ 
++ --- Included files in path ---
++ Xdir1/dir2/foo.c
++ Xdir1/dir2/foo.c -->
++   Xdir1/dir2/bar.c
++   Xdir1/dir2/bar.c -->
++     Xdir1/dir2/baz.c
++     Xdir1/dir2/baz.c -->
++       foo.c^@  (Already listed)
+*** ../vim-7.3.608/src/version.c	2012-07-19 18:05:40.000000000 +0200
+--- src/version.c	2012-07-25 13:38:54.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     609,
+  /**/
+
+-- 
+"The question of whether computers can think is just like the question
+of whether submarines can swim."      -- Edsger W. Dijkstra
+
+ /// Bram Moolenaar -- Bram at 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.610 b/7.3.610
new file mode 100644
index 0000000..5e48837
--- /dev/null
+++ b/7.3.610
@@ -0,0 +1,400 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.610
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.610
+Problem:    Cannot operate on the text that a search pattern matches.
+Solution:   Add the "gn" and "gN" commands. (Christian Brabandt)
+Files:	    runtime/doc/index.txt, runtime/doc/visual.txt, src/normal.c,
+	    src/proto/search.pro, src/search.c, src/testdir/test53.in,
+	    src/testdir/test53.ok
+
+
+*** ../vim-7.3.609/runtime/doc/index.txt	2010-08-15 21:57:18.000000000 +0200
+--- runtime/doc/index.txt	2012-07-25 14:27:20.000000000 +0200
+***************
+*** 719,726 ****
+--- 719,729 ----
+  |gH|		gH		   start Select line mode
+  |gI|		gI		2  like "I", but always start in column 1
+  |gJ|		gJ		2  join lines without inserting space
++ |gN|		gN	      1,2  find the previous match with the last used
++ 				   search pattern and Visually select it
+  |gP|		["x]gP		2  put the text [from register x] before the
+  				   cursor N times, leave the cursor after it
++ |gQ|		gQ		    switch to "Ex" mode with Vim editing
+  |gR|		gR		2  enter Virtual Replace mode
+  |gU|		gU{motion}	2  make Nmove text uppercase
+  |gV|		gV		   don't reselect the previous Visual area
+***************
+*** 750,755 ****
+--- 753,760 ----
+  				   lines down
+  |gk|		gk		1  like "k", but when 'wrap' on go N screen
+  				   lines up
++ |gn|		gn	      1,2  find the next match with the last used
++ 				   search pattern and Visually select it
+  |gm|		gm		1  go to character at middle of the screenline
+  |go|		go		1  cursor to byte N in the buffer
+  |gp|		["x]gp		2  put the text [from register x] after the
+*** ../vim-7.3.609/runtime/doc/visual.txt	2010-08-15 21:57:16.000000000 +0200
+--- runtime/doc/visual.txt	2012-07-25 14:42:22.000000000 +0200
+***************
+*** 94,99 ****
+--- 99,116 ----
+  			After using "p" or "P" in Visual mode the text that
+  			was put will be selected.
+  
++ 								*gn* *v_gn*
++ gn			Search forward for the last used search pattern, like
++ 			with `n`, and start Visual mode to select the match.
++ 			If the cursor is on the match, visually selects it.
++ 			If an operator is pending, operates on the match.
++ 			E.g., "dgn" deletes the text of the next match.
++ 			If Visual mode is active, extends the selection
++ 			until the end of the next match.
++ 
++ 								*gN* *v_gN*
++ gN			Like |gn| but searches backward, like with `N`.
++ 
+  							*<LeftMouse>*
+  <LeftMouse>		Set the current cursor position.  If Visual mode is
+  			active it is stopped.  Only when 'mouse' option is
+*** ../vim-7.3.609/src/normal.c	2012-07-10 16:49:08.000000000 +0200
+--- src/normal.c	2012-07-25 14:31:40.000000000 +0200
+***************
+*** 1780,1789 ****
+  	    {
+  		/* Prepare for redoing.  Only use the nchar field for "r",
+  		 * otherwise it might be the second char of the operator. */
+! 		prep_redo(oap->regname, 0L, NUL, 'v',
+! 				get_op_char(oap->op_type),
+! 				get_extra_op_char(oap->op_type),
+! 				oap->op_type == OP_REPLACE ? cap->nchar : NUL);
+  		if (!redo_VIsual_busy)
+  		{
+  		    redo_VIsual_mode = resel_VIsual_mode;
+--- 1780,1797 ----
+  	    {
+  		/* Prepare for redoing.  Only use the nchar field for "r",
+  		 * otherwise it might be the second char of the operator. */
+! 		if (cap->cmdchar == 'g' && (cap->nchar == 'n'
+! 							|| cap->nchar == 'N'))
+! 		    /* "gn" and "gN" are a bit different */
+! 		    prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
+! 					get_op_char(oap->op_type),
+! 					get_extra_op_char(oap->op_type));
+! 		else
+! 		    prep_redo(oap->regname, 0L, NUL, 'v',
+! 					get_op_char(oap->op_type),
+! 					get_extra_op_char(oap->op_type),
+! 					oap->op_type == OP_REPLACE
+! 							  ? cap->nchar : NUL);
+  		if (!redo_VIsual_busy)
+  		{
+  		    redo_VIsual_mode = resel_VIsual_mode;
+***************
+*** 7987,7992 ****
+--- 7995,8011 ----
+  	cap->arg = TRUE;
+  	nv_visual(cap);
+  	break;
++ 
++     /* "gn", "gN" visually select next/previous search match
++      * "gn" selects next match
++      * "gN" selects previous match
++      */
++     case 'N':
++     case 'n':
++ 	if (!current_search(cap->count1, cap->nchar == 'n'))
++ 	    beep_flush();
++ 
++ 	break;
+  #endif /* FEAT_VISUAL */
+  
+      /*
+*** ../vim-7.3.609/src/proto/search.pro	2010-08-15 21:57:28.000000000 +0200
+--- src/proto/search.pro	2012-07-25 14:24:01.000000000 +0200
+***************
+*** 27,32 ****
+--- 27,33 ----
+  int end_word __ARGS((long count, int bigword, int stop, int empty));
+  int bckend_word __ARGS((long count, int bigword, int eol));
+  int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
++ int current_search __ARGS((long count, int forward));
+  int current_sent __ARGS((oparg_T *oap, long count, int include));
+  int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
+  int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
+*** ../vim-7.3.609/src/search.c	2012-07-25 13:46:25.000000000 +0200
+--- src/search.c	2012-07-25 14:54:28.000000000 +0200
+***************
+*** 3397,3402 ****
+--- 3397,3547 ----
+      return OK;
+  }
+  
++ #if defined(FEAT_VISUAL) || defined(PROTO)
++ /*
++  * Find next search match under cursor, cursor at end.
++  * Used while an operator is pending, and in Visual mode.
++  * TODO: redo only works when used in operator pending mode
++  */
++     int
++ current_search(count, forward)
++     long	count;
++     int		forward;	/* move forward or backwards */
++ {
++     pos_T	start_pos;	/* position before the pattern */
++     pos_T	orig_pos;	/* position of the cursor at beginning */
++     pos_T	pos;		/* position after the pattern */
++     int		i;
++     int		dir;
++     int		result;		/* result of various function calls */
++     char_u	old_p_ws = p_ws;
++     int		visual_active = FALSE;
++     int		flags = 0;
++     pos_T	save_VIsual;
++ 
++ 
++     /* wrapping should not occur */
++     p_ws = FALSE;
++ 
++     /* Correct cursor when 'selection' is exclusive */
++     if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
++ 	dec_cursor();
++ 
++     if (VIsual_active)
++     {
++ 	orig_pos = curwin->w_cursor;
++ 	save_VIsual = VIsual;
++ 	visual_active = TRUE;
++ 
++ 	/* just started visual selection, only one character */
++ 	if (equalpos(VIsual, curwin->w_cursor))
++ 	    visual_active = FALSE;
++ 
++ 	pos = curwin->w_cursor;
++ 	start_pos = VIsual;
++ 
++ 	/* make sure, searching further will extend the match */
++ 	if (VIsual_active)
++ 	{
++ 	    if (forward)
++ 		incl(&pos);
++ 	    else
++ 		decl(&pos);
++ 	}
++     }
++     else
++ 	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)
++ 	 * except when Visual mode is active, so that extending the visual
++ 	 * selection works. */
++ 	if (!result && i) /* not found, abort */
++ 	{
++ 	    curwin->w_cursor = orig_pos;
++ 	    if (VIsual_active)
++ 		VIsual = save_VIsual;
++ 	    p_ws = old_p_ws;
++ 	    return FAIL;
++ 	}
++ 	else if (!i && !result && !visual_active)
++ 	{
++ 	    if (forward) /* try again from start of buffer */
++ 	    {
++ 		clearpos(&pos);
++ 	    }
++ 	    else /* try again from end of buffer */
++ 	    {
++ 		/* searching backwards, so set pos to last line and col */
++ 		pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
++ 		pos.col  = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
++ 	    }
++ 	}
++ 
++     }
++ 
++     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)
++ 	VIsual = start_pos;
++ 
++     p_ws = old_p_ws;
++     curwin->w_cursor = pos;
++     VIsual_active = TRUE;
++     VIsual_mode = 'v';
++ 
++     if (VIsual_active)
++     {
++ 	redraw_curbuf_later(INVERTED);	/* update the inversion */
++ 	if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
++ 	    inc_cursor();
++     }
++ 
++ #ifdef FEAT_FOLDING
++     if (fdo_flags & FDO_SEARCH && KeyTyped)
++ 	foldOpenCursor();
++ #endif
++ 
++     may_start_select('c');
++ #ifdef FEAT_MOUSE
++     setmouse();
++ #endif
++ #ifdef FEAT_CLIPBOARD
++     /* Make sure the clipboard gets updated.  Needed because start and
++      * end are still the same, and the selection needs to be owned */
++     clip_star.vmode = NUL;
++ #endif
++     redraw_curbuf_later(INVERTED);
++     showmode();
++ 
++     return OK;
++ }
++ #endif /* FEAT_VISUAL */
++ 
+  /*
+   * Find sentence(s) under the cursor, cursor at end.
+   * When Visual active, extend it by one or more sentences.
+***************
+*** 3420,3426 ****
+  
+  #ifdef FEAT_VISUAL
+      /*
+!      * When visual area is bigger than one character: Extend it.
+       */
+      if (VIsual_active && !equalpos(start_pos, VIsual))
+      {
+--- 3565,3571 ----
+  
+  #ifdef FEAT_VISUAL
+      /*
+!      * When the Visual area is bigger than one character: Extend it.
+       */
+      if (VIsual_active && !equalpos(start_pos, VIsual))
+      {
+***************
+*** 3508,3515 ****
+  #endif
+  
+      /*
+!      * If cursor started on blank, check if it is just before the start of the
+!      * next sentence.
+       */
+      while (c = gchar_pos(&pos), vim_iswhite(c))	/* vim_iswhite() is a macro */
+  	incl(&pos);
+--- 3653,3660 ----
+  #endif
+  
+      /*
+!      * If the cursor started on a blank, check if it is just before the start
+!      * of the next sentence.
+       */
+      while (c = gchar_pos(&pos), vim_iswhite(c))	/* vim_iswhite() is a macro */
+  	incl(&pos);
+***************
+*** 3558,3564 ****
+  #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+! 	/* avoid getting stuck with "is" on a single space before a sent. */
+  	if (equalpos(start_pos, curwin->w_cursor))
+  	    goto extend;
+  	if (*p_sel == 'e')
+--- 3703,3709 ----
+  #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+! 	/* Avoid getting stuck with "is" on a single space before a sentence. */
+  	if (equalpos(start_pos, curwin->w_cursor))
+  	    goto extend;
+  	if (*p_sel == 'e')
+*** ../vim-7.3.609/src/testdir/test53.in	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test53.in	2012-07-25 15:01:34.000000000 +0200
+***************
+*** 28,33 ****
+--- 28,40 ----
+  :put =matchstr(\"abcd\", \".\", 0, -1) " a
+  :put =match(\"abcd\", \".\", 0, 5) " -1
+  :put =match(\"abcd\", \".\", 0, -1) " 0
++ /^foobar
++ gncsearchmatch/one\_s*two\_s
++ :1
++ gnd
++ /[a]bcdx
++ :1
++ 2gnd
+  :/^start:/,/^end:/wq! test.out
+  ENDTEST
+  
+***************
+*** 45,48 ****
+--- 52,60 ----
+  -<b>asdf<i>Xasdf</i>asdf</b>-
+  -<b>asdX<i>as<b />df</i>asdf</b>-
+  </begin>
++ SEARCH:
++ foobar
++ one
++ two
++ abcdx | abcdx | abcdx
+  end:
+*** ../vim-7.3.609/src/testdir/test53.ok	2010-08-15 21:57:29.000000000 +0200
+--- src/testdir/test53.ok	2012-07-25 14:24:01.000000000 +0200
+***************
+*** 18,21 ****
+--- 18,24 ----
+  a
+  -1
+  0
++ SEARCH:
++ searchmatch
++ abcdx |  | abcdx
+  end:
+*** ../vim-7.3.609/src/version.c	2012-07-25 13:46:25.000000000 +0200
+--- src/version.c	2012-07-25 15:03:43.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     610,
+  /**/
+
+-- 
+Did you ever see a "Hit any key to continue" message in a music piece?
+
+ /// Bram Moolenaar -- Bram at 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.611 b/7.3.611
new file mode 100644
index 0000000..5e366a7
--- /dev/null
+++ b/7.3.611
@@ -0,0 +1,58 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.611
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.611
+Problem:    Can't use Vim dictionary as self argument in Python.
+Solution:   Fix the check for the "self" argument. (ZyX)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.3.610/src/if_py_both.h	2012-06-30 13:34:29.000000000 +0200
+--- src/if_py_both.h	2012-07-25 15:32:10.000000000 +0200
+***************
+*** 1284,1292 ****
+  	selfdictObject = PyDict_GetItemString(kwargs, "self");
+  	if (selfdictObject != NULL)
+  	{
+! 	    if (!PyDict_Check(selfdictObject))
+  	    {
+! 		PyErr_SetString(PyExc_TypeError, _("'self' argument must be a dictionary"));
+  		clear_tv(&args);
+  		return NULL;
+  	    }
+--- 1284,1293 ----
+  	selfdictObject = PyDict_GetItemString(kwargs, "self");
+  	if (selfdictObject != NULL)
+  	{
+! 	    if (!PyMapping_Check(selfdictObject))
+  	    {
+! 		PyErr_SetString(PyExc_TypeError,
+! 				   _("'self' argument must be a dictionary"));
+  		clear_tv(&args);
+  		return NULL;
+  	    }
+*** ../vim-7.3.610/src/version.c	2012-07-25 15:06:20.000000000 +0200
+--- src/version.c	2012-07-25 15:32:24.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     611,
+  /**/
+
+-- 
+In Joseph Heller's novel "Catch-22", the main character tries to get out of a
+war by proving he is crazy.  But the mere fact he wants to get out of the war
+only shows he isn't crazy -- creating the original "Catch-22".
+
+ /// Bram Moolenaar -- Bram at 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.612 b/7.3.612
new file mode 100644
index 0000000..7b2207e
--- /dev/null
+++ b/7.3.612
@@ -0,0 +1,83 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.612
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.612
+Problem:    Auto formatting messes up text when 'fo' contains "2". (ZyX)
+Solution:   Decrement "less_cols". (Tor Perkins)
+Files:	    src/misc1.c, src/testdir/test68.in, src/testdir/test68.ok
+
+
+*** ../vim-7.3.611/src/misc1.c	2012-07-06 16:49:37.000000000 +0200
+--- src/misc1.c	2012-07-25 16:03:58.000000000 +0200
+***************
+*** 1329,1334 ****
+--- 1329,1335 ----
+  	    for (i = 0; i < padding; i++)
+  	    {
+  		STRCAT(leader, " ");
++ 		less_cols--;
+  		newcol++;
+  	    }
+  	}
+*** ../vim-7.3.611/src/testdir/test68.in	2012-06-29 15:04:34.000000000 +0200
+--- src/testdir/test68.in	2012-07-25 15:57:06.000000000 +0200
+***************
+*** 94,99 ****
+--- 94,109 ----
+  }
+  
+  STARTTEST
++ /mno pqr/
++ :setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
++ A vwx yz
++ ENDTEST
++ 
++ /* abc def ghi jkl 
++  *    mno pqr stu
++  */
++ 
++ STARTTEST
+  /^#/
+  :setl tw=12 fo=tqnc comments=:#
+  A foobar
+*** ../vim-7.3.611/src/testdir/test68.ok	2012-06-29 23:57:50.000000000 +0200
+--- src/testdir/test68.ok	2012-07-25 16:03:05.000000000 +0200
+***************
+*** 57,62 ****
+--- 57,68 ----
+  { 1aa ^^2bb }
+  
+  
++ /* abc def ghi jkl 
++  *    mno pqr stu 
++  *    vwx yz
++  */
++ 
++ 
+  # 1 xxxxx
+  #   foobar
+  
+*** ../vim-7.3.611/src/version.c	2012-07-25 15:36:00.000000000 +0200
+--- src/version.c	2012-07-25 16:08:02.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     612,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+169. You hire a housekeeper for your home page.
+
+ /// Bram Moolenaar -- Bram at 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.613 b/7.3.613
new file mode 100644
index 0000000..520e87c
--- /dev/null
+++ b/7.3.613
@@ -0,0 +1,149 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.613
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.613
+Problem:    Including Python's config.c in the build causes trouble.  It is
+	    not clear why it was there.
+Solution:   Omit the config file. (James McCoy)
+Files:	    src/Makefile, src/auto/configure, src/configure.in
+
+
+*** ../vim-7.3.612/src/Makefile	2012-06-20 18:39:12.000000000 +0200
+--- src/Makefile	2012-07-25 16:22:57.000000000 +0200
+***************
+*** 2559,2577 ****
+  objects/if_perlsfio.o: if_perlsfio.c
+  	$(CCC) $(PERL_CFLAGS) -o $@ if_perlsfio.c
+  
+- objects/py_config.o: $(PYTHON_CONFDIR)/config.c
+- 	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \
+- 		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
+- 
+  objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c
+  	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \
+  		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \
+  		$(PYTHON_GETPATH_CFLAGS)
+  
+- objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c
+- 	$(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \
+- 		-I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
+- 
+  objects/if_python.o: if_python.c if_py_both.h
+  	$(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
+  
+--- 2559,2569 ----
+*** ../vim-7.3.612/src/auto/configure	2012-06-13 19:19:36.000000000 +0200
+--- src/auto/configure	2012-07-25 16:23:49.000000000 +0200
+***************
+*** 5357,5367 ****
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+  	fi
+  	PYTHON_SRC="if_python.c"
+! 		if test "x$MACOSX" = "xyes"; then
+! 	  PYTHON_OBJ="objects/if_python.o"
+! 	else
+! 	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
+! 	fi
+  	if test "${vi_cv_var_python_version}" = "1.4"; then
+  	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+  	fi
+--- 5357,5363 ----
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+  	fi
+  	PYTHON_SRC="if_python.c"
+! 	PYTHON_OBJ="objects/if_python.o"
+  	if test "${vi_cv_var_python_version}" = "1.4"; then
+  	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+  	fi
+***************
+*** 5656,5666 ****
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+        fi
+        PYTHON3_SRC="if_python3.c"
+!             if test "x$MACOSX" = "xyes"; then
+!         PYTHON3_OBJ="objects/if_python3.o"
+!       else
+!         PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
+!       fi
+  
+                                                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+  $as_echo_n "checking if -pthread should be used... " >&6; }
+--- 5652,5658 ----
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+        fi
+        PYTHON3_SRC="if_python3.c"
+!       PYTHON3_OBJ="objects/if_python3.o"
+  
+                                                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+  $as_echo_n "checking if -pthread should be used... " >&6; }
+*** ../vim-7.3.612/src/configure.in	2012-06-13 19:19:36.000000000 +0200
+--- src/configure.in	2012-07-25 16:23:41.000000000 +0200
+***************
+*** 916,927 ****
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+  	fi
+  	PYTHON_SRC="if_python.c"
+! 	dnl For Mac OSX 10.2 config.o is included in the Python library.
+! 	if test "x$MACOSX" = "xyes"; then
+! 	  PYTHON_OBJ="objects/if_python.o"
+! 	else
+! 	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
+! 	fi
+  	if test "${vi_cv_var_python_version}" = "1.4"; then
+  	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+  	fi
+--- 916,922 ----
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+  	fi
+  	PYTHON_SRC="if_python.c"
+! 	PYTHON_OBJ="objects/if_python.o"
+  	if test "${vi_cv_var_python_version}" = "1.4"; then
+  	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+  	fi
+***************
+*** 1106,1117 ****
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+        fi
+        PYTHON3_SRC="if_python3.c"
+!       dnl For Mac OSX 10.2 config.o is included in the Python library.
+!       if test "x$MACOSX" = "xyes"; then
+!         PYTHON3_OBJ="objects/if_python3.o"
+!       else
+!         PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
+!       fi
+  
+        dnl On FreeBSD linking with "-pthread" is required to use threads.
+        dnl _THREAD_SAFE must be used for compiling then.
+--- 1101,1107 ----
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+        fi
+        PYTHON3_SRC="if_python3.c"
+!       PYTHON3_OBJ="objects/if_python3.o"
+  
+        dnl On FreeBSD linking with "-pthread" is required to use threads.
+        dnl _THREAD_SAFE must be used for compiling then.
+*** ../vim-7.3.612/src/version.c	2012-07-25 16:09:59.000000000 +0200
+--- src/version.c	2012-07-25 16:29:52.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     613,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+170. You introduce your wife as "my_lady at home.wife" and refer to your
+     children as "forked processes."
+
+ /// Bram Moolenaar -- Bram at 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.614 b/7.3.614
new file mode 100644
index 0000000..87d7a45
--- /dev/null
+++ b/7.3.614
@@ -0,0 +1,176 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.614
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.614
+Problem:    Number argument gets turned into a number while it should be a
+	    string.
+Solution:   Add flag to the call_vim_function() call. (Yasuhiro Matsumoto)
+Files:	    src/edit.c, src/eval.c, src/proto/eval.pro
+
+
+*** ../vim-7.3.613/src/edit.c	2012-07-10 17:14:50.000000000 +0200
+--- src/edit.c	2012-07-25 16:40:07.000000000 +0200
+***************
+*** 3959,3965 ****
+      curbuf_save = curbuf;
+  
+      /* Call a function, which returns a list or dict. */
+!     if (call_vim_function(funcname, 2, args, FALSE, &rettv) == OK)
+      {
+  	switch (rettv.v_type)
+  	{
+--- 3959,3965 ----
+      curbuf_save = curbuf;
+  
+      /* Call a function, which returns a list or dict. */
+!     if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
+      {
+  	switch (rettv.v_type)
+  	{
+*** ../vim-7.3.613/src/eval.c	2012-07-19 18:05:40.000000000 +0200
+--- src/eval.c	2012-07-25 16:42:41.000000000 +0200
+***************
+*** 1564,1574 ****
+   * Returns OK or FAIL.
+   */
+      int
+! call_vim_function(func, argc, argv, safe, rettv)
+      char_u      *func;
+      int		argc;
+      char_u      **argv;
+      int		safe;		/* use the sandbox */
+      typval_T	*rettv;
+  {
+      typval_T	*argvars;
+--- 1564,1575 ----
+   * Returns OK or FAIL.
+   */
+      int
+! call_vim_function(func, argc, argv, safe, str_arg_only, rettv)
+      char_u      *func;
+      int		argc;
+      char_u      **argv;
+      int		safe;		/* use the sandbox */
++     int		str_arg_only;	/* all arguments are strings */
+      typval_T	*rettv;
+  {
+      typval_T	*argvars;
+***************
+*** 1593,1600 ****
+  	    continue;
+  	}
+  
+! 	/* Recognize a number argument, the others must be strings. */
+! 	vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+  	if (len != 0 && len == (int)STRLEN(argv[i]))
+  	{
+  	    argvars[i].v_type = VAR_NUMBER;
+--- 1594,1604 ----
+  	    continue;
+  	}
+  
+! 	if (str_arg_only)
+! 	    len = 0;
+! 	else
+! 	    /* Recognize a number argument, the others must be strings. */
+! 	    vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+  	if (len != 0 && len == (int)STRLEN(argv[i]))
+  	{
+  	    argvars[i].v_type = VAR_NUMBER;
+***************
+*** 1646,1652 ****
+      typval_T	rettv;
+      char_u	*retval;
+  
+!     if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+  	return NULL;
+  
+      retval = vim_strsave(get_tv_string(&rettv));
+--- 1650,1657 ----
+      typval_T	rettv;
+      char_u	*retval;
+  
+!     /* All arguments are passed as strings, no conversion to number. */
+!     if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+  	return NULL;
+  
+      retval = vim_strsave(get_tv_string(&rettv));
+***************
+*** 1671,1677 ****
+      typval_T	rettv;
+      long	retval;
+  
+!     if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+  	return -1;
+  
+      retval = get_tv_number_chk(&rettv, NULL);
+--- 1676,1683 ----
+      typval_T	rettv;
+      long	retval;
+  
+!     /* All arguments are passed as strings, no conversion to number. */
+!     if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+  	return -1;
+  
+      retval = get_tv_number_chk(&rettv, NULL);
+***************
+*** 1694,1700 ****
+  {
+      typval_T	rettv;
+  
+!     if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+  	return NULL;
+  
+      if (rettv.v_type != VAR_LIST)
+--- 1700,1707 ----
+  {
+      typval_T	rettv;
+  
+!     /* All arguments are passed as strings, no conversion to number. */
+!     if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+  	return NULL;
+  
+      if (rettv.v_type != VAR_LIST)
+*** ../vim-7.3.613/src/proto/eval.pro	2012-07-16 17:31:48.000000000 +0200
+--- src/proto/eval.pro	2012-07-25 16:42:59.000000000 +0200
+***************
+*** 23,29 ****
+  list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+  int get_spellword __ARGS((list_T *list, char_u **pp));
+  typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
+! int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+  void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+  long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+  void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+--- 23,29 ----
+  list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+  int get_spellword __ARGS((list_T *list, char_u **pp));
+  typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
+! int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv));
+  void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+  long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+  void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+*** ../vim-7.3.613/src/version.c	2012-07-25 16:32:03.000000000 +0200
+--- src/version.c	2012-07-25 16:46:11.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     614,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+171. You invent another person and chat with yourself in empty chat rooms.
+
+ /// Bram Moolenaar -- Bram at 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.615 b/7.3.615
new file mode 100644
index 0000000..96f6885
--- /dev/null
+++ b/7.3.615
@@ -0,0 +1,107 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.615
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.615
+Problem:    Completion for a user command does not recognize backslash before
+	    a space.
+Solution:   Recognize escaped characters. (Yasuhiro Matsumoto)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.3.614/src/ex_docmd.c	2012-07-10 19:25:06.000000000 +0200
+--- src/ex_docmd.c	2012-07-25 17:10:16.000000000 +0200
+***************
+*** 3390,3401 ****
+  	return NULL;
+  
+      /* Find start of last argument (argument just before cursor): */
+!     p = buff + STRLEN(buff);
+!     while (p != arg && *p != ' ' && *p != TAB)
+! 	p--;
+!     if (*p == ' ' || *p == TAB)
+! 	p++;
+      xp->xp_pattern = p;
+  
+      if (ea.argt & XFILE)
+      {
+--- 3390,3412 ----
+  	return NULL;
+  
+      /* Find start of last argument (argument just before cursor): */
+!     p = buff;
+      xp->xp_pattern = p;
++     len = STRLEN(buff);
++     while (*p && p < buff + len)
++     {
++ 	if (*p == ' ' || *p == TAB)
++ 	{
++ 	    /* argument starts after a space */
++ 	    xp->xp_pattern = ++p;
++ 	}
++ 	else
++ 	{
++ 	    if (*p == '\\' && *(p + 1) != NUL)
++ 		++p; /* skip over escaped character */
++ 	    mb_ptr_adv(p);
++ 	}
++     }
+  
+      if (ea.argt & XFILE)
+      {
+***************
+*** 3821,3828 ****
+  		    if (compl == EXPAND_MAPPINGS)
+  			return set_context_in_map_cmd(xp, (char_u *)"map",
+  					 arg, forceit, FALSE, FALSE, CMD_map);
+! 		    while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
+! 			arg = xp->xp_pattern + 1;
+  		    xp->xp_pattern = arg;
+  		}
+  		xp->xp_context = compl;
+--- 3832,3853 ----
+  		    if (compl == EXPAND_MAPPINGS)
+  			return set_context_in_map_cmd(xp, (char_u *)"map",
+  					 arg, forceit, FALSE, FALSE, CMD_map);
+! 		    /* Find start of last argument. */
+! 		    p = arg;
+! 		    while (*p)
+! 		    {
+! 			if (*p == ' ')
+! 			{
+! 			    /* argument starts after a space */
+! 			    arg = p + 1;
+! 			}
+! 			else
+! 			{
+! 			    if (*p == '\\' && *(p + 1) != NUL)
+! 				++p; /* skip over escaped character */
+! 			    mb_ptr_adv(p);
+! 			}
+! 		    }
+  		    xp->xp_pattern = arg;
+  		}
+  		xp->xp_context = compl;
+*** ../vim-7.3.614/src/version.c	2012-07-25 16:46:59.000000000 +0200
+--- src/version.c	2012-07-25 17:17:05.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     615,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+172. You join listservers just for the extra e-mail.
+
+ /// Bram Moolenaar -- Bram at 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.616 b/7.3.616
new file mode 100644
index 0000000..5898eaf
--- /dev/null
+++ b/7.3.616
@@ -0,0 +1,46 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.616
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.616 (after 7.3.610)
+Problem:    Can't compile without +visual.
+Solution:   Add #ifdef.
+Files:	    src/normal.c
+
+
+*** ../vim-7.3.615/src/normal.c	2012-07-25 15:06:20.000000000 +0200
+--- src/normal.c	2012-07-27 20:52:01.000000000 +0200
+***************
+*** 8002,8008 ****
+--- 8002,8010 ----
+       */
+      case 'N':
+      case 'n':
++ #ifdef FEAT_VISUAL
+  	if (!current_search(cap->count1, cap->nchar == 'n'))
++ #endif
+  	    beep_flush();
+  
+  	break;
+*** ../vim-7.3.615/src/version.c	2012-07-25 17:22:17.000000000 +0200
+--- src/version.c	2012-07-27 20:52:58.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     616,
+  /**/
+
+-- 
+The CIA drives around in cars with the "Intel inside" logo.
+
+ /// Bram Moolenaar -- Bram at 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.617 b/7.3.617
new file mode 100644
index 0000000..48062cd
--- /dev/null
+++ b/7.3.617
@@ -0,0 +1,65 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.617
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.617 (after 7.3.615)
+Problem:    Hang on completion.
+Solution:   Skip over the space. (Yasuhiro Matsumoto)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.3.616/src/ex_docmd.c	2012-07-25 17:22:17.000000000 +0200
+--- src/ex_docmd.c	2012-07-27 21:07:42.000000000 +0200
+***************
+*** 3837,3852 ****
+  		    while (*p)
+  		    {
+  			if (*p == ' ')
+- 			{
+  			    /* argument starts after a space */
+  			    arg = p + 1;
+! 			}
+! 			else
+! 			{
+! 			    if (*p == '\\' && *(p + 1) != NUL)
+! 				++p; /* skip over escaped character */
+! 			    mb_ptr_adv(p);
+! 			}
+  		    }
+  		    xp->xp_pattern = arg;
+  		}
+--- 3837,3847 ----
+  		    while (*p)
+  		    {
+  			if (*p == ' ')
+  			    /* argument starts after a space */
+  			    arg = p + 1;
+! 			else if (*p == '\\' && *(p + 1) != NUL)
+! 			    ++p; /* skip over escaped character */
+! 			mb_ptr_adv(p);
+  		    }
+  		    xp->xp_pattern = arg;
+  		}
+*** ../vim-7.3.616/src/version.c	2012-07-27 21:05:51.000000000 +0200
+--- src/version.c	2012-07-27 21:08:31.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     617,
+  /**/
+
+-- 
+If Microsoft would build a car...
+... You'd have to press the "Start" button to turn the engine off.
+
+ /// Bram Moolenaar -- Bram at 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.618 b/7.3.618
new file mode 100644
index 0000000..d0cc9c6
--- /dev/null
+++ b/7.3.618
@@ -0,0 +1,367 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.618
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.618 (after 7.3.616)
+Problem:    Still doesn't compile with small features.
+Solution:   Move current_search() out of #ifdef. (Dominique Pelle)
+Files:	    src/normal.c, src/search.c
+
+
+*** ../vim-7.3.617/src/normal.c	2012-07-27 21:05:51.000000000 +0200
+--- src/normal.c	2012-07-28 13:34:13.000000000 +0200
+***************
+*** 7995,8000 ****
+--- 7995,8001 ----
+  	cap->arg = TRUE;
+  	nv_visual(cap);
+  	break;
++ #endif /* FEAT_VISUAL */
+  
+      /* "gn", "gN" visually select next/previous search match
+       * "gn" selects next match
+***************
+*** 8006,8014 ****
+  	if (!current_search(cap->count1, cap->nchar == 'n'))
+  #endif
+  	    beep_flush();
+- 
+  	break;
+- #endif /* FEAT_VISUAL */
+  
+      /*
+       * "gj" and "gk" two new funny movement keys -- up and down
+--- 8007,8013 ----
+*** ../vim-7.3.617/src/search.c	2012-07-25 15:06:20.000000000 +0200
+--- src/search.c	2012-07-28 13:37:19.000000000 +0200
+***************
+*** 3397,3547 ****
+      return OK;
+  }
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+- /*
+-  * Find next search match under cursor, cursor at end.
+-  * Used while an operator is pending, and in Visual mode.
+-  * TODO: redo only works when used in operator pending mode
+-  */
+-     int
+- current_search(count, forward)
+-     long	count;
+-     int		forward;	/* move forward or backwards */
+- {
+-     pos_T	start_pos;	/* position before the pattern */
+-     pos_T	orig_pos;	/* position of the cursor at beginning */
+-     pos_T	pos;		/* position after the pattern */
+-     int		i;
+-     int		dir;
+-     int		result;		/* result of various function calls */
+-     char_u	old_p_ws = p_ws;
+-     int		visual_active = FALSE;
+-     int		flags = 0;
+-     pos_T	save_VIsual;
+- 
+- 
+-     /* wrapping should not occur */
+-     p_ws = FALSE;
+- 
+-     /* Correct cursor when 'selection' is exclusive */
+-     if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
+- 	dec_cursor();
+- 
+-     if (VIsual_active)
+-     {
+- 	orig_pos = curwin->w_cursor;
+- 	save_VIsual = VIsual;
+- 	visual_active = TRUE;
+- 
+- 	/* just started visual selection, only one character */
+- 	if (equalpos(VIsual, curwin->w_cursor))
+- 	    visual_active = FALSE;
+- 
+- 	pos = curwin->w_cursor;
+- 	start_pos = VIsual;
+- 
+- 	/* make sure, searching further will extend the match */
+- 	if (VIsual_active)
+- 	{
+- 	    if (forward)
+- 		incl(&pos);
+- 	    else
+- 		decl(&pos);
+- 	}
+-     }
+-     else
+- 	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)
+- 	 * except when Visual mode is active, so that extending the visual
+- 	 * selection works. */
+- 	if (!result && i) /* not found, abort */
+- 	{
+- 	    curwin->w_cursor = orig_pos;
+- 	    if (VIsual_active)
+- 		VIsual = save_VIsual;
+- 	    p_ws = old_p_ws;
+- 	    return FAIL;
+- 	}
+- 	else if (!i && !result && !visual_active)
+- 	{
+- 	    if (forward) /* try again from start of buffer */
+- 	    {
+- 		clearpos(&pos);
+- 	    }
+- 	    else /* try again from end of buffer */
+- 	    {
+- 		/* searching backwards, so set pos to last line and col */
+- 		pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
+- 		pos.col  = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
+- 	    }
+- 	}
+- 
+-     }
+- 
+-     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)
+- 	VIsual = start_pos;
+- 
+-     p_ws = old_p_ws;
+-     curwin->w_cursor = pos;
+-     VIsual_active = TRUE;
+-     VIsual_mode = 'v';
+- 
+-     if (VIsual_active)
+-     {
+- 	redraw_curbuf_later(INVERTED);	/* update the inversion */
+- 	if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
+- 	    inc_cursor();
+-     }
+- 
+- #ifdef FEAT_FOLDING
+-     if (fdo_flags & FDO_SEARCH && KeyTyped)
+- 	foldOpenCursor();
+- #endif
+- 
+-     may_start_select('c');
+- #ifdef FEAT_MOUSE
+-     setmouse();
+- #endif
+- #ifdef FEAT_CLIPBOARD
+-     /* Make sure the clipboard gets updated.  Needed because start and
+-      * end are still the same, and the selection needs to be owned */
+-     clip_star.vmode = NUL;
+- #endif
+-     redraw_curbuf_later(INVERTED);
+-     showmode();
+- 
+-     return OK;
+- }
+- #endif /* FEAT_VISUAL */
+- 
+  /*
+   * Find sentence(s) under the cursor, cursor at end.
+   * When Visual active, extend it by one or more sentences.
+--- 3397,3402 ----
+***************
+*** 4670,4675 ****
+--- 4525,4675 ----
+  
+  #endif /* FEAT_TEXTOBJ */
+  
++ #if defined(FEAT_VISUAL) || defined(PROTO)
++ /*
++  * Find next search match under cursor, cursor at end.
++  * Used while an operator is pending, and in Visual mode.
++  * TODO: redo only works when used in operator pending mode
++  */
++     int
++ current_search(count, forward)
++     long	count;
++     int		forward;	/* move forward or backwards */
++ {
++     pos_T	start_pos;	/* position before the pattern */
++     pos_T	orig_pos;	/* position of the cursor at beginning */
++     pos_T	pos;		/* position after the pattern */
++     int		i;
++     int		dir;
++     int		result;		/* result of various function calls */
++     char_u	old_p_ws = p_ws;
++     int		visual_active = FALSE;
++     int		flags = 0;
++     pos_T	save_VIsual;
++ 
++ 
++     /* wrapping should not occur */
++     p_ws = FALSE;
++ 
++     /* Correct cursor when 'selection' is exclusive */
++     if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
++ 	dec_cursor();
++ 
++     if (VIsual_active)
++     {
++ 	orig_pos = curwin->w_cursor;
++ 	save_VIsual = VIsual;
++ 	visual_active = TRUE;
++ 
++ 	/* just started visual selection, only one character */
++ 	if (equalpos(VIsual, curwin->w_cursor))
++ 	    visual_active = FALSE;
++ 
++ 	pos = curwin->w_cursor;
++ 	start_pos = VIsual;
++ 
++ 	/* make sure, searching further will extend the match */
++ 	if (VIsual_active)
++ 	{
++ 	    if (forward)
++ 		incl(&pos);
++ 	    else
++ 		decl(&pos);
++ 	}
++     }
++     else
++ 	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)
++ 	 * except when Visual mode is active, so that extending the visual
++ 	 * selection works. */
++ 	if (!result && i) /* not found, abort */
++ 	{
++ 	    curwin->w_cursor = orig_pos;
++ 	    if (VIsual_active)
++ 		VIsual = save_VIsual;
++ 	    p_ws = old_p_ws;
++ 	    return FAIL;
++ 	}
++ 	else if (!i && !result && !visual_active)
++ 	{
++ 	    if (forward) /* try again from start of buffer */
++ 	    {
++ 		clearpos(&pos);
++ 	    }
++ 	    else /* try again from end of buffer */
++ 	    {
++ 		/* searching backwards, so set pos to last line and col */
++ 		pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
++ 		pos.col  = STRLEN(ml_get(curwin->w_buffer->b_ml.ml_line_count));
++ 	    }
++ 	}
++ 
++     }
++ 
++     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)
++ 	VIsual = start_pos;
++ 
++     p_ws = old_p_ws;
++     curwin->w_cursor = pos;
++     VIsual_active = TRUE;
++     VIsual_mode = 'v';
++ 
++     if (VIsual_active)
++     {
++ 	redraw_curbuf_later(INVERTED);	/* update the inversion */
++ 	if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
++ 	    inc_cursor();
++     }
++ 
++ #ifdef FEAT_FOLDING
++     if (fdo_flags & FDO_SEARCH && KeyTyped)
++ 	foldOpenCursor();
++ #endif
++ 
++     may_start_select('c');
++ #ifdef FEAT_MOUSE
++     setmouse();
++ #endif
++ #ifdef FEAT_CLIPBOARD
++     /* Make sure the clipboard gets updated.  Needed because start and
++      * end are still the same, and the selection needs to be owned */
++     clip_star.vmode = NUL;
++ #endif
++     redraw_curbuf_later(INVERTED);
++     showmode();
++ 
++     return OK;
++ }
++ #endif /* FEAT_VISUAL */
++ 
+  #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+  	|| defined(PROTO)
+  /*
+*** ../vim-7.3.617/src/version.c	2012-07-27 21:12:03.000000000 +0200
+--- src/version.c	2012-07-29 12:54:29.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+  {   /* Add new patch number below this line */
++ /**/
++     618,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+185. You order fast food over the Internet
+
+ /// Bram Moolenaar -- Bram at 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/vim.spec b/vim.spec
index deffbc3..567e971 100644
--- a/vim.spec
+++ b/vim.spec
@@ -25,7 +25,7 @@
 # curl -s ftp://ftp.vim.org/pub/editors/vim/patches/7.3/MD5SUMS | grep -vF .gz | tail -n1 | awk '{print $2}'
 
 %define		ver		7.3
-%define		patchlevel	600
+%define		patchlevel	618
 %define		rel		1
 Summary:	Vi IMproved - a Vi clone
 Summary(de.UTF-8):	VIsual editor iMproved


More information about the pld-cvs-commit mailing list