rpms/vim/F-7 7.1.013, NONE, 1.1 7.1.014, NONE, 1.1 7.1.015, NONE, 1.1 7.1.016, NONE, 1.1 7.1.017, NONE, 1.1 7.1.018, NONE, 1.1 7.1.019, NONE, 1.1 7.1.020, NONE, 1.1 7.1.021, NONE, 1.1 7.1.022, NONE, 1.1 7.1.023, NONE, 1.1 7.1.024, NONE, 1.1 7.1.025, NONE, 1.1 7.1.026, NONE, 1.1 7.1.027, NONE, 1.1 7.1.028, NONE, 1.1 7.1.029, NONE, 1.1 7.1.030, NONE, 1.1 7.1.031, NONE, 1.1 7.1.032, NONE, 1.1 7.1.033, NONE, 1.1 7.1.034, NONE, 1.1 7.1.035, NONE, 1.1 7.1.036, NONE, 1.1 7.1.037, NONE, 1.1 7.1.038, NONE, 1.1 7.1.039, NONE, 1.1 7.1.040, NONE, 1.1 7.1.041, NONE, 1.1 7.1.042, NONE, 1.1 7.1.043, NONE, 1.1 7.1.044, NONE, 1.1 7.1.045, NONE, 1.1 7.1.046, NONE, 1.1 7.1.047, NONE, 1.1 7.1.048, NONE, 1.1 7.1.049, NONE, 1.1 7.1.050, NONE, 1.1 7.1.051, NONE, 1.1 7.1.052, NONE, 1.1 7.1.053, NONE, 1.1 7.1.054, NONE, 1.1 7.1.055, NONE, 1.1 7.1.056, NONE, 1.1 7.1.057, NONE, 1.1 7.1.058, NONE, 1.1 7.1.059, NONE, 1.1 7.1.060, NONE, 1.1 7.1.061, NONE, 1.1 7.1.062, NONE, 1.1 7.1.063, NONE, 1.1 7.1.064, NONE, 1.1 7.1.065, NONE, 1.1 7.1.066, NONE, 1.1 7.1.067, NONE, 1.1 7.1.068, NONE, 1.1 7.1.069, NONE, 1.1 7.1.070, NONE, 1.1 7.1.071, NONE, 1.1 7.1.072, NONE, 1.1 7.1.073, NONE, 1.1 7.1.074, NONE, 1.1 7.1.075, NONE, 1.1 7.1.076, NONE, 1.1 7.1.077, NONE, 1.1 7.1.078, NONE, 1.1 7.1.079, NONE, 1.1 7.1.080, NONE, 1.1 7.1.081, NONE, 1.1 7.1.082, NONE, 1.1 7.1.083, NONE, 1.1 7.1.084, NONE, 1.1 7.1.085, NONE, 1.1 7.1.086, NONE, 1.1 7.1.087, NONE, 1.1 7.1.088, NONE, 1.1 7.1.089, NONE, 1.1 7.1.090, NONE, 1.1 7.1.091, NONE, 1.1 7.1.092, NONE, 1.1 7.1.093, NONE, 1.1 7.1.094, NONE, 1.1 7.1.095, NONE, 1.1 7.1.096, NONE, 1.1 7.1.097, NONE, 1.1 7.1.098, NONE, 1.1 7.1.099, NONE, 1.1 7.1.100, NONE, 1.1 7.1.101, NONE, 1.1 7.1.102, NONE, 1.1 7.1.103, NONE, 1.1 7.1.104, NONE, 1.1 7.1.105, NONE, 1.1 7.1.106, NONE, 1.1 7.1.107, NONE, 1.1 7.1.108, NONE, 1.1 7.1.109, NONE, 1.1 7.1.110, NONE, 1.1 7.1.111, NONE, 1.1 7.1.112, NONE, 1.1 7.1.113, NONE, 1.1 7.1.114, NONE, 1.1 7.1.115, NONE, 1.1 7.1.116, NONE, 1.1 7.1.117, NONE, 1.1 7.1.118, NONE, 1.1 7.1.119, NONE, 1.1 7.1.120, NONE, 1.1 7.1.121, NONE, 1.1 7.1.122, NONE, 1.1 7.1.123, NONE, 1.1 7.1.124, NONE, 1.1 7.1.125, NONE, 1.1 7.1.126, NONE, 1.1 7.1.127, NONE, 1.1 7.1.128, NONE, 1.1 7.1.129, NONE, 1.1 7.1.130, NONE, 1.1 7.1.131, NONE, 1.1 7.1.132, NONE, 1.1 7.1.133, NONE, 1.1 7.1.134, NONE, 1.1 7.1.135, NONE, 1.1 7.1.136, NONE, 1.1 7.1.137, NONE, 1.1 7.1.138, NONE, 1.1 7.1.139, NONE, 1.1 7.1.140, NONE, 1.1 7.1.141, NONE, 1.1 7.1.142, NONE, 1.1 7.1.143, NONE, 1.1 7.1.144, NONE, 1.1 7.1.145, NONE, 1.1 7.1.146, NONE, 1.1 7.1.147, NONE, 1.1 7.1.148, NONE, 1.1 7.1.149, NONE, 1.1 7.1.150, NONE, 1.1 7.1.151, NONE, 1.1 7.1.152, NONE, 1.1 7.1.153, NONE, 1.1 7.1.154, NONE, 1.1 7.1.155, NONE, 1.1 7.1.156, NONE, 1.1 7.1.157, NONE, 1.1 7.1.158, NONE, 1.1 7.1.159, NONE, 1.1 7.1.160, NONE, 1.1 7.1.161, NONE, 1.1 7.1.162, NONE, 1.1 7.1.163, NONE, 1.1 7.1.164, NONE, 1.1 7.1.165, NONE, 1.1 7.1.166, NONE, 1.1 7.1.167, NONE, 1.1 7.1.168, NONE, 1.1 7.1.169, NONE, 1.1 7.1.170, NONE, 1.1 7.1.171, NONE, 1.1 7.1.172, NONE, 1.1 7.1.173, NONE, 1.1 7.1.174, NONE, 1.1 7.1.175, NONE, 1.1 7.1.176, NONE, 1.1 7.1.177, NONE, 1.1 7.1.178, NONE, 1.1 7.1.179, NONE, 1.1 7.1.180, NONE, 1.1 7.1.181, NONE, 1.1 7.1.182, NONE, 1.1 7.1.183, NONE, 1.1 7.1.184, NONE, 1.1 7.1.185, NONE, 1.1 7.1.186, NONE, 1.1 7.1.187, NONE, 1.1 7.1.188, NONE, 1.1 7.1.189, NONE, 1.1 7.1.190, NONE, 1.1 7.1.191, NONE, 1.1 7.1.192, NONE, 1.1 7.1.193, NONE, 1.1 7.1.194, NONE, 1.1 7.1.195, NONE, 1.1 7.1.196, NONE, 1.1 7.1.197, NONE, 1.1 7.1.198, NONE, 1.1 7.1.199, NONE, 1.1 7.1.200, NONE, 1.1 7.1.201, NONE, 1.1 7.1.202, NONE, 1.1 7.1.203, NONE, 1.1 7.1.204, NONE, 1.1 7.1.205, NONE, 1.1 7.1.206, NONE, 1.1 7.1.207, NONE, 1.1 7.1.208, NONE, 1.1 7.1.209, NONE, 1.1 7.1.210, NONE, 1.1 7.1.211, NONE, 1.1 README.patches, 1.78, 1.79 gvim.desktop, 1.4, 1.5 vim.spec, 1.168, 1.169

Karsten Hopp (karsten) fedora-extras-commits at redhat.com
Wed Jan 9 13:14:40 UTC 2008


Author: karsten

Update of /cvs/extras/rpms/vim/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17578

Modified Files:
	README.patches gvim.desktop vim.spec 
Added Files:
	7.1.013 7.1.014 7.1.015 7.1.016 7.1.017 7.1.018 7.1.019 
	7.1.020 7.1.021 7.1.022 7.1.023 7.1.024 7.1.025 7.1.026 
	7.1.027 7.1.028 7.1.029 7.1.030 7.1.031 7.1.032 7.1.033 
	7.1.034 7.1.035 7.1.036 7.1.037 7.1.038 7.1.039 7.1.040 
	7.1.041 7.1.042 7.1.043 7.1.044 7.1.045 7.1.046 7.1.047 
	7.1.048 7.1.049 7.1.050 7.1.051 7.1.052 7.1.053 7.1.054 
	7.1.055 7.1.056 7.1.057 7.1.058 7.1.059 7.1.060 7.1.061 
	7.1.062 7.1.063 7.1.064 7.1.065 7.1.066 7.1.067 7.1.068 
	7.1.069 7.1.070 7.1.071 7.1.072 7.1.073 7.1.074 7.1.075 
	7.1.076 7.1.077 7.1.078 7.1.079 7.1.080 7.1.081 7.1.082 
	7.1.083 7.1.084 7.1.085 7.1.086 7.1.087 7.1.088 7.1.089 
	7.1.090 7.1.091 7.1.092 7.1.093 7.1.094 7.1.095 7.1.096 
	7.1.097 7.1.098 7.1.099 7.1.100 7.1.101 7.1.102 7.1.103 
	7.1.104 7.1.105 7.1.106 7.1.107 7.1.108 7.1.109 7.1.110 
	7.1.111 7.1.112 7.1.113 7.1.114 7.1.115 7.1.116 7.1.117 
	7.1.118 7.1.119 7.1.120 7.1.121 7.1.122 7.1.123 7.1.124 
	7.1.125 7.1.126 7.1.127 7.1.128 7.1.129 7.1.130 7.1.131 
	7.1.132 7.1.133 7.1.134 7.1.135 7.1.136 7.1.137 7.1.138 
	7.1.139 7.1.140 7.1.141 7.1.142 7.1.143 7.1.144 7.1.145 
	7.1.146 7.1.147 7.1.148 7.1.149 7.1.150 7.1.151 7.1.152 
	7.1.153 7.1.154 7.1.155 7.1.156 7.1.157 7.1.158 7.1.159 
	7.1.160 7.1.161 7.1.162 7.1.163 7.1.164 7.1.165 7.1.166 
	7.1.167 7.1.168 7.1.169 7.1.170 7.1.171 7.1.172 7.1.173 
	7.1.174 7.1.175 7.1.176 7.1.177 7.1.178 7.1.179 7.1.180 
	7.1.181 7.1.182 7.1.183 7.1.184 7.1.185 7.1.186 7.1.187 
	7.1.188 7.1.189 7.1.190 7.1.191 7.1.192 7.1.193 7.1.194 
	7.1.195 7.1.196 7.1.197 7.1.198 7.1.199 7.1.200 7.1.201 
	7.1.202 7.1.203 7.1.204 7.1.205 7.1.206 7.1.207 7.1.208 
	7.1.209 7.1.210 7.1.211 
Log Message:
build patchlevel 211 for FC-7


--- NEW FILE 7.1.013 ---
To: vim-dev at vim.org
Subject: patch 7.1.013
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.013
Problem:    ":syn include" only loads the first file, while it is documented
	    as doing the equivalent of ":runtime!".
Solution:   Change the argument to source_runtime(). (James Vega)
Files:	    src/syntax.c


*** ../vim-7.1.012/src/syntax.c	Thu May 10 20:54:33 2007
--- src/syntax.c	Sun Jun 17 22:03:30 2007
***************
*** 4460,4467 ****
      current_syn_inc_tag = ++running_syn_inc_tag;
      prev_toplvl_grp = curbuf->b_syn_topgrp;
      curbuf->b_syn_topgrp = sgl_id;
!     if (source ? do_source(eap->arg, FALSE, FALSE) == FAIL
! 				: source_runtime(eap->arg, DOSO_NONE) == FAIL)
  	EMSG2(_(e_notopen), eap->arg);
      curbuf->b_syn_topgrp = prev_toplvl_grp;
      current_syn_inc_tag = prev_syn_inc_tag;
--- 4460,4467 ----
      current_syn_inc_tag = ++running_syn_inc_tag;
      prev_toplvl_grp = curbuf->b_syn_topgrp;
      curbuf->b_syn_topgrp = sgl_id;
!     if (source ? do_source(eap->arg, FALSE, DOSO_NONE) == FAIL
! 				: source_runtime(eap->arg, TRUE) == FAIL)
  	EMSG2(_(e_notopen), eap->arg);
      curbuf->b_syn_topgrp = prev_toplvl_grp;
      current_syn_inc_tag = prev_syn_inc_tag;
*** ../vim-7.1.012/src/version.c	Tue Jun 19 20:56:52 2007
--- src/version.c	Thu Jun 28 11:58:25 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     13,
  /**/

-- 
MORTICIAN:    What?
CUSTOMER:     Nothing -- here's your nine pence.
DEAD PERSON:  I'm not dead!
MORTICIAN:    Here -- he says he's not dead!
CUSTOMER:     Yes, he is.
DEAD PERSON:  I'm not!
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.014 ---
To: vim-dev at vim.org
Subject: patch 7.1.014
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.014
Problem:    Crash when doing C indenting. (Chris Monson)
Solution:   Obtain the current line again after invoking cin_islabel().
Files:	    src/edit.c


*** ../vim-7.1.013/src/edit.c	Thu May 10 20:44:18 2007
--- src/edit.c	Wed Jun 20 18:25:54 2007
***************
*** 7215,7220 ****
--- 7215,7222 ----
  		p = ml_get_curline();
  		if (cin_iscase(p) || cin_isscopedecl(p) || cin_islabel(30))
  		    return TRUE;
+ 		/* Need to get the line again after cin_islabel(). */
+ 		p = ml_get_curline();
  		if (curwin->w_cursor.col > 2
  			&& p[curwin->w_cursor.col - 1] == ':'
  			&& p[curwin->w_cursor.col - 2] == ':')
*** ../vim-7.1.013/src/version.c	Thu Jun 28 11:59:13 2007
--- src/version.c	Thu Jun 28 12:26:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     14,
  /**/

-- 
Have you heard about the new Barbie doll?  It's called Divorce
Barbie.  It comes with all of Ken's stuff.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.015 ---
To: vim-dev at vim.org
Subject: patch 7.1.015
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.015
Problem:    MzScheme interface: current-library-collection-paths produces no
	    list.  Interface doesn't build on a Mac.
Solution:   Use a list instead of a pair. (Bernhard Fisseni)  Use "-framework"
	    argument for MZSCHEME_LIBS in configure.
Files:	    src/configure.in, src/if_mzsch.c, src/auto/configure


*** ../vim-7.1.014/src/configure.in	Sat May 12 16:30:49 2007
--- src/configure.in	Sun Jun 10 16:47:43 2007
***************
*** 423,429 ****
    fi
  
    if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
!     if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
        MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
      else
        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
--- 423,431 ----
    fi
  
    if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
!     if test "x$MACOSX" = "xyes"; then
!       MZSCHEME_LIBS="-framework PLT_MzScheme"
!     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
        MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
      else
        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
*** ../vim-7.1.014/src/if_mzsch.c	Sat May 12 17:29:20 2007
--- src/if_mzsch.c	Sun Jun 10 16:39:51 2007
***************
*** 773,780 ****
  #ifdef MZSCHEME_COLLECTS
      /* setup 'current-library-collection-paths' parameter */
      scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS,
! 	    scheme_make_pair(scheme_make_string(MZSCHEME_COLLECTS),
! 		scheme_null));
  #endif
  #ifdef HAVE_SANDBOX
      /* setup sandbox guards */
--- 773,779 ----
  #ifdef MZSCHEME_COLLECTS
      /* setup 'current-library-collection-paths' parameter */
      scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS,
! 	    scheme_build_list(0, scheme_make_string(MZSCHEME_COLLECTS)));
  #endif
  #ifdef HAVE_SANDBOX
      /* setup sandbox guards */
*** ../vim-7.1.014/src/auto/configure	Sat May 12 16:23:27 2007
--- src/auto/configure	Sun Jun 10 16:49:58 2007
***************
*** 3843,3849 ****
    fi
  
    if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
!     if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
        MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
      else
        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
--- 3843,3851 ----
    fi
  
    if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
!     if test "x$MACOSX" = "xyes"; then
!       MZSCHEME_LIBS="-framework PLT_MzScheme"
!     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
        MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
      else
        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
*** ../vim-7.1.014/src/version.c	Thu Jun 28 12:44:56 2007
--- src/version.c	Thu Jun 28 13:00:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     15,
  /**/

-- 
You know you use Vim too much when you have this alias in your
~/.bashrc file: alias :e=/bin/vim             (Eljay Love-Jensen)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.016 ---
To: vim-dev at vim.org
Subject: patch 7.1.016
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.016 (after patch 7.1.012)
Problem:    Error message about setting 'diff' to a string.
Solution:   Don't pass an empty string to set_option_value() when setting
	    'diff'.
Files:	    src/quickfix.c, src/popupmnu.c


*** ../vim-7.1.015/src/quickfix.c	Sun Feb  4 02:58:00 2007
--- src/quickfix.c	Thu Jun 28 18:56:16 2007
***************
*** 2331,2337 ****
  	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
  								   OPT_LOCAL);
  	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
! 	    set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL);
  	}
  
  	/* Only set the height when still in the same tab page and there is no
--- 2331,2337 ----
  	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
  								   OPT_LOCAL);
  	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
! 	    set_option_value((char_u *)"diff", 0L, NULL, OPT_LOCAL);
  	}
  
  	/* Only set the height when still in the same tab page and there is no
*** ../vim-7.1.015/src/popupmnu.c	Tue Mar 27 12:42:05 2007
--- src/popupmnu.c	Thu Jun 28 19:00:51 2007
***************
*** 466,472 ****
  			set_option_value((char_u *)"bh", 0L,
  						 (char_u *)"wipe", OPT_LOCAL);
  			set_option_value((char_u *)"diff", 0L,
! 						     (char_u *)"", OPT_LOCAL);
  		    }
  		}
  		if (res == OK)
--- 466,472 ----
  			set_option_value((char_u *)"bh", 0L,
  						 (char_u *)"wipe", OPT_LOCAL);
  			set_option_value((char_u *)"diff", 0L,
! 							     NULL, OPT_LOCAL);
  		    }
  		}
  		if (res == OK)
*** ../vim-7.1.015/src/version.c	Thu Jun 28 13:02:22 2007
--- src/version.c	Thu Jun 28 21:20:20 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     16,
  /**/

-- 
We do not stumble over mountains, but over molehills.
				Confucius

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.017 ---
To: vim-dev at vim.org
Subject: patch 7.1.017
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.017
Problem:    ":confirm w" does give a prompt when 'readonly' is set, but not
	    when the file permissions are read-only.  (Michael Schaap)
Solution:   Provide a dialog in both situations.  (Chris Lubinski)
Files:	    src/ex_cmds.c, src/fileio.c, src/proto/fileio.pro


*** ../vim-7.1.016/src/ex_cmds.c	Tue Jun 19 11:54:23 2007
--- src/ex_cmds.c	Tue Jun 19 22:37:25 2007
***************
*** 2912,2933 ****
  }
  
  /*
!  * Check if a buffer is read-only.  Ask for overruling in a dialog.
!  * Return TRUE and give an error message when the buffer is readonly.
   */
      static int
  check_readonly(forceit, buf)
      int		*forceit;
      buf_T	*buf;
  {
!     if (!*forceit && buf->b_p_ro)
      {
  #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
  	if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
  	{
  	    char_u	buff[IOSIZE];
  
! 	    dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
  		    buf->b_fname);
  
  	    if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES)
--- 2912,2946 ----
  }
  
  /*
!  * Check if a buffer is read-only (either 'readonly' option is set or file is
!  * read-only). Ask for overruling in a dialog. Return TRUE and give an error
!  * message when the buffer is readonly.
   */
      static int
  check_readonly(forceit, buf)
      int		*forceit;
      buf_T	*buf;
  {
!     struct stat	st;
! 
!     /* Handle a file being readonly when the 'readonly' option is set or when
!      * the file exists and permissions are read-only.
!      * We will send 0777 to check_file_readonly(), as the "perm" variable is
!      * important for device checks but not here. */
!     if (!*forceit && (buf->b_p_ro
! 		|| (mch_stat((char *)buf->b_ffname, &st) >= 0
! 		    && check_file_readonly(buf->b_ffname, 0777))))
      {
  #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
  	if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
  	{
  	    char_u	buff[IOSIZE];
  
! 	    if (buf->b_p_ro)
! 		dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
! 		    buf->b_fname);
! 	    else
! 		dialog_msg(buff, _("File permissions of \"%s\" are read-only.\nIt may still be possible to write it.\nDo you wish to try?"),
  		    buf->b_fname);
  
  	    if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES)
***************
*** 2941,2949 ****
--- 2954,2967 ----
  	}
  	else
  #endif
+ 	if (buf->b_p_ro)
  	    EMSG(_(e_readonly));
+ 	else
+ 	    EMSG2(_("E505: \"%s\" is read-only (add ! to override)"),
+ 		    buf->b_fname);
  	return TRUE;
      }
+ 
      return FALSE;
  }
  
*** ../vim-7.1.016/src/fileio.c	Thu May 10 19:32:17 2007
--- src/fileio.c	Thu Jun 28 21:54:18 2007
***************
*** 424,430 ****
  	 */
  	if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE)
  	{
! 	    filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option"), 0);
  	    msg_end();
  	    msg_scroll = msg_save;
  	    return FAIL;
--- 424,430 ----
  	 */
  	if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE)
  	{
! 	    filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option)"), 0);
  	    msg_end();
  	    msg_scroll = msg_save;
  	    return FAIL;
***************
*** 2734,2739 ****
--- 2734,2765 ----
  #endif
  
  /*
+  * Return TRUE if a file appears to be read-only from the file permissions.
+  */
+     int
+ check_file_readonly(fname, perm)
+     char_u	*fname;		/* full path to file */
+     int		perm;		/* known permissions on file */
+ {
+ #ifndef USE_MCH_ACCESS
+     int	    fd = 0;
+ #endif
+ 
+     return (
+ #ifdef USE_MCH_ACCESS
+ # ifdef UNIX
+ 	(perm & 0222) == 0 ||
+ # endif
+ 	mch_access((char *)fname, W_OK)
+ #else
+ 	(fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0
+ 					? TRUE : (close(fd), FALSE)
+ #endif
+ 	);
+ }
+ 
+ 
+ /*
   * buf_write() - write to file "fname" lines "start" through "end"
   *
   * We do our own buffering here because fwrite() is so slow.
***************
*** 3219,3235 ****
  	 * Check if the file is really writable (when renaming the file to
  	 * make a backup we won't discover it later).
  	 */
! 	file_readonly = (
! # ifdef USE_MCH_ACCESS
! #  ifdef UNIX
! 		    (perm & 0222) == 0 ||
! #  endif
! 		    mch_access((char *)fname, W_OK)
! # else
! 		    (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0
! 						   ? TRUE : (close(fd), FALSE)
! # endif
! 		    );
  	if (!forceit && file_readonly)
  	{
  	    if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
--- 3245,3252 ----
  	 * Check if the file is really writable (when renaming the file to
  	 * make a backup we won't discover it later).
  	 */
! 	file_readonly = check_file_readonly(fname, (int)perm);
! 
  	if (!forceit && file_readonly)
  	{
  	    if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
*** ../vim-7.1.016/src/proto/fileio.pro	Sat May  5 19:59:00 2007
--- src/proto/fileio.pro	Thu Jun 28 21:09:59 2007
***************
*** 2,7 ****
--- 2,8 ----
  void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
  int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags));
  int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
+ int check_file_readonly __ARGS((char_u *fname, int perm));
  int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
  void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
  void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
*** ../vim-7.1.016/src/version.c	Thu Jun 28 21:23:52 2007
--- src/version.c	Thu Jun 28 21:49:29 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     17,
  /**/

-- 
CUSTOMER:     Well, can you hang around a couple of minutes?  He won't be
              long.
MORTICIAN:    Naaah, I got to go on to Robinson's -- they've lost nine today.
CUSTOMER:     Well, when is your next round?
MORTICIAN:    Thursday.
DEAD PERSON:  I think I'll go for a walk.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.018 ---
To: vim-dev at vim.org
Subject: patch 7.1.018
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.018
Problem:    When 'virtualedit' is set a "p" of a block just past the end of
	    the line inserts before the cursor. (Engelke)
Solution:   Check for the cursor being just after the line (Chris Lubinski)
Files:	    src/ops.c


*** ../vim-7.1.017/src/ops.c	Thu May 10 20:34:55 2007
--- src/ops.c	Tue Jun 19 22:40:45 2007
***************
*** 3404,3410 ****
  
  #ifdef FEAT_VIRTUALEDIT
  	col += curwin->w_cursor.coladd;
! 	if (ve_flags == VE_ALL && curwin->w_cursor.coladd > 0)
  	{
  	    if (dir == FORWARD && c == NUL)
  		++col;
--- 3404,3412 ----
  
  #ifdef FEAT_VIRTUALEDIT
  	col += curwin->w_cursor.coladd;
! 	if (ve_flags == VE_ALL
! 		&& (curwin->w_cursor.coladd > 0
! 		    || endcol2 == curwin->w_cursor.col))
  	{
  	    if (dir == FORWARD && c == NUL)
  		++col;
*** ../vim-7.1.017/src/version.c	Thu Jun 28 21:57:08 2007
--- src/version.c	Thu Jun 28 22:12:49 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     18,
  /**/

-- 
    [clop clop]
MORTICIAN:  Who's that then?
CUSTOMER:   I don't know.
MORTICIAN:  Must be a king.
CUSTOMER:   Why?
MORTICIAN:  He hasn't got shit all over him.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.019 ---
To: vim-dev at vim.org
Subject: patch 7.1.019
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.019
Problem:    ":py" asks for an argument, ":py asd" then gives the error that
	    ":py" isn't implemented.  Should already happen for ":py".
Solution:   Compare with ex_script_ni. (Chris Lubinski)
Files:	    src/ex_docmd.c


*** ../vim-7.1.018/src/ex_docmd.c	Thu May 10 18:53:03 2007
--- src/ex_docmd.c	Sat Jun 23 13:36:37 2007
***************
*** 2118,2124 ****
  #ifdef FEAT_USR_CMDS
  	    !USER_CMDIDX(ea.cmdidx) &&
  #endif
! 	    cmdnames[ea.cmdidx].cmd_func == ex_ni);
  
  #ifndef FEAT_EVAL
      /*
--- 2118,2125 ----
  #ifdef FEAT_USR_CMDS
  	    !USER_CMDIDX(ea.cmdidx) &&
  #endif
! 	    (cmdnames[ea.cmdidx].cmd_func == ex_ni
! 	     || cmdnames[ea.cmdidx].cmd_func == ex_script_ni));
  
  #ifndef FEAT_EVAL
      /*
*** ../vim-7.1.018/src/version.c	Thu Jun 28 22:14:28 2007
--- src/version.c	Thu Jul  5 09:48:11 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     19,
  /**/

-- 
MARTHA'S WAY: Don't throw out all that leftover wine. Freeze into ice cubes
              for future use in casseroles and sauces.
MY WAY:       What leftover wine?

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.020 ---
To: vim-dev at vim.org
Subject: patch 7.1.020
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.020
Problem:    Reading from uninitialized memory when using a dialog. (Dominique
	    Pelle)
Solution:   In msg_show_console_dialog() append a NUL after every appended
	    character.
Files:	    src/message.c


*** ../vim-7.1.019/src/message.c	Thu May 10 18:49:39 2007
--- src/message.c	Sun Jul  1 12:06:52 2007
***************
*** 3456,3466 ****
  		    /* advance to next hotkey and set default hotkey */
  #ifdef FEAT_MBYTE
  		    if (has_mbyte)
! 			hotkp += (*mb_ptr2len)(hotkp);
  		    else
  #endif
  			++hotkp;
! 		    (void)copy_char(r + 1, hotkp, TRUE);
  		    if (dfltbutton)
  			--dfltbutton;
  
--- 3456,3466 ----
  		    /* advance to next hotkey and set default hotkey */
  #ifdef FEAT_MBYTE
  		    if (has_mbyte)
! 			hotkp += STRLEN(hotkp);
  		    else
  #endif
  			++hotkp;
! 		    hotkp[copy_char(r + 1, hotkp, TRUE)] = NUL;
  		    if (dfltbutton)
  			--dfltbutton;
  
***************
*** 3493,3499 ****
  			*msgp++ = (dfltbutton == 1) ? ']' : ')';
  
  			/* redefine hotkey */
! 			(void)copy_char(r, hotkp, TRUE);
  		    }
  		}
  		else
--- 3493,3499 ----
  			*msgp++ = (dfltbutton == 1) ? ']' : ')';
  
  			/* redefine hotkey */
! 			hotkp[copy_char(r, hotkp, TRUE)] = NUL;
  		    }
  		}
  		else
***************
*** 3519,3526 ****
  	    *msgp++ = ':';
  	    *msgp++ = ' ';
  	    *msgp = NUL;
- 	    mb_ptr_adv(hotkp);
- 	    *hotkp = NUL;
  	}
  	else
  	{
--- 3519,3524 ----
***************
*** 3555,3562 ****
  	    msgp = confirm_msg + 1 + STRLEN(message);
  	    hotkp = hotk;
  
! 	    /* define first default hotkey */
! 	    (void)copy_char(buttons, hotkp, TRUE);
  
  	    /* Remember where the choices start, displaying starts here when
  	     * "hotkp" typed at the more prompt. */
--- 3553,3561 ----
  	    msgp = confirm_msg + 1 + STRLEN(message);
  	    hotkp = hotk;
  
! 	    /* Define first default hotkey.  Keep the hotkey string NUL
! 	     * terminated to avoid reading past the end. */
! 	    hotkp[copy_char(buttons, hotkp, TRUE)] = NUL;
  
  	    /* Remember where the choices start, displaying starts here when
  	     * "hotkp" typed at the more prompt. */
*** ../vim-7.1.019/src/version.c	Thu Jul  5 09:53:20 2007
--- src/version.c	Thu Jul  5 10:09:34 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     20,
  /**/

-- 
BLACK KNIGHT:  Come on you pansy!
    [hah] [parry thrust]
    [ARTHUR chops the BLACK KNIGHT's right arm off]
ARTHUR:        Victory is mine!  [kneeling]
               We thank thee Lord, that in thy merc-
    [Black Knight kicks Arthur in the head while he is praying]
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.021 ---
To: vim-dev at vim.org
Subject: patch 7.1.021
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.021 (after 7.1.015)
Problem:    Mzscheme interface doesn't compile on Win32.
Solution:   Fix the problem that 7.1.015 fixed in a better way. (Sergey Khorev)
Files:	    src/if_mzsch.c


*** ../vim-7.1.020/src/if_mzsch.c	Thu Jun 28 13:02:22 2007
--- src/if_mzsch.c	Sun Jul  1 18:44:49 2007
***************
*** 308,313 ****
--- 308,315 ----
  static Scheme_Config *(*dll_scheme_current_config)(void);
  static Scheme_Object *(*dll_scheme_char_string_to_byte_string)
      (Scheme_Object *s);
+ static Scheme_Object *(*dll_scheme_char_string_to_path)
+     (Scheme_Object *s);
  # endif
  
  /* arrays are imported directly */
***************
*** 398,403 ****
--- 400,407 ----
  #  define scheme_current_config dll_scheme_current_config
  #  define scheme_char_string_to_byte_string \
      dll_scheme_char_string_to_byte_string
+ #  define scheme_char_string_to_path \
+     dll_scheme_char_string_to_path
  # endif
  
  typedef struct
***************
*** 498,503 ****
--- 502,509 ----
      {"scheme_current_config", (void **)&dll_scheme_current_config},
      {"scheme_char_string_to_byte_string",
  	(void **)&dll_scheme_char_string_to_byte_string},
+     {"scheme_char_string_to_path",
+ 	(void **)&dll_scheme_char_string_to_path},
  # endif
      {NULL, NULL}};
  
***************
*** 773,779 ****
  #ifdef MZSCHEME_COLLECTS
      /* setup 'current-library-collection-paths' parameter */
      scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS,
! 	    scheme_build_list(0, scheme_make_string(MZSCHEME_COLLECTS)));
  #endif
  #ifdef HAVE_SANDBOX
      /* setup sandbox guards */
--- 779,793 ----
  #ifdef MZSCHEME_COLLECTS
      /* setup 'current-library-collection-paths' parameter */
      scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS,
! 	    scheme_make_pair(
! # if MZSCHEME_VERSION_MAJOR >= 299
! 		scheme_char_string_to_path(
! 		    scheme_byte_string_to_char_string(
! 			scheme_make_byte_string(MZSCHEME_COLLECTS))),
! # else
! 		scheme_make_string(MZSCHEME_COLLECTS),
! # endif
! 		scheme_null));
  #endif
  #ifdef HAVE_SANDBOX
      /* setup sandbox guards */
*** ../vim-7.1.020/src/version.c	Thu Jul  5 10:10:29 2007
--- src/version.c	Fri Jul  6 19:41:04 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     21,
  /**/

-- 
Advice to worms:  Sleep late.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.022 ---
To: vim-dev at vim.org
Subject: patch 7.1.022
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.022
Problem:    When setting 'keymap' twice the b:keymap_name variable isn't set.
            (Milan Berta)
Solution:   Don't unlet b:keymap_name for ":loadkeymap". (Martin Toft)
Files:      src/digraph.c


*** ../vim-7.1.021/src/digraph.c	Wed May  3 00:07:11 2006
--- src/digraph.c	Mon Jul  2 21:24:30 2007
***************
*** 2349,2356 ****
  
      if (*curbuf->b_p_keymap == NUL)
      {
! 	/* Stop any active keymap and clear the table. */
  	keymap_unload();
      }
      else
      {
--- 2349,2358 ----
  
      if (*curbuf->b_p_keymap == NUL)
      {
! 	/* Stop any active keymap and clear the table.  Also remove
! 	 * b:keymap_unload, as no keymap is active now. */
  	keymap_unload();
+ 	do_cmdline_cmd((char_u *)"unlet! b:keymap_name");
      }
      else
      {
***************
*** 2500,2506 ****
  
      ga_clear(&curbuf->b_kmap_ga);
      curbuf->b_kmap_state &= ~KEYMAP_LOADED;
-     do_cmdline_cmd((char_u *)"unlet! b:keymap_name");
  #ifdef FEAT_WINDOWS
      status_redraw_curbuf();
  #endif
--- 2502,2507 ----
*** ../vim-7.1.021/src/version.c	Fri Jul  6 19:42:09 2007
--- src/version.c	Sat Jul  7 13:56:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     22,
  /**/

-- 
If your life is a hard drive,
Christ can be your backup.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.023 ---
To: vim-dev at vim.org
Subject: patch 7.1.023
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.023
Problem:    "dw" in a line with one character deletes the line.  Vi and nvi
	    don't do this.  (Kjell Arne Rekaa)
Solution:   Check for one-character words especially.
Files:	    src/search.c


*** ../vim-7.1.022/src/search.c	Tue Jun 19 12:58:55 2007
--- src/search.c	Thu Jul  5 21:18:55 2007
***************
*** 2795,2801 ****
  	i = inc_cursor();
  	if (i == -1 || (i >= 1 && last_line)) /* started at last char in file */
  	    return FAIL;
! 	if (i == 1 && eol && count == 0)      /* started at last char in line */
  	    return OK;
  
  	/*
--- 2802,2808 ----
  	i = inc_cursor();
  	if (i == -1 || (i >= 1 && last_line)) /* started at last char in file */
  	    return FAIL;
! 	if (i >= 1 && eol && count == 0)      /* started at last char in line */
  	    return OK;
  
  	/*
*** ../vim-7.1.022/src/version.c	Sat Jul  7 13:57:39 2007
--- src/version.c	Tue Jul 10 12:35:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     23,
  /**/

-- 
BRIDGEKEEPER: What is your favorite editor?
GAWAIN:       Emacs ...  No, Viiiiiiiiiiimmmmmmm!
           "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.024 ---
To: vim-dev at vim.org
Subject: patch 7.1.024
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.024
Problem:    Using a pointer that has become invalid. (Chris Monson)
Solution:   Obtain the line pointer again after we looked at another line.
Files:	    src/search.c


*** ../vim-7.1.023/src/search.c	Tue Jul 10 12:36:51 2007
--- src/search.c	Thu Jul  5 21:18:55 2007
***************
*** 2124,2129 ****
--- 2128,2136 ----
  			else if (!backwards)
  			    inquote = TRUE;
  		    }
+ 
+ 		    /* ml_get() only keeps one line, need to get linep again */
+ 		    linep = ml_get(pos.lnum);
  		}
  	    }
  	}
*** ../vim-7.1.023/src/version.c	Tue Jul 10 12:36:51 2007
--- src/version.c	Tue Jul 10 13:06:02 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     24,
  /**/

-- 
Q: Why does /dev/null accept only integers?
A: You can't sink a float.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.025 ---
To: vim-dev at vim.org
Subject: patch 7.1.025
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.025
Problem:    search() and searchpos() don't use match under cursor at start of
	    line when using 'bc' flags. (Viktor Kojouharov)
Solution:   Don't go to the previous line when the 'c' flag is present.
	    Also fix that "j" doesn't move the cursor to the right column.
Files:	    src/eval.c, src/search.c


*** ../vim-7.1.024/src/eval.c	Tue Jun 19 17:23:46 2007
--- src/eval.c	Thu Jul  5 21:16:31 2007
***************
*** 13925,13930 ****
--- 13925,13932 ----
      /* If 'n' flag is used: restore cursor position. */
      if (flags & SP_NOMOVE)
  	curwin->w_cursor = save_cursor;
+     else
+ 	curwin->w_set_curswant = TRUE;
  theend:
      p_ws = save_p_ws;
  
*** ../vim-7.1.024/src/search.c	Tue Jul 10 13:07:08 2007
--- src/search.c	Thu Jul  5 21:18:55 2007
***************
*** 573,580 ****
  	/*
  	 * Start searching in current line, unless searching backwards and
  	 * we're in column 0.
  	 */
! 	if (dir == BACKWARD && start_pos.col == 0)
  	{
  	    lnum = pos->lnum - 1;
  	    at_first_line = FALSE;
--- 573,584 ----
  	/*
  	 * Start searching in current line, unless searching backwards and
  	 * we're in column 0.
+ 	 * If we are searching backwards, in column 0, and not including the
+ 	 * current position, gain some efficiency by skipping back a line.
+ 	 * Otherwise begin the search in the current line.
  	 */
! 	if (dir == BACKWARD && start_pos.col == 0
! 					     && (options & SEARCH_START) == 0)
  	{
  	    lnum = pos->lnum - 1;
  	    at_first_line = FALSE;
*** ../vim-7.1.024/src/version.c	Tue Jul 10 13:07:08 2007
--- src/version.c	Tue Jul 10 13:26:13 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     25,
  /**/

-- 
SIGFUN -- signature too funny (core dumped)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.026 ---
To: vim-dev at vim.org
Subject: patch 7.1.026
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.026
Problem:    "[p" doesn't work in Visual mode. (David Brown)
Solution:   Use checkclearop() instead of checkclearopq().
Files:	    src/normal.c


*** ../vim-7.1.025/src/normal.c	Thu May 10 18:45:26 2007
--- src/normal.c	Wed Jul  4 21:16:36 2007
***************
*** 6379,6385 ****
       */
      else if (cap->nchar == 'p' || cap->nchar == 'P')
      {
! 	if (!checkclearopq(cap->oap))
  	{
  	    prep_redo_cmd(cap);
  	    do_put(cap->oap->regname,
--- 6379,6385 ----
       */
      else if (cap->nchar == 'p' || cap->nchar == 'P')
      {
! 	if (!checkclearop(cap->oap))
  	{
  	    prep_redo_cmd(cap);
  	    do_put(cap->oap->regname,
*** ../vim-7.1.025/src/version.c	Tue Jul 10 13:27:46 2007
--- src/version.c	Tue Jul 10 14:01:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     26,
  /**/

-- 
BRIDGEKEEPER: What is the air-speed velocity of an unladen swallow?
ARTHUR:       What do you mean?  An African or European swallow?
BRIDGEKEEPER: Er ...  I don't know that ... Aaaaarrrrrrggghhh!
   BRIDGEKEEPER is cast into the gorge.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.027 ---
To: vim-dev at vim.org
Subject: patch 7.1.027
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.027
Problem:    On Sun systems opening /dev/fd/N doesn't work, and they are used
	    by process substitutions.
Solution:   Allow opening specific character special files for Sun systems.
	    (Gary Johnson)
Files:	    src/fileio.c, src/os_unix.h


*** ../vim-7.1.026/src/fileio.c	Thu Jun 28 21:57:08 2007
--- src/fileio.c	Mon Jul  9 11:19:50 2007
***************
*** 44,49 ****
--- 44,53 ----
  /* Is there any system that doesn't have access()? */
  #define USE_MCH_ACCESS
  
+ #if defined(sun) && defined(S_ISCHR)
+ # define OPEN_CHR_FILES
+ static int is_dev_fd_file(char_u *fname);
+ #endif
  #ifdef FEAT_MBYTE
  static char_u *next_fenc __ARGS((char_u **pp));
  # ifdef FEAT_EVAL
***************
*** 406,411 ****
--- 410,419 ----
  # ifdef S_ISSOCK
  		      && !S_ISSOCK(perm)	    /* ... or socket */
  # endif
+ # ifdef OPEN_CHR_FILES
+ 		      && !(S_ISCHR(perm) && is_dev_fd_file(fname))
+ 			/* ... or a character special file named /dev/fd/<n> */
+ # endif
  						)
  	{
  	    if (S_ISDIR(perm))
***************
*** 2265,2270 ****
--- 2273,2285 ----
  	    }
  #  endif
  # endif
+ # ifdef OPEN_CHR_FILES
+ 	    if (S_ISCHR(perm))			    /* or character special */
+ 	    {
+ 		STRCAT(IObuff, _("[character special]"));
+ 		c = TRUE;
+ 	    }
+ # endif
  #endif
  	    if (curbuf->b_p_ro)
  	    {
***************
*** 2463,2468 ****
--- 2478,2502 ----
  	return FAIL;
      return OK;
  }
+ 
+ #ifdef OPEN_CHR_FILES
+ /*
+  * Returns TRUE if the file name argument is of the form "/dev/fd/\d\+",
+  * which is the name of files used for process substitution output by
+  * some shells on some operating systems, e.g., bash on SunOS.
+  * Do not accept "/dev/fd/[012]", opening these may hang Vim.
+  */
+     static int
+ is_dev_fd_file(fname)
+     char_u	*fname;
+ {
+     return (STRNCMP(fname, "/dev/fd/", 8) == 0
+ 	    && VIM_ISDIGIT(fname[8])
+ 	    && *skipdigits(fname + 9) == NUL
+ 	    && (fname[9] != NUL
+ 		|| (fname[8] != '0' && fname[8] != '1' && fname[8] != '2')));
+ }
+ #endif
  
  #ifdef FEAT_MBYTE
  
*** ../vim-7.1.026/src/os_unix.h	Thu May 10 19:43:10 2007
--- src/os_unix.h	Sat Jul  7 13:08:56 2007
***************
*** 508,513 ****
--- 508,516 ----
  #if !defined(S_ISFIFO) && defined(S_IFIFO)
  # define	S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
  #endif
+ #if !defined(S_ISCHR) && defined(S_IFCHR)
+ # define	S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+ #endif
  
  /* Note: Some systems need both string.h and strings.h (Savage).  However,
   * some systems can't handle both, only use string.h in that case. */
*** ../vim-7.1.026/src/version.c	Tue Jul 10 14:02:51 2007
--- src/version.c	Tue Jul 10 17:00:43 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     27,
  /**/

-- 
Every exit is an entrance into something else.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.028 ---
To: vim-dev at vim.org
Subject: patch 7.1.028
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.028
Problem:    Can't use last search pattern for ":sort". (Brian McKee)
Solution:   When the pattern is emtpy use the last search pattern. (Martin
	    Toft)
Files:	    runtime/doc/change.txt, src/ex_cmds.c


*** ../vim-7.1.027/runtime/doc/change.txt	Sat May 12 16:10:12 2007
--- runtime/doc/change.txt	Tue Jul 10 11:30:56 2007
***************
*** 1571,1576 ****
--- 1571,1580 ----
  			in their original order, right before the sorted
  			lines.
  
+ 			If {pattern} is empty (e.g. // is specified), the
+ 			last search pattern is used.  This allows trying out
+ 			a pattern first.
+ 
  Note that using ":sort" with ":global" doesn't sort the matching lines, it's
  quite useless.
  
*** ../vim-7.1.027/src/ex_cmds.c	Thu Jun 28 21:57:08 2007
--- src/ex_cmds.c	Tue Jul 10 17:25:10 2007
***************
*** 408,414 ****
  		goto sortend;
  	    }
  	    *s = NUL;
! 	    regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
  	    if (regmatch.regprog == NULL)
  		goto sortend;
  	    p = s;		/* continue after the regexp */
--- 408,418 ----
  		goto sortend;
  	    }
  	    *s = NUL;
! 	    /* Use last search pattern if sort pattern is empty. */
! 	    if (s == p + 1 && last_search_pat() != NULL)
! 		regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
! 	    else
! 		regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
  	    if (regmatch.regprog == NULL)
  		goto sortend;
  	    p = s;		/* continue after the regexp */
*** ../vim-7.1.027/src/version.c	Tue Jul 10 17:09:51 2007
--- src/version.c	Tue Jul 10 17:20:01 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     28,
  /**/

-- 
Every person is responsible for the choices he makes.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.029 ---
To: vim-dev at vim.org
Subject: patch 7.1.029
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.029 (after 7.1.019)
Problem:    Can't compile when all interfaces are used. (Taylor Venable)
Solution:   Only check for ex_script_ni when it's defined.
Files:	    src/ex_docmd.c


*** ../vim-7.1.028/src/ex_docmd.c	Thu Jul  5 09:53:20 2007
--- src/ex_docmd.c	Sun Jul 15 17:20:09 2007
***************
*** 133,138 ****
--- 133,139 ----
  static void	get_flags __ARGS((exarg_T *eap));
  #if !defined(FEAT_PERL) || !defined(FEAT_PYTHON) || !defined(FEAT_TCL) \
  	|| !defined(FEAT_RUBY) || !defined(FEAT_MZSCHEME)
+ # define HAVE_EX_SCRIPT_NI
  static void	ex_script_ni __ARGS((exarg_T *eap));
  #endif
  static char_u	*invalid_range __ARGS((exarg_T *eap));
***************
*** 2119,2125 ****
  	    !USER_CMDIDX(ea.cmdidx) &&
  #endif
  	    (cmdnames[ea.cmdidx].cmd_func == ex_ni
! 	     || cmdnames[ea.cmdidx].cmd_func == ex_script_ni));
  
  #ifndef FEAT_EVAL
      /*
--- 2120,2129 ----
  	    !USER_CMDIDX(ea.cmdidx) &&
  #endif
  	    (cmdnames[ea.cmdidx].cmd_func == ex_ni
! #ifdef HAVE_EX_SCRIPT_NI
! 	     || cmdnames[ea.cmdidx].cmd_func == ex_script_ni
! #endif
! 	     ));
  
  #ifndef FEAT_EVAL
      /*
***************
*** 3998,4005 ****
  	eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version");
  }
  
! #if !defined(FEAT_PERL) || !defined(FEAT_PYTHON) || !defined(FEAT_TCL) \
! 	|| !defined(FEAT_RUBY) || !defined(FEAT_MZSCHEME)
  /*
   * Function called for script command which is Not Implemented.  NI!
   * Skips over ":perl <<EOF" constructs.
--- 3999,4005 ----
  	eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version");
  }
  
! #ifdef HAVE_EX_SCRIPT_NI
  /*
   * Function called for script command which is Not Implemented.  NI!
   * Skips over ":perl <<EOF" constructs.
*** ../vim-7.1.028/src/version.c	Tue Jul 10 17:25:20 2007
--- src/version.c	Mon Jul 16 20:37:48 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     29,
  /**/

-- 
I used to wonder about the meaning of life.  But I looked it
up in the dictionary under "L" and there it was - the meaning
of life.  It was less than I expected.              - Dogbert

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.030 ---
To: vim-dev at vim.org
Subject: patch 7.1.030
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.030
Problem:    The "vimtutor" shell script checks for "vim6" but not for "vim7".
	    (Christian Robinson)
Solution:   Check for more versions, but prefer using "vim".
Files:	    src/vimtutor


*** ../vim-7.1.029/src/vimtutor	Sun Jun 13 20:37:33 2004
--- src/vimtutor	Sun Jul  8 17:16:29 2007
***************
*** 39,56 ****
  # remove the copy of the tutor on exit
  trap "rm -rf $TODELETE" 0 1 2 3 9 11 13 15
  
! # Vim could be called "vim" or "vi".  Also check for "vim6", for people who
! # have Vim 5.x installed as "vim" and Vim 6.0 as "vim6".
! testvim=`which vim6 2>/dev/null`
! if test -f "$testvim"; then
! 	VIM=vim6
! else
! 	testvim=`which vim`
  	if test -f "$testvim"; then
! 		VIM=vim
! 	else
! 		VIM=vi
  	fi
  fi
  
  # Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
--- 39,60 ----
  # remove the copy of the tutor on exit
  trap "rm -rf $TODELETE" 0 1 2 3 9 11 13 15
  
! # Vim could be called "vim" or "vi".  Also check for "vimN", for people who
! # have Vim installed with its version number.
! # We anticipate up to a future Vim 8 version :-).
! seq="vim vim8 vim75 vim74 vim73 vim72 vim71 vim70 vim7 vim6 vi"
! for i in $seq; do
! 	testvim=`which $i 2>/dev/null`
  	if test -f "$testvim"; then
! 		VIM=$i
! 		break
  	fi
+ done
+ 
+ # When no Vim version was found fall back to "vim", you'll get an error message
+ # below.
+ if test -z "$VIM"; then
+ 	VIM=vim
  fi
  
  # Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
*** ../vim-7.1.029/src/version.c	Mon Jul 16 20:38:56 2007
--- src/version.c	Tue Jul 17 14:30:51 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     30,
  /**/

-- 
BLACK KNIGHT: I'm invincible!
ARTHUR:       You're a looney.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.031 ---
To: vim-dev at vim.org
Subject: patch 7.1.031
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.031
Problem:    virtcol([123, '$']) doesn't work. (Michael Schaap)
Solution:   When '$' is used for the column number get the last column.
Files:	    runtime/doc/eval.txt, src/eval.c


*** ../vim-7.1.030/runtime/doc/eval.txt	Tue Jun 19 17:23:46 2007
--- runtime/doc/eval.txt	Wed Jul 11 21:21:28 2007
***************
*** 1,4 ****
! *eval.txt*      For Vim version 7.1.  Last change: 2007 Jun 09
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *eval.txt*      For Vim version 7.1.  Last change: 2007 Jul 11
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 2020,2025 ****
--- 2020,2029 ----
  			    number of characters in the cursor line plus one)
  		    'x	    position of mark x (if the mark is not set, 0 is
  			    returned)
+ 		Additionally {expr} can be [lnum, col]: a |List| with the line
+ 		and column number. Most useful when the column is "$", to get
+ 		the las column of a specific line.  When "lnum" or "col" is
+ 		out of range then col() returns zero.
  		To get the line number use |line()|.  To get both use
  		|getpos()|.
  		For the screen column position use |virtcol()|.
***************
*** 5024,5037 ****
  		position, the returned Number will be the column at the end of
  		the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
  		set to 8, it returns 8.
! 		For the use of {expr} see |col()|.  Additionally you can use
! 		[lnum, col]: a |List| with the line and column number.  When
! 		"lnum" or "col" is out of range then virtcol() returns zero.
! 		When 'virtualedit' is used it can be [lnum, col, off], where
  		"off" is the offset in screen columns from the start of the
  		character.  E.g., a position within a <Tab> or after the last
  		character.
- 		For the byte position use |col()|.
  		When Virtual editing is active in the current mode, a position
  		beyond the end of the line can be returned. |'virtualedit'|
  		The accepted positions are:
--- 5029,5040 ----
  		position, the returned Number will be the column at the end of
  		the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
  		set to 8, it returns 8.
! 		For the byte position use |col()|.
! 		For the use of {expr} see |col()|.
! 		When 'virtualedit' is used {expr} can be [lnum, col, off], where
  		"off" is the offset in screen columns from the start of the
  		character.  E.g., a position within a <Tab> or after the last
  		character.
  		When Virtual editing is active in the current mode, a position
  		beyond the end of the line can be returned. |'virtualedit'|
  		The accepted positions are:
*** ../vim-7.1.030/src/eval.c	Tue Jul 10 13:27:46 2007
--- src/eval.c	Wed Jul 11 19:50:27 2007
***************
*** 672,678 ****
  static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
  
  static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
! static pos_T *var2fpos __ARGS((typval_T *varp, int lnum, int *fnum));
  static int get_env_len __ARGS((char_u **arg));
  static int get_id_len __ARGS((char_u **arg));
  static int get_name_len __ARGS((char_u **arg, char_u **alias, int evaluate, int verbose));
--- 672,678 ----
  static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
  
  static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
! static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
  static int get_env_len __ARGS((char_u **arg));
  static int get_id_len __ARGS((char_u **arg));
  static int get_name_len __ARGS((char_u **arg, char_u **alias, int evaluate, int verbose));
***************
*** 16505,16513 ****
   * Returns NULL when there is an error.
   */
      static pos_T *
! var2fpos(varp, lnum, fnum)
      typval_T	*varp;
!     int		lnum;		/* TRUE when $ is last line */
      int		*fnum;		/* set to fnum for '0, 'A, etc. */
  {
      char_u		*name;
--- 16508,16516 ----
   * Returns NULL when there is an error.
   */
      static pos_T *
! var2fpos(varp, dollar_lnum, fnum)
      typval_T	*varp;
!     int		dollar_lnum;	/* TRUE when $ is last line */
      int		*fnum;		/* set to fnum for '0, 'A, etc. */
  {
      char_u		*name;
***************
*** 16520,16525 ****
--- 16523,16529 ----
  	list_T		*l;
  	int		len;
  	int		error = FALSE;
+ 	listitem_T	*li;
  
  	l = varp->vval.v_list;
  	if (l == NULL)
***************
*** 16535,16540 ****
--- 16539,16552 ----
  	if (error)
  	    return NULL;
  	len = (long)STRLEN(ml_get(pos.lnum));
+ 
+ 	/* We accept "$" for the column number: last column. */
+ 	li = list_find(l, 1L);
+ 	if (li != NULL && li->li_tv.v_type == VAR_STRING
+ 		&& li->li_tv.vval.v_string != NULL
+ 		&& STRCMP(li->li_tv.vval.v_string, "$") == 0)
+ 	    pos.col = len + 1;
+ 
  	/* Accept a position up to the NUL after the line. */
  	if (pos.col == 0 || (int)pos.col > len + 1)
  	    return NULL;	/* invalid column number */
***************
*** 16567,16573 ****
      pos.coladd = 0;
  #endif
  
!     if (name[0] == 'w' && lnum)
      {
  	pos.col = 0;
  	if (name[1] == '0')		/* "w0": first visible line */
--- 16579,16585 ----
      pos.coladd = 0;
  #endif
  
!     if (name[0] == 'w' && dollar_lnum)
      {
  	pos.col = 0;
  	if (name[1] == '0')		/* "w0": first visible line */
***************
*** 16585,16591 ****
      }
      else if (name[0] == '$')		/* last column or line */
      {
! 	if (lnum)
  	{
  	    pos.lnum = curbuf->b_ml.ml_line_count;
  	    pos.col = 0;
--- 16597,16603 ----
      }
      else if (name[0] == '$')		/* last column or line */
      {
! 	if (dollar_lnum)
  	{
  	    pos.lnum = curbuf->b_ml.ml_line_count;
  	    pos.col = 0;
*** ../vim-7.1.030/src/version.c	Tue Jul 17 14:32:07 2007
--- src/version.c	Tue Jul 17 16:24:54 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     31,
  /**/

-- 
CRONE:  Who sent you?
ARTHUR: The Knights Who Say GNU!
CRONE:  Aaaagh!  (she looks around in rear) No!  We have no licenses here.
           "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.032 ---
To: vim-dev at vim.org
Subject: patch 7.1.032
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.032
Problem:    Potential crash when editing a command line. (Chris Monson)
Solution:   Check the position to avoid access before the start of an array.
Files:	    src/ex_getln.c


*** ../vim-7.1.031/src/ex_getln.c	Thu May 10 20:22:29 2007
--- src/ex_getln.c	Tue Jul 17 18:05:49 2007
***************
*** 484,490 ****
  	if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu)
  	{
  	    /* Hitting <Down> after "emenu Name.": complete submenu */
! 	    if (ccline.cmdbuff[ccline.cmdpos - 1] == '.' && c == K_DOWN)
  		c = p_wc;
  	    else if (c == K_UP)
  	    {
--- 486,493 ----
  	if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu)
  	{
  	    /* Hitting <Down> after "emenu Name.": complete submenu */
! 	    if (c == K_DOWN && ccline.cmdpos > 0
! 				  && ccline.cmdbuff[ccline.cmdpos - 1] == '.')
  		c = p_wc;
  	    else if (c == K_UP)
  	    {
***************
*** 533,541 ****
  	    upseg[3] = PATHSEP;
  	    upseg[4] = NUL;
  
! 	    if (ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP
! 		    && c == K_DOWN
! 		    && (ccline.cmdbuff[ccline.cmdpos - 2] != '.'
  			|| ccline.cmdbuff[ccline.cmdpos - 3] != '.'))
  	    {
  		/* go down a directory */
--- 536,546 ----
  	    upseg[3] = PATHSEP;
  	    upseg[4] = NUL;
  
! 	    if (c == K_DOWN
! 		    && ccline.cmdpos > 0
! 		    && ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP
! 		    && (ccline.cmdpos < 3
! 			|| ccline.cmdbuff[ccline.cmdpos - 2] != '.'
  			|| ccline.cmdbuff[ccline.cmdpos - 3] != '.'))
  	    {
  		/* go down a directory */
***************
*** 730,737 ****
  	    /* In Ex mode a backslash escapes a newline. */
  	    if (exmode_active
  		    && c != ESC
- 		    && ccline.cmdpos > 0
  		    && ccline.cmdpos == ccline.cmdlen
  		    && ccline.cmdbuff[ccline.cmdpos - 1] == '\\')
  	    {
  		if (c == K_KENTER)
--- 735,742 ----
  	    /* In Ex mode a backslash escapes a newline. */
  	    if (exmode_active
  		    && c != ESC
  		    && ccline.cmdpos == ccline.cmdlen
+ 		    && ccline.cmdpos > 0
  		    && ccline.cmdbuff[ccline.cmdpos - 1] == '\\')
  	    {
  		if (c == K_KENTER)
*** ../vim-7.1.031/src/version.c	Tue Jul 17 16:31:15 2007
--- src/version.c	Tue Jul 17 18:10:37 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     32,
  /**/

-- 
ALL:   A witch!  A witch!
WITCH: It's a fair cop.
ALL:   Burn her!  Burn her!  Let's make her into a ladder.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.033 ---
To: vim-dev at vim.org
Subject: patch 7.1.033
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.033
Problem:    A buffer is marked modified when it was first deleted and then
	    added again using a ":next" command. (John Mullin)
Solution:   When checking if a buffer is modified use the BF_NEVERLOADED flag.
Files:	    src/option.c


*** ../vim-7.1.032/src/option.c	Tue Jun 19 20:56:52 2007
--- src/option.c	Sun Jul 22 16:42:47 2007
***************
*** 10624,10629 ****
--- 10624,10632 ----
  file_ff_differs(buf)
      buf_T	*buf;
  {
+     /* In a buffer that was never loaded the options are not valid. */
+     if (buf->b_flags & BF_NEVERLOADED)
+ 	return FALSE;
      if ((buf->b_flags & BF_NEW)
  	    && buf->b_ml.ml_line_count == 1
  	    && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
*** ../vim-7.1.032/src/version.c	Tue Jul 17 18:14:14 2007
--- src/version.c	Mon Jul 23 09:45:44 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     33,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
8. Don't use any punctuation marks.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.034 ---
To: vim-dev at vim.org
Subject: patch 7.1.034
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.034
Problem:    Win64: A few compiler warnings.  Problems with optimizer.
Solution:   Use int instead of size_t.  Disable the optimizer in one function.
	    (George V.  Reilly)
Files:	    src/eval.c, src/spell.c


*** ../vim-7.1.033/src/eval.c	Tue Jul 17 16:31:15 2007
--- src/eval.c	Wed Jul 11 19:50:27 2007
***************
*** 992,1011 ****
      char_u	*value;
      int		value_len;
  {
!     size_t	len;
  
      if (redir_lval == NULL)
  	return;
  
      if (value_len == -1)
! 	len = STRLEN(value);	/* Append the entire string */
      else
! 	len = value_len;	/* Append only "value_len" characters */
  
!     if (ga_grow(&redir_ga, (int)len) == OK)
      {
  	mch_memmove((char *)redir_ga.ga_data + redir_ga.ga_len, value, len);
! 	redir_ga.ga_len += (int)len;
      }
      else
  	var_redir_stop();
--- 992,1011 ----
      char_u	*value;
      int		value_len;
  {
!     int		len;
  
      if (redir_lval == NULL)
  	return;
  
      if (value_len == -1)
! 	len = (int)STRLEN(value);	/* Append the entire string */
      else
! 	len = value_len;		/* Append only "value_len" characters */
  
!     if (ga_grow(&redir_ga, len) == OK)
      {
  	mch_memmove((char *)redir_ga.ga_data + redir_ga.ga_len, value, len);
! 	redir_ga.ga_len += len;
      }
      else
  	var_redir_stop();
*** ../vim-7.1.033/src/spell.c	Thu May 10 18:45:53 2007
--- src/spell.c	Sat Jul 14 17:17:52 2007
***************
*** 7829,7835 ****
  # if (_MSC_VER <= 1200)
  /* This line is required for VC6 without the service pack.  Also see the
   * matching #pragma below. */
! /* # pragma optimize("", off) */
  # endif
  #endif
  
--- 7829,7835 ----
  # if (_MSC_VER <= 1200)
  /* This line is required for VC6 without the service pack.  Also see the
   * matching #pragma below. */
!  #  pragma optimize("", off)
  # endif
  #endif
  
***************
*** 7859,7865 ****
  
  #ifdef _MSC_VER
  # if (_MSC_VER <= 1200)
! /* # pragma optimize("", on) */
  # endif
  #endif
  
--- 7859,7865 ----
  
  #ifdef _MSC_VER
  # if (_MSC_VER <= 1200)
!  #  pragma optimize("", on)
  # endif
  #endif
  
*** ../vim-7.1.033/src/version.c	Tue Jul 24 09:50:22 2007
--- src/version.c	Tue Jul 24 09:47:17 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     34,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
17. When the money comes out the ATM, scream "I won!, I won! 3rd
    time this week!!!!!"

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.035 ---
To: vim-dev at vim.org
Subject: patch 7.1.035
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.035
Problem:    After ":s/./&/#" all listed lines have a line number. (Yakov
	    Lerner)
Solution:   Reset the line number flag when not using the "&" flag.
Files:	    src/ex_cmds.c


*** ../vim-7.1.034/src/ex_cmds.c	Tue Jul 10 17:25:20 2007
--- src/ex_cmds.c	Sat Jul 14 14:39:38 2007
***************
*** 4316,4321 ****
--- 4316,4322 ----
  	do_error = TRUE;
  	do_print = FALSE;
  	do_count = FALSE;
+ 	do_number = FALSE;
  	do_ic = 0;
      }
      while (*cmd)
*** ../vim-7.1.034/src/version.c	Tue Jul 24 10:44:10 2007
--- src/version.c	Tue Jul 24 11:15:09 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     35,
  /**/

-- 
The startling truth finally became apparent, and it was this: Numbers
written on restaurant checks within the confines of restaurants do not follow
the same mathematical laws as numbers written on any other pieces of paper in
any other parts of the Universe.  This single statement took the scientific
world by storm.  So many mathematical conferences got held in such good
restaurants that many of the finest minds of a generation died of obesity and
heart failure, and the science of mathematics was put back by years.
		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.036 ---
To: vim-dev at vim.org
Subject: patch 7.1.036
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.036
Problem:    Completing ":echohl" argument should include "None". (Ori
	    Avtalion)  ":match" should have "none" too.
Solution:   Add flags to use expand_highlight().  Also fix that when disabling
	    FEAT_CMDL_COMPL compilation fails.  (Chris Lubinski)
Files:	    src/eval.c, src/ex_docmd.c, src/ex_getln.c, src/proto/syntax.pro
	    src/syntax.c


*** ../vim-7.1.035/src/eval.c	Tue Jul 24 10:44:10 2007
--- src/eval.c	Wed Jul 11 19:50:27 2007
***************
*** 1411,1417 ****
  }
  
  
! #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  /*
   * Call some vimL function and return the result in "*rettv".
   * Uses argv[argc] for the function arguments.
--- 1411,1418 ----
  }
  
  
! #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
! 	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
  /*
   * Call some vimL function and return the result in "*rettv".
   * Uses argv[argc] for the function arguments.
***************
*** 1484,1489 ****
--- 1485,1491 ----
      return ret;
  }
  
+ # if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  /*
   * Call vimL function "func" and return the result as a string.
   * Returns NULL when calling the function fails.
***************
*** 1506,1513 ****
      clear_tv(&rettv);
      return retval;
  }
  
! #if defined(FEAT_COMPL_FUNC) || defined(PROTO)
  /*
   * Call vimL function "func" and return the result as a number.
   * Returns -1 when calling the function fails.
--- 1508,1516 ----
      clear_tv(&rettv);
      return retval;
  }
+ # endif
  
! # if defined(FEAT_COMPL_FUNC) || defined(PROTO)
  /*
   * Call vimL function "func" and return the result as a number.
   * Returns -1 when calling the function fails.
***************
*** 1530,1536 ****
      clear_tv(&rettv);
      return retval;
  }
! #endif
  
  /*
   * Call vimL function "func" and return the result as a list
--- 1533,1539 ----
      clear_tv(&rettv);
      return retval;
  }
! # endif
  
  /*
   * Call vimL function "func" and return the result as a list
***************
*** 1556,1563 ****
  
      return rettv.vval.v_list;
  }
- 
  #endif
  
  /*
   * Save the current function call pointer, and set it to NULL.
--- 1559,1566 ----
  
      return rettv.vval.v_list;
  }
  #endif
+ 
  
  /*
   * Save the current function call pointer, and set it to NULL.
*** ../vim-7.1.035/src/ex_docmd.c	Mon Jul 16 20:38:56 2007
--- src/ex_docmd.c	Sun Jul 15 17:20:09 2007
***************
*** 3406,3419 ****
  	case CMD_windo:
  	    return arg;
  
! #ifdef FEAT_SEARCH_EXTRA
  	case CMD_match:
  	    if (*arg == NUL || !ends_excmd(*arg))
  	    {
! 		/* Dummy call to clear variables. */
! 		set_context_in_highlight_cmd(xp, (char_u *)"link n");
! 		xp->xp_context = EXPAND_HIGHLIGHT;
! 		xp->xp_pattern = arg;
  		arg = skipwhite(skiptowhite(arg));
  		if (*arg != NUL)
  		{
--- 3406,3418 ----
  	case CMD_windo:
  	    return arg;
  
! #ifdef FEAT_CMDL_COMPL
! # ifdef FEAT_SEARCH_EXTRA
  	case CMD_match:
  	    if (*arg == NUL || !ends_excmd(*arg))
  	    {
! 		/* also complete "None" */
! 		set_context_in_echohl_cmd(xp, arg);
  		arg = skipwhite(skiptowhite(arg));
  		if (*arg != NUL)
  		{
***************
*** 3422,3430 ****
  		}
  	    }
  	    return find_nextcmd(arg);
! #endif
  
- #ifdef FEAT_CMDL_COMPL
  /*
   * All completion for the +cmdline_compl feature goes here.
   */
--- 3421,3428 ----
  		}
  	    }
  	    return find_nextcmd(arg);
! # endif
  
  /*
   * All completion for the +cmdline_compl feature goes here.
   */
***************
*** 3622,3629 ****
  	    break;
  
  	case CMD_echohl:
! 	    xp->xp_context = EXPAND_HIGHLIGHT;
! 	    xp->xp_pattern = arg;
  	    break;
  #endif
  	case CMD_highlight:
--- 3620,3626 ----
  	    break;
  
  	case CMD_echohl:
! 	    set_context_in_echohl_cmd(xp, arg);
  	    break;
  #endif
  	case CMD_highlight:
*** ../vim-7.1.035/src/ex_getln.c	Tue Jul 17 18:14:14 2007
--- src/ex_getln.c	Tue Jul 17 18:05:49 2007
***************
*** 268,274 ****
--- 268,276 ----
      {
  	xpc.xp_context = ccline.xp_context;
  	xpc.xp_pattern = ccline.cmdbuff;
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
  	xpc.xp_arg = ccline.xp_arg;
+ # endif
      }
  #endif
  
***************
*** 4151,4163 ****
--- 4153,4171 ----
  
  #ifdef FEAT_EVAL
      if (ccline.cmdfirstc == '=')
+     {
+ # ifdef FEAT_CMDL_COMPL
  	/* pass CMD_SIZE because there is no real command */
  	set_context_for_expression(xp, str, CMD_SIZE);
+ # endif
+     }
      else if (ccline.input_fn)
      {
  	xp->xp_context = ccline.xp_context;
  	xp->xp_pattern = ccline.cmdbuff;
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
  	xp->xp_arg = ccline.xp_arg;
+ # endif
      }
      else
  #endif
***************
*** 4504,4509 ****
--- 4512,4523 ----
      /* Sort the results.  Keep menu's in the specified order. */
      if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
  	sort_strings(*file, *num_file);
+ 
+ #ifdef FEAT_CMDL_COMPL
+     /* Reset the variables used for special highlight names expansion, so that
+      * they don't show up when getting normal highlight names by ID. */
+     reset_expand_highlight();
+ #endif
  
      return OK;
  }
*** ../vim-7.1.035/src/proto/syntax.pro	Sat May  5 19:23:52 2007
--- src/proto/syntax.pro	Fri Jul 13 19:51:43 2007
***************
*** 8,13 ****
--- 8,15 ----
  void syntax_clear __ARGS((buf_T *buf));
  void ex_syntax __ARGS((exarg_T *eap));
  int syntax_present __ARGS((buf_T *buf));
+ void reset_expand_highlight __ARGS((void));
+ void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg));
  void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
  char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
  int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
*** ../vim-7.1.035/src/syntax.c	Thu Jun 28 11:59:13 2007
--- src/syntax.c	Fri Jul 13 19:51:39 2007
***************
*** 66,73 ****
  #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
  
  #ifdef FEAT_CMDL_COMPL
! static int include_default = FALSE;	/* include "default" for expansion */
! static int include_link = FALSE;	/* include "link" for expansion */
  #endif
  
  /*
--- 66,75 ----
  #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
  
  #ifdef FEAT_CMDL_COMPL
! /* Flags to indicate an additional string for highlight name completion. */
! static int include_none = 0;	/* when 1 include "None" */
! static int include_default = 0;	/* when 1 include "default" */
! static int include_link = 0;	/* when 2 include "link" and "clear" */
  #endif
  
  /*
***************
*** 5968,5973 ****
--- 5970,5998 ----
      EXP_CASE	    /* expand ":syn case" arguments */
  } expand_what;
  
+ /*
+  * Reset include_link, include_default, include_none to 0.
+  * Called when we are done expanding.
+  */
+     void
+ reset_expand_highlight()
+ {
+     include_link = include_default = include_none = 0;
+ }
+ 
+ /*
+  * Handle command line completion for :match and :echohl command: Add "None"
+  * as highlight group.
+  */
+     void
+ set_context_in_echohl_cmd(xp, arg)
+     expand_T	*xp;
+     char_u	*arg;
+ {
+     xp->xp_context = EXPAND_HIGHLIGHT;
+     xp->xp_pattern = arg;
+     include_none = 1;
+ }
  
  /*
   * Handle command line completion for :syntax command.
***************
*** 5983,5990 ****
      xp->xp_context = EXPAND_SYNTAX;
      expand_what = EXP_SUBCMD;
      xp->xp_pattern = arg;
!     include_link = FALSE;
!     include_default = FALSE;
  
      /* (part of) subcommand already typed */
      if (*arg != NUL)
--- 6008,6015 ----
      xp->xp_context = EXPAND_SYNTAX;
      expand_what = EXP_SUBCMD;
      xp->xp_pattern = arg;
!     include_link = 0;
!     include_default = 0;
  
      /* (part of) subcommand already typed */
      if (*arg != NUL)
***************
*** 8949,8955 ****
      return OK;
  }
  
! #ifdef FEAT_CMDL_COMPL
  
  static void highlight_list __ARGS((void));
  static void highlight_list_two __ARGS((int cnt, int attr));
--- 8974,8980 ----
      return OK;
  }
  
! #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
  
  static void highlight_list __ARGS((void));
  static void highlight_list_two __ARGS((int cnt, int attr));
***************
*** 8967,8974 ****
      /* Default: expand group names */
      xp->xp_context = EXPAND_HIGHLIGHT;
      xp->xp_pattern = arg;
!     include_link = TRUE;
!     include_default = TRUE;
  
      /* (part of) subcommand already typed */
      if (*arg != NUL)
--- 8992,8999 ----
      /* Default: expand group names */
      xp->xp_context = EXPAND_HIGHLIGHT;
      xp->xp_pattern = arg;
!     include_link = 2;
!     include_default = 1;
  
      /* (part of) subcommand already typed */
      if (*arg != NUL)
***************
*** 8976,8982 ****
  	p = skiptowhite(arg);
  	if (*p != NUL)			/* past "default" or group name */
  	{
! 	    include_default = FALSE;
  	    if (STRNCMP("default", arg, p - arg) == 0)
  	    {
  		arg = skipwhite(p);
--- 9001,9007 ----
  	p = skiptowhite(arg);
  	if (*p != NUL)			/* past "default" or group name */
  	{
! 	    include_default = 0;
  	    if (STRNCMP("default", arg, p - arg) == 0)
  	    {
  		arg = skipwhite(p);
***************
*** 8985,8991 ****
  	    }
  	    if (*p != NUL)			/* past group name */
  	    {
! 		include_link = FALSE;
  		if (arg[1] == 'i' && arg[0] == 'N')
  		    highlight_list();
  		if (STRNCMP("link", arg, p - arg) == 0
--- 9010,9016 ----
  	    }
  	    if (*p != NUL)			/* past group name */
  	    {
! 		include_link = 0;
  		if (arg[1] == 'i' && arg[0] == 'N')
  		    highlight_list();
  		if (STRNCMP("link", arg, p - arg) == 0
***************
*** 9045,9075 ****
      expand_T	*xp;
      int		idx;
  {
-     if (idx == highlight_ga.ga_len
  #ifdef FEAT_CMDL_COMPL
! 	    && include_link
! #endif
! 	    )
  	return (char_u *)"link";
!     if (idx == highlight_ga.ga_len + 1
! #ifdef FEAT_CMDL_COMPL
! 	    && include_link
! #endif
! 	    )
  	return (char_u *)"clear";
-     if (idx == highlight_ga.ga_len + 2
- #ifdef FEAT_CMDL_COMPL
- 	    && include_default
  #endif
- 	    )
- 	return (char_u *)"default";
      if (idx < 0 || idx >= highlight_ga.ga_len)
  	return NULL;
      return HL_TABLE()[idx].sg_name;
  }
  #endif
  
! #ifdef FEAT_GUI
  /*
   * Free all the highlight group fonts.
   * Used when quitting for systems which need it.
--- 9070,9094 ----
      expand_T	*xp;
      int		idx;
  {
  #ifdef FEAT_CMDL_COMPL
!     if (idx == highlight_ga.ga_len && include_none != 0)
! 	return (char_u *)"none";
!     if (idx == highlight_ga.ga_len + include_none && include_default != 0)
! 	return (char_u *)"default";
!     if (idx == highlight_ga.ga_len + include_none + include_default
! 							 && include_link != 0)
  	return (char_u *)"link";
!     if (idx == highlight_ga.ga_len + include_none + include_default + 1
! 							 && include_link != 0)
  	return (char_u *)"clear";
  #endif
      if (idx < 0 || idx >= highlight_ga.ga_len)
  	return NULL;
      return HL_TABLE()[idx].sg_name;
  }
  #endif
  
! #if defined(FEAT_GUI) || defined(PROTO)
  /*
   * Free all the highlight group fonts.
   * Used when quitting for systems which need it.
*** ../vim-7.1.035/src/version.c	Tue Jul 24 11:15:46 2007
--- src/version.c	Tue Jul 24 14:30:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     36,
  /**/

-- 
Apparently, 1 in 5 people in the world are Chinese.  And there are 5
people in my family, so it must be one of them.  It's either my mum
or my dad.  Or my older brother Colin.  Or my younger brother
Ho-Cha-Chu.  But I think it's Colin.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.037 ---
To: vim-dev at vim.org
Subject: patch 7.1.037
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.037
Problem:    strcpy() used for overlapping strings. (Chris Monson)
Solution:   Use mch_memmove() instead.
Files:	    src/option.c


*** ../vim-7.1.036/src/option.c	Tue Jul 24 09:50:22 2007
--- src/option.c	Sun Jul 22 16:42:47 2007
***************
*** 4628,4634 ****
  				    if ((!(flags & P_COMMA) || *s != ',')
  					    && vim_strchr(s + 1, *s) != NULL)
  				    {
! 					STRCPY(s, s + 1);
  					--s;
  				    }
  			    }
--- 4628,4634 ----
  				    if ((!(flags & P_COMMA) || *s != ',')
  					    && vim_strchr(s + 1, *s) != NULL)
  				    {
! 					mch_memmove(s, s + 1, STRLEN(s));
  					--s;
  				    }
  			    }
*** ../vim-7.1.036/src/version.c	Tue Jul 24 14:32:44 2007
--- src/version.c	Tue Jul 24 14:56:03 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     37,
  /**/

-- 
This planet has -- or rather had -- a problem, which was this: most
of the people living on it were unhappy for pretty much of the time.
Many solutions were suggested for this problem, but most of these
were largely concerned with the movements of small green pieces of
paper, which is odd because on the whole it wasn't the small green
pieces of paper that were unhappy.
		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.038 ---
To: vim-dev at vim.org
Subject: patch 7.1.038
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.038
Problem:    When 'expandtab' is set then a Tab copied for 'copyindent' is
	    expanded to spaces, even when 'preserveindent' is set. (Alexei
	    Alexandrov)
Solution:   Remove the check for 'expandtab'.  Also fix that ">>" doesn't obey
	    'preserveindent'. (Chris Lubinski)
Files:	    src/misc1.c


*** ../vim-7.1.037/src/misc1.c	Thu May 10 21:03:33 2007
--- src/misc1.c	Tue Jul 24 15:24:50 2007
***************
*** 90,96 ****
   */
      int
  set_indent(size, flags)
!     int		size;
      int		flags;
  {
      char_u	*p;
--- 90,96 ----
   */
      int
  set_indent(size, flags)
!     int		size;		    /* measured in spaces */
      int		flags;
  {
      char_u	*p;
***************
*** 98,109 ****
      char_u	*oldline;
      char_u	*s;
      int		todo;
!     int		ind_len;
      int		line_len;
      int		doit = FALSE;
!     int		ind_done;
      int		tab_pad;
      int		retval = FALSE;
  
      /*
       * First check if there is anything to do and compute the number of
--- 98,111 ----
      char_u	*oldline;
      char_u	*s;
      int		todo;
!     int		ind_len;	    /* measured in characters */
      int		line_len;
      int		doit = FALSE;
!     int		ind_done = 0;	    /* measured in spaces */
      int		tab_pad;
      int		retval = FALSE;
+     int		orig_char_len = 0;  /* number of initial whitespace chars when
+ 				       'et' and 'pi' are both set */
  
      /*
       * First check if there is anything to do and compute the number of
***************
*** 116,123 ****
      /* Calculate the buffer size for the new indent, and check to see if it
       * isn't already set */
  
!     /* if 'expandtab' isn't set: use TABs */
!     if (!curbuf->b_p_et)
      {
  	/* If 'preserveindent' is set then reuse as much as possible of
  	 * the existing indent structure for the new indent */
--- 118,127 ----
      /* Calculate the buffer size for the new indent, and check to see if it
       * isn't already set */
  
!     /* if 'expandtab' isn't set: use TABs; if both 'expandtab' and
!      * 'preserveindent' are set count the number of characters at the
!      * beginning of the line to be copied */
!     if (!curbuf->b_p_et || (!(flags & SIN_INSERT) && curbuf->b_p_pi))
      {
  	/* If 'preserveindent' is set then reuse as much as possible of
  	 * the existing indent structure for the new indent */
***************
*** 148,156 ****
  		++p;
  	    }
  
  	    /* Fill to next tabstop with a tab, if possible */
  	    tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
! 	    if (todo >= tab_pad)
  	    {
  		doit = TRUE;
  		todo -= tab_pad;
--- 152,165 ----
  		++p;
  	    }
  
+ 	    /* Set initial number of whitespace chars to copy if we are
+ 	     * preserving indent but expandtab is set */
+ 	    if (curbuf->b_p_et)
+ 		orig_char_len = ind_len;
+ 
  	    /* Fill to next tabstop with a tab, if possible */
  	    tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
! 	    if (todo >= tab_pad && orig_char_len == 0)
  	    {
  		doit = TRUE;
  		todo -= tab_pad;
***************
*** 193,205 ****
      else
  	p = skipwhite(p);
      line_len = (int)STRLEN(p) + 1;
!     newline = alloc(ind_len + line_len);
!     if (newline == NULL)
! 	return FALSE;
  
      /* Put the characters in the new line. */
-     s = newline;
-     todo = size;
      /* if 'expandtab' isn't set: use TABs */
      if (!curbuf->b_p_et)
      {
--- 202,239 ----
      else
  	p = skipwhite(p);
      line_len = (int)STRLEN(p) + 1;
! 
!     /* If 'preserveindent' and 'expandtab' are both set keep the original
!      * characters and allocate accordingly.  We will fill the rest with spaces
!      * after the if (!curbuf->b_p_et) below. */
!     if (orig_char_len != 0)
!     {
! 	newline = alloc(orig_char_len + size - ind_done + line_len);
! 	if (newline == NULL)
! 	    return FALSE;
! 	p = oldline;
! 	s = newline;
! 	while (orig_char_len > 0)
! 	{
! 	    *s++ = *p++;
! 	    orig_char_len--;
! 	}
! 	/* Skip over any additional white space (useful when newindent is less
! 	 * than old) */
! 	while (vim_iswhite(*p))
! 	    (void)*p++;
! 	todo = size-ind_done;
!     }
!     else
!     {
! 	todo = size;
! 	newline = alloc(ind_len + line_len);
! 	if (newline == NULL)
! 	    return FALSE;
! 	s = newline;
!     }
  
      /* Put the characters in the new line. */
      /* if 'expandtab' isn't set: use TABs */
      if (!curbuf->b_p_et)
      {
***************
*** 1320,1327 ****
  	    newindent += (int)curbuf->b_p_sw;
  	}
  #endif
! 	/* Copy the indent only if expand tab is disabled */
! 	if (curbuf->b_p_ci && !curbuf->b_p_et)
  	{
  	    (void)copy_indent(newindent, saved_line);
  
--- 1354,1361 ----
  	    newindent += (int)curbuf->b_p_sw;
  	}
  #endif
! 	/* Copy the indent */
! 	if (curbuf->b_p_ci)
  	{
  	    (void)copy_indent(newindent, saved_line);
  
*** ../vim-7.1.037/src/version.c	Tue Jul 24 14:57:16 2007
--- src/version.c	Tue Jul 24 15:22:44 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     38,
  /**/

-- 
Time is an illusion.  Lunchtime doubly so.
		-- Ford Prefect, in Douglas Adams'
		   "The Hitchhiker's Guide to the Galaxy"

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.039 ---
To: vim-dev at vim.org
Subject: patch 7.1.039
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.039
Problem:    A tag in a help file that starts with "help-tags" and contains a
	    percent sign may make Vim crash. (Ulf Harnhammar)
Solution:   Use puts() instead of fprintf().
Files:	    src/ex_cmds.c


*** ../vim-7.1.038/src/ex_cmds.c	Tue Jul 24 11:15:46 2007
--- src/ex_cmds.c	Wed Jul 25 20:06:20 2007
***************
*** 6374,6382 ****
  	for (i = 0; i < ga.ga_len; ++i)
  	{
  	    s = ((char_u **)ga.ga_data)[i];
! 	    if (STRNCMP(s, "help-tags", 9) == 0)
  		/* help-tags entry was added in formatted form */
! 		fprintf(fd_tags, (char *)s);
  	    else
  	    {
  		fprintf(fd_tags, "%s\t/*", s);
--- 6374,6382 ----
  	for (i = 0; i < ga.ga_len; ++i)
  	{
  	    s = ((char_u **)ga.ga_data)[i];
! 	    if (STRNCMP(s, "help-tags\t", 10) == 0)
  		/* help-tags entry was added in formatted form */
! 		fputs((char *)s, fd_tags);
  	    else
  	    {
  		fprintf(fd_tags, "%s\t/*", s);
*** ../vim-7.1.038/src/version.c	Tue Jul 24 15:25:27 2007
--- src/version.c	Wed Jul 25 22:41:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     39,
  /**/

-- 
On the other hand, you have different fingers.
                                      -- Steven Wright

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.040 ---
To: vim-dev at vim.org
Subject: patch 7.1.040
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.040
Problem:    ":match" only supports three matches.
Solution:   Add functions clearmatches(), getmatches(), matchadd(),
	    matchdelete() and setmatches().  Changed the data structures for
	    this.  A small bug in syntax.c is fixed, so newly created
	    highlight groups can have their name resolved correctly from their
	    ID.  (Martin Toft)
Files:	    runtime/doc/eval.txt, runtime/doc/pattern.txt,
	    runtime/doc/usr_41.txt, src/eval.c, src/ex_docmd.c,
	    src/proto/window.pro, src/screen.c, src/structs.h, src/syntax.c,
	    src/testdir/Makefile, src/testdir/test63.in,
	    src/testdir/test63.ok, src/window.c


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

-- 
It is hard to understand how a cemetery raised its burial
cost and blamed it on the cost of living.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.041 ---
To: vim-dev at vim.org
Subject: patch 7.1.041 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.041 (extra, after 7.1.040)
Problem:    Some changes for patch 7.1.0 are in extra files.
Solution:   Update the extra files.
Files:	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms


*** ../vim-7.1.040/src/testdir/Make_amiga.mak	Sun Apr 30 20:42:49 2006
--- src/testdir/Make_amiga.mak	Tue Jul 24 15:36:00 2007
***************
*** 25,31 ****
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out
  
  .SUFFIXES: .in .out
  
--- 25,31 ----
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out test63.out
  
  .SUFFIXES: .in .out
  
***************
*** 107,109 ****
--- 107,110 ----
  test60.out: test60.in
  test61.out: test61.in
  test62.out: test62.in
+ test63.out: test63.in
*** ../vim-7.1.040/src/testdir/Make_dos.mak	Sun Apr 30 20:41:13 2006
--- src/testdir/Make_dos.mak	Tue Jul 24 15:37:47 2007
***************
*** 19,25 ****
  		test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out \
  		test55.out test56.out test57.out test58.out test59.out \
! 		test60.out test61.out test62.out
  
  SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
  		test8.out test9.out test11.out test13.out test14.out \
--- 19,25 ----
  		test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out \
  		test55.out test56.out test57.out test58.out test59.out \
! 		test60.out test61.out test62.out test63.out
  
  SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
  		test8.out test9.out test11.out test13.out test14.out \
*** ../vim-7.1.040/src/testdir/Make_os2.mak	Sun Apr 30 20:29:29 2006
--- src/testdir/Make_os2.mak	Tue Jul 24 15:39:15 2007
***************
*** 25,31 ****
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out
  
  .SUFFIXES: .in .out
  
--- 25,31 ----
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out test63.out
  
  .SUFFIXES: .in .out
  
*** ../vim-7.1.040/src/testdir/Make_vms.mms	Sun Apr 30 20:51:12 2006
--- src/testdir/Make_vms.mms	Tue Jul 24 15:39:23 2007
***************
*** 4,10 ****
  # Authors:	Zoltan Arpadffy, <arpadffy at polarhome.com>
  #		Sandor Kopanyi,  <sandor.kopanyi at mailbox.hu>
  #
! # Last change:  2006 Apr 30
  #
  # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
  # Edit the lines in the Configuration section below to select.
--- 4,10 ----
  # Authors:	Zoltan Arpadffy, <arpadffy at polarhome.com>
  #		Sandor Kopanyi,  <sandor.kopanyi at mailbox.hu>
  #
! # Last change:  2007 Jul 24
  #
  # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
  # Edit the lines in the Configuration section below to select.
***************
*** 59,65 ****
  	 test43.out test44.out test45.out test46.out \
  	 test48.out test51.out test53.out test54.out test55.out \
  	 test56.out test57.out test58.out test59.out test60.out \
! 	 test61.out test62.out
  
  .IFDEF WANT_GUI
  SCRIPT_GUI = test16.out
--- 59,65 ----
  	 test43.out test44.out test45.out test46.out \
  	 test48.out test51.out test53.out test54.out test55.out \
  	 test56.out test57.out test58.out test59.out test60.out \
! 	 test61.out test62.out test63.out
  
  .IFDEF WANT_GUI
  SCRIPT_GUI = test16.out
*** ../vim-7.1.040/src/version.c	Thu Jul 26 22:55:11 2007
--- src/version.c	Thu Jul 26 22:58:57 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     41,
  /**/

-- 
Just remember...if the world didn't suck, we'd all fall off.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.042 ---
To: vim-dev at vim.org
Subject: patch 7.1.042
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.042 (after 7.1.040)
Problem:    Internal error when using matchadd(). (David Larson)
Solution:   Check the third argument to be present before using the fourth
	    argument. (Martin Toft)
Files:	    src/eval.c


*** ../vim-7.1.041/src/eval.c	Thu Jul 26 22:55:11 2007
--- src/eval.c	Fri Jul 27 21:29:39 2007
***************
*** 7108,7114 ****
      {"getftype",	1, 1, f_getftype},
      {"getline",		1, 2, f_getline},
      {"getloclist",	1, 1, f_getqflist},
!     {"getmatches",  	0, 0, f_getmatches},
      {"getpos",		1, 1, f_getpos},
      {"getqflist",	0, 0, f_getqflist},
      {"getreg",		0, 2, f_getreg},
--- 7108,7114 ----
      {"getftype",	1, 1, f_getftype},
      {"getline",		1, 2, f_getline},
      {"getloclist",	1, 1, f_getqflist},
!     {"getmatches",	0, 0, f_getmatches},
      {"getpos",		1, 1, f_getpos},
      {"getqflist",	0, 0, f_getqflist},
      {"getreg",		0, 2, f_getreg},
***************
*** 12526,12534 ****
      if (grp == NULL || pat == NULL)
  	return;
      if (argvars[2].v_type != VAR_UNKNOWN)
  	prio = get_tv_number_chk(&argvars[2], &error);
!     if (argvars[3].v_type != VAR_UNKNOWN)
! 	id = get_tv_number_chk(&argvars[3], &error);
      if (error == TRUE)
  	return;
      if (id >= 1 && id <= 3)
--- 12526,12536 ----
      if (grp == NULL || pat == NULL)
  	return;
      if (argvars[2].v_type != VAR_UNKNOWN)
+     {
  	prio = get_tv_number_chk(&argvars[2], &error);
! 	if (argvars[3].v_type != VAR_UNKNOWN)
! 	    id = get_tv_number_chk(&argvars[3], &error);
!     }
      if (error == TRUE)
  	return;
      if (id >= 1 && id <= 3)
*** ../vim-7.1.041/src/version.c	Thu Jul 26 23:10:50 2007
--- src/version.c	Fri Jul 27 21:31:13 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     42,
  /**/

-- 
The future isn't what it used to be.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.043 ---
To: vim-dev at vim.org
Subject: patch 7.1.043
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.043
Problem:    In Ex mode using CTRL-D twice may cause a crash.  Cursor isn't
	    positioned properly after CTRL-D.
Solution:   Set prev_char properly.  Position the cursor correctly. (Antony
	    Scriven)
Files:	    src/ex_getln.c


*** ../vim-7.1.042/src/ex_getln.c	Tue Jul 24 14:32:44 2007
--- src/ex_getln.c	Wed Jul 25 20:57:05 2007
***************
*** 2095,2105 ****
      garray_T	line_ga;
      char_u	*pend;
      int		startcol = 0;
!     int		c1;
      int		escaped = FALSE;	/* CTRL-V typed */
      int		vcol = 0;
      char_u	*p;
!     int		prev_char = 0;
  
      /* Switch cursor on now.  This avoids that it happens after the "\n", which
       * confuses the system function that computes tabstops. */
--- 2095,2105 ----
      garray_T	line_ga;
      char_u	*pend;
      int		startcol = 0;
!     int		c1 = 0;
      int		escaped = FALSE;	/* CTRL-V typed */
      int		vcol = 0;
      char_u	*p;
!     int		prev_char;
  
      /* Switch cursor on now.  This avoids that it happens after the "\n", which
       * confuses the system function that computes tabstops. */
***************
*** 2152,2157 ****
--- 2152,2158 ----
  
  	/* Get one character at a time.  Don't use inchar(), it can't handle
  	 * special characters. */
+ 	prev_char = c1;
  	c1 = vgetc();
  
  	/*
***************
*** 2209,2215 ****
  redraw:
  		/* redraw the line */
  		msg_col = startcol;
- 		windgoto(msg_row, msg_col);
  		vcol = 0;
  		for (p = (char_u *)line_ga.ga_data;
  			  p < (char_u *)line_ga.ga_data + line_ga.ga_len; ++p)
--- 2210,2215 ----
***************
*** 2228,2233 ****
--- 2228,2234 ----
  		    }
  		}
  		msg_clr_eos();
+ 		windgoto(msg_row, msg_col);
  		continue;
  	    }
  
***************
*** 2273,2279 ****
  	if (IS_SPECIAL(c1))
  	    c1 = '?';
  	((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
- 	prev_char = c1;
  	if (c1 == '\n')
  	    msg_putchar('\n');
  	else if (c1 == TAB)
--- 2274,2279 ----
*** ../vim-7.1.042/src/version.c	Fri Jul 27 21:32:13 2007
--- src/version.c	Sat Jul 28 14:19:37 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     43,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
48. You get a tatoo that says "This body best viewed with Netscape 3.1 or
    higher."

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.044 ---
To: vim-dev at vim.org
Subject: patch 7.1.044
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.044
Problem:    In Insert mode 0 CTRL-T deletes all indent, it should add indent.
	    (Gautam Iyer)
Solution:   Check for CTRL-D typed.
Files:	    src/edit.c


*** ../vim-7.1.043/src/edit.c	Thu Jun 28 12:44:56 2007
--- src/edit.c	Wed Jul 25 22:50:28 2007
***************
*** 8000,8006 ****
      /*
       * 0^D and ^^D: remove all indent.
       */
!     if ((lastc == '0' || lastc == '^') && curwin->w_cursor.col)
      {
  	--curwin->w_cursor.col;
  	(void)del_char(FALSE);		/* delete the '^' or '0' */
--- 8000,8007 ----
      /*
       * 0^D and ^^D: remove all indent.
       */
!     if (c == Ctrl_D && (lastc == '0' || lastc == '^')
! 						  && curwin->w_cursor.col > 0)
      {
  	--curwin->w_cursor.col;
  	(void)del_char(FALSE);		/* delete the '^' or '0' */
*** ../vim-7.1.043/src/version.c	Sat Jul 28 14:21:04 2007
--- src/version.c	Sun Jul 29 14:14:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     44,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
54. You start tilting your head sideways to smile. :-)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.045 ---
To: vim-dev at vim.org
Subject: patch 7.1.045
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.045
Problem:    Unnecessary screen redrawing. (Jjgod Jiang)
Solution:   Reset "must_redraw" after clearing the screen.
Files:	    src/screen.c


*** ../vim-7.1.044/src/screen.c	Thu Jul 26 22:55:11 2007
--- src/screen.c	Mon Jul 30 21:39:32 2007
***************
*** 331,336 ****
--- 331,341 ----
      {
  	if (type < must_redraw)	    /* use maximal type */
  	    type = must_redraw;
+ 
+ 	/* must_redraw is reset here, so that when we run into some weird
+ 	 * reason to redraw while busy redrawing (e.g., asynchronous
+ 	 * scrolling), or update_topline() in win_update() will cause a
+ 	 * scroll, the screen will be redrawn later or in win_update(). */
  	must_redraw = 0;
      }
  
***************
*** 1019,1024 ****
--- 1024,1036 ----
  	    type = VALID;
      }
  
+     /* Trick: we want to avoid clearning the screen twice.  screenclear() will
+      * set "screen_cleared" to TRUE.  The special value MAYBE (which is still
+      * non-zero and thus not FALSE) will indicate that screenclear() was not
+      * called. */
+     if (screen_cleared)
+ 	screen_cleared = MAYBE;
+ 
      /*
       * If there are no changes on the screen that require a complete redraw,
       * handle three cases:
***************
*** 1220,1226 ****
  	    mid_end = wp->w_height;
  	    if (lastwin == firstwin)
  	    {
! 		screenclear();
  #ifdef FEAT_WINDOWS
  		/* The screen was cleared, redraw the tab pages line. */
  		if (redraw_tabline)
--- 1232,1242 ----
  	    mid_end = wp->w_height;
  	    if (lastwin == firstwin)
  	    {
! 		/* Clear the screen when it was not done by win_del_lines() or
! 		 * win_ins_lines() above, "screen_cleared" is FALSE or MAYBE
! 		 * then. */
! 		if (screen_cleared != TRUE)
! 		    screenclear();
  #ifdef FEAT_WINDOWS
  		/* The screen was cleared, redraw the tab pages line. */
  		if (redraw_tabline)
***************
*** 1228,1233 ****
--- 1244,1256 ----
  #endif
  	    }
  	}
+ 
+ 	/* When win_del_lines() or win_ins_lines() caused the screen to be
+ 	 * cleared (only happens for the first window) or when screenclear()
+ 	 * was called directly above, "must_redraw" will have been set to
+ 	 * NOT_VALID, need to reset it here to avoid redrawing twice. */
+ 	if (screen_cleared == TRUE)
+ 	    must_redraw = 0;
      }
      else
      {
*** ../vim-7.1.044/src/version.c	Sun Jul 29 15:02:34 2007
--- src/version.c	Mon Jul 30 21:58:06 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     45,
  /**/

-- 
Be thankful to be in a traffic jam, because it means you own a car.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.046 ---
To: vim-dev at vim.org
Subject: patch 7.1.046
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.046
Problem:    ":s" command removes combining characters. (Ron Aaron)
Solution:   Copy composing characters individually. (Chris Lubinski)
Files:	    src/regexp.c


*** ../vim-7.1.045/src/regexp.c	Thu May 10 19:58:01 2007
--- src/regexp.c	Fri Jul 27 21:17:47 2007
***************
*** 7014,7020 ****
  #ifdef FEAT_MBYTE
  			    if (has_mbyte)
  			    {
! 				int l = mb_ptr2len(s) - 1;
  
  				s += l;
  				len -= l;
--- 7014,7027 ----
  #ifdef FEAT_MBYTE
  			    if (has_mbyte)
  			    {
! 				int l;
! 
! 				/* Copy composing characters separately, one
! 				 * at a time. */
! 				if (enc_utf8)
! 				    l = utf_ptr2len(s) - 1;
! 				else
! 				    l = mb_ptr2len(s) - 1;
  
  				s += l;
  				len -= l;
*** ../vim-7.1.045/src/version.c	Mon Jul 30 21:59:50 2007
--- src/version.c	Mon Jul 30 22:30:02 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     46,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
57. You begin to wonder how on earth your service provider is allowed to call
    200 hours per month "unlimited."

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.047 ---
To: vim-dev at vim.org
Subject: patch 7.1.047
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.047
Problem:    vim_regcomp() called with invalid argument. (Xiaozhou Liu)
Solution:   Change TRUE to RE_MAGIC + RE_STRING.
Files:	    src/ex_eval.c


*** ../vim-7.1.046/src/ex_eval.c	Thu May 10 20:23:50 2007
--- src/ex_eval.c	Sat Jul 28 13:09:00 2007
***************
*** 1551,1557 ****
  		}
  		save_cpo  = p_cpo;
  		p_cpo = (char_u *)"";
! 		regmatch.regprog = vim_regcomp(pat, TRUE);
  		regmatch.rm_ic = FALSE;
  		if (end != NULL)
  		    *end = save_char;
--- 1551,1557 ----
  		}
  		save_cpo  = p_cpo;
  		p_cpo = (char_u *)"";
! 		regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
  		regmatch.rm_ic = FALSE;
  		if (end != NULL)
  		    *end = save_char;
*** ../vim-7.1.046/src/version.c	Mon Jul 30 22:32:11 2007
--- src/version.c	Wed Aug  1 15:46:28 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     47,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
80. At parties, you introduce your spouse as your "service provider."

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.048 ---
To: vim-dev at vim.org
Subject: patch 7.1.048
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.048
Problem:    The matchparen plugin doesn't update the match when scrolling with
	    the mouse wheel. (Ilya Bobir)
Solution:   Set the match highlighting for text that can be scrolled into the
	    viewable area without moving the cursor. (Chris Lubinski)
Files:	    runtime/plugin/matchparen.vim


*** ../vim-7.1.047/runtime/plugin/matchparen.vim	Sun May  6 14:26:16 2007
--- runtime/plugin/matchparen.vim	Mon Jul 30 21:14:06 2007
***************
*** 1,6 ****
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <Bram at vim.org>
! " Last Change: 2006 Oct 12
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
--- 1,6 ----
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <Bram at vim.org>
! " Last Change: 2007 Jul 30
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
***************
*** 62,86 ****
    " Figure out the arguments for searchpairpos().
    " Restrict the search to visible lines with "stopline".
    " And avoid searching very far (e.g., for closed folds and long lines)
    if i % 2 == 0
      let s_flags = 'nW'
      let c2 = plist[i + 1]
      if has("byte_offset") && has("syntax_items") && &smc > 0
        let stopbyte = min([line2byte("$"), line2byte(".") + col(".") + &smc * 2])
!       let stopline = min([line('w$'), byte2line(stopbyte)])
      else
!       let stopline = min([line('w$'), c_lnum + 100])
      endif
    else
      let s_flags = 'nbW'
      let c2 = c
      let c = plist[i - 1]
      if has("byte_offset") && has("syntax_items") && &smc > 0
        let stopbyte = max([1, line2byte(".") + col(".") - &smc * 2])
!       let stopline = max([line('w0'), byte2line(stopbyte)])
      else
!       let stopline = max([line('w0'), c_lnum - 100])
      endif
    endif
    if c == '['
      let c = '\['
--- 62,98 ----
    " Figure out the arguments for searchpairpos().
    " Restrict the search to visible lines with "stopline".
    " And avoid searching very far (e.g., for closed folds and long lines)
+   " The "viewable" variables give a range in which we can scroll while keeping
+   " the cursor at the same position
+   " adjustedScrolloff accounts for very large numbers of scrolloff
+   let adjustedScrolloff = min([&scrolloff, (line('w$') - line('w0')) / 2])
+   let bottom_viewable = min([line('$'), c_lnum + &lines - adjustedScrolloff - 2])
+   let top_viewable = max([1, c_lnum-&lines+adjustedScrolloff + 2])
+   " one of these stoplines will be adjusted below, but the current values are
+   " minimal boundaries within the current window
+   let stoplinebottom = line('w$')
+   let stoplinetop = line('w0')
    if i % 2 == 0
      let s_flags = 'nW'
      let c2 = plist[i + 1]
      if has("byte_offset") && has("syntax_items") && &smc > 0
        let stopbyte = min([line2byte("$"), line2byte(".") + col(".") + &smc * 2])
!       let stopline = min([bottom_viewable, byte2line(stopbyte)])
      else
!       let stopline = min([bottom_viewable, c_lnum + 100])
      endif
+     let stoplinebottom = stopline
    else
      let s_flags = 'nbW'
      let c2 = c
      let c = plist[i - 1]
      if has("byte_offset") && has("syntax_items") && &smc > 0
        let stopbyte = max([1, line2byte(".") + col(".") - &smc * 2])
!       let stopline = max([top_viewable, byte2line(stopbyte)])
      else
!       let stopline = max([top_viewable, c_lnum - 100])
      endif
+     let stoplinetop = stopline
    endif
    if c == '['
      let c = '\['
***************
*** 106,112 ****
    endif
  
    " If a match is found setup match highlighting.
!   if m_lnum > 0 && m_lnum >= line('w0') && m_lnum <= line('w$')
      exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
  	  \ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
      let w:paren_hl_on = 1
--- 118,124 ----
    endif
  
    " If a match is found setup match highlighting.
!   if m_lnum > 0 && m_lnum >= stoplinetop && m_lnum <= stoplinebottom 
      exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
  	  \ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
      let w:paren_hl_on = 1
*** ../vim-7.1.047/src/version.c	Wed Aug  1 15:47:06 2007
--- src/version.c	Thu Aug  2 22:59:07 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     48,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
91. It's Saturday afternoon in the middle of May and you
    are on computer.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.049 ---
To: vim-dev at vim.org
Subject: patch 7.1.049
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.049
Problem:    Cannot compile GTK2 version with Hangul input feature.
Solution:   Don't define FEAT_XFONTSET when using GTK2.
Files:	    src/feature.h


*** ../vim-7.1.048/src/feature.h	Thu May 10 19:43:24 2007
--- src/feature.h	Fri Aug  3 19:32:56 2007
***************
*** 673,679 ****
  # define ESC_CHG_TO_ENG_MODE		/* if defined, when ESC pressed,
  					 * turn to english mode
  					 */
! # if !defined(FEAT_XFONTSET) && defined(HAVE_X11)
  #  define FEAT_XFONTSET			/* Hangul input requires xfontset */
  # endif
  # if defined(FEAT_XIM) && !defined(LINT)
--- 673,679 ----
  # define ESC_CHG_TO_ENG_MODE		/* if defined, when ESC pressed,
  					 * turn to english mode
  					 */
! # if !defined(FEAT_XFONTSET) && defined(HAVE_X11) && !defined(HAVE_GTK2)
  #  define FEAT_XFONTSET			/* Hangul input requires xfontset */
  # endif
  # if defined(FEAT_XIM) && !defined(LINT)
*** ../vim-7.1.048/src/version.c	Thu Aug  2 23:00:06 2007
--- src/version.c	Fri Aug  3 21:58:23 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     49,
  /**/

-- 
>From "know your smileys":
 :-O>-o   Smiley American tourist (note big mouth and camera)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.050 ---
To: vim-dev at vim.org
Subject: patch 7.1.050
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.050
Problem:    Possible crash when using C++ indenting. (Chris Monson)
Solution:   Keep the line pointer to the line to compare with.  Avoid going
	    past the end of line.
Files:	    src/misc1.c


*** ../vim-7.1.049/src/misc1.c	Tue Jul 24 15:25:27 2007
--- src/misc1.c	Fri Aug  3 21:07:17 2007
***************
*** 4820,4826 ****
  static int	cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
  static int	cin_iswhileofdo_end __ARGS((int terminated, int	ind_maxparen, int ind_maxcomment));
  static int	cin_isbreak __ARGS((char_u *));
! static int	cin_is_cpp_baseclass __ARGS((char_u *line, colnr_T *col));
  static int	get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass));
  static int	cin_ends_in __ARGS((char_u *, char_u *, char_u *));
  static int	cin_skip2pos __ARGS((pos_T *trypos));
--- 4820,4826 ----
  static int	cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
  static int	cin_iswhileofdo_end __ARGS((int terminated, int	ind_maxparen, int ind_maxcomment));
  static int	cin_isbreak __ARGS((char_u *));
! static int	cin_is_cpp_baseclass __ARGS((colnr_T *col));
  static int	get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass));
  static int	cin_ends_in __ARGS((char_u *, char_u *, char_u *));
  static int	cin_skip2pos __ARGS((pos_T *trypos));
***************
*** 5585,5597 ****
   * This is a lot of guessing.  Watch out for "cond ? func() : foo".
   */
      static int
! cin_is_cpp_baseclass(line, col)
!     char_u	*line;
      colnr_T	*col;	    /* return: column to align with */
  {
      char_u	*s;
      int		class_or_struct, lookfor_ctor_init, cpp_base_class;
      linenr_T	lnum = curwin->w_cursor.lnum;
  
      *col = 0;
  
--- 5585,5597 ----
   * This is a lot of guessing.  Watch out for "cond ? func() : foo".
   */
      static int
! cin_is_cpp_baseclass(col)
      colnr_T	*col;	    /* return: column to align with */
  {
      char_u	*s;
      int		class_or_struct, lookfor_ctor_init, cpp_base_class;
      linenr_T	lnum = curwin->w_cursor.lnum;
+     char_u	*line = ml_get_curline();
  
      *col = 0;
  
***************
*** 5619,5625 ****
       */
      while (lnum > 1)
      {
! 	s = skipwhite(ml_get(lnum - 1));
  	if (*s == '#' || *s == NUL)
  	    break;
  	while (*s != NUL)
--- 5619,5626 ----
       */
      while (lnum > 1)
      {
! 	line = ml_get(lnum - 1);
! 	s = skipwhite(line);
  	if (*s == '#' || *s == NUL)
  	    break;
  	while (*s != NUL)
***************
*** 5636,5642 ****
  	--lnum;
      }
  
!     s = cin_skipcomment(ml_get(lnum));
      for (;;)
      {
  	if (*s == NUL)
--- 5637,5644 ----
  	--lnum;
      }
  
!     line = ml_get(lnum);
!     s = cin_skipcomment(line);
      for (;;)
      {
  	if (*s == NUL)
***************
*** 5644,5650 ****
  	    if (lnum == curwin->w_cursor.lnum)
  		break;
  	    /* Continue in the cursor line. */
! 	    s = cin_skipcomment(ml_get(++lnum));
  	}
  
  	if (s[0] == ':')
--- 5646,5655 ----
  	    if (lnum == curwin->w_cursor.lnum)
  		break;
  	    /* Continue in the cursor line. */
! 	    line = ml_get(++lnum);
! 	    s = cin_skipcomment(line);
! 	    if (*s == NUL)
! 		continue;
  	}
  
  	if (s[0] == ':')
***************
*** 7113,7119 ****
  		n = FALSE;
  		if (lookfor != LOOKFOR_TERM && ind_cpp_baseclass > 0)
  		{
! 		    n = cin_is_cpp_baseclass(l, &col);
  		    l = ml_get_curline();
  		}
  		if (n)
--- 7118,7124 ----
  		n = FALSE;
  		if (lookfor != LOOKFOR_TERM && ind_cpp_baseclass > 0)
  		{
! 		    n = cin_is_cpp_baseclass(&col);
  		    l = ml_get_curline();
  		}
  		if (n)
***************
*** 7704,7710 ****
  		n = FALSE;
  		if (ind_cpp_baseclass != 0 && theline[0] != '{')
  		{
! 		    n = cin_is_cpp_baseclass(l, &col);
  		    l = ml_get_curline();
  		}
  		if (n)
--- 7709,7715 ----
  		n = FALSE;
  		if (ind_cpp_baseclass != 0 && theline[0] != '{')
  		{
! 		    n = cin_is_cpp_baseclass(&col);
  		    l = ml_get_curline();
  		}
  		if (n)
*** ../vim-7.1.049/src/version.c	Fri Aug  3 22:01:35 2007
--- src/version.c	Sat Aug  4 12:11:51 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     50,
  /**/

-- 
>From "know your smileys":
 |-P	Reaction to unusually ugly C code

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.051 ---
To: vim-dev at vim.org
Subject: patch 7.1.051
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.051
Problem:    Accessing uninitialized memory when finding spell suggestions.
Solution:   Don't try swapping characters at the end of a word.
Files:	    src/spell.c


*** ../vim-7.1.050/src/spell.c	Tue Jul 24 10:44:10 2007
--- src/spell.c	Sun Aug  5 16:59:48 2007
***************
*** 12182,12188 ****
  	    {
  		n = mb_cptr2len(p);
  		c = mb_ptr2char(p);
! 		if (!soundfold && !spell_iswordp(p + n, curbuf))
  		    c2 = c; /* don't swap non-word char */
  		else
  		    c2 = mb_ptr2char(p + n);
--- 12182,12190 ----
  	    {
  		n = mb_cptr2len(p);
  		c = mb_ptr2char(p);
! 		if (p[n] == NUL)
! 		    c2 = NUL;
! 		else if (!soundfold && !spell_iswordp(p + n, curbuf))
  		    c2 = c; /* don't swap non-word char */
  		else
  		    c2 = mb_ptr2char(p + n);
***************
*** 12190,12199 ****
  	    else
  #endif
  	    {
! 		if (!soundfold && !spell_iswordp(p + 1, curbuf))
  		    c2 = c; /* don't swap non-word char */
  		else
  		    c2 = p[1];
  	    }
  
  	    /* When characters are identical, swap won't do anything.
--- 12192,12210 ----
  	    else
  #endif
  	    {
! 		if (p[1] == NUL)
! 		    c2 = NUL;
! 		else if (!soundfold && !spell_iswordp(p + 1, curbuf))
  		    c2 = c; /* don't swap non-word char */
  		else
  		    c2 = p[1];
+ 	    }
+ 
+ 	    /* When the second character is NUL we can't swap. */
+ 	    if (c2 == NUL)
+ 	    {
+ 		sp->ts_state = STATE_REP_INI;
+ 		break;
  	    }
  
  	    /* When characters are identical, swap won't do anything.
*** ../vim-7.1.050/src/version.c	Sat Aug  4 12:14:04 2007
--- src/version.c	Sun Aug  5 18:31:09 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     51,
  /**/

-- 
>From "know your smileys":
 8<}}	Glasses, big nose, beard

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.052 ---
To: vim-dev at vim.org
Subject: patch 7.1.052
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.052
Problem:    When creating a new match not all fields are initialized, which
	    may lead to unpredictable results.
Solution:   Initialise rmm_ic and rmm_maxcol.
Files:	    src/window.c


*** ../vim-7.1.051/src/window.c	Thu Jul 26 22:55:11 2007
--- src/window.c	Sun Aug  5 17:17:51 2007
***************
*** 6200,6206 ****
      matchitem_T *prev;
      matchitem_T *m;
      int		hlg_id;
!     regmmatch_T match;
  
      if (*grp == NUL || *pat == NUL)
  	return -1;
--- 6243,6249 ----
      matchitem_T *prev;
      matchitem_T *m;
      int		hlg_id;
!     regprog_T	*regprog;
  
      if (*grp == NUL || *pat == NUL)
  	return -1;
***************
*** 6227,6233 ****
  	EMSG2(_(e_nogroup), grp);
  	return -1;
      }
!     if ((match.regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
      {
  	EMSG2(_(e_invarg2), pat);
  	return -1;
--- 6270,6276 ----
  	EMSG2(_(e_nogroup), grp);
  	return -1;
      }
!     if ((regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
      {
  	EMSG2(_(e_invarg2), pat);
  	return -1;
***************
*** 6250,6256 ****
      m->priority = prio;
      m->pattern = vim_strsave(pat);
      m->hlg_id = hlg_id;
!     m->match.regprog = match.regprog;
  
      /* Insert new match.  The match list is in ascending order with regard to
       * the match priorities. */
--- 6293,6301 ----
      m->priority = prio;
      m->pattern = vim_strsave(pat);
      m->hlg_id = hlg_id;
!     m->match.regprog = regprog;
!     m->match.rmm_ic = FALSE;
!     m->match.rmm_maxcol = 0;
  
      /* Insert new match.  The match list is in ascending order with regard to
       * the match priorities. */
*** ../vim-7.1.051/src/version.c	Sun Aug  5 18:32:21 2007
--- src/version.c	Sun Aug  5 18:47:55 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     52,
  /**/

-- 
>From "know your smileys":
 8-O 	"Omigod!!" (done "rm -rf *" ?)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.053 ---
To: vim-dev at vim.org
Subject: patch 7.1.053
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.053
Problem:    Accessing uninitialized memory when giving a message.
Solution:   Check going the length before checking for a NUL byte.
Files:	    src/message.c


*** ../vim-7.1.052/src/message.c	Thu Jul  5 10:10:29 2007
--- src/message.c	Sat Aug  4 23:13:58 2007
***************
*** 1842,1848 ****
      int		wrap;
  
      did_wait_return = FALSE;
!     while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
      {
  	/*
  	 * We are at the end of the screen line when:
--- 1842,1848 ----
      int		wrap;
  
      did_wait_return = FALSE;
!     while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL)
      {
  	/*
  	 * We are at the end of the screen line when:
*** ../vim-7.1.052/src/version.c	Sun Aug  5 18:49:07 2007
--- src/version.c	Sun Aug  5 19:18:46 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     53,
  /**/

-- 
>From "know your smileys":
 <>:-)	Bishop

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.054 ---
To: vim-dev at vim.org
Subject: patch 7.1.054
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.054
Problem:    Accessing uninitialized memory when displaying the fold column.
Solution:   Add a NUL to the extra array. (Dominique Pelle).  Also do this in
	    a couple of other situations.
Files:	    src/screen.c


*** ../vim-7.1.053/src/screen.c	Mon Jul 30 21:59:50 2007
--- src/screen.c	Sun Aug  5 16:10:53 2007
***************
*** 2555,2561 ****
  
      char_u	extra[18];		/* "%ld" and 'fdc' must fit in here */
      int		n_extra = 0;		/* number of extra chars */
!     char_u	*p_extra = NULL;	/* string of extra chars */
      int		c_extra = NUL;		/* extra chars, all the same */
      int		extra_attr = 0;		/* attributes when n_extra != 0 */
      static char_u *at_end_str = (char_u *)""; /* used for p_extra when
--- 2555,2561 ----
  
      char_u	extra[18];		/* "%ld" and 'fdc' must fit in here */
      int		n_extra = 0;		/* number of extra chars */
!     char_u	*p_extra = NULL;	/* string of extra chars, plus NUL */
      int		c_extra = NUL;		/* extra chars, all the same */
      int		extra_attr = 0;		/* attributes when n_extra != 0 */
      static char_u *at_end_str = (char_u *)""; /* used for p_extra when
***************
*** 3189,3198 ****
  		if (cmdwin_type != 0 && wp == curwin)
  		{
  		    /* Draw the cmdline character. */
- 		    *extra = cmdwin_type;
  		    n_extra = 1;
! 		    p_extra = extra;
! 		    c_extra = NUL;
  		    char_attr = hl_attr(HLF_AT);
  		}
  	    }
--- 3189,3196 ----
  		if (cmdwin_type != 0 && wp == curwin)
  		{
  		    /* Draw the cmdline character. */
  		    n_extra = 1;
! 		    c_extra = cmdwin_type;
  		    char_attr = hl_attr(HLF_AT);
  		}
  	    }
***************
*** 3208,3213 ****
--- 3206,3212 ----
  		    fill_foldcolumn(extra, wp, FALSE, lnum);
  		    n_extra = wp->w_p_fdc;
  		    p_extra = extra;
+ 		    p_extra[n_extra] = NUL;
  		    c_extra = NUL;
  		    char_attr = hl_attr(HLF_FC);
  		}
***************
*** 3550,3558 ****
  	 * Get the next character to put on the screen.
  	 */
  	/*
! 	 * The 'extra' array contains the extra stuff that is inserted to
! 	 * represent special characters (non-printable stuff).  When all
! 	 * characters are the same, c_extra is used.
  	 * For the '$' of the 'list' option, n_extra == 1, p_extra == "".
  	 */
  	if (n_extra > 0)
--- 3549,3559 ----
  	 * Get the next character to put on the screen.
  	 */
  	/*
! 	 * The "p_extra" points to the extra stuff that is inserted to
! 	 * represent special characters (non-printable stuff) and other
! 	 * things.  When all characters are the same, c_extra is used.
! 	 * "p_extra" must end in a NUL to avoid mb_ptr2len() reads past
! 	 * "p_extra[n_extra]".
  	 * For the '$' of the 'list' option, n_extra == 1, p_extra == "".
  	 */
  	if (n_extra > 0)
***************
*** 3808,3817 ****
  		 * a '<' in the first column. */
  		if (n_skip > 0 && mb_l > 1)
  		{
- 		    extra[0] = '<';
- 		    p_extra = extra;
  		    n_extra = 1;
! 		    c_extra = NUL;
  		    c = ' ';
  		    if (area_attr == 0 && search_attr == 0)
  		    {
--- 3809,3816 ----
  		 * a '<' in the first column. */
  		if (n_skip > 0 && mb_l > 1)
  		{
  		    n_extra = 1;
! 		    c_extra = '<';
  		    c = ' ';
  		    if (area_attr == 0 && search_attr == 0)
  		    {
***************
*** 6204,6211 ****
  	return;
  
      off = LineOffset[row] + col;
!     while (*ptr != NUL && col < screen_Columns
! 				      && (len < 0 || (int)(ptr - text) < len))
      {
  	c = *ptr;
  #ifdef FEAT_MBYTE
--- 6203,6211 ----
  	return;
  
      off = LineOffset[row] + col;
!     while (col < screen_Columns
! 	    && (len < 0 || (int)(ptr - text) < len)
! 	    && *ptr != NUL)
      {
  	c = *ptr;
  #ifdef FEAT_MBYTE
*** ../vim-7.1.053/src/version.c	Sun Aug  5 19:20:04 2007
--- src/version.c	Sun Aug  5 20:07:47 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     54,
  /**/

-- 
>From "know your smileys":
 +<(:-) The Pope

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.055 ---
To: vim-dev at vim.org
Subject: patch 7.1.055
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.055
Problem:    Using strcpy() with arguments that overlap.
Solution:   Use mch_memmove() instead.
Files:	    src/buffer.c, src/charset.c, src/eval.c, src/ex_getln.c,
	    src/misc1.c, src/regexp.c, src/termlib.c


*** ../vim-7.1.054/src/buffer.c	Tue Jun 19 15:40:51 2007
--- src/buffer.c	Sun Aug  5 16:14:03 2007
***************
*** 4860,4866 ****
  	     */
  	    for (e = s; *e != ':' && *e != NUL; ++e)
  		if (e[0] == '\\' && e[1] == ':')
! 		    STRCPY(e, e + 1);
  	    if (*e == NUL)
  		end = TRUE;
  
--- 4860,4866 ----
  	     */
  	    for (e = s; *e != ':' && *e != NUL; ++e)
  		if (e[0] == '\\' && e[1] == ':')
! 		    mch_memmove(e, e + 1, STRLEN(e));
  	    if (*e == NUL)
  		end = TRUE;
  
*** ../vim-7.1.054/src/charset.c	Tue Mar 27 12:41:45 2007
--- src/charset.c	Sun Aug  5 21:53:44 2007
***************
*** 1898,1904 ****
  {
      for ( ; *p; ++p)
  	if (rem_backslash(p))
! 	    STRCPY(p, p + 1);
  }
  
  /*
--- 1898,1904 ----
  {
      for ( ; *p; ++p)
  	if (rem_backslash(p))
! 	    mch_memmove(p, p + 1, STRLEN(p));
  }
  
  /*
*** ../vim-7.1.054/src/eval.c	Fri Jul 27 21:32:13 2007
--- src/eval.c	Sun Aug  5 16:25:03 2007
***************
*** 13807,13813 ****
  	    }
  	    /* Shorten "remain". */
  	    if (*q != NUL)
! 		STRCPY(remain, q - 1);
  	    else
  	    {
  		vim_free(remain);
--- 13807,13813 ----
  	    }
  	    /* Shorten "remain". */
  	    if (*q != NUL)
! 		mch_memmove(remain, q - 1, STRLEN(q - 1) + 1);
  	    else
  	    {
  		vim_free(remain);
*** ../vim-7.1.054/src/ex_getln.c	Sat Jul 28 14:21:04 2007
--- src/ex_getln.c	Sun Aug  5 21:55:56 2007
***************
*** 4306,4315 ****
  			    && pat[i + 1] == '\\'
  			    && pat[i + 2] == '\\'
  			    && pat[i + 3] == ' ')
! 			STRCPY(pat + i, pat + i + 3);
  		    if (xp->xp_backslash == XP_BS_ONE
  			    && pat[i + 1] == ' ')
! 			STRCPY(pat + i, pat + i + 1);
  		}
  	}
  
--- 4306,4316 ----
  			    && pat[i + 1] == '\\'
  			    && pat[i + 2] == '\\'
  			    && pat[i + 3] == ' ')
! 			mch_memmove(pat + i, pat + i + 3,
! 						     STRLEN(pat + i + 3) + 1);
  		    if (xp->xp_backslash == XP_BS_ONE
  			    && pat[i + 1] == ' ')
! 			mch_memmove(pat + i, pat + i + 1, STRLEN(pat + i));
  		}
  	}
  
***************
*** 4552,4558 ****
      pat = vim_strsave(filepat);
      for (i = 0; pat[i]; ++i)
  	if (pat[i] == '\\' && pat[i + 1] == ' ')
! 	    STRCPY(pat + i, pat + i + 1);
  
      flags |= EW_FILE | EW_EXEC;
  
--- 4553,4559 ----
      pat = vim_strsave(filepat);
      for (i = 0; pat[i]; ++i)
  	if (pat[i] == '\\' && pat[i + 1] == ' ')
! 	    mch_memmove(pat + i, pat + i + 1, STRLEN(pat + i));
  
      flags |= EW_FILE | EW_EXEC;
  
*** ../vim-7.1.054/src/misc1.c	Sat Aug  4 12:14:04 2007
--- src/misc1.c	Sun Aug  5 21:57:15 2007
***************
*** 8635,8641 ****
      for (p = buf + wildoff; p < s; ++p)
  	if (rem_backslash(p))
  	{
! 	    STRCPY(p, p + 1);
  	    --e;
  	    --s;
  	}
--- 8635,8641 ----
      for (p = buf + wildoff; p < s; ++p)
  	if (rem_backslash(p))
  	{
! 	    mch_memmove(p, p + 1, STRLEN(p));
  	    --e;
  	    --s;
  	}
***************
*** 8936,8942 ****
      for (p = buf + wildoff; p < s; ++p)
  	if (rem_backslash(p))
  	{
! 	    STRCPY(p, p + 1);
  	    --e;
  	    --s;
  	}
--- 8936,8942 ----
      for (p = buf + wildoff; p < s; ++p)
  	if (rem_backslash(p))
  	{
! 	    mch_memmove(p, p + 1, STRLEN(p));
  	    --e;
  	    --s;
  	}
*** ../vim-7.1.054/src/regexp.c	Mon Jul 30 22:32:11 2007
--- src/regexp.c	Sun Aug  5 15:43:27 2007
***************
*** 6637,6645 ****
  		}
  	    }
  	    else if (magic)
! 		STRCPY(p, p + 1);		/* remove '~' */
  	    else
! 		STRCPY(p, p + 2);		/* remove '\~' */
  	    --p;
  	}
  	else
--- 6638,6646 ----
  		}
  	    }
  	    else if (magic)
! 		mch_memmove(p, p + 1, STRLEN(p));	/* remove '~' */
  	    else
! 		mch_memmove(p, p + 2, STRLEN(p) - 1);	/* remove '\~' */
  	    --p;
  	}
  	else
*** ../vim-7.1.054/src/termlib.c	Thu May 10 20:20:59 2007
--- src/termlib.c	Sun Aug  5 21:52:41 2007
***************
*** 191,197 ****
  	    lbuf[0] == '\t' &&
  	    lbuf[1] == ':')
  	{
! 	    strcpy(lbuf, lbuf+2);
  	    llen -= 2;
  	}
  	if (lbuf[llen-2] == '\\')		/* and continuations */
--- 191,197 ----
  	    lbuf[0] == '\t' &&
  	    lbuf[1] == ':')
  	{
! 	    mch_memmove(lbuf, lbuf + 2, strlen(lbuf + 2) + 1);
  	    llen -= 2;
  	}
  	if (lbuf[llen-2] == '\\')		/* and continuations */
*** ../vim-7.1.054/src/version.c	Sun Aug  5 20:10:16 2007
--- src/version.c	Mon Aug  6 21:34:54 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     55,
  /**/

-- 
>From "know your smileys":
 %	Bike accident.  A bit far-fetched, I suppose; although...
             o      _     _         _
     _o     /\_   _ \\o  (_)\__/o  (_)
   _< \_   _>(_) (_)/<_    \_| \   _|/' \/
  (_)>(_) (_)        (_)   (_)    (_)'  _\o_

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.056 ---
To: vim-dev at vim.org
Subject: patch 7.1.056
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.056
Problem:    More prompt does not behave correctly after scrolling back.
	    (Randall W. Morris)
Solution:   Avoid lines_left becomes negative. (Chris Lubinski)  Don't check
	    mp_last when deciding to show the more prompt. (Martin Toft)
Files:	    src/message.c


*** ../vim-7.1.055/src/message.c	Sun Aug  5 19:20:04 2007
--- src/message.c	Tue Aug  7 21:52:10 2007
***************
*** 1878,1884 ****
  		/* output postponed text */
  		t_puts(&t_col, t_s, s, attr);
  
! 	    /* When no more prompt an no more room, truncate here */
  	    if (msg_no_more && lines_left == 0)
  		break;
  
--- 1878,1884 ----
  		/* output postponed text */
  		t_puts(&t_col, t_s, s, attr);
  
! 	    /* When no more prompt and no more room, truncate here */
  	    if (msg_no_more && lines_left == 0)
  		break;
  
***************
*** 1927,1933 ****
  	     * If screen is completely filled and 'more' is set then wait
  	     * for a character.
  	     */
! 	    --lines_left;
  	    if (p_more && lines_left == 0 && State != HITRETURN
  					    && !msg_no_more && !exmode_active)
  	    {
--- 1927,1934 ----
  	     * If screen is completely filled and 'more' is set then wait
  	     * for a character.
  	     */
! 	    if (lines_left > 0)
! 		--lines_left;
  	    if (p_more && lines_left == 0 && State != HITRETURN
  					    && !msg_no_more && !exmode_active)
  	    {
***************
*** 2234,2240 ****
  {
      msgchunk_T	*mp;
  
!     /* Only show somethign if there is more than one line, otherwise it looks
       * weird, typing a command without output results in one line. */
      mp = msg_sb_start(last_msgchunk);
      if (mp == NULL || mp->sb_prev == NULL)
--- 2235,2241 ----
  {
      msgchunk_T	*mp;
  
!     /* Only show something if there is more than one line, otherwise it looks
       * weird, typing a command without output results in one line. */
      mp = msg_sb_start(last_msgchunk);
      if (mp == NULL || mp->sb_prev == NULL)
***************
*** 2622,2628 ****
  		}
  	    }
  
! 	    if (scroll < 0 || (scroll == 0 && mp_last != NULL))
  	    {
  		/* displayed the requested text, more prompt again */
  		screen_fill((int)Rows - 1, (int)Rows, 0,
--- 2623,2629 ----
  		}
  	    }
  
! 	    if (scroll <= 0)
  	    {
  		/* displayed the requested text, more prompt again */
  		screen_fill((int)Rows - 1, (int)Rows, 0,
*** ../vim-7.1.055/src/version.c	Mon Aug  6 22:27:13 2007
--- src/version.c	Tue Aug  7 21:57:02 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     56,
  /**/

-- 
>From "know your smileys":
 :-| :-|   Deja' vu!

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.057 ---
To: vim-dev at vim.org
Subject: patch 7.1.057
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.057
Problem:    Problem with CursorHoldI when using "r" in Visual mode (Max
            Dyckhoff)
Solution:   Ignore CursorHold(I) when getting a second character for a Normal
            mode command.  Also abort the "r" command in Visual when a special
            key is typed.
Files:      src/normal.c


*** ../vim-7.1.056/src/normal.c	Tue Jul 10 14:02:51 2007
--- src/normal.c	Sun Aug  5 21:57:43 2007
***************
*** 889,894 ****
--- 889,899 ----
  
  	++no_mapping;
  	++allow_keys;		/* no mapping for nchar, but allow key codes */
+ #ifdef FEAT_AUTOCMD
+ 	/* Don't generate a CursorHold event here, most commands can't handle
+ 	 * it, e.g., nv_replace(), nv_csearch(). */
+ 	did_cursorhold = TRUE;
+ #endif
  	if (ca.cmdchar == 'g')
  	{
  	    /*
***************
*** 6662,6667 ****
--- 6668,6680 ----
      else
  	had_ctrl_v = NUL;
  
+     /* Abort if the character is a special key. */
+     if (IS_SPECIAL(cap->nchar))
+     {
+ 	clearopbeep(cap->oap);
+ 	return;
+     }
+ 
  #ifdef FEAT_VISUAL
      /* Visual mode "r" */
      if (VIsual_active)
***************
*** 6688,6698 ****
      }
  #endif
  
!     /*
!      * Check for a special key or not enough characters to replace.
!      */
      ptr = ml_get_cursor();
!     if (IS_SPECIAL(cap->nchar) || STRLEN(ptr) < (unsigned)cap->count1
  #ifdef FEAT_MBYTE
  	    || (has_mbyte && mb_charlen(ptr) < cap->count1)
  #endif
--- 6701,6709 ----
      }
  #endif
  
!     /* Abort if not enough characters to replace. */
      ptr = ml_get_cursor();
!     if (STRLEN(ptr) < (unsigned)cap->count1
  #ifdef FEAT_MBYTE
  	    || (has_mbyte && mb_charlen(ptr) < cap->count1)
  #endif
*** ../vim-7.1.056/src/version.c	Tue Aug  7 21:59:26 2007
--- src/version.c	Wed Aug  8 21:39:43 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     57,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
95. Only communication in your household is through email.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.058 ---
To: vim-dev at vim.org
Subject: patch 7.1.058
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.058
Problem:    When 'rightleft' is set the completion menu is positioned wrong.
	    (Baha-Eddine MOKADEM)
Solution:   Fix the completion menu. (Martin Toft)
Files:	    src/popupmnu.c, src/proto/search.pro, src/search.c


*** ../vim-7.1.057/src/popupmnu.c	Thu Jun 28 21:23:52 2007
--- src/popupmnu.c	Wed Aug  1 15:43:06 2007
***************
*** 75,81 ****
  
      row = curwin->w_cline_row + W_WINROW(curwin);
      height = curwin->w_cline_height;
-     col = curwin->w_wcol + W_WINCOL(curwin) - curwin->w_leftcol;
  
      if (firstwin->w_p_pvw)
  	top_clear = firstwin->w_height;
--- 75,80 ----
***************
*** 167,172 ****
--- 166,180 ----
      pum_base_width = max_width;
      pum_kind_width = kind_width;
  
+     /* Calculate column */
+ #ifdef FEAT_RIGHTLEFT
+     if (curwin->w_p_rl)
+ 	col = W_WINCOL(curwin) + W_WIDTH(curwin) - curwin->w_wcol -
+ 							curwin->w_leftcol - 1;
+     else
+ #endif
+ 	col = W_WINCOL(curwin) + curwin->w_wcol - curwin->w_leftcol;
+ 
      /* if there are more items than room we need a scrollbar */
      if (pum_height < size)
      {
***************
*** 179,189 ****
      if (def_width < max_width)
  	def_width = max_width;
  
!     if (col < Columns - PUM_DEF_WIDTH || col < Columns - max_width)
      {
  	/* align pum column with "col" */
  	pum_col = col;
! 	pum_width = Columns - pum_col - pum_scrollbar;
  	if (pum_width > max_width + kind_width + extra_width + 1
  						 && pum_width > PUM_DEF_WIDTH)
  	{
--- 187,209 ----
      if (def_width < max_width)
  	def_width = max_width;
  
!     if (((col < Columns - PUM_DEF_WIDTH || col < Columns - max_width)
! #ifdef FEAT_RIGHTLEFT
! 		&& !curwin->w_p_rl)
! 	    || (curwin->w_p_rl && (col > PUM_DEF_WIDTH || col > max_width)
! #endif
!        ))
      {
  	/* align pum column with "col" */
  	pum_col = col;
! 
! #ifdef FEAT_RIGHTLEFT
! 	if (curwin->w_p_rl)
! 	    pum_width = pum_col - pum_scrollbar + 1;
! 	else
! #endif
! 	    pum_width = Columns - pum_col - pum_scrollbar;
! 
  	if (pum_width > max_width + kind_width + extra_width + 1
  						 && pum_width > PUM_DEF_WIDTH)
  	{
***************
*** 195,208 ****
      else if (Columns < def_width)
      {
  	/* not enough room, will use what we have */
! 	pum_col = 0;
  	pum_width = Columns - 1;
      }
      else
      {
  	if (max_width > PUM_DEF_WIDTH)
  	    max_width = PUM_DEF_WIDTH;	/* truncate */
! 	pum_col = Columns - max_width;
  	pum_width = max_width - pum_scrollbar;
      }
  
--- 215,238 ----
      else if (Columns < def_width)
      {
  	/* not enough room, will use what we have */
! #ifdef FEAT_RIGHTLEFT
! 	if (curwin->w_p_rl)
! 	    pum_col = Columns - 1;
! 	else
! #endif
! 	    pum_col = 0;
  	pum_width = Columns - 1;
      }
      else
      {
  	if (max_width > PUM_DEF_WIDTH)
  	    max_width = PUM_DEF_WIDTH;	/* truncate */
! #ifdef FEAT_RIGHTLEFT
! 	if (curwin->w_p_rl)
! 	    pum_col = max_width - 1;
! 	else
! #endif
! 	    pum_col = Columns - max_width;
  	pum_width = max_width - pum_scrollbar;
      }
  
***************
*** 255,262 ****
  	attr = (idx == pum_selected) ? attr_select : attr_norm;
  
  	/* prepend a space if there is room */
! 	if (pum_col > 0)
! 	    screen_putchar(' ', row, pum_col - 1, attr);
  
  	/* Display each entry, use two spaces for a Tab.
  	 * Do this 3 times: For the main text, kind and extra info */
--- 285,300 ----
  	attr = (idx == pum_selected) ? attr_select : attr_norm;
  
  	/* prepend a space if there is room */
! #ifdef FEAT_RIGHTLEFT
! 	if (curwin->w_p_rl)
! 	{
! 	    if (pum_col < W_WINCOL(curwin) + W_WIDTH(curwin) - 1)
! 		screen_putchar(' ', row, pum_col + 1, attr);
! 	}
! 	else
! #endif
! 	    if (pum_col > 0)
! 		screen_putchar(' ', row, pum_col - 1, attr);
  
  	/* Display each entry, use two spaces for a Tab.
  	 * Do this 3 times: For the main text, kind and extra info */
***************
*** 282,307 ****
  		    {
  			/* Display the text that fits or comes before a Tab.
  			 * First convert it to printable characters. */
! 			char_u *st;
! 			int  saved = *p;
  
  			*p = NUL;
  			st = transstr(s);
  			*p = saved;
! 			if (st != NULL)
  			{
! 			    screen_puts_len(st, (int)STRLEN(st), row, col,
  									attr);
! 			    vim_free(st);
  			}
- 			col += width;
  
  			if (*p != TAB)
  			    break;
  
  			/* Display two spaces for a Tab. */
! 			screen_puts_len((char_u *)"  ", 2, row, col, attr);
! 			col += 2;
  			totwidth += 2;
  			s = NULL;	    /* start text at next char */
  			width = 0;
--- 320,386 ----
  		    {
  			/* Display the text that fits or comes before a Tab.
  			 * First convert it to printable characters. */
! 			char_u	*st;
! 			int	saved = *p;
  
  			*p = NUL;
  			st = transstr(s);
  			*p = saved;
! #ifdef FEAT_RIGHTLEFT
! 			if (curwin->w_p_rl)
  			{
! 			    if (st != NULL)
! 			    {
! 				char_u	*rt = reverse_text(st);
! 				char_u	*rt_saved = rt;
! 				int	len, j;
! 
! 				if (rt != NULL)
! 				{
! 				    len = STRLEN(rt);
! 				    if (len > pum_width)
! 				    {
! 					for (j = pum_width; j < len; ++j)
! 					    mb_ptr_adv(rt);
! 					len = pum_width;
! 				    }
! 				    screen_puts_len(rt, len, row,
! 							col - len + 1, attr);
! 				    vim_free(rt_saved);
! 				}
! 				vim_free(st);
! 			    }
! 			    col -= width;
! 			}
! 			else
! #endif
! 			{
! 			    if (st != NULL)
! 			    {
! 				screen_puts_len(st, (int)STRLEN(st), row, col,
  									attr);
! 				vim_free(st);
! 			    }
! 			    col += width;
  			}
  
  			if (*p != TAB)
  			    break;
  
  			/* Display two spaces for a Tab. */
! #ifdef FEAT_RIGHTLEFT
! 			if (curwin->w_p_rl)
! 			{
! 			    screen_puts_len((char_u *)"  ", 2, row, col - 1,
! 									attr);
! 			    col -= 2;
! 			}
! 			else
! #endif
! 			{
! 			    screen_puts_len((char_u *)"  ", 2, row, col, attr);
! 			    col += 2;
! 			}
  			totwidth += 2;
  			s = NULL;	    /* start text at next char */
  			width = 0;
***************
*** 322,338 ****
  					  && pum_array[idx].pum_extra == NULL)
  		    || pum_base_width + n >= pum_width)
  		break;
! 	    screen_fill(row, row + 1, col, pum_col + pum_base_width + n,
  							      ' ', ' ', attr);
! 	    col = pum_col + pum_base_width + n;
  	    totwidth = pum_base_width + n;
  	}
  
! 	screen_fill(row, row + 1, col, pum_col + pum_width, ' ', ' ', attr);
  	if (pum_scrollbar > 0)
! 	    screen_putchar(' ', row, pum_col + pum_width,
! 		    i >= thumb_pos && i < thumb_pos + thumb_heigth
  						  ? attr_thumb : attr_scroll);
  
  	++row;
      }
--- 401,444 ----
  					  && pum_array[idx].pum_extra == NULL)
  		    || pum_base_width + n >= pum_width)
  		break;
! #ifdef FEAT_RIGHTLEFT
! 	    if (curwin->w_p_rl)
! 	    {
! 		screen_fill(row, row + 1, pum_col - pum_base_width - n + 1,
! 						    col + 1, ' ', ' ', attr);
! 		col = pum_col - pum_base_width - n + 1;
! 	    }
! 	    else
! #endif
! 	    {
! 		screen_fill(row, row + 1, col, pum_col + pum_base_width + n,
  							      ' ', ' ', attr);
! 		col = pum_col + pum_base_width + n;
! 	    }
  	    totwidth = pum_base_width + n;
  	}
  
! #ifdef FEAT_RIGHTLEFT
! 	if (curwin->w_p_rl)
! 	    screen_fill(row, row + 1, pum_col - pum_width + 1, col + 1, ' ',
! 								    ' ', attr);
! 	else
! #endif
! 	    screen_fill(row, row + 1, col, pum_col + pum_width, ' ', ' ',
! 									attr);
  	if (pum_scrollbar > 0)
! 	{
! #ifdef FEAT_RIGHTLEFT
! 	    if (curwin->w_p_rl)
! 		screen_putchar(' ', row, pum_col - pum_width,
! 			i >= thumb_pos && i < thumb_pos + thumb_heigth
  						  ? attr_thumb : attr_scroll);
+ 	    else
+ #endif
+ 		screen_putchar(' ', row, pum_col + pum_width,
+ 			i >= thumb_pos && i < thumb_pos + thumb_heigth
+ 						  ? attr_thumb : attr_scroll);
+ 	}
  
  	++row;
      }
*** ../vim-7.1.057/src/proto/search.pro	Sat May  5 20:20:36 2007
--- src/proto/search.pro	Wed Aug  1 12:41:25 2007
***************
*** 1,6 ****
--- 1,7 ----
  /* search.c */
  int search_regcomp __ARGS((char_u *pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch));
  char_u *get_search_pat __ARGS((void));
+ char_u *reverse_text __ARGS((char_u *s));
  void save_search_patterns __ARGS((void));
  void restore_search_patterns __ARGS((void));
  void free_search_patterns __ARGS((void));
*** ../vim-7.1.057/src/search.c	Tue Jul 10 13:27:46 2007
--- src/search.c	Wed Aug  1 12:39:22 2007
***************
*** 101,107 ****
  static char_u	    *mr_pattern = NULL;	/* pattern used by search_regcomp() */
  #ifdef FEAT_RIGHTLEFT
  static int	    mr_pattern_alloced = FALSE; /* mr_pattern was allocated */
- static char_u	    *reverse_text __ARGS((char_u *s));
  #endif
  
  #ifdef FEAT_FIND_ID
--- 101,106 ----
***************
*** 228,239 ****
      return mr_pattern;
  }
  
! #ifdef FEAT_RIGHTLEFT
  /*
   * Reverse text into allocated memory.
   * Returns the allocated string, NULL when out of memory.
   */
!     static char_u *
  reverse_text(s)
      char_u *s;
  {
--- 227,238 ----
      return mr_pattern;
  }
  
! #if defined(FEAT_RIGHTLEFT) || defined(PROTO)
  /*
   * Reverse text into allocated memory.
   * Returns the allocated string, NULL when out of memory.
   */
!     char_u *
  reverse_text(s)
      char_u *s;
  {
***************
*** 1898,1904 ****
      }
  
  #ifdef FEAT_RIGHTLEFT
!     /* This is just guessing: when 'rightleft' is set, search for a maching
       * paren/brace in the other direction. */
      if (curwin->w_p_rl && vim_strchr((char_u *)"()[]{}<>", initc) != NULL)
  	backwards = !backwards;
--- 1897,1903 ----
      }
  
  #ifdef FEAT_RIGHTLEFT
!     /* This is just guessing: when 'rightleft' is set, search for a matching
       * paren/brace in the other direction. */
      if (curwin->w_p_rl && vim_strchr((char_u *)"()[]{}<>", initc) != NULL)
  	backwards = !backwards;
*** ../vim-7.1.057/src/version.c	Wed Aug  8 21:41:19 2007
--- src/version.c	Wed Aug  8 22:44:49 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     58,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
99. The hum of a cooling fan and the click of keys is comforting to you.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.059 ---
To: vim-dev at vim.org
Subject: patch 7.1.059
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.059
Problem:    When in Ex mode and doing "g/^/vi" and then pressing CTRL-C Vim
	    hangs and beeps. (Antony Scriven)
Solution:   Clear "got_int" in the main loop to avoid the hang.  When typing
	    CTRL-C twice in a row abort the ":g" command.  This is Vi
	    compatible.
Files:	    src/main.c


*** ../vim-7.1.058/src/main.c	Tue Jun 19 20:30:46 2007
--- src/main.c	Tue Aug  7 22:40:35 2007
***************
*** 954,960 ****
      int		cmdwin;	    /* TRUE when working in the command-line window */
      int		noexmode;   /* TRUE when return on entering Ex mode */
  {
!     oparg_T	oa;	/* operator arguments */
  
  #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
      /* Setup to catch a terminating error from the X server.  Just ignore
--- 954,961 ----
      int		cmdwin;	    /* TRUE when working in the command-line window */
      int		noexmode;   /* TRUE when return on entering Ex mode */
  {
!     oparg_T	oa;				/* operator arguments */
!     int		previous_got_int = FALSE;	/* "got_int" was TRUE */
  
  #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
      /* Setup to catch a terminating error from the X server.  Just ignore
***************
*** 1015,1026 ****
  		need_fileinfo = FALSE;
  	    }
  	}
! 	if (got_int && !global_busy)
  	{
! 	    if (!quit_more)
! 		(void)vgetc();		/* flush all buffers */
! 	    got_int = FALSE;
  	}
  	if (!exmode_active)
  	    msg_scroll = FALSE;
  	quit_more = FALSE;
--- 1016,1047 ----
  		need_fileinfo = FALSE;
  	    }
  	}
! 
! 	/* Reset "got_int" now that we got back to the main loop.  Except when
! 	 * inside a ":g/pat/cmd" command, then the "got_int" needs to abort
! 	 * the ":g" command.
! 	 * For ":g/pat/vi" we reset "got_int" when used once.  When used
! 	 * a second time we go back to Ex mode and abort the ":g" command. */
! 	if (got_int)
  	{
! 	    if (noexmode && global_busy && !exmode_active && previous_got_int)
! 	    {
! 		/* Typed two CTRL-C in a row: go back to ex mode as if "Q" was
! 		 * used and keep "got_int" set, so that it aborts ":g". */
! 		exmode_active = EXMODE_NORMAL;
! 		State = NORMAL;
! 	    }
! 	    else if (!global_busy || !exmode_active)
! 	    {
! 		if (!quit_more)
! 		    (void)vgetc();		/* flush all buffers */
! 		got_int = FALSE;
! 	    }
! 	    previous_got_int = TRUE;
  	}
+ 	else
+ 	    previous_got_int = FALSE;
+ 
  	if (!exmode_active)
  	    msg_scroll = FALSE;
  	quit_more = FALSE;
*** ../vim-7.1.058/src/version.c	Wed Aug  8 22:48:16 2007
--- src/version.c	Fri Aug 10 21:30:39 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     59,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
116. You are living with your boyfriend who networks your respective
     computers so you can sit in separate rooms and email each other

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.060 ---
To: vim-dev at vim.org
Subject: patch 7.1.060
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.060
Problem:    Splitting quickfix window messes up window layout. (Marius
	    Gedminas)
Solution:   Compute the window size in a smarter way. (Martin Toft)
Files:	    src/window.c


*** ../vim-7.1.059/src/window.c	Sun Aug  5 18:49:07 2007
--- src/window.c	Sun Aug  5 17:17:51 2007
***************
*** 2121,2127 ****
  	if (wp->w_p_pvw || bt_quickfix(wp->w_buffer))
  	{
  	    /*
! 	     * The cursor goes to the preview or the quickfix window, try
  	     * finding another window to go to.
  	     */
  	    for (;;)
--- 2121,2127 ----
  	if (wp->w_p_pvw || bt_quickfix(wp->w_buffer))
  	{
  	    /*
! 	     * If the cursor goes to the preview or the quickfix window, try
  	     * finding another window to go to.
  	     */
  	    for (;;)
***************
*** 2308,2314 ****
      frame_T	*frp, *frp2, *frp3;
      frame_T	*frp_close = win->w_frame;
      win_T	*wp;
-     int		old_size = 0;
  
      /*
       * If there is only one window there is nothing to remove.
--- 2308,2313 ----
***************
*** 2329,2361 ****
      if (frp_close->fr_parent->fr_layout == FR_COL)
      {
  #endif
! 	/* When 'winfixheight' is set, remember its old size and restore
! 	 * it later (it's a simplistic solution...).  Don't do this if the
! 	 * window will occupy the full height of the screen. */
! 	if (frp2->fr_win != NULL
! 		&& (frp2->fr_next != NULL || frp2->fr_prev != NULL)
! 		&& frp2->fr_win->w_p_wfh)
! 	    old_size = frp2->fr_win->w_height;
  	frame_new_height(frp2, frp2->fr_height + frp_close->fr_height,
  			    frp2 == frp_close->fr_next ? TRUE : FALSE, FALSE);
- 	if (old_size != 0)
- 	    win_setheight_win(old_size, frp2->fr_win);
  #ifdef FEAT_VERTSPLIT
  	*dirp = 'v';
      }
      else
      {
! 	/* When 'winfixwidth' is set, remember its old size and restore
! 	 * it later (it's a simplistic solution...).  Don't do this if the
! 	 * window will occupy the full width of the screen. */
! 	if (frp2->fr_win != NULL
! 		&& (frp2->fr_next != NULL || frp2->fr_prev != NULL)
! 		&& frp2->fr_win->w_p_wfw)
! 	    old_size = frp2->fr_win->w_width;
  	frame_new_width(frp2, frp2->fr_width + frp_close->fr_width,
  			    frp2 == frp_close->fr_next ? TRUE : FALSE, FALSE);
- 	if (old_size != 0)
- 	    win_setwidth_win(old_size, frp2->fr_win);
  	*dirp = 'h';
      }
  #endif
--- 2328,2404 ----
      if (frp_close->fr_parent->fr_layout == FR_COL)
      {
  #endif
! 	/* When 'winfixheight' is set, try to find another frame in the column
! 	 * (as close to the closed frame as possible) to distribute the height
! 	 * to. */
! 	if (frp2->fr_win != NULL && frp2->fr_win->w_p_wfh)
! 	{
! 	    frp = frp_close->fr_prev;
! 	    frp3 = frp_close->fr_next;
! 	    while (frp != NULL || frp3 != NULL)
! 	    {
! 		if (frp != NULL)
! 		{
! 		    if (frp->fr_win != NULL && !frp->fr_win->w_p_wfh)
! 		    {
! 			frp2 = frp;
! 			wp = frp->fr_win;
! 			break;
! 		    }
! 		    frp = frp->fr_prev;
! 		}
! 		if (frp3 != NULL)
! 		{
! 		    if (frp3->fr_win != NULL && !frp3->fr_win->w_p_wfh)
! 		    {
! 			frp2 = frp3;
! 			wp = frp3->fr_win;
! 			break;
! 		    }
! 		    frp3 = frp3->fr_next;
! 		}
! 	    }
! 	}
  	frame_new_height(frp2, frp2->fr_height + frp_close->fr_height,
  			    frp2 == frp_close->fr_next ? TRUE : FALSE, FALSE);
  #ifdef FEAT_VERTSPLIT
  	*dirp = 'v';
      }
      else
      {
! 	/* When 'winfixwidth' is set, try to find another frame in the column
! 	 * (as close to the closed frame as possible) to distribute the width
! 	 * to. */
! 	if (frp2->fr_win != NULL && frp2->fr_win->w_p_wfw)
! 	{
! 	    frp = frp_close->fr_prev;
! 	    frp3 = frp_close->fr_next;
! 	    while (frp != NULL || frp3 != NULL)
! 	    {
! 		if (frp != NULL)
! 		{
! 		    if (frp->fr_win != NULL && !frp->fr_win->w_p_wfw)
! 		    {
! 			frp2 = frp;
! 			wp = frp->fr_win;
! 			break;
! 		    }
! 		    frp = frp->fr_prev;
! 		}
! 		if (frp3 != NULL)
! 		{
! 		    if (frp3->fr_win != NULL && !frp3->fr_win->w_p_wfw)
! 		    {
! 			frp2 = frp3;
! 			wp = frp3->fr_win;
! 			break;
! 		    }
! 		    frp3 = frp3->fr_next;
! 		}
! 	    }
! 	}
  	frame_new_width(frp2, frp2->fr_width + frp_close->fr_width,
  			    frp2 == frp_close->fr_next ? TRUE : FALSE, FALSE);
  	*dirp = 'h';
      }
  #endif
*** ../vim-7.1.059/src/version.c	Fri Aug 10 21:32:41 2007
--- src/version.c	Sat Aug 11 13:34:42 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     60,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
117. You are more comfortable typing in html.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.061 ---
To: vim-dev at vim.org
Subject: patch 7.1.061
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.061
Problem:    Win32: When 'encoding' is "latin1" 'ignorecase' doesn't work for
	    characters with umlaut. (Joachim Hofmann)
Solution:   Do not use islower()/isupper()/tolower()/toupper() but our own
	    functions. (Chris Lubinski)
Files:	    src/mbyte.c, src/regexp.c, src/vim.h


*** ../vim-7.1.060/src/mbyte.c	Thu May 10 19:45:20 2007
--- src/mbyte.c	Sat Aug  4 13:44:36 2007
***************
*** 2320,2326 ****
  		/* Single byte: first check normally, then with ignore case. */
  		if (s1[i] != s2[i])
  		{
! 		    cdiff = TOLOWER_LOC(s1[i]) - TOLOWER_LOC(s2[i]);
  		    if (cdiff != 0)
  			return cdiff;
  		}
--- 2320,2326 ----
  		/* Single byte: first check normally, then with ignore case. */
  		if (s1[i] != s2[i])
  		{
! 		    cdiff = MB_TOLOWER(s1[i]) - MB_TOLOWER(s2[i]);
  		    if (cdiff != 0)
  			return cdiff;
  		}
*** ../vim-7.1.060/src/regexp.c	Mon Aug  6 22:27:13 2007
--- src/regexp.c	Sun Aug  5 15:43:27 2007
***************
*** 2220,2226 ****
  				break;
  			    case CLASS_LOWER:
  				for (cu = 1; cu <= 255; cu++)
! 				    if (islower(cu))
  					regc(cu);
  				break;
  			    case CLASS_PRINT:
--- 2220,2226 ----
  				break;
  			    case CLASS_LOWER:
  				for (cu = 1; cu <= 255; cu++)
! 				    if (MB_ISLOWER(cu))
  					regc(cu);
  				break;
  			    case CLASS_PRINT:
***************
*** 2240,2246 ****
  				break;
  			    case CLASS_UPPER:
  				for (cu = 1; cu <= 255; cu++)
! 				    if (isupper(cu))
  					regc(cu);
  				break;
  			    case CLASS_XDIGIT:
--- 2240,2246 ----
  				break;
  			    case CLASS_UPPER:
  				for (cu = 1; cu <= 255; cu++)
! 				    if (MB_ISUPPER(cu))
  					regc(cu);
  				break;
  			    case CLASS_XDIGIT:
***************
*** 3465,3471 ****
  			(enc_utf8 && utf_fold(prog->regstart) == utf_fold(c)))
  			|| (c < 255 && prog->regstart < 255 &&
  #endif
! 			    TOLOWER_LOC(prog->regstart) == TOLOWER_LOC(c)))))
  	    retval = regtry(prog, col);
  	else
  	    retval = 0;
--- 3465,3471 ----
  			(enc_utf8 && utf_fold(prog->regstart) == utf_fold(c)))
  			|| (c < 255 && prog->regstart < 255 &&
  #endif
! 			    MB_TOLOWER(prog->regstart) == MB_TOLOWER(c)))))
  	    retval = regtry(prog, col);
  	else
  	    retval = 0;
***************
*** 4200,4206 ****
  #ifdef FEAT_MBYTE
  			    !enc_utf8 &&
  #endif
! 			    TOLOWER_LOC(*opnd) != TOLOWER_LOC(*reginput))))
  		    status = RA_NOMATCH;
  		else if (*opnd == NUL)
  		{
--- 4200,4206 ----
  #ifdef FEAT_MBYTE
  			    !enc_utf8 &&
  #endif
! 			    MB_TOLOWER(*opnd) != MB_TOLOWER(*reginput))))
  		    status = RA_NOMATCH;
  		else if (*opnd == NUL)
  		{
***************
*** 4733,4742 ****
  		    rst.nextb = *OPERAND(next);
  		    if (ireg_ic)
  		    {
! 			if (isupper(rst.nextb))
! 			    rst.nextb_ic = TOLOWER_LOC(rst.nextb);
  			else
! 			    rst.nextb_ic = TOUPPER_LOC(rst.nextb);
  		    }
  		    else
  			rst.nextb_ic = rst.nextb;
--- 4733,4742 ----
  		    rst.nextb = *OPERAND(next);
  		    if (ireg_ic)
  		    {
! 			if (MB_ISUPPER(rst.nextb))
! 			    rst.nextb_ic = MB_TOLOWER(rst.nextb);
  			else
! 			    rst.nextb_ic = MB_TOUPPER(rst.nextb);
  		    }
  		    else
  			rst.nextb_ic = rst.nextb;
***************
*** 5558,5568 ****
  	    int	    cu, cl;
  
  	    /* This doesn't do a multi-byte character, because a MULTIBYTECODE
! 	     * would have been used for it. */
  	    if (ireg_ic)
  	    {
! 		cu = TOUPPER_LOC(*opnd);
! 		cl = TOLOWER_LOC(*opnd);
  		while (count < maxcount && (*scan == cu || *scan == cl))
  		{
  		    count++;
--- 5558,5569 ----
  	    int	    cu, cl;
  
  	    /* This doesn't do a multi-byte character, because a MULTIBYTECODE
! 	     * would have been used for it.  It does handle single-byte
! 	     * characters, such as latin1. */
  	    if (ireg_ic)
  	    {
! 		cu = MB_TOUPPER(*opnd);
! 		cl = MB_TOLOWER(*opnd);
  		while (count < maxcount && (*scan == cu || *scan == cl))
  		{
  		    count++;
***************
*** 6490,6499 ****
  	cc = utf_fold(c);
      else
  #endif
! 	 if (isupper(c))
! 	cc = TOLOWER_LOC(c);
!     else if (islower(c))
! 	cc = TOUPPER_LOC(c);
      else
  	return vim_strchr(s, c);
  
--- 6491,6500 ----
  	cc = utf_fold(c);
      else
  #endif
! 	 if (MB_ISUPPER(c))
! 	cc = MB_TOLOWER(c);
!     else if (MB_ISLOWER(c))
! 	cc = MB_TOUPPER(c);
      else
  	return vim_strchr(s, c);
  
*** ../vim-7.1.060/src/vim.h	Sat May 12 15:08:22 2007
--- src/vim.h	Sat Aug  4 13:57:36 2007
***************
*** 1380,1387 ****
  #endif
  
  #ifdef FEAT_MBYTE
! # define MB_STRICMP(d, s)	(has_mbyte ? mb_strnicmp((char_u *)(d), (char_u *)(s), (int)MAXCOL) : STRICMP((d), (s)))
! # define MB_STRNICMP(d, s, n)	(has_mbyte ? mb_strnicmp((char_u *)(d), (char_u *)(s), (int)(n)) : STRNICMP((d), (s), (n)))
  #else
  # define MB_STRICMP(d, s)	STRICMP((d), (s))
  # define MB_STRNICMP(d, s, n)	STRNICMP((d), (s), (n))
--- 1380,1393 ----
  #endif
  
  #ifdef FEAT_MBYTE
! /* We need to call mb_stricmp() even when we aren't dealing with a multi-byte
!  * encoding because mb_stricmp() takes care of all ascii and non-ascii
!  * encodings, including characters with umluats in latin1, etc., while
!  * STRICMP() only handles the system locale version, which often does not
!  * handle non-ascii properly. */
! 
! # define MB_STRICMP(d, s)	mb_strnicmp((char_u *)(d), (char_u *)(s), (int)MAXCOL)
! # define MB_STRNICMP(d, s, n)	mb_strnicmp((char_u *)(d), (char_u *)(s), (int)(n))
  #else
  # define MB_STRICMP(d, s)	STRICMP((d), (s))
  # define MB_STRNICMP(d, s, n)	STRNICMP((d), (s), (n))
*** ../vim-7.1.060/src/version.c	Sat Aug 11 13:37:36 2007
--- src/version.c	Sat Aug 11 13:55:24 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     61,
  /**/

-- 
Support your right to bare arms!  Wear short sleeves!

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.062 ---
To: vim-dev at vim.org
Subject: patch 7.1.062
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.062 (after 7.1.038)
Problem:    Indents of C comments can be wrong. (John Mullin)
Solution:   Adjust ind_len. (Chris Lubinski)
Files:	    src/misc1.c


*** ../vim-7.1.061/src/misc1.c	Mon Aug  6 22:27:13 2007
--- src/misc1.c	Fri Aug 10 19:41:42 2007
***************
*** 222,228 ****
  	 * than old) */
  	while (vim_iswhite(*p))
  	    (void)*p++;
! 	todo = size-ind_done;
      }
      else
      {
--- 222,231 ----
  	 * than old) */
  	while (vim_iswhite(*p))
  	    (void)*p++;
! 	todo = size - ind_done;
! 	ind_len += todo;    /* Set total length of indent in characters,
! 			     * which may have been undercounted until now  */
! 
      }
      else
      {
*** ../vim-7.1.061/src/version.c	Sat Aug 11 13:57:31 2007
--- src/version.c	Sat Aug 11 14:30:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     62,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
120. You ask a friend, "What's that big shiny thing?" He says, "It's the sun."

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.063 ---
To: vim-dev at vim.org
Subject: patch 7.1.063
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.063 (after 7.1.040)
Problem:    Warning for unitialized variable.
Solution:   Initialise it to NULL.
Files:	    src/ex_docmd.c


*** ../vim-7.1.062/src/ex_docmd.c	Thu Jul 26 22:55:11 2007
--- src/ex_docmd.c	Wed Aug  8 22:28:33 2007
***************
*** 10817,10823 ****
      exarg_T	*eap;
  {
      char_u	*p;
!     char_u	*g;
      char_u	*end;
      int		c;
      int		id;
--- 10818,10824 ----
      exarg_T	*eap;
  {
      char_u	*p;
!     char_u	*g = NULL;
      char_u	*end;
      int		c;
      int		id;
*** ../vim-7.1.062/src/version.c	Sat Aug 11 14:32:10 2007
--- src/version.c	Sat Aug 11 15:58:55 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     63,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
124. You begin conversations with, "Who is your internet service provider?"

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.064 ---
To: vim-dev at vim.org
Subject: patch 7.1.064
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.064
Problem:    On Interix some files appear not to exist.
Solution:   Remove the top bit from st_mode. (Ligesh)
Files:	    src/os_unix.c


*** ../vim-7.1.063/src/os_unix.c	Thu May 10 19:42:47 2007
--- src/os_unix.c	Fri Aug 10 19:32:20 2007
***************
*** 2499,2505 ****
--- 2499,2511 ----
      if (stat((char *)name, &statb))
  #endif
  	return -1;
+ #ifdef __INTERIX
+     /* The top bit makes the value negative, which means the file doesn't
+      * exist.  Remove the bit, we don't use it. */
+     return statb.st_mode & ~S_ADDACE;
+ #else
      return statb.st_mode;
+ #endif
  }
  
  /*
*** ../vim-7.1.063/src/version.c	Sat Aug 11 15:59:44 2007
--- src/version.c	Sat Aug 11 22:21:35 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     64,
  /**/

-- 
I have a watch cat! Just break in and she'll watch.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.065 ---
To: vim-dev at vim.org
Subject: patch 7.1.065 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.065 (extra)
Problem:    Win32: Compilation problem for newer version of w32api.
Solution:   Only define __IID_DEFINED__ when needed. (Chris Sutcliffe)
Files:	    src/Make_ming.mak, src/iid_ole.c


*** ../vim-7.1.064/src/Make_ming.mak	Thu May 10 19:35:54 2007
--- src/Make_ming.mak	Sat Aug 11 14:52:11 2007
***************
*** 572,579 ****
  $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
  	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
  
  $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
! 	$(CC) $(CFLAGS) -D__IID_DEFINED__ -c -o $(OUTDIR)/if_ole.o if_ole.cpp
  
  $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
  ifeq (16, $(RUBY))
--- 572,580 ----
  $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
  	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
  
+ # Remove -D__IID_DEFINED__ for newer versions of the w32api
  $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
! 	$(CC) $(CFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
  
  $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
  ifeq (16, $(RUBY))
*** ../vim-7.1.064/src/iid_ole.c	Sun Jun 13 18:45:30 2004
--- src/iid_ole.c	Sat Aug 11 14:57:58 2007
***************
*** 16,24 ****
  extern "C"{
  #endif
  
  
  #ifndef __IID_DEFINED__
! #define __IID_DEFINED__
  
  typedef struct _IID
  {
--- 16,33 ----
  extern "C"{
  #endif
  
+ #ifdef __MINGW32__
+ # include <w32api.h>
+ 
+ # if __W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION < 10
+    /* This define is missing from older MingW versions of w32api, even though
+     * IID is defined. */
+ #  define __IID_DEFINED__
+ # endif
+ #endif
  
  #ifndef __IID_DEFINED__
! # define __IID_DEFINED__
  
  typedef struct _IID
  {
***************
*** 28,39 ****
      unsigned char  c[8];
  } IID;
  
! #endif // __IID_DEFINED__
  
  #ifndef CLSID_DEFINED
! #define CLSID_DEFINED
  typedef IID CLSID;
! #endif // CLSID_DEFINED
  
  const IID IID_IVim = {0x0F0BFAE2,0x4C90,0x11d1,{0x82,0xD7,0x00,0x04,0xAC,0x36,0x85,0x19}};
  
--- 37,48 ----
      unsigned char  c[8];
  } IID;
  
! #endif
  
  #ifndef CLSID_DEFINED
! # define CLSID_DEFINED
  typedef IID CLSID;
! #endif
  
  const IID IID_IVim = {0x0F0BFAE2,0x4C90,0x11d1,{0x82,0xD7,0x00,0x04,0xAC,0x36,0x85,0x19}};
  
*** ../vim-7.1.064/src/version.c	Sat Aug 11 22:22:56 2007
--- src/version.c	Sun Aug 12 15:21:34 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     65,
  /**/

-- 
I'm writing a book.  I've got the page numbers done.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.066 ---
To: vim-dev at vim.org
Subject: patch 7.1.066
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.066
Problem:    When 'bomb' is set or reset the file should be considered
	    modified.  (Tony Mechelynck)
Solution:   Handle like 'endofline'. (Martin Toft)
Files:	    src/buffer.c, src/fileio.c, src/option.c, src/structs.h


*** ../vim-7.1.065/src/buffer.c	Mon Aug  6 22:27:12 2007
--- src/buffer.c	Sat Aug 11 16:56:57 2007
***************
*** 502,507 ****
--- 502,508 ----
      buf->b_start_eol = TRUE;
  #ifdef FEAT_MBYTE
      buf->b_p_bomb = FALSE;
+     buf->b_start_bomb = FALSE;
  #endif
      buf->b_ml.ml_mfp = NULL;
      buf->b_ml.ml_flags = ML_EMPTY;		/* empty buffer */
*** ../vim-7.1.065/src/fileio.c	Tue Jul 10 17:09:51 2007
--- src/fileio.c	Sat Aug 11 16:56:57 2007
***************
*** 654,659 ****
--- 654,660 ----
  	curbuf->b_start_eol = TRUE;
  #ifdef FEAT_MBYTE
  	curbuf->b_p_bomb = FALSE;
+ 	curbuf->b_start_bomb = FALSE;
  #endif
      }
  
***************
*** 912,918 ****
--- 913,922 ----
  	file_rewind = FALSE;
  #ifdef FEAT_MBYTE
  	if (set_options)
+ 	{
  	    curbuf->b_p_bomb = FALSE;
+ 	    curbuf->b_start_bomb = FALSE;
+ 	}
  	conv_error = 0;
  #endif
      }
***************
*** 1361,1367 ****
--- 1365,1374 ----
  		    size -= blen;
  		    mch_memmove(ptr, ptr + blen, (size_t)size);
  		    if (set_options)
+ 		    {
  			curbuf->b_p_bomb = TRUE;
+ 			curbuf->b_start_bomb = TRUE;
+ 		    }
  		}
  
  		if (fio_flags == FIO_UCSBOM)
*** ../vim-7.1.065/src/option.c	Tue Jul 24 14:57:16 2007
--- src/option.c	Sat Aug 11 16:56:57 2007
***************
*** 7118,7123 ****
--- 7118,7128 ----
      /* when 'endofline' is changed, redraw the window title */
      else if ((int *)varp == &curbuf->b_p_eol)
  	need_maketitle = TRUE;
+ #ifdef FEAT_MBYTE
+     /* when 'bomb' is changed, redraw the window title */
+     else if ((int *)varp == &curbuf->b_p_bomb)
+ 	need_maketitle = TRUE;
+ #endif
  #endif
  
      /* when 'bin' is set also set some other options */
***************
*** 10604,10609 ****
--- 10609,10616 ----
      buf->b_start_ffc = *buf->b_p_ff;
      buf->b_start_eol = buf->b_p_eol;
  #ifdef FEAT_MBYTE
+     buf->b_start_bomb = buf->b_p_bomb;
+ 
      /* Only use free/alloc when necessary, they take time. */
      if (buf->b_start_fenc == NULL
  			     || STRCMP(buf->b_start_fenc, buf->b_p_fenc) != 0)
***************
*** 10617,10623 ****
  /*
   * Return TRUE if 'fileformat' and/or 'fileencoding' has a different value
   * from when editing started (save_file_ff() called).
!  * Also when 'endofline' was changed and 'binary' is set.
   * Don't consider a new, empty buffer to be changed.
   */
      int
--- 10624,10631 ----
  /*
   * Return TRUE if 'fileformat' and/or 'fileencoding' has a different value
   * from when editing started (save_file_ff() called).
!  * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
!  * changed and 'binary' is not set.
   * Don't consider a new, empty buffer to be changed.
   */
      int
***************
*** 10636,10641 ****
--- 10644,10651 ----
      if (buf->b_p_bin && buf->b_start_eol != buf->b_p_eol)
  	return TRUE;
  #ifdef FEAT_MBYTE
+     if (!buf->b_p_bin && buf->b_start_bomb != buf->b_p_bomb)
+ 	return TRUE;
      if (buf->b_start_fenc == NULL)
  	return (*buf->b_p_fenc != NUL);
      return (STRCMP(buf->b_start_fenc, buf->b_p_fenc) != 0);
*** ../vim-7.1.065/src/structs.h	Thu Jul 26 22:55:11 2007
--- src/structs.h	Sat Aug 11 16:56:57 2007
***************
*** 1453,1458 ****
--- 1453,1459 ----
  #ifdef FEAT_MBYTE
      char_u	*b_start_fenc;	/* 'fileencoding' when edit started or NULL */
      int		b_bad_char;	/* "++bad=" argument when edit started or 0 */
+     int		b_start_bomb;	/* 'bomb' when it was read */
  #endif
  
  #ifdef FEAT_EVAL
*** ../vim-7.1.065/src/version.c	Sun Aug 12 15:24:05 2007
--- src/version.c	Sun Aug 12 15:48:34 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     66,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
127. You bring your laptop and cellular phone to church.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.067 ---
To: vim-dev at vim.org
Subject: patch 7.1.067
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.067
Problem:    'thesaurus' doesn't work when 'infercase' is set. (Mohsin)
Solution:   Don't copy the characters being completed but check the case and
	    apply it to the suggested word.  Also fix that the first word in
	    the thesaurus line is not used.  (Martin Toft)
Files:	    src/edit.c


*** ../vim-7.1.066/src/edit.c	Sun Jul 29 15:02:34 2007
--- src/edit.c	Sat Aug 11 17:16:51 2007
***************
*** 2057,2063 ****
   * case of the originally typed text is used, and the case of the completed
   * text is inferred, ie this tries to work out what case you probably wanted
   * the rest of the word to be in -- webb
-  * TODO: make this work for multi-byte characters.
   */
      int
  ins_compl_add_infercase(str, len, icase, fname, dir, flags)
--- 2057,2062 ----
***************
*** 2068,2121 ****
      int		dir;
      int		flags;
  {
      int		has_lower = FALSE;
      int		was_letter = FALSE;
-     int		idx;
  
!     if (p_ic && curbuf->b_p_inf && len < IOSIZE)
      {
! 	/* Infer case of completed part -- webb */
! 	/* Use IObuff, str would change text in buffer! */
! 	vim_strncpy(IObuff, str, len);
  
! 	/* Rule 1: Were any chars converted to lower? */
! 	for (idx = 0; idx < compl_length; ++idx)
  	{
! 	    if (islower(compl_orig_text[idx]))
  	    {
! 		has_lower = TRUE;
! 		if (isupper(IObuff[idx]))
! 		{
! 		    /* Rule 1 is satisfied */
! 		    for (idx = compl_length; idx < len; ++idx)
! 			IObuff[idx] = TOLOWER_LOC(IObuff[idx]);
! 		    break;
! 		}
  	    }
  	}
  
! 	/*
! 	 * Rule 2: No lower case, 2nd consecutive letter converted to
! 	 * upper case.
! 	 */
! 	if (!has_lower)
  	{
! 	    for (idx = 0; idx < compl_length; ++idx)
  	    {
! 		if (was_letter && isupper(compl_orig_text[idx])
! 						      && islower(IObuff[idx]))
  		{
! 		    /* Rule 2 is satisfied */
! 		    for (idx = compl_length; idx < len; ++idx)
! 			IObuff[idx] = TOUPPER_LOC(IObuff[idx]);
! 		    break;
  		}
- 		was_letter = isalpha(compl_orig_text[idx]);
  	    }
- 	}
  
! 	/* Copy the original case of the part we typed */
! 	STRNCPY(IObuff, compl_orig_text, compl_length);
  
  	return ins_compl_add(IObuff, len, icase, fname, NULL, dir,
  								flags, FALSE);
--- 2067,2213 ----
      int		dir;
      int		flags;
  {
+     char_u	*p;
+     int		i, c;
+     int		actual_len;		/* Take multi-byte characters */
+     int		actual_compl_length;	/* into account. */
+     int		*wca;		        /* Wide character array. */
      int		has_lower = FALSE;
      int		was_letter = FALSE;
  
!     if (p_ic && curbuf->b_p_inf)
      {
! 	/* Infer case of completed part. */
  
! 	/* Find actual length of completion. */
! #ifdef FEAT_MBYTE
! 	if (has_mbyte)
  	{
! 	    p = str;
! 	    actual_len = 0;
! 	    while (*p != NUL)
  	    {
! 		mb_ptr_adv(p);
! 		++actual_len;
  	    }
  	}
+ 	else
+ #endif
+ 	    actual_len = len;
  
! 	/* Find actual length of original text. */
! #ifdef FEAT_MBYTE
! 	if (has_mbyte)
  	{
! 	    p = compl_orig_text;
! 	    actual_compl_length = 0;
! 	    while (*p != NUL)
  	    {
! 		mb_ptr_adv(p);
! 		++actual_compl_length;
! 	    }
! 	}
! 	else
! #endif
! 	    actual_compl_length = compl_length;
! 
! 	/* Allocate wide character array for the completion and fill it. */
! 	wca = (int *)alloc(actual_len * sizeof(int));
! 	if (wca != NULL)
! 	{
! 	    p = str;
! 	    for (i = 0; i < actual_len; ++i)
! #ifdef FEAT_MBYTE
! 		if (has_mbyte)
! 		    wca[i] = mb_ptr2char_adv(&p);
! 		else
! #endif
! 		    wca[i] = *(p++);
! 
! 	    /* Rule 1: Were any chars converted to lower? */
! 	    p = compl_orig_text;
! 	    for (i = 0; i < actual_compl_length; ++i)
! 	    {
! #ifdef FEAT_MBYTE
! 		if (has_mbyte)
! 		    c = mb_ptr2char_adv(&p);
! 		else
! #endif
! 		    c = *(p++);
! 		if (MB_ISLOWER(c))
  		{
! 		    has_lower = TRUE;
! 		    if (MB_ISUPPER(wca[i]))
! 		    {
! 			/* Rule 1 is satisfied. */
! 			for (i = actual_compl_length; i < actual_len; ++i)
! 			    wca[i] = MB_TOLOWER(wca[i]);
! 			break;
! 		    }
  		}
  	    }
  
! 	    /*
! 	     * Rule 2: No lower case, 2nd consecutive letter converted to
! 	     * upper case.
! 	     */
! 	    if (!has_lower)
! 	    {
! 		p = compl_orig_text;
! 		for (i = 0; i < actual_compl_length; ++i)
! 		{
! #ifdef FEAT_MBYTE
! 		    if (has_mbyte)
! 			c = mb_ptr2char_adv(&p);
! 		    else
! #endif
! 			c = *(p++);
! 		    if (was_letter && MB_ISUPPER(c) && MB_ISLOWER(wca[i]))
! 		    {
! 			/* Rule 2 is satisfied. */
! 			for (i = actual_compl_length; i < actual_len; ++i)
! 			    wca[i] = MB_TOUPPER(wca[i]);
! 			break;
! 		    }
! 		    was_letter = MB_ISLOWER(c) || MB_ISUPPER(c);
! 		}
! 	    }
! 
! 	    /* Copy the original case of the part we typed. */
! 	    p = compl_orig_text;
! 	    for (i = 0; i < actual_compl_length; ++i)
! 	    {
! #ifdef FEAT_MBYTE
! 		if (has_mbyte)
! 		    c = mb_ptr2char_adv(&p);
! 		else
! #endif
! 		    c = *(p++);
! 		if (MB_ISLOWER(c))
! 		    wca[i] = MB_TOLOWER(wca[i]);
! 		else if (MB_ISUPPER(c))
! 		    wca[i] = MB_TOUPPER(wca[i]);
! 	    }
! 
! 	    /* 
! 	     * Generate encoding specific output from wide character array.
! 	     * Multi-byte characters can occupy up to five bytes more than
! 	     * ASCII characters, and we also need one byte for NUL, so stay
! 	     * six bytes away from the edge of IObuff.
! 	     */
! 	    p = IObuff;
! 	    i = 0;
! 	    while (i < actual_len && (p - IObuff + 6) < IOSIZE)
! #ifdef FEAT_MBYTE
! 		if (has_mbyte)
! 		    p += mb_char2bytes(wca[i++], p);
! 		else
! #endif
! 		    *(p++) = wca[i++];
! 	    *p = NUL;
! 
! 	    vim_free(wca);
! 	}
  
  	return ins_compl_add(IObuff, len, icase, fname, NULL, dir,
  								flags, FALSE);
***************
*** 2842,2847 ****
--- 2934,2940 ----
  			/*
  			 * Add the other matches on the line
  			 */
+ 			ptr = buf;
  			while (!got_int)
  			{
  			    /* Find start of the next word.  Skip white
***************
*** 2851,2857 ****
  				break;
  			    wstart = ptr;
  
! 			    /* Find end of the word and add it. */
  #ifdef FEAT_MBYTE
  			    if (has_mbyte)
  				/* Japanese words may have characters in
--- 2944,2950 ----
  				break;
  			    wstart = ptr;
  
! 			    /* Find end of the word. */
  #ifdef FEAT_MBYTE
  			    if (has_mbyte)
  				/* Japanese words may have characters in
***************
*** 2868,2876 ****
  			    else
  #endif
  				ptr = find_word_end(ptr);
! 			    add_r = ins_compl_add_infercase(wstart,
! 				    (int)(ptr - wstart),
! 				    p_ic, files[i], *dir, 0);
  			}
  		    }
  		    if (add_r == OK)
--- 2961,2972 ----
  			    else
  #endif
  				ptr = find_word_end(ptr);
! 
! 			    /* Add the word. Skip the regexp match. */
! 			    if (wstart != regmatch->startp[0])
! 				add_r = ins_compl_add_infercase(wstart,
! 					(int)(ptr - wstart),
! 					p_ic, files[i], *dir, 0);
  			}
  		    }
  		    if (add_r == OK)
*** ../vim-7.1.066/src/version.c	Sun Aug 12 15:50:26 2007
--- src/version.c	Sun Aug 12 16:36:34 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     67,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
128. You can access the Net -- via your portable and cellular phone.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.068 ---
To: vim-dev at vim.org
Subject: patch 7.1.068
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.068
Problem:    When 'equalalways' is set and splitting a window, it's possible
	    that another small window gets bigger.
Solution:   Only equalize window sizes when after a split the windows are
	    smaller than another window. (Martin Toft)
Files:	    runtime/doc/options.txt, runtime/doc/windows.txt, src/window.c


*** ../vim-7.1.067/runtime/doc/options.txt	Sat May 12 16:27:04 2007
--- runtime/doc/options.txt	Sat Aug 11 17:25:38 2007
***************
*** 1,4 ****
! *options.txt*	For Vim version 7.1.  Last change: 2007 May 11
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
--- 1,4 ----
! *options.txt*	For Vim version 7.1.  Last change: 2007 Aug 10
  
  
  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
***************
*** 2415,2422 ****
  	When mixing vertically and horizontally split windows, a minimal size
  	is computed and some windows may be larger if there is room.  The
  	'eadirection' option tells in which direction the size is affected.
! 	Changing the height of a window can be avoided by setting
! 	'winfixheight'.
  
  						*'equalprg'* *'ep'*
  'equalprg' 'ep'		string	(default "")
--- 2418,2425 ----
  	When mixing vertically and horizontally split windows, a minimal size
  	is computed and some windows may be larger if there is room.  The
  	'eadirection' option tells in which direction the size is affected.
! 	Changing the height and width of a window can be avoided by setting
! 	'winfixheight' and 'winfixwidth', respectively.
  
  						*'equalprg'* *'ep'*
  'equalprg' 'ep'		string	(default "")
*** ../vim-7.1.067/runtime/doc/windows.txt	Sat May 12 16:42:48 2007
--- runtime/doc/windows.txt	Sat Aug 11 17:25:38 2007
***************
*** 132,138 ****
  		the same file.  Make new window N high (default is to use half
  		the height of the current window).  Reduces the current window
  		height to create room (and others, if the 'equalalways' option
! 		is set and 'eadirection' isn't "hor").
  		Note: CTRL-S does not work on all terminals and might block
  		further input, use CTRL-Q to get going again.
  		Also see |++opt| and |+cmd|.
--- 132,139 ----
  		the same file.  Make new window N high (default is to use half
  		the height of the current window).  Reduces the current window
  		height to create room (and others, if the 'equalalways' option
! 		is set, 'eadirection' isn't "hor", and one of them is higher
! 		than the current or the new window).
  		Note: CTRL-S does not work on all terminals and might block
  		further input, use CTRL-Q to get going again.
  		Also see |++opt| and |+cmd|.
***************
*** 140,148 ****
  CTRL-W CTRL-V						*CTRL-W_CTRL-V*
  CTRL-W v						*CTRL-W_v*
  :[N]vs[plit] [++opt] [+cmd] [file]			*:vs* *:vsplit*
! 		Like |:split|, but split vertically.  If 'equalalways' is set
! 		and 'eadirection' isn't "ver" the windows will be spread out
! 		horizontally, unless a width was specified.
  		Note: In other places CTRL-Q does the same as CTRL-V, but here
  		it doesn't!
  
--- 141,153 ----
  CTRL-W CTRL-V						*CTRL-W_CTRL-V*
  CTRL-W v						*CTRL-W_v*
  :[N]vs[plit] [++opt] [+cmd] [file]			*:vs* *:vsplit*
! 		Like |:split|, but split vertically.  The windows will be
! 		spread out horizontally if
! 		1. a width was not specified,
! 		2. 'equalalways' is set,
! 		3. 'eadirection' isn't "ver", and
! 		4. one of the other windows are wider than the current or new
! 		   window.
  		Note: In other places CTRL-Q does the same as CTRL-V, but here
  		it doesn't!
  
*** ../vim-7.1.067/src/window.c	Sat Aug 11 13:37:36 2007
--- src/window.c	Sat Aug 11 17:25:38 2007
***************
*** 733,739 ****
      if (flags & WSP_VERT)
      {
  	layout = FR_ROW;
- 	do_equal = (p_ea && new_size == 0 && *p_ead != 'v');
  
  	/*
  	 * Check if we are able to split the current window and compute its
--- 733,738 ----
***************
*** 770,785 ****
  	 * instead, if possible. */
  	if (oldwin->w_p_wfw)
  	    win_setwidth_win(oldwin->w_width + new_size, oldwin);
      }
      else
  #endif
      {
  	layout = FR_COL;
- 	do_equal = (p_ea && new_size == 0
- #ifdef FEAT_VERTSPLIT
- 		&& *p_ead != 'h'
- #endif
- 		);
  
  	/*
  	 * Check if we are able to split the current window and compute its
--- 769,799 ----
  	 * instead, if possible. */
  	if (oldwin->w_p_wfw)
  	    win_setwidth_win(oldwin->w_width + new_size, oldwin);
+ 
+ 	/* Only make all windows the same width if one of them (except oldwin)
+ 	 * is wider than one of the split windows. */
+ 	if (!do_equal && p_ea && size == 0 && *p_ead != 'v'
+ 	   && oldwin->w_frame->fr_parent != NULL)
+ 	{
+ 	    frp = oldwin->w_frame->fr_parent->fr_child;
+ 	    while (frp != NULL)
+ 	    {
+ 		if (frp->fr_win != oldwin && frp->fr_win != NULL
+ 			&& (frp->fr_win->w_width > new_size
+ 			    || frp->fr_win->w_width > oldwin->w_width
+ 						   - new_size - STATUS_HEIGHT))
+ 		{
+ 		    do_equal = TRUE;
+ 		    break;
+ 		}
+ 		frp = frp->fr_next;
+ 	    }
+ 	}
      }
      else
  #endif
      {
  	layout = FR_COL;
  
  	/*
  	 * Check if we are able to split the current window and compute its
***************
*** 831,836 ****
--- 845,873 ----
  	    oldwin_height = oldwin->w_height;
  	    if (need_status)
  		oldwin_height -= STATUS_HEIGHT;
+ 	}
+ 
+ 	/* Only make all windows the same height if one of them (except oldwin)
+ 	 * is higher than one of the split windows. */
+ 	if (!do_equal && p_ea && size == 0
+ #ifdef FEAT_VERTSPLIT
+ 		&& *p_ead != 'h'
+ #endif
+ 	   && oldwin->w_frame->fr_parent != NULL)
+ 	{
+ 	    frp = oldwin->w_frame->fr_parent->fr_child;
+ 	    while (frp != NULL)
+ 	    {
+ 		if (frp->fr_win != oldwin && frp->fr_win != NULL
+ 			&& (frp->fr_win->w_height > new_size
+ 			    || frp->fr_win->w_height > oldwin_height - new_size
+ 							      - STATUS_HEIGHT))
+ 		{
+ 		    do_equal = TRUE;
+ 		    break;
+ 		}
+ 		frp = frp->fr_next;
+ 	    }
  	}
      }
  
*** ../vim-7.1.067/src/version.c	Sun Aug 12 16:38:03 2007
--- src/version.c	Sun Aug 12 16:51:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     68,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
129. You cancel your newspaper subscription.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.069 ---
To: vim-dev at vim.org
Subject: patch 7.1.069
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.069
Problem:    GTK GUI: When using confirm() without a default button there still
	    is a default choice.
Solution:   Ignore Enter and Space when there is no default button. (Chris
	    Lubinski)
Files:	    src/gui_gtk.c


*** ../vim-7.1.068/src/gui_gtk.c	Mon May 14 19:35:51 2007
--- src/gui_gtk.c	Sat Aug 11 17:38:03 2007
***************
*** 1630,1640 ****
   */
  /*ARGSUSED*/
      static int
! dlg_key_press_event(GtkWidget * widget, GdkEventKey * event, CancelData *data)
  {
!     /* Ignore hitting Enter when there is no default button. */
!     if (data->ignore_enter && event->keyval == GDK_Return)
  	return TRUE;
  
      if (event->keyval != GDK_Escape && event->keyval != GDK_Return)
  	return FALSE;
--- 1630,1643 ----
   */
  /*ARGSUSED*/
      static int
! dlg_key_press_event(GtkWidget *widget, GdkEventKey *event, CancelData *data)
  {
!     /* Ignore hitting Enter (or Space) when there is no default button. */
!     if (data->ignore_enter && (event->keyval == GDK_Return
! 						     || event->keyval == ' '))
  	return TRUE;
+     else    /* A different key was pressed, return to normal behavior */
+ 	data->ignore_enter = FALSE;
  
      if (event->keyval != GDK_Escape && event->keyval != GDK_Return)
  	return FALSE;
***************
*** 2223,2228 ****
--- 2226,2238 ----
  dialog_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
  {
      DialogInfo *di = (DialogInfo *)data;
+ 
+     /* Ignore hitting Enter (or Space) when there is no default button. */
+     if (di->ignore_enter && (event->keyval == GDK_Return
+ 						     || event->keyval == ' '))
+ 	return TRUE;
+     else    /* A different key was pressed, return to normal behavior */
+ 	di->ignore_enter = FALSE;
  
      /* Close the dialog when hitting "Esc". */
      if (event->keyval == GDK_Escape)
*** ../vim-7.1.068/src/version.c	Sun Aug 12 16:55:01 2007
--- src/version.c	Tue Aug 14 14:58:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     69,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
148. You find it easier to dial-up the National Weather Service
     Weather/your_town/now.html than to simply look out the window.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.070 ---
To: vim-dev at vim.org
Subject: patch 7.1.070 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.070 (extra)
Problem:    Win32 GUI: When using confirm() without a default button there
	    still is a default choice.
Solution:   Set focus on something else than a button. (Chris Lubinski)
Files:	    src/gui_w32.c


*** ../vim-7.1.069/src/gui_w32.c	Tue Jun 19 10:09:15 2007
--- src/gui_w32.c	Sat Aug 11 17:39:50 2007
***************
*** 2894,2899 ****
--- 2894,2903 ----
  	(void)SetFocus(hwnd);
  	if (dialog_default_button > IDCANCEL)
  	    (void)SetFocus(GetDlgItem(hwnd, dialog_default_button));
+ 	else
+ 	    /* We don't have a default, set focus on another element of the
+ 	     * dialog window, probably the icon */
+ 	    (void)SetFocus(GetDlgItem(hwnd, DLG_NONBUTTON_CONTROL));
  	return FALSE;
      }
  
*** ../vim-7.1.069/src/version.c	Tue Aug 14 14:59:41 2007
--- src/version.c	Tue Aug 14 16:55:41 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     70,
  /**/

-- 
You are not really successful until someone claims he sat
beside you in school.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.071 ---
To: vim-dev at vim.org
Subject: patch 7.1.071
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.071 (after 7.1.040)
Problem:    Regexp patterns are not tested.
Solution:   Add a basic test, to be expanded later.
	    Also add (commented-out) support for valgrind.
Files:	    src/testdir/Makefile, src/testdir/test64.in, src/testdir/test64.ok


*** ../vim-7.1.070/src/testdir/Makefile	Thu Jul 26 22:55:11 2007
--- src/testdir/Makefile	Tue Aug 14 15:16:08 2007
***************
*** 4,9 ****
--- 4,13 ----
  
  VIMPROG = ../vim
  
+ # Uncomment this line for using valgrind.
+ # The output goes into a file "valgrind.$PID" (sorry, no test number).
+ # VALGRIND = valgrind --tool=memcheck --num-callers=15 --logfile=valgrind
+ 
  SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
  		test7.out test8.out test9.out test10.out test11.out \
  		test12.out  test13.out test14.out test15.out test17.out \
***************
*** 15,21 ****
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test49.out test51.out test52.out test53.out \
  		test54.out test55.out test56.out test57.out test58.out \
! 		test59.out test60.out test61.out test62.out test63.out
  
  SCRIPTS_GUI = test16.out
  
--- 19,26 ----
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test49.out test51.out test52.out test53.out \
  		test54.out test55.out test56.out test57.out test58.out \
! 		test59.out test60.out test61.out test62.out test63.out \
! 		test64.out
  
  SCRIPTS_GUI = test16.out
  
***************
*** 38,44 ****
  
  test1.out: test1.in
  	-rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo
! 	$(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
  	@/bin/sh -c "if diff test.out $*.ok; \
  		then mv -f test.out $*.out; \
  		else echo; \
--- 43,49 ----
  
  test1.out: test1.in
  	-rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo
! 	$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
  	@/bin/sh -c "if diff test.out $*.ok; \
  		then mv -f test.out $*.out; \
  		else echo; \
***************
*** 51,57 ****
  	cp $*.ok test.ok
  	# Sleep a moment to avoid that the xterm title is messed up
  	@-sleep .2
! 	-$(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
  	@/bin/sh -c "if test -f test.out; then\
  		  if diff test.out $*.ok; \
  		  then mv -f test.out $*.out; \
--- 56,62 ----
  	cp $*.ok test.ok
  	# Sleep a moment to avoid that the xterm title is messed up
  	@-sleep .2
! 	-$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
  	@/bin/sh -c "if test -f test.out; then\
  		  if diff test.out $*.ok; \
  		  then mv -f test.out $*.out; \
*** ../vim-7.1.070/src/testdir/test64.in	Tue Aug 14 17:26:28 2007
--- src/testdir/test64.in	Tue Aug 14 16:03:44 2007
***************
*** 0 ****
--- 1,52 ----
+ Test for regexp patterns.
+ 
+ A pattern that gives the expected result produces OK, so that we know it was
+ actually tried.
+ 
+ STARTTEST
+ :so small.vim
+ :" tl is a List of Lists with:
+ :"    regexp pattern
+ :"    text to test the pattern on
+ :"    expected match (optional)
+ :"    expected submatch 1 (optional)
+ :"    expected submatch 2 (optional)
+ :"    etc.
+ :"  When there is no match use only the first two items.
+ :let tl = []
+ :call add(tl, ['b', 'abcdef', 'b'])
+ :call add(tl, ['bc*', 'abccccdef', 'bcccc'])
+ :call add(tl, ['bc\{-}', 'abccccdef', 'b'])
+ :call add(tl, ['bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
+ :call add(tl, ['x', 'abcdef'])
+ :"
+ :for t in tl
+ :  let l = matchlist(t[1], t[0])
+ :" check the match itself
+ :  if len(l) == 0 && len(t) > 2
+ :    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", did not match, expected: \"' . t[2] . '\"'
+ :  elseif len(l) > 0 && len(t) == 2
+ :    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected no match'
+ :  elseif len(t) > 2 && l[0] != t[2]
+ :    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected: \"' . t[2] . '\"'
+ :  else
+ :    $put ='OK'
+ :  endif
+ :  if len(l) > 0
+ :"   check all the nine submatches
+ :    for i in range(1, 9)
+ :      if len(t) <= i + 2
+ :        let e = ''
+ :      else
+ :        let e = t[i + 2]
+ :      endif
+ :      if l[i] != e
+ :        $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+ :      endif
+ :    endfor
+ :  endif
+ :endfor
+ :/^Results/,$wq! test.out
+ ENDTEST
+ 
+ Results of test64:
*** ../vim-7.1.070/src/testdir/test64.ok	Tue Aug 14 17:26:28 2007
--- src/testdir/test64.ok	Tue Aug 14 16:01:47 2007
***************
*** 0 ****
--- 1,6 ----
+ Results of test64:
+ OK
+ OK
+ OK
+ OK
+ OK
*** ../vim-7.1.070/src/version.c	Tue Aug 14 16:57:04 2007
--- src/version.c	Tue Aug 14 17:25:20 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     71,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
150. You find yourself counting emoticons to get to sleep.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.072 ---
To: vim-dev at vim.org
Subject: patch 7.1.072 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.072 (extra, after 7.1.041 and 7.1.071)
Problem:    Some changes for patch 7.1.071 are in extra files.
Solution:   Update the extra files.  Also fix a few warnings from the DOS test
	    makefile.
Files:	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms


*** ../vim-7.1.071/src/testdir/Make_amiga.mak	Thu Jul 26 23:10:50 2007
--- src/testdir/Make_amiga.mak	Tue Aug 14 15:14:03 2007
***************
*** 25,31 ****
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out test63.out
  
  .SUFFIXES: .in .out
  
--- 25,31 ----
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out test63.out test64.out
  
  .SUFFIXES: .in .out
  
***************
*** 108,110 ****
--- 108,111 ----
  test61.out: test61.in
  test62.out: test62.in
  test63.out: test63.in
+ test64.out: test64.in
*** ../vim-7.1.071/src/testdir/Make_dos.mak	Thu Jul 26 23:10:50 2007
--- src/testdir/Make_dos.mak	Tue Aug 14 15:14:25 2007
***************
*** 19,25 ****
  		test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out \
  		test55.out test56.out test57.out test58.out test59.out \
! 		test60.out test61.out test62.out test63.out
  
  SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
  		test8.out test9.out test11.out test13.out test14.out \
--- 19,25 ----
  		test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out \
  		test55.out test56.out test57.out test58.out test59.out \
! 		test60.out test61.out test62.out test63.out test64.out
  
  SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
  		test8.out test9.out test11.out test13.out test14.out \
***************
*** 51,69 ****
  
  clean:
  	-del *.out
! 	-del test.ok
! 	-del small.vim
! 	-del tiny.vim
! 	-del mbyte.vim
  	-del X*
! 	-del viminfo
  
  .in.out:
  	copy $*.ok test.ok
  	$(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in
  	diff test.out $*.ok
! 	-del $*.out
  	rename test.out $*.out
  	-del X*
  	-del test.ok
! 	-del viminfo
--- 51,69 ----
  
  clean:
  	-del *.out
! 	-if exist test.ok del test.ok
! 	-if exist small.vim del small.vim
! 	-if exist tiny.vim del tiny.vim
! 	-if exist mbyte.vim del mbyte.vim
  	-del X*
! 	-if exist viminfo del viminfo
  
  .in.out:
  	copy $*.ok test.ok
  	$(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in
  	diff test.out $*.ok
! 	-if exist $*.out del $*.out
  	rename test.out $*.out
  	-del X*
  	-del test.ok
! 	-if exist viminfo del viminfo
*** ../vim-7.1.071/src/testdir/Make_os2.mak	Thu Jul 26 23:10:50 2007
--- src/testdir/Make_os2.mak	Tue Aug 14 15:14:44 2007
***************
*** 25,31 ****
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out test63.out
  
  .SUFFIXES: .in .out
  
--- 25,31 ----
  		test43.out test44.out test45.out test46.out test47.out \
  		test48.out test51.out test53.out test54.out test55.out \
  		test56.out test57.out test58.out test59.out test60.out \
! 		test61.out test62.out test63.out test64.out
  
  .SUFFIXES: .in .out
  
*** ../vim-7.1.071/src/testdir/Make_vms.mms	Thu Jul 26 23:10:50 2007
--- src/testdir/Make_vms.mms	Tue Aug 14 15:15:56 2007
***************
*** 4,10 ****
  # Authors:	Zoltan Arpadffy, <arpadffy at polarhome.com>
  #		Sandor Kopanyi,  <sandor.kopanyi at mailbox.hu>
  #
! # Last change:  2007 Jul 24
  #
  # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
  # Edit the lines in the Configuration section below to select.
--- 4,10 ----
  # Authors:	Zoltan Arpadffy, <arpadffy at polarhome.com>
  #		Sandor Kopanyi,  <sandor.kopanyi at mailbox.hu>
  #
! # Last change:  2007 Aug 14
  #
  # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
  # Edit the lines in the Configuration section below to select.
***************
*** 59,65 ****
  	 test43.out test44.out test45.out test46.out \
  	 test48.out test51.out test53.out test54.out test55.out \
  	 test56.out test57.out test58.out test59.out test60.out \
! 	 test61.out test62.out test63.out
  
  .IFDEF WANT_GUI
  SCRIPT_GUI = test16.out
--- 59,65 ----
  	 test43.out test44.out test45.out test46.out \
  	 test48.out test51.out test53.out test54.out test55.out \
  	 test56.out test57.out test58.out test59.out test60.out \
! 	 test61.out test62.out test63.out test64.out
  
  .IFDEF WANT_GUI
  SCRIPT_GUI = test16.out
*** ../vim-7.1.071/src/version.c	Tue Aug 14 17:28:14 2007
--- src/version.c	Tue Aug 14 17:51:21 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     72,
  /**/

-- 
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/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.073 ---
To: vim-dev at vim.org
Subject: patch 7.1.073
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.073 (after 7.1.062)
Problem:    Wrong cursor position and crash when 'preserveindent' is set.
	    (Charles Campbell)
Solution:   Handle the situation that we start without indent. (Chris
	    Lubinski)
Files:	    src/misc1.c


*** ../vim-7.1.072/src/misc1.c	Sat Aug 11 14:32:10 2007
--- src/misc1.c	Tue Aug 14 21:21:49 2007
***************
*** 104,110 ****
      int		ind_done = 0;	    /* measured in spaces */
      int		tab_pad;
      int		retval = FALSE;
!     int		orig_char_len = 0;  /* number of initial whitespace chars when
  				       'et' and 'pi' are both set */
  
      /*
--- 104,110 ----
      int		ind_done = 0;	    /* measured in spaces */
      int		tab_pad;
      int		retval = FALSE;
!     int		orig_char_len = -1; /* number of initial whitespace chars when
  				       'et' and 'pi' are both set */
  
      /*
***************
*** 159,165 ****
  
  	    /* Fill to next tabstop with a tab, if possible */
  	    tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
! 	    if (todo >= tab_pad && orig_char_len == 0)
  	    {
  		doit = TRUE;
  		todo -= tab_pad;
--- 159,165 ----
  
  	    /* Fill to next tabstop with a tab, if possible */
  	    tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
! 	    if (todo >= tab_pad && orig_char_len == -1)
  	    {
  		doit = TRUE;
  		todo -= tab_pad;
***************
*** 206,216 ****
      /* If 'preserveindent' and 'expandtab' are both set keep the original
       * characters and allocate accordingly.  We will fill the rest with spaces
       * after the if (!curbuf->b_p_et) below. */
!     if (orig_char_len != 0)
      {
  	newline = alloc(orig_char_len + size - ind_done + line_len);
  	if (newline == NULL)
  	    return FALSE;
  	p = oldline;
  	s = newline;
  	while (orig_char_len > 0)
--- 206,220 ----
      /* If 'preserveindent' and 'expandtab' are both set keep the original
       * characters and allocate accordingly.  We will fill the rest with spaces
       * after the if (!curbuf->b_p_et) below. */
!     if (orig_char_len != -1)
      {
  	newline = alloc(orig_char_len + size - ind_done + line_len);
  	if (newline == NULL)
  	    return FALSE;
+ 	todo = size - ind_done;
+ 	ind_len = orig_char_len + todo;    /* Set total length of indent in
+ 					    * characters, which may have been
+ 					    * undercounted until now  */
  	p = oldline;
  	s = newline;
  	while (orig_char_len > 0)
***************
*** 222,230 ****
  	 * than old) */
  	while (vim_iswhite(*p))
  	    (void)*p++;
- 	todo = size - ind_done;
- 	ind_len += todo;    /* Set total length of indent in characters,
- 			     * which may have been undercounted until now  */
  
      }
      else
--- 226,231 ----
*** ../vim-7.1.072/src/version.c	Tue Aug 14 17:54:37 2007
--- src/version.c	Tue Aug 14 22:14:54 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     73,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
157. You fum through a magazine, you first check to see if it has a web
     address.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.074 ---
To: vim-dev at vim.org
Subject: patch 7.1.074
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.074
Problem:    Crash when calling string() on a recurively nested List.
Solution:   Check result value for being NULL. (Yukihiro Nakadaira)
Files:	    src/eval.c


*** ../vim-7.1.073/src/eval.c	Mon Aug  6 22:27:12 2007
--- src/eval.c	Tue Aug 14 22:01:12 2007
***************
*** 6802,6808 ****
   * "numbuf" is used for a number.
   * Does not put quotes around strings, as ":echo" displays values.
   * When "copyID" is not NULL replace recursive lists and dicts with "...".
!  * May return NULL;
   */
      static char_u *
  echo_string(tv, tofree, numbuf, copyID)
--- 6802,6808 ----
   * "numbuf" is used for a number.
   * Does not put quotes around strings, as ":echo" displays values.
   * When "copyID" is not NULL replace recursive lists and dicts with "...".
!  * May return NULL.
   */
      static char_u *
  echo_string(tv, tofree, numbuf, copyID)
***************
*** 6887,6893 ****
   * If the memory is allocated "tofree" is set to it, otherwise NULL.
   * "numbuf" is used for a number.
   * Puts quotes around strings, so that they can be parsed back by eval().
!  * May return NULL;
   */
      static char_u *
  tv2string(tv, tofree, numbuf, copyID)
--- 6887,6893 ----
   * If the memory is allocated "tofree" is set to it, otherwise NULL.
   * "numbuf" is used for a number.
   * Puts quotes around strings, so that they can be parsed back by eval().
!  * May return NULL.
   */
      static char_u *
  tv2string(tv, tofree, numbuf, copyID)
***************
*** 14974,14979 ****
--- 14974,14983 ----
  
      p1 = tv2string(&(*(listitem_T **)s1)->li_tv, &tofree1, numbuf1, 0);
      p2 = tv2string(&(*(listitem_T **)s2)->li_tv, &tofree2, numbuf2, 0);
+     if (p1 == NULL)
+ 	p1 = (char_u *)"";
+     if (p2 == NULL)
+ 	p2 = (char_u *)"";
      if (item_compare_ic)
  	res = STRICMP(p1, p2);
      else
***************
*** 15463,15469 ****
  
      rettv->v_type = VAR_STRING;
      rettv->vval.v_string = tv2string(&argvars[0], &tofree, numbuf, 0);
!     if (tofree == NULL)
  	rettv->vval.v_string = vim_strsave(rettv->vval.v_string);
  }
  
--- 15467,15474 ----
  
      rettv->v_type = VAR_STRING;
      rettv->vval.v_string = tv2string(&argvars[0], &tofree, numbuf, 0);
!     /* Make a copy if we have a value but it's not in allocate memory. */
!     if (rettv->vval.v_string != NULL && tofree == NULL)
  	rettv->vval.v_string = vim_strsave(rettv->vval.v_string);
  }
  
***************
*** 20167,20172 ****
--- 20174,20180 ----
  		char_u	buf[MSG_BUF_LEN];
  		char_u	numbuf2[NUMBUFLEN];
  		char_u	*tofree;
+ 		char_u	*s;
  
  		msg_puts((char_u *)"(");
  		for (i = 0; i < argcount; ++i)
***************
*** 20177,20186 ****
  			msg_outnum((long)argvars[i].vval.v_number);
  		    else
  		    {
! 			trunc_string(tv2string(&argvars[i], &tofree,
! 					      numbuf2, 0), buf, MSG_BUF_CLEN);
! 			msg_puts(buf);
! 			vim_free(tofree);
  		    }
  		}
  		msg_puts((char_u *)")");
--- 20185,20197 ----
  			msg_outnum((long)argvars[i].vval.v_number);
  		    else
  		    {
! 			s = tv2string(&argvars[i], &tofree, numbuf2, 0);
! 			if (s != NULL)
! 			{
! 			    trunc_string(s, buf, MSG_BUF_CLEN);
! 			    msg_puts(buf);
! 			    vim_free(tofree);
! 			}
  		    }
  		}
  		msg_puts((char_u *)")");
***************
*** 20258,20271 ****
  	    char_u	buf[MSG_BUF_LEN];
  	    char_u	numbuf2[NUMBUFLEN];
  	    char_u	*tofree;
  
  	    /* The value may be very long.  Skip the middle part, so that we
  	     * have some idea how it starts and ends. smsg() would always
  	     * truncate it at the end. */
! 	    trunc_string(tv2string(fc.rettv, &tofree, numbuf2, 0),
! 							   buf, MSG_BUF_CLEN);
! 	    smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
! 	    vim_free(tofree);
  	}
  	msg_puts((char_u *)"\n");   /* don't overwrite this either */
  
--- 20269,20286 ----
  	    char_u	buf[MSG_BUF_LEN];
  	    char_u	numbuf2[NUMBUFLEN];
  	    char_u	*tofree;
+ 	    char_u	*s;
  
  	    /* The value may be very long.  Skip the middle part, so that we
  	     * have some idea how it starts and ends. smsg() would always
  	     * truncate it at the end. */
! 	    s = tv2string(fc.rettv, &tofree, numbuf2, 0);
! 	    if (s != NULL)
! 	    {
! 		trunc_string(s, buf, MSG_BUF_CLEN);
! 		smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
! 		vim_free(tofree);
! 	    }
  	}
  	msg_puts((char_u *)"\n");   /* don't overwrite this either */
  
*** ../vim-7.1.073/src/version.c	Tue Aug 14 22:15:53 2007
--- src/version.c	Tue Aug 14 22:27:24 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     74,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
159. You get excited whenever discussing your hard drive.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.075 ---
To: vim-dev at vim.org
Subject: patch 7.1.075
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.075
Problem:    ":let v:statusmsg" reads memory already freed.
Solution:   Don't set v:statusmsg when listing it.
Files:	    src/eval.c


*** ../vim-7.1.074/src/eval.c	Tue Aug 14 22:28:35 2007
--- src/eval.c	Tue Aug 14 22:01:12 2007
***************
*** 18022,18028 ****
      int		type;
      char_u	*string;
  {
!     msg_attr(prefix, 0);    /* don't use msg(), it overwrites "v:statusmsg" */
      if (name != NULL)	/* "a:" vars don't have a name stored */
  	msg_puts(name);
      msg_putchar(' ');
--- 18022,18030 ----
      int		type;
      char_u	*string;
  {
!     /* don't use msg() or msg_attr() to avoid overwriting "v:statusmsg" */
!     msg_start();
!     msg_puts(prefix);
      if (name != NULL)	/* "a:" vars don't have a name stored */
  	msg_puts(name);
      msg_putchar(' ');
*** ../vim-7.1.074/src/version.c	Tue Aug 14 22:28:35 2007
--- src/version.c	Tue Aug 14 22:39:49 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     75,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
160. You get in the elevator and double-click the button for the floor
     you want.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.076 ---
To: vim-dev at vim.org
Subject: patch 7.1.076
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.076
Problem:    Another strcpy() with overlapping arguments.
Solution:   Use mch_memmove(). (Dominique Pelle)  And another one.
Files:	    src/ex_docmd.c, src/normal.c


*** ../vim-7.1.075/src/ex_docmd.c	Sat Aug 11 15:59:44 2007
--- src/ex_docmd.c	Wed Aug  8 22:28:33 2007
***************
*** 4493,4499 ****
  	    if (eap->argt & (USECTRLV | XFILE))
  		++p;		/* skip CTRL-V and next char */
  	    else
! 		STRCPY(p, p + 1);	/* remove CTRL-V and skip next char */
  	    if (*p == NUL)		/* stop at NUL after CTRL-V */
  		break;
  	}
--- 4493,4500 ----
  	    if (eap->argt & (USECTRLV | XFILE))
  		++p;		/* skip CTRL-V and next char */
  	    else
! 				/* remove CTRL-V and skip next char */
! 		mch_memmove(p, p + 1, STRLEN(p));
  	    if (*p == NUL)		/* stop at NUL after CTRL-V */
  		break;
  	}
*** ../vim-7.1.075/src/normal.c	Wed Aug  8 21:41:19 2007
--- src/normal.c	Sun Aug 12 17:35:20 2007
***************
*** 3760,3766 ****
      extra_len = (int)STRLEN(p);
      overflow = old_len + extra_len - SHOWCMD_COLS;
      if (overflow > 0)
! 	STRCPY(showcmd_buf, showcmd_buf + overflow);
      STRCAT(showcmd_buf, p);
  
      if (char_avail())
--- 3760,3767 ----
      extra_len = (int)STRLEN(p);
      overflow = old_len + extra_len - SHOWCMD_COLS;
      if (overflow > 0)
! 	mch_memmove(showcmd_buf, showcmd_buf + overflow,
! 						      old_len - overflow + 1);
      STRCAT(showcmd_buf, p);
  
      if (char_avail())
*** ../vim-7.1.075/src/version.c	Tue Aug 14 22:40:13 2007
--- src/version.c	Tue Aug 14 22:53:13 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     76,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
161. You get up before the sun rises to check your e-mail, and you
     find yourself in the very same chair long after the sun has set.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.077 ---
To: vim-dev at vim.org
Subject: patch 7.1.077
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.077
Problem:    Using "can_spell" without initializing it. (Dominique Pelle)
Solution:   Set a default for get_syntax_attr().
Files:	    src/syntax.c


*** ../vim-7.1.076/src/syntax.c	Thu Jul 26 22:55:11 2007
--- src/syntax.c	Sun Aug 12 19:49:07 2007
***************
*** 1727,1732 ****
--- 1727,1739 ----
  {
      int	    attr = 0;
  
+     if (can_spell != NULL)
+ 	/* Default: Only do spelling when there is no @Spell cluster or when
+ 	 * ":syn spell toplevel" was used. */
+ 	*can_spell = syn_buf->b_syn_spell == SYNSPL_DEFAULT
+ 		    ? (syn_buf->b_spell_cluster_id == 0)
+ 		    : (syn_buf->b_syn_spell == SYNSPL_TOP);
+ 
      /* check for out of memory situation */
      if (syn_buf->b_sst_array == NULL)
  	return 0;
*** ../vim-7.1.076/src/version.c	Tue Aug 14 22:54:00 2007
--- src/version.c	Tue Aug 14 23:06:26 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     77,
  /**/

-- 
Send $25.00 for handy leaflet on how to make money by selling leaflets

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.078 ---
To: vim-dev at vim.org
Subject: patch 7.1.078
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.078
Problem:    Dropping a file name on gvim that contains a CSI byte doesn't work
	    when editing the command line.
Solution:   Escape the CSI byte when inserting in the input buffer. (Yukihiro
	    Nakadaira)
Files:	    src/gui.c, src/ui.c


*** ../vim-7.1.077/src/gui.c	Thu May 10 19:19:15 2007
--- src/gui.c	Tue Aug 14 12:41:43 2007
***************
*** 5117,5123 ****
  		p = vim_strsave_escaped(fnames[i], (char_u *)"\\ \t\"|");
  # endif
  		if (p != NULL)
! 		    add_to_input_buf(p, (int)STRLEN(p));
  		vim_free(p);
  		vim_free(fnames[i]);
  	    }
--- 5117,5123 ----
  		p = vim_strsave_escaped(fnames[i], (char_u *)"\\ \t\"|");
  # endif
  		if (p != NULL)
! 		    add_to_input_buf_csi(p, (int)STRLEN(p));
  		vim_free(p);
  		vim_free(fnames[i]);
  	    }
*** ../vim-7.1.077/src/ui.c	Thu May 10 21:14:11 2007
--- src/ui.c	Tue Aug 14 12:41:42 2007
***************
*** 1603,1610 ****
  #if defined(FEAT_GUI) || defined(FEAT_MOUSE_GPM) \
  	|| defined(FEAT_XCLIPBOARD) || defined(VMS) \
  	|| defined(FEAT_SNIFF) || defined(FEAT_CLIENTSERVER) \
- 	|| (defined(FEAT_GUI) && (!defined(USE_ON_FLY_SCROLL) \
- 		|| defined(FEAT_MENU))) \
  	|| defined(PROTO)
  /*
   * Add the given bytes to the input buffer
--- 1603,1608 ----
***************
*** 1630,1636 ****
  }
  #endif
  
! #if (defined(FEAT_XIM) && defined(FEAT_GUI_GTK)) \
  	|| (defined(FEAT_MBYTE) && defined(FEAT_MBYTE_IME)) \
  	|| (defined(FEAT_GUI) && (!defined(USE_ON_FLY_SCROLL) \
  		|| defined(FEAT_MENU))) \
--- 1628,1636 ----
  }
  #endif
  
! #if ((defined(FEAT_XIM) || defined(FEAT_DND)) && defined(FEAT_GUI_GTK)) \
! 	|| defined(FEAT_GUI_MSWIN) \
! 	|| defined(FEAT_GUI_MAC) \
  	|| (defined(FEAT_MBYTE) && defined(FEAT_MBYTE_IME)) \
  	|| (defined(FEAT_GUI) && (!defined(USE_ON_FLY_SCROLL) \
  		|| defined(FEAT_MENU))) \
*** ../vim-7.1.077/src/version.c	Tue Aug 14 23:06:51 2007
--- src/version.c	Wed Aug 15 20:07:06 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     78,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
164. You got out to buy software, instead of going out for a beer.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.079 ---
To: vim-dev at vim.org
Subject: patch 7.1.079
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.079
Problem:    When the locale is "C" and 'encoding' is "latin1" then the "@"
	    character in 'isfname', 'isprint', etc. doesn't pick up accented
	    characters.
Solution:   Instead of isalpha() use MB_ISLOWER() and MB_ISUPPER().
Files:	    src/charset.c, src/macros.h


*** ../vim-7.1.078/src/charset.c	Mon Aug  6 22:27:12 2007
--- src/charset.c	Tue Aug 14 13:43:30 2007
***************
*** 207,213 ****
  	    }
  	    while (c <= c2)
  	    {
! 		if (!do_isalpha || isalpha(c)
  #ifdef FEAT_FKMAP
  			|| (p_altkeymap && (F_isalpha(c) || F_isdigit(c)))
  #endif
--- 207,216 ----
  	    }
  	    while (c <= c2)
  	    {
! 		/* Use the MB_ functions here, because isalpha() doesn't
! 		 * work properly when 'encoding' is "latin1" and the locale is
! 		 * "C".  */
! 		if (!do_isalpha || MB_ISLOWER(c) || MB_ISUPPER(c)
  #ifdef FEAT_FKMAP
  			|| (p_altkeymap && (F_isalpha(c) || F_isdigit(c)))
  #endif
*** ../vim-7.1.078/src/macros.h	Thu May 10 19:21:00 2007
--- src/macros.h	Sat Aug  4 13:44:18 2007
***************
*** 54,63 ****
  
  /*
   * toupper() and tolower() that use the current locale.
!  * On some systems toupper()/tolower() only work on lower/uppercase characters
   * Careful: Only call TOUPPER_LOC() and TOLOWER_LOC() with a character in the
   * range 0 - 255.  toupper()/tolower() on some systems can't handle others.
!  * Note: for UTF-8 use utf_toupper() and utf_tolower().
   */
  #ifdef MSWIN
  #  define TOUPPER_LOC(c)	toupper_tab[(c) & 255]
--- 54,65 ----
  
  /*
   * toupper() and tolower() that use the current locale.
!  * On some systems toupper()/tolower() only work on lower/uppercase
!  * characters, first use islower() or isupper() then.
   * Careful: Only call TOUPPER_LOC() and TOLOWER_LOC() with a character in the
   * range 0 - 255.  toupper()/tolower() on some systems can't handle others.
!  * Note: It is often better to use MB_TOLOWER() and MB_TOUPPER(), because many
!  * toupper() and tolower() implementations only work for ASCII.
   */
  #ifdef MSWIN
  #  define TOUPPER_LOC(c)	toupper_tab[(c) & 255]
*** ../vim-7.1.078/src/version.c	Wed Aug 15 20:07:53 2007
--- src/version.c	Wed Aug 15 20:39:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     79,
  /**/

-- 
You're as much use as a condom machine at the Vatican.
                  -- Rimmer to Holly in Red Dwarf 'Queeg'

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.080 ---
To: vim-dev at vim.org
Subject: patch 7.1.080 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.080 (extra)
Problem:    Compiler warnings for using "const char *" for "char *".
Solution:   Add type casts. (Chris Sutcliffe)
Files:	    src/GvimExt/gvimext.cpp


*** ../vim-7.1.079/src/GvimExt/gvimext.cpp	Thu May 10 21:09:38 2007
--- src/GvimExt/gvimext.cpp	Thu Aug 16 21:25:56 2007
***************
*** 69,82 ****
  
      // Registry didn't work, use the search path.
      if (name[0] == 0)
! 	strcpy(name, searchpath("gvim.exe"));
  
      if (!runtime)
      {
  	// Only when looking for the executable, not the runtime dir, we can
  	// search for the batch file or a name without a path.
  	if (name[0] == 0)
! 	    strcpy(name, searchpath("gvim.bat"));
  	if (name[0] == 0)
  	    strcpy(name, "gvim");	// finds gvim.bat or gvim.exe
  
--- 69,82 ----
  
      // Registry didn't work, use the search path.
      if (name[0] == 0)
! 	strcpy(name, searchpath((char *)"gvim.exe"));
  
      if (!runtime)
      {
  	// Only when looking for the executable, not the runtime dir, we can
  	// search for the batch file or a name without a path.
  	if (name[0] == 0)
! 	    strcpy(name, searchpath((char *)"gvim.bat"));
  	if (name[0] == 0)
  	    strcpy(name, "gvim");	// finds gvim.bat or gvim.exe
  
***************
*** 152,160 ****
  	FARPROC	    *ptr;
      } libintl_entry[] =
      {
! 	{"gettext",		(FARPROC*)&dyn_libintl_gettext},
! 	{"textdomain",		(FARPROC*)&dyn_libintl_textdomain},
! 	{"bindtextdomain",	(FARPROC*)&dyn_libintl_bindtextdomain},
  	{NULL, NULL}
      };
  
--- 152,160 ----
  	FARPROC	    *ptr;
      } libintl_entry[] =
      {
! 	{(char *)"gettext",		(FARPROC*)&dyn_libintl_gettext},
! 	{(char *)"textdomain",		(FARPROC*)&dyn_libintl_textdomain},
! 	{(char *)"bindtextdomain",	(FARPROC*)&dyn_libintl_bindtextdomain},
  	{NULL, NULL}
      };
  
***************
*** 835,841 ****
  		    (LPTSTR)location) > (HINSTANCE)32)
  	    return location;
      }
!     return "";
  }
  # endif
  #endif
--- 835,841 ----
  		    (LPTSTR)location) > (HINSTANCE)32)
  	    return location;
      }
!     return (char *)"";
  }
  # endif
  #endif
*** ../vim-7.1.079/src/version.c	Wed Aug 15 20:40:45 2007
--- src/version.c	Sat Aug 18 16:58:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     80,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
192. Your boss asks you to "go fer" coffee and you come up with 235 FTP sites.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.081 ---
To: vim-dev at vim.org
Subject: patch 7.1.081
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.081
Problem:    Command line completion for a shell command: "cat </tmp/file<Tab>"
	    doesn't work.
Solution:   Start the file name at any character that can't be in a file name.
	    (Martin Toft)
Files:	    src/ex_docmd.c


*** ../vim-7.1.080/src/ex_docmd.c	Tue Aug 14 22:54:00 2007
--- src/ex_docmd.c	Sat Aug 18 14:58:53 2007
***************
*** 3281,3319 ****
  
      if (ea.argt & XFILE)
      {
! 	int in_quote = FALSE;
! 	char_u *bow = NULL;	/* Beginning of word */
  
  	/*
  	 * Allow spaces within back-quotes to count as part of the argument
  	 * being expanded.
  	 */
  	xp->xp_pattern = skipwhite(arg);
! 	for (p = xp->xp_pattern; *p; )
  	{
! 	    if (*p == '\\' && p[1] != NUL)
  		++p;
  #ifdef SPACE_IN_FILENAME
! 	    else if (vim_iswhite(*p) && (!(ea.argt & NOSPC) || usefilter))
  #else
! 	    else if (vim_iswhite(*p))
  #endif
  	    {
! 		p = skipwhite(p);
  		if (in_quote)
  		    bow = p;
  		else
  		    xp->xp_pattern = p;
! 		--p;
! 	    }
! 	    else if (*p == '`')
! 	    {
! 		if (!in_quote)
! 		{
! 		    xp->xp_pattern = p;
! 		    bow = p + 1;
! 		}
! 		in_quote = !in_quote;
  	    }
  	    mb_ptr_adv(p);
  	}
--- 3281,3344 ----
  
      if (ea.argt & XFILE)
      {
! 	int	c;
! 	int	in_quote = FALSE;
! 	char_u	*bow = NULL;	/* Beginning of word */
  
  	/*
  	 * Allow spaces within back-quotes to count as part of the argument
  	 * being expanded.
  	 */
  	xp->xp_pattern = skipwhite(arg);
! 	p = xp->xp_pattern;
! 	while (*p != NUL)
  	{
! #ifdef FEAT_MBYTE
! 	    if (has_mbyte)
! 		c = mb_ptr2char(p);
! 	    else
! #endif
! 		c = *p;
! 	    if (c == '\\' && p[1] != NUL)
  		++p;
+ 	    else if (c == '`')
+ 	    {
+ 		if (!in_quote)
+ 		{
+ 		    xp->xp_pattern = p;
+ 		    bow = p + 1;
+ 		}
+ 		in_quote = !in_quote;
+ 	    }
  #ifdef SPACE_IN_FILENAME
! 	    else if (!vim_isfilec(c) && (!(ea.argt & NOSPC) || usefilter))
  #else
! 	    else if (!vim_isfilec(c))
  #endif
  	    {
! 		while (*p != NUL)
! 		{
! #ifdef FEAT_MBYTE
! 		    if (has_mbyte)
! 			c = mb_ptr2char(p);
! 		    else
! #endif
! 			c = *p;
! 		    if (c == '`' || vim_isfilec(c))
! 			break;
! #ifdef FEAT_MBYTE
! 		    if (has_mbyte)
! 			len = (*mb_ptr2len)(p);
! 		    else
! #endif
! 			len = 1;
! 		    mb_ptr_adv(p);
! 		}
  		if (in_quote)
  		    bow = p;
  		else
  		    xp->xp_pattern = p;
! 		p -= len;
  	    }
  	    mb_ptr_adv(p);
  	}
*** ../vim-7.1.080/src/version.c	Sat Aug 18 16:59:43 2007
--- src/version.c	Sat Aug 18 17:45:54 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     81,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
194. Your business cards contain your e-mail and home page address.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.082 ---
To: vim-dev at vim.org
Subject: patch 7.1.082
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.082
Problem:    After a ":split" the matchparen highlighting isn't there.
Solution:   Install a WinEnter autocommand.  Also fixes that after
	    ":NoMatchParen" only the current window is updated. (Martin Toft)
Files:	    runtime/doc/pi_paren.txt, runtime/plugin/matchparen.vim


*** ../vim-7.1.081/runtime/doc/pi_paren.txt	Sat May 12 16:23:41 2007
--- runtime/doc/pi_paren.txt	Sat Aug 18 15:08:32 2007
***************
*** 12,19 ****
  You can avoid loading this plugin by setting the "loaded_matchparen" variable: >
  	:let loaded_matchparen = 1
  
! The plugin installs CursorMoved autocommands to redefine the match
! highlighting.
  
  To disable the plugin after it was loaded use this command: >
  
--- 12,19 ----
  You can avoid loading this plugin by setting the "loaded_matchparen" variable: >
  	:let loaded_matchparen = 1
  
! The plugin installs CursorMoved, CursorMovedI and WinEnter autocommands to
! redefine the match highlighting.
  
  To disable the plugin after it was loaded use this command: >
  
*** ../vim-7.1.081/runtime/plugin/matchparen.vim	Thu Aug  2 23:00:06 2007
--- runtime/plugin/matchparen.vim	Sat Aug 18 15:08:32 2007
***************
*** 1,6 ****
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <Bram at vim.org>
! " Last Change: 2007 Jul 30
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
--- 1,6 ----
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <Bram at vim.org>
! " Last Change: 2007 Aug 8
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
***************
*** 13,19 ****
  
  augroup matchparen
    " Replace all matchparen autocommands
!   autocmd! CursorMoved,CursorMovedI * call s:Highlight_Matching_Pair()
  augroup END
  
  " Skip the rest if it was already done.
--- 13,19 ----
  
  augroup matchparen
    " Replace all matchparen autocommands
!   autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
  augroup END
  
  " Skip the rest if it was already done.
***************
*** 126,132 ****
  endfunction
  
  " Define commands that will disable and enable the plugin.
! command! NoMatchParen 3match none | unlet! g:loaded_matchparen | au! matchparen
! command! DoMatchParen runtime plugin/matchparen.vim | doau CursorMoved
  
  let &cpo = cpo_save
--- 126,133 ----
  endfunction
  
  " Define commands that will disable and enable the plugin.
! command! NoMatchParen windo 3match none | unlet! g:loaded_matchparen |
! 	  \ au! matchparen
! command! DoMatchParen runtime plugin/matchparen.vim | windo doau CursorMoved
  
  let &cpo = cpo_save
*** ../vim-7.1.081/src/version.c	Sat Aug 18 17:46:50 2007
--- src/version.c	Sat Aug 18 18:19:20 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     82,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
195. Your cat has its own home page.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.083 ---
To: vim-dev at vim.org
Subject: patch 7.1.083
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.083 (after 7.1.081)
Problem:    Command line completion doesn't work with wildcards.
Solution:   Add vim_isfilec_or_wc() and use it. (Martin Toft)
Files:	    src/charset.c, src/proto/charset.pro, src/ex_docmd.c


*** ../vim-7.1.082/src/charset.c	Wed Aug 15 20:40:45 2007
--- src/charset.c	Sun Aug 19 22:30:25 2007
***************
*** 932,937 ****
--- 932,954 ----
  }
  
  /*
+  * return TRUE if 'c' is a valid file-name character or a wildcard character
+  * Assume characters above 0x100 are valid (multi-byte).
+  * Explicitly interpret ']' as a wildcard character as mch_has_wildcard("]")
+  * returns false.
+  */
+     int
+ vim_isfilec_or_wc(c)
+     int c;
+ {
+     char_u buf[2];
+ 
+     buf[0] = (char_u)c;
+     buf[1] = NUL;
+     return vim_isfilec(c) || c == ']' || mch_has_wildcard(buf);
+ }
+ 
+ /*
   * return TRUE if 'c' is a printable character
   * Assume characters above 0x100 are printable (multi-byte), except for
   * Unicode.
*** ../vim-7.1.082/src/proto/charset.pro	Sat May  5 19:21:32 2007
--- src/proto/charset.pro	Sun Aug 19 22:30:28 2007
***************
*** 21,26 ****
--- 21,27 ----
  int vim_iswordp __ARGS((char_u *p));
  int vim_iswordc_buf __ARGS((char_u *p, buf_T *buf));
  int vim_isfilec __ARGS((int c));
+ int vim_isfilec_or_wc __ARGS((int c));
  int vim_isprintc __ARGS((int c));
  int vim_isprintc_strict __ARGS((int c));
  int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
*** ../vim-7.1.082/src/ex_docmd.c	Sat Aug 18 17:46:50 2007
--- src/ex_docmd.c	Sun Aug 19 22:29:17 2007
***************
*** 3311,3319 ****
  		in_quote = !in_quote;
  	    }
  #ifdef SPACE_IN_FILENAME
! 	    else if (!vim_isfilec(c) && (!(ea.argt & NOSPC) || usefilter))
  #else
! 	    else if (!vim_isfilec(c))
  #endif
  	    {
  		while (*p != NUL)
--- 3311,3320 ----
  		in_quote = !in_quote;
  	    }
  #ifdef SPACE_IN_FILENAME
! 	    else if (!vim_isfilec_or_wc(c)
! 					 && (!(ea.argt & NOSPC) || usefilter))
  #else
! 	    else if (!vim_isfilec_or_wc(c))
  #endif
  	    {
  		while (*p != NUL)
***************
*** 3324,3330 ****
  		    else
  #endif
  			c = *p;
! 		    if (c == '`' || vim_isfilec(c))
  			break;
  #ifdef FEAT_MBYTE
  		    if (has_mbyte)
--- 3325,3331 ----
  		    else
  #endif
  			c = *p;
! 		    if (c == '`' || vim_isfilec_or_wc(c))
  			break;
  #ifdef FEAT_MBYTE
  		    if (has_mbyte)
*** ../vim-7.1.082/src/version.c	Sat Aug 18 18:20:57 2007
--- src/version.c	Sun Aug 19 22:31:43 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     83,
  /**/

-- 
    "You mean there really is an answer?"
    "Yes! But you're not going to like it!"
    "Oh do please tell us!"
    "You're really not going to like it!"
    "but we MUST know - tell us"
    "Alright, the answer is...."
    "yes..."
    "... is ..."
    "yes... come on!"
    "is 42!"
		(Douglas Adams - The Hitchhiker's Guide to the Galaxy)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.084 ---
To: vim-dev at vim.org
Subject: patch 7.1.084
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.084
Problem:    Using the "-nb" argument twice causes netbeans not to get
	    fileOpened events.
Solution:   Change "&" to "&&". (Xavier de Gaye)
Files:	    src/ex_cmds.c


*** ../vim-7.1.083/src/ex_cmds.c	Wed Jul 25 22:55:22 2007
--- src/ex_cmds.c	Tue Aug 21 15:02:43 2007
***************
*** 3776,3782 ****
  	    workshop_file_opened((char *)curbuf->b_ffname, curbuf->b_p_ro);
  # endif
  # ifdef FEAT_NETBEANS_INTG
! 	if (usingNetbeans & ((flags & ECMD_SET_HELP) != ECMD_SET_HELP))
  	    netbeans_file_opened(curbuf);
  # endif
      }
--- 3787,3793 ----
  	    workshop_file_opened((char *)curbuf->b_ffname, curbuf->b_p_ro);
  # endif
  # ifdef FEAT_NETBEANS_INTG
! 	if (usingNetbeans && ((flags & ECMD_SET_HELP) != ECMD_SET_HELP))
  	    netbeans_file_opened(curbuf);
  # endif
      }
*** ../vim-7.1.083/src/version.c	Sun Aug 19 22:42:27 2007
--- src/version.c	Tue Aug 21 15:04:03 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     84,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
220. Your wife asks for sex and you tell her where to find you on IRC.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.085 ---
To: vim-dev at vim.org
Subject: patch 7.1.085
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.085
Problem:    ":e fold.c" then ":sp fold.c" results in folds of original window
	    to disappear. (Akita Noek)
Solution:   Invoke foldUpdateAll() for all windows of the changed buffer.
	    (Martin Toft)
Files:	    src/ex_cmds.c


*** ../vim-7.1.084/src/ex_cmds.c	Tue Aug 21 15:05:54 2007
--- src/ex_cmds.c	Tue Aug 21 15:02:43 2007
***************
*** 2974,2980 ****
   * 'fnum' is the number of the file, if zero use ffname/sfname.
   *
   * Return 1 for "normal" error, 2 for "not written" error, 0 for success
!  * -1 for succesfully opening another file.
   * 'lnum' is the line number for the cursor in the new file (if non-zero).
   */
      int
--- 2974,2980 ----
   * 'fnum' is the number of the file, if zero use ffname/sfname.
   *
   * Return 1 for "normal" error, 2 for "not written" error, 0 for success
!  * -1 for successfully opening another file.
   * 'lnum' is the line number for the cursor in the new file (if non-zero).
   */
      int
***************
*** 3584,3592 ****
  	curwin_init();
  
  #ifdef FEAT_FOLDING
! 	/* It's like all lines in the buffer changed.  Need to update
! 	 * automatic folding. */
  	foldUpdateAll(curwin);
  #endif
  
  	/* Change directories when the 'acd' option is set. */
--- 3584,3603 ----
  	curwin_init();
  
  #ifdef FEAT_FOLDING
! 	/* It's possible that all lines in the buffer changed.  Need to update
! 	 * automatic folding for all windows where it's used. */
! # ifdef FEAT_WINDOWS
! 	{
! 	    win_T	    *win;
! 	    tabpage_T	    *tp;
! 
! 	    FOR_ALL_TAB_WINDOWS(tp, win)
! 		if (win->w_buffer == curbuf)
! 		    foldUpdateAll(win);
! 	}
! # else
  	foldUpdateAll(curwin);
+ # endif
  #endif
  
  	/* Change directories when the 'acd' option is set. */
*** ../vim-7.1.084/src/version.c	Tue Aug 21 15:05:54 2007
--- src/version.c	Tue Aug 21 15:26:43 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     85,
  /**/

-- 
Your fault: core dumped

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.086 ---
To: vim-dev at vim.org
Subject: patch 7.1.086
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.086
Problem:    Crash when using specific Python syntax highlighting.  (Quirk)
Solution:   Check for a negative index, coming from a keyword match at the
	    start of a line from a saved state.
Files:	    src/syntax.c


*** ../vim-7.1.085/src/syntax.c	Tue Aug 14 23:06:51 2007
--- src/syntax.c	Tue Aug 21 17:13:51 2007
***************
*** 279,285 ****
   */
  typedef struct state_item
  {
!     int		si_idx;			/* index of syntax pattern */
      int		si_id;			/* highlight group ID for keywords */
      int		si_trans_id;		/* idem, transparancy removed */
      int		si_m_lnum;		/* lnum of the match */
--- 279,286 ----
   */
  typedef struct state_item
  {
!     int		si_idx;			/* index of syntax pattern or
! 					   KEYWORD_IDX */
      int		si_id;			/* highlight group ID for keywords */
      int		si_trans_id;		/* idem, transparancy removed */
      int		si_m_lnum;		/* lnum of the match */
***************
*** 837,845 ****
  			    current_lnum = end_lnum;
  			    break;
  			}
! 			spp = &(SYN_ITEMS(syn_buf)[cur_si->si_idx]);
! 			found_flags = spp->sp_flags;
! 			found_match_idx = spp->sp_sync_idx;
  			found_current_lnum = current_lnum;
  			found_current_col = current_col;
  			found_m_endpos = cur_si->si_m_endpos;
--- 838,855 ----
  			    current_lnum = end_lnum;
  			    break;
  			}
! 			if (cur_si->si_idx < 0)
! 			{
! 			    /* Cannot happen? */
! 			    found_flags = 0;
! 			    found_match_idx = KEYWORD_IDX;
! 			}
! 			else
! 			{
! 			    spp = &(SYN_ITEMS(syn_buf)[cur_si->si_idx]);
! 			    found_flags = spp->sp_flags;
! 			    found_match_idx = spp->sp_sync_idx;
! 			}
  			found_current_lnum = current_lnum;
  			found_current_col = current_col;
  			found_m_endpos = cur_si->si_m_endpos;
***************
*** 2533,2538 ****
--- 2543,2552 ----
      stateitem_T	*sip = &CUR_STATE(idx);
      synpat_T	*spp;
  
+     /* This should not happen... */
+     if (sip->si_idx < 0)
+ 	return;
+ 
      spp = &(SYN_ITEMS(syn_buf)[sip->si_idx]);
      if (sip->si_flags & HL_MATCH)
  	sip->si_id = spp->sp_syn_match_id;
***************
*** 2648,2653 ****
--- 2662,2671 ----
      lpos_T	end_endpos;
      int		end_idx;
  
+     /* return quickly for a keyword */
+     if (sip->si_idx < 0)
+ 	return;
+ 
      /* Don't update when it's already done.  Can be a match of an end pattern
       * that started in a previous line.  Watch out: can also be a "keepend"
       * from a containing item. */
***************
*** 2759,2764 ****
--- 2777,2786 ----
      lpos_T	pos;
      char_u	*line;
      int		had_match = FALSE;
+ 
+     /* just in case we are invoked for a keyword */
+     if (idx < 0)
+ 	return;
  
      /*
       * Check for being called with a START pattern.
*** ../vim-7.1.085/src/version.c	Tue Aug 21 15:28:32 2007
--- src/version.c	Tue Aug 21 17:21:06 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     86,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
222. You send more than 20 personal e-mails a day.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.087 ---
To: vim-dev at vim.org
Subject: patch 7.1.087
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.087
Problem:    Reading past ":cscope find" command.  Writing past end of a buffer.
Solution:   Check length of the argument before using the pattern.  Use
	    vim_strncpy().  (Dominique Pelle)
Files:	    if_cscope.c


*** ../vim-7.1.086/src/if_cscope.c	Sun Mar 11 15:48:29 2007
--- src/if_cscope.c	Sun Aug 19 22:17:09 2007
***************
*** 73,78 ****
--- 73,80 ----
  
  
  static csinfo_T	    csinfo[CSCOPE_MAX_CONNECTIONS];
+ static int	    eap_arg_len;    /* length of eap->arg, set in
+ 				       cs_lookup_cmd() */
  static cscmd_T	    cs_cmds[] =
  {
      { "add",	cs_add,
***************
*** 260,273 ****
  
      if ((p = cs_manage_matches(NULL, NULL, -1, Get)) == NULL)
  	return TRUE;
! 
!     if ((int)strlen(p) > size)
!     {
! 	strncpy((char *)buf, p, size - 1);
! 	buf[size] = '\0';
!     }
!     else
! 	(void)strcpy((char *)buf, p);
  
      return FALSE;
  } /* cs_fgets */
--- 262,268 ----
  
      if ((p = cs_manage_matches(NULL, NULL, -1, Get)) == NULL)
  	return TRUE;
!     vim_strncpy(buf, (char_u *)p, size - 1);
  
      return FALSE;
  } /* cs_fgets */
***************
*** 386,392 ****
   * PRIVATE: cs_add
   *
   * add cscope database or a directory name (to look for cscope.out)
!  * the the cscope connection list
   *
   * MAXPATHL 256
   */
--- 381,387 ----
   * PRIVATE: cs_add
   *
   * add cscope database or a directory name (to look for cscope.out)
!  * to the cscope connection list
   *
   * MAXPATHL 256
   */
***************
*** 966,972 ****
      }
  
      pat = opt + strlen(opt) + 1;
!     if (pat == NULL || (pat != NULL && pat[0] == '\0'))
      {
  	cs_usage_msg(Find);
  	return FALSE;
--- 961,967 ----
      }
  
      pat = opt + strlen(opt) + 1;
!     if (pat >= (char *)eap->arg + eap_arg_len)
      {
  	cs_usage_msg(Find);
  	return FALSE;
***************
*** 1317,1323 ****
  #else
  	    /* compare pathnames first */
  	    && ((fullpathcmp(csinfo[j].fname, fname, FALSE) & FPC_SAME)
! 		/* if not Windows 9x, test index file atributes too */
  		|| (!mch_windows95()
  		    && csinfo[j].nVolume == bhfi.dwVolumeSerialNumber
  		    && csinfo[j].nIndexHigh == bhfi.nFileIndexHigh
--- 1312,1318 ----
  #else
  	    /* compare pathnames first */
  	    && ((fullpathcmp(csinfo[j].fname, fname, FALSE) & FPC_SAME)
! 		/* if not Windows 9x, test index file attributes too */
  		|| (!mch_windows95()
  		    && csinfo[j].nVolume == bhfi.dwVolumeSerialNumber
  		    && csinfo[j].nIndexHigh == bhfi.nFileIndexHigh
***************
*** 1401,1406 ****
--- 1396,1404 ----
      if (eap->arg == NULL)
  	return NULL;
  
+     /* Store length of eap->arg before it gets modified by strtok(). */
+     eap_arg_len = STRLEN(eap->arg);
+ 
      if ((stok = strtok((char *)(eap->arg), (const char *)" ")) == NULL)
  	return NULL;
  
***************
*** 2195,2201 ****
  	    cs_add_common(dblist[i], pplist[i], fllist[i]);
  	    if (p_csverbose)
  	    {
! 		/* dont' use smsg_attr because want to display
  		 * connection number in the same line as
  		 * "Added cscope database..."
  		 */
--- 2193,2199 ----
  	    cs_add_common(dblist[i], pplist[i], fllist[i]);
  	    if (p_csverbose)
  	    {
! 		/* don't use smsg_attr() because we want to display the
  		 * connection number in the same line as
  		 * "Added cscope database..."
  		 */
*** ../vim-7.1.086/src/version.c	Tue Aug 21 17:29:04 2007
--- src/version.c	Tue Aug 21 17:59:42 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     87,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
223. You set up a web-cam as your home's security system.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.088 ---
To: vim-dev at vim.org
Subject: patch 7.1.088 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.088 (extra)
Problem:    The coordinates used by ":winpos" differ from what getwinposx()
	    and getwinposy() return.
Solution:   Use MoveWindowStructure() instead of MoveWindow(). (Michael Henry)
Files:	    src/gui_mac.c


*** ../vim-7.1.087/src/gui_mac.c	Tue Jun 19 16:33:53 2007
--- src/gui_mac.c	Wed Aug 29 20:33:34 2007
***************
*** 3149,3155 ****
      /* TODO:  Should make sure the window is move within range
       *	      e.g.: y > ~16 [Menu bar], x > 0, x < screen width
       */
!     MoveWindow(gui.VimWindow, x, y, TRUE);
  }
  
      void
--- 3149,3155 ----
      /* TODO:  Should make sure the window is move within range
       *	      e.g.: y > ~16 [Menu bar], x > 0, x < screen width
       */
!     MoveWindowStructure(gui.VimWindow, x, y, TRUE);
  }
  
      void
***************
*** 5556,5562 ****
   * SetDialogTracksCursor() : Get the I-beam cursor over input box
   * MoveDialogItem():	    Probably better than SetDialogItem
   * SizeDialogItem():		(but is it Carbon Only?)
!  * AutoSizeDialog():	    Magic resize of dialog based on text lenght
   */
  }
  #endif /* FEAT_DIALOG_GUI */
--- 5556,5562 ----
   * SetDialogTracksCursor() : Get the I-beam cursor over input box
   * MoveDialogItem():	    Probably better than SetDialogItem
   * SizeDialogItem():		(but is it Carbon Only?)
!  * AutoSizeDialog():	    Magic resize of dialog based on text length
   */
  }
  #endif /* FEAT_DIALOG_GUI */
*** ../vim-7.1.087/src/version.c	Tue Aug 21 18:02:58 2007
--- src/version.c	Thu Aug 30 10:32:28 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     88,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
10E. You start counting in hex.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.089 ---
To: vim-dev at vim.org
Subject: patch 7.1.089
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.089
Problem:    ":let loaded_getscriptPlugin" doesn't clear to eol, result is
	    "#1in".
Solution:   Clear to the end of the screen after displaying the first variable
	    value.
Files:	    src/eval.c


*** ../vim-7.1.088/src/eval.c	Tue Aug 14 22:40:13 2007
--- src/eval.c	Wed Aug 29 22:40:15 2007
***************
*** 369,385 ****
  static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
  static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
  static char_u *skip_var_one __ARGS((char_u *arg));
! static void list_hashtable_vars __ARGS((hashtab_T *ht, char_u *prefix, int empty));
! static void list_glob_vars __ARGS((void));
! static void list_buf_vars __ARGS((void));
! static void list_win_vars __ARGS((void));
  #ifdef FEAT_WINDOWS
! static void list_tab_vars __ARGS((void));
  #endif
! static void list_vim_vars __ARGS((void));
! static void list_script_vars __ARGS((void));
! static void list_func_vars __ARGS((void));
! static char_u *list_arg_vars __ARGS((exarg_T *eap, char_u *arg));
  static char_u *ex_let_one __ARGS((char_u *arg, typval_T *tv, int copy, char_u *endchars, char_u *op));
  static int check_changedtick __ARGS((char_u *arg));
  static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int quiet, int fne_flags));
--- 369,385 ----
  static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
  static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
  static char_u *skip_var_one __ARGS((char_u *arg));
! static void list_hashtable_vars __ARGS((hashtab_T *ht, char_u *prefix, int empty, int *first));
! static void list_glob_vars __ARGS((int *first));
! static void list_buf_vars __ARGS((int *first));
! static void list_win_vars __ARGS((int *first));
  #ifdef FEAT_WINDOWS
! static void list_tab_vars __ARGS((int *first));
  #endif
! static void list_vim_vars __ARGS((int *first));
! static void list_script_vars __ARGS((int *first));
! static void list_func_vars __ARGS((int *first));
! static char_u *list_arg_vars __ARGS((exarg_T *eap, char_u *arg, int *first));
  static char_u *ex_let_one __ARGS((char_u *arg, typval_T *tv, int copy, char_u *endchars, char_u *op));
  static int check_changedtick __ARGS((char_u *arg));
  static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int quiet, int fne_flags));
***************
*** 704,711 ****
  static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
  static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
  static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
! static void list_one_var __ARGS((dictitem_T *v, char_u *prefix));
! static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string));
  static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
  static int var_check_ro __ARGS((int flags, char_u *name));
  static int var_check_fixed __ARGS((int flags, char_u *name));
--- 704,711 ----
  static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
  static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
  static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
! static void list_one_var __ARGS((dictitem_T *v, char_u *prefix, int *first));
! static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string, int *first));
  static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
  static int var_check_ro __ARGS((int flags, char_u *name));
  static int var_check_fixed __ARGS((int flags, char_u *name));
***************
*** 1699,1704 ****
--- 1699,1705 ----
      int		semicolon = 0;
      char_u	op[2];
      char_u	*argend;
+     int		first = TRUE;
  
      argend = skip_var_list(arg, &var_count, &semicolon);
      if (argend == NULL)
***************
*** 1715,1733 ****
  	    EMSG(_(e_invarg));
  	else if (!ends_excmd(*arg))
  	    /* ":let var1 var2" */
! 	    arg = list_arg_vars(eap, arg);
  	else if (!eap->skip)
  	{
  	    /* ":let" */
! 	    list_glob_vars();
! 	    list_buf_vars();
! 	    list_win_vars();
  #ifdef FEAT_WINDOWS
! 	    list_tab_vars();
  #endif
! 	    list_script_vars();
! 	    list_func_vars();
! 	    list_vim_vars();
  	}
  	eap->nextcmd = check_nextcmd(arg);
      }
--- 1716,1734 ----
  	    EMSG(_(e_invarg));
  	else if (!ends_excmd(*arg))
  	    /* ":let var1 var2" */
! 	    arg = list_arg_vars(eap, arg, &first);
  	else if (!eap->skip)
  	{
  	    /* ":let" */
! 	    list_glob_vars(&first);
! 	    list_buf_vars(&first);
! 	    list_win_vars(&first);
  #ifdef FEAT_WINDOWS
! 	    list_tab_vars(&first);
  #endif
! 	    list_script_vars(&first);
! 	    list_func_vars(&first);
! 	    list_vim_vars(&first);
  	}
  	eap->nextcmd = check_nextcmd(arg);
      }
***************
*** 1932,1941 ****
   * If "empty" is TRUE also list NULL strings as empty strings.
   */
      static void
! list_hashtable_vars(ht, prefix, empty)
      hashtab_T	*ht;
      char_u	*prefix;
      int		empty;
  {
      hashitem_T	*hi;
      dictitem_T	*di;
--- 1933,1943 ----
   * If "empty" is TRUE also list NULL strings as empty strings.
   */
      static void
! list_hashtable_vars(ht, prefix, empty, first)
      hashtab_T	*ht;
      char_u	*prefix;
      int		empty;
+     int		*first;
  {
      hashitem_T	*hi;
      dictitem_T	*di;
***************
*** 1950,1956 ****
  	    di = HI2DI(hi);
  	    if (empty || di->di_tv.v_type != VAR_STRING
  					   || di->di_tv.vval.v_string != NULL)
! 		list_one_var(di, prefix);
  	}
      }
  }
--- 1952,1958 ----
  	    di = HI2DI(hi);
  	    if (empty || di->di_tv.v_type != VAR_STRING
  					   || di->di_tv.vval.v_string != NULL)
! 		list_one_var(di, prefix, first);
  	}
      }
  }
***************
*** 1959,1990 ****
   * List global variables.
   */
      static void
! list_glob_vars()
  {
!     list_hashtable_vars(&globvarht, (char_u *)"", TRUE);
  }
  
  /*
   * List buffer variables.
   */
      static void
! list_buf_vars()
  {
      char_u	numbuf[NUMBUFLEN];
  
!     list_hashtable_vars(&curbuf->b_vars.dv_hashtab, (char_u *)"b:", TRUE);
  
      sprintf((char *)numbuf, "%ld", (long)curbuf->b_changedtick);
!     list_one_var_a((char_u *)"b:", (char_u *)"changedtick", VAR_NUMBER, numbuf);
  }
  
  /*
   * List window variables.
   */
      static void
! list_win_vars()
  {
!     list_hashtable_vars(&curwin->w_vars.dv_hashtab, (char_u *)"w:", TRUE);
  }
  
  #ifdef FEAT_WINDOWS
--- 1961,1998 ----
   * List global variables.
   */
      static void
! list_glob_vars(first)
!     int *first;
  {
!     list_hashtable_vars(&globvarht, (char_u *)"", TRUE, first);
  }
  
  /*
   * List buffer variables.
   */
      static void
! list_buf_vars(first)
!     int *first;
  {
      char_u	numbuf[NUMBUFLEN];
  
!     list_hashtable_vars(&curbuf->b_vars.dv_hashtab, (char_u *)"b:",
! 								 TRUE, first);
  
      sprintf((char *)numbuf, "%ld", (long)curbuf->b_changedtick);
!     list_one_var_a((char_u *)"b:", (char_u *)"changedtick", VAR_NUMBER,
! 							       numbuf, first);
  }
  
  /*
   * List window variables.
   */
      static void
! list_win_vars(first)
!     int *first;
  {
!     list_hashtable_vars(&curwin->w_vars.dv_hashtab,
! 						 (char_u *)"w:", TRUE, first);
  }
  
  #ifdef FEAT_WINDOWS
***************
*** 1992,2000 ****
   * List tab page variables.
   */
      static void
! list_tab_vars()
  {
!     list_hashtable_vars(&curtab->tp_vars.dv_hashtab, (char_u *)"t:", TRUE);
  }
  #endif
  
--- 2000,2010 ----
   * List tab page variables.
   */
      static void
! list_tab_vars(first)
!     int *first;
  {
!     list_hashtable_vars(&curtab->tp_vars.dv_hashtab,
! 						 (char_u *)"t:", TRUE, first);
  }
  #endif
  
***************
*** 2002,2040 ****
   * List Vim variables.
   */
      static void
! list_vim_vars()
  {
!     list_hashtable_vars(&vimvarht, (char_u *)"v:", FALSE);
  }
  
  /*
   * List script-local variables, if there is a script.
   */
      static void
! list_script_vars()
  {
      if (current_SID > 0 && current_SID <= ga_scripts.ga_len)
! 	list_hashtable_vars(&SCRIPT_VARS(current_SID), (char_u *)"s:", FALSE);
  }
  
  /*
   * List function variables, if there is a function.
   */
      static void
! list_func_vars()
  {
      if (current_funccal != NULL)
  	list_hashtable_vars(&current_funccal->l_vars.dv_hashtab,
! 						       (char_u *)"l:", FALSE);
  }
  
  /*
   * List variables in "arg".
   */
      static char_u *
! list_arg_vars(eap, arg)
      exarg_T	*eap;
      char_u	*arg;
  {
      int		error = FALSE;
      int		len;
--- 2012,2055 ----
   * List Vim variables.
   */
      static void
! list_vim_vars(first)
!     int *first;
  {
!     list_hashtable_vars(&vimvarht, (char_u *)"v:", FALSE, first);
  }
  
  /*
   * List script-local variables, if there is a script.
   */
      static void
! list_script_vars(first)
!     int *first;
  {
      if (current_SID > 0 && current_SID <= ga_scripts.ga_len)
! 	list_hashtable_vars(&SCRIPT_VARS(current_SID),
! 						(char_u *)"s:", FALSE, first);
  }
  
  /*
   * List function variables, if there is a function.
   */
      static void
! list_func_vars(first)
!     int *first;
  {
      if (current_funccal != NULL)
  	list_hashtable_vars(&current_funccal->l_vars.dv_hashtab,
! 						(char_u *)"l:", FALSE, first);
  }
  
  /*
   * List variables in "arg".
   */
      static char_u *
! list_arg_vars(eap, arg, first)
      exarg_T	*eap;
      char_u	*arg;
+     int		*first;
  {
      int		error = FALSE;
      int		len;
***************
*** 2091,2105 ****
  			{
  			    switch (*name)
  			    {
! 				case 'g': list_glob_vars(); break;
! 				case 'b': list_buf_vars(); break;
! 				case 'w': list_win_vars(); break;
  #ifdef FEAT_WINDOWS
! 				case 't': list_tab_vars(); break;
  #endif
! 				case 'v': list_vim_vars(); break;
! 				case 's': list_script_vars(); break;
! 				case 'l': list_func_vars(); break;
  				default:
  					  EMSG2(_("E738: Can't list variables for %s"), name);
  			    }
--- 2106,2120 ----
  			{
  			    switch (*name)
  			    {
! 				case 'g': list_glob_vars(first); break;
! 				case 'b': list_buf_vars(first); break;
! 				case 'w': list_win_vars(first); break;
  #ifdef FEAT_WINDOWS
! 				case 't': list_tab_vars(first); break;
  #endif
! 				case 'v': list_vim_vars(first); break;
! 				case 's': list_script_vars(first); break;
! 				case 'l': list_func_vars(first); break;
  				default:
  					  EMSG2(_("E738: Can't list variables for %s"), name);
  			    }
***************
*** 2116,2122 ****
  			    *arg = NUL;
  			    list_one_var_a((char_u *)"",
  				    arg == arg_subsc ? name : name_start,
! 				    tv.v_type, s == NULL ? (char_u *)"" : s);
  			    *arg = c;
  			    vim_free(tf);
  			}
--- 2131,2139 ----
  			    *arg = NUL;
  			    list_one_var_a((char_u *)"",
  				    arg == arg_subsc ? name : name_start,
! 				    tv.v_type,
! 				    s == NULL ? (char_u *)"" : s,
! 				    first);
  			    *arg = c;
  			    vim_free(tf);
  			}
***************
*** 18001,18009 ****
   * List the value of one internal variable.
   */
      static void
! list_one_var(v, prefix)
      dictitem_T	*v;
      char_u	*prefix;
  {
      char_u	*tofree;
      char_u	*s;
--- 18024,18033 ----
   * List the value of one internal variable.
   */
      static void
! list_one_var(v, prefix, first)
      dictitem_T	*v;
      char_u	*prefix;
+     int		*first;
  {
      char_u	*tofree;
      char_u	*s;
***************
*** 18011,18026 ****
  
      s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID);
      list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
! 						s == NULL ? (char_u *)"" : s);
      vim_free(tofree);
  }
  
      static void
! list_one_var_a(prefix, name, type, string)
      char_u	*prefix;
      char_u	*name;
      int		type;
      char_u	*string;
  {
      /* don't use msg() or msg_attr() to avoid overwriting "v:statusmsg" */
      msg_start();
--- 18035,18051 ----
  
      s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID);
      list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
! 					 s == NULL ? (char_u *)"" : s, first);
      vim_free(tofree);
  }
  
      static void
! list_one_var_a(prefix, name, type, string, first)
      char_u	*prefix;
      char_u	*name;
      int		type;
      char_u	*string;
+     int		*first;  /* when TRUE clear rest of screen and set to FALSE */
  {
      /* don't use msg() or msg_attr() to avoid overwriting "v:statusmsg" */
      msg_start();
***************
*** 18052,18057 ****
--- 18077,18087 ----
  
      if (type == VAR_FUNC)
  	msg_puts((char_u *)"()");
+     if (*first)
+     {
+ 	msg_clr_eos();
+ 	*first = FALSE;
+     }
  }
  
  /*
*** ../vim-7.1.088/src/version.c	Thu Aug 30 10:34:19 2007
--- src/version.c	Thu Aug 30 11:06:32 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     89,
  /**/

-- 
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 at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.090 ---
To: vim-dev at vim.org
Subject: patch 7.1.090
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.090
Problem:    Compiler warning on Mac OS X 10.5.
Solution:   Don't redeclare sigaltstack(). (Hisashi T Fujinaka)
Files:	    src/os_unix.c


*** ../vim-7.1.089/src/os_unix.c	Sat Aug 11 22:22:56 2007
--- src/os_unix.c	Wed Aug 22 22:28:48 2007
***************
*** 753,759 ****
      if (signal_stack != NULL)
      {
  # ifdef HAVE_SIGALTSTACK
! #  ifdef __APPLE__
  	/* missing prototype.  Adding it to osdef?.h.in doesn't work, because
  	 * "struct sigaltstack" needs to be declared. */
  	extern int sigaltstack __ARGS((const struct sigaltstack *ss, struct sigaltstack *oss));
--- 753,760 ----
      if (signal_stack != NULL)
      {
  # ifdef HAVE_SIGALTSTACK
! #  if defined(__APPLE__) && (!defined(MAC_OS_X_VERSION_MAX_ALLOWED) \
! 		|| MAC_OS_X_VERSION_MAX_ALLOWED <= 1040)
  	/* missing prototype.  Adding it to osdef?.h.in doesn't work, because
  	 * "struct sigaltstack" needs to be declared. */
  	extern int sigaltstack __ARGS((const struct sigaltstack *ss, struct sigaltstack *oss));
***************
*** 5688,5694 ****
  
  /*
   * Closes connection to gpm
!  * returns non-zero if connection succesfully closed
   */
      static void
  gpm_close()
--- 5689,5695 ----
  
  /*
   * Closes connection to gpm
!  * returns non-zero if connection successfully closed
   */
      static void
  gpm_close()
*** ../vim-7.1.089/src/version.c	Thu Aug 30 11:10:38 2007
--- src/version.c	Thu Aug 30 11:46:07 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     90,
  /**/

-- 
       We're knights of the round table
       We dance whene'er we're able
       We do routines and chorus scenes
       With footwork impeccable.
       We dine well here in Camelot
       We eat ham and jam and spam a lot.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.091 ---
To: vim-dev at vim.org
Subject: patch 7.1.091 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.091 (extra)
Problem:    Win32: Can't embed Vim inside another application.
Solution:   Add the --windowid argument. (Nageshwar)
Files:	    runtime/doc/gui_w32.txt, runtime/doc/starting.txt,
	    runtime/doc/vi_diff.txt, src/globals.h, src/gui_w32.c, src/main.c


*** ../vim-7.1.090/runtime/doc/gui_w32.txt	Sat May 12 15:35:53 2007
--- runtime/doc/gui_w32.txt	Tue Aug 14 17:32:27 2007
***************
*** 1,4 ****
! *gui_w32.txt*   For Vim version 7.1.  Last change: 2007 May 03
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *gui_w32.txt*   For Vim version 7.1.  Last change: 2007 Aug 14
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 52,57 ****
--- 52,67 ----
  								*gui-w32s*
  There is a specific version of gvim.exe that runs under the Win32s subsystem
  of Windows 3.1 or 3.11.  See |win32s|.
+ 
+ 
+ Using Vim as a plugin					*gui-w32-windowid*
+ 
+ When gvim starts up normally, it creates its own top level window.  If you
+ pass Vim the command-line option |--windowid| with a decimal or hexadecimal
+ value, Vim will create a window that is a child of the window with the given
+ ID.  This enables Vim to act as a plugin in another application.  This really
+ is a programmer's interface, and is of no use without a supporting application
+ to spawn Vim correctly.
  
  ==============================================================================
  2. Vim as default editor				*vim-default-editor*
*** ../vim-7.1.090/runtime/doc/starting.txt	Sat May 12 16:56:17 2007
--- runtime/doc/starting.txt	Tue Aug 14 17:34:22 2007
***************
*** 1,4 ****
! *starting.txt*  For Vim version 7.1.  Last change: 2007 May 12
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *starting.txt*  For Vim version 7.1.  Last change: 2007 Aug 14
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 547,552 ****
--- 547,557 ----
  		GTK+ GUI Vim only.  Make gvim try to use GtkPlug mechanism, so
  		that it runs inside another window.  See |gui-gtk-socketid|
  		for details. {not in Vi}
+ 
+ --windowid {id}						*--windowid*
+ 		Win32 GUI Vim only.  Make gvim try to use the window {id} as a
+ 		parent, so that it runs inside that window.  See
+ 		|gui-w32-windowid| for details. {not in Vi}
  
  --echo-wid						*--echo-wid*
  		GTK+ GUI Vim only.  Make gvim echo the Window ID on stdout,
*** ../vim-7.1.090/runtime/doc/vi_diff.txt	Sat May 12 14:54:28 2007
--- runtime/doc/vi_diff.txt	Tue Aug 14 17:35:10 2007
***************
*** 1,4 ****
! *vi_diff.txt*   For Vim version 7.1.  Last change: 2007 May 07
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *vi_diff.txt*   For Vim version 7.1.  Last change: 2007 Aug 14
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 826,831 ****
--- 826,833 ----
  --servername {name}	Vim: Specify Vim server name
  
  --socketid {id}		Vim: GTK window socket to run Vim in
+ 
+ --windowid {id}		Vim: Win32 window ID to run Vim in
  
  --version	Vim: show version message and exit.
  
*** ../vim-7.1.090/src/globals.h	Thu May 10 19:26:02 2007
--- src/globals.h	Wed Aug 29 22:27:45 2007
***************
*** 876,882 ****
  EXTERN int no_mapping INIT(= FALSE);	/* currently no mapping allowed */
  EXTERN int no_zero_mapping INIT(= 0);	/* mapping zero not allowed */
  EXTERN int allow_keys INIT(= FALSE);	/* allow key codes when no_mapping
! 					     * is set */
  EXTERN int no_u_sync INIT(= 0);		/* Don't call u_sync() */
  
  EXTERN int restart_edit INIT(= 0);	/* call edit when next cmd finished */
--- 876,882 ----
  EXTERN int no_mapping INIT(= FALSE);	/* currently no mapping allowed */
  EXTERN int no_zero_mapping INIT(= 0);	/* mapping zero not allowed */
  EXTERN int allow_keys INIT(= FALSE);	/* allow key codes when no_mapping
! 					 * is set */
  EXTERN int no_u_sync INIT(= 0);		/* Don't call u_sync() */
  
  EXTERN int restart_edit INIT(= 0);	/* call edit when next cmd finished */
***************
*** 1250,1255 ****
--- 1250,1263 ----
  #ifdef FEAT_GUI_GTK
  EXTERN guint32	gtk_socket_id INIT(= 0);
  EXTERN int	echo_wid_arg INIT(= FALSE);	/* --echo-wid argument */
+ #endif
+ 
+ #ifdef FEAT_GUI_W32
+ /*
+  * The value of the --windowid argument.
+  * For embedding gvim inside another application.
+  */
+ EXTERN int	win_socket_id INIT(= 0);
  #endif
  
  #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
*** ../vim-7.1.090/src/gui_w32.c	Tue Aug 14 16:57:04 2007
--- src/gui_w32.c	Tue Aug 14 17:13:41 2007
***************
*** 23,28 ****
--- 23,30 ----
   * e.g., replace LONG with LONG_PTR, etc.
   */
  
+ #include "vim.h"
+ 
  /*
   * These are new in Windows ME/XP, only defined in recent compilers.
   */
***************
*** 1432,1447 ****
  	}
      }
      else
! 	/* Open toplevel window. */
  	s_hwnd = CreateWindow(
! 	    szVimWndClass, "Vim MSWindows GUI",
! 	    WS_OVERLAPPEDWINDOW,
! 	    gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
! 	    gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
! 	    100,				/* Any value will do */
! 	    100,				/* Any value will do */
! 	    NULL, NULL,
! 	    s_hinst, NULL);
  
      if (s_hwnd == NULL)
  	return FAIL;
--- 1434,1462 ----
  	}
      }
      else
!     {
! 	/* If the provided windowid is not valid reset it to zero, so that it
! 	 * is ignored and we open our own window. */
! 	if (IsWindow((HWND)win_socket_id) <= 0)
! 	    win_socket_id = 0;
! 
! 	/* Create a window.  If win_socket_id is not zero without border and
! 	 * titlebar, it will be reparented below. */
  	s_hwnd = CreateWindow(
! 		szVimWndClass, "Vim MSWindows GUI",
! 		win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
! 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
! 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
! 		100,				/* Any value will do */
! 		100,				/* Any value will do */
! 		NULL, NULL,
! 		s_hinst, NULL);
! 	if (s_hwnd != NULL && win_socket_id != 0)
! 	{
! 	    SetParent(s_hwnd, (HWND)win_socket_id);
! 	    ShowWindow(s_hwnd, SW_SHOWMAXIMIZED);
! 	}
!     }
  
      if (s_hwnd == NULL)
  	return FAIL;
*** ../vim-7.1.090/src/main.c	Fri Aug 10 21:32:41 2007
--- src/main.c	Tue Aug 14 17:22:52 2007
***************
*** 275,280 ****
--- 275,281 ----
       *   -display or --display
       *   --server...
       *   --socketid
+      *   --windowid
       */
      early_arg_scan(&params);
  
***************
*** 1489,1495 ****
   * Get the name of the display, before gui_prepare() removes it from
   * argv[].  Used for the xterm-clipboard display.
   *
!  * Also find the --server... arguments and --socketid
   */
  /*ARGSUSED*/
      static void
--- 1490,1496 ----
   * Get the name of the display, before gui_prepare() removes it from
   * argv[].  Used for the xterm-clipboard display.
   *
!  * Also find the --server... arguments and --socketid and --windowid
   */
  /*ARGSUSED*/
      static void
***************
*** 1536,1559 ****
  #  endif
  	}
  # endif
! # ifdef FEAT_GUI_GTK
  	else if (STRICMP(argv[i], "--socketid") == 0)
  	{
! 	    unsigned int    socket_id;
  	    int		    count;
  
  	    if (i == argc - 1)
  		mainerr_arg_missing((char_u *)argv[i]);
  	    if (STRNICMP(argv[i+1], "0x", 2) == 0)
! 		count = sscanf(&(argv[i + 1][2]), "%x", &socket_id);
  	    else
! 		count = sscanf(argv[i+1], "%u", &socket_id);
  	    if (count != 1)
  		mainerr(ME_INVALID_ARG, (char_u *)argv[i]);
  	    else
! 		gtk_socket_id = socket_id;
  	    i++;
  	}
  	else if (STRICMP(argv[i], "--echo-wid") == 0)
  	    echo_wid_arg = TRUE;
  # endif
--- 1537,1571 ----
  #  endif
  	}
  # endif
! 
! # if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)
! #  ifdef FEAT_GUI_W32
! 	else if (STRICMP(argv[i], "--windowid") == 0)
! #  else
  	else if (STRICMP(argv[i], "--socketid") == 0)
+ #  endif
  	{
! 	    unsigned int    id;
  	    int		    count;
  
  	    if (i == argc - 1)
  		mainerr_arg_missing((char_u *)argv[i]);
  	    if (STRNICMP(argv[i+1], "0x", 2) == 0)
! 		count = sscanf(&(argv[i + 1][2]), "%x", &id);
  	    else
! 		count = sscanf(argv[i+1], "%u", &id);
  	    if (count != 1)
  		mainerr(ME_INVALID_ARG, (char_u *)argv[i]);
  	    else
! #  ifdef FEAT_GUI_W32
! 		win_socket_id = id;
! #  else
! 		gtk_socket_id = id;
! #  endif
  	    i++;
  	}
+ # endif
+ # ifdef FEAT_GUI_GTK
  	else if (STRICMP(argv[i], "--echo-wid") == 0)
  	    echo_wid_arg = TRUE;
  # endif
***************
*** 1683,1690 ****
  		    }
  		}
  #endif
! #ifdef FEAT_GUI_GTK
  		else if (STRNICMP(argv[0] + argv_idx, "socketid", 8) == 0)
  		{
  		    /* already processed -- snatch the following arg */
  		    if (argc > 1)
--- 1695,1706 ----
  		    }
  		}
  #endif
! #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)
! # ifdef FEAT_GUI_GTK
  		else if (STRNICMP(argv[0] + argv_idx, "socketid", 8) == 0)
+ # else
+ 		else if (STRNICMP(argv[0] + argv_idx, "windowid", 8) == 0)
+ # endif
  		{
  		    /* already processed -- snatch the following arg */
  		    if (argc > 1)
***************
*** 1693,1698 ****
--- 1709,1716 ----
  			++argv;
  		    }
  		}
+ #endif
+ #ifdef FEAT_GUI_GTK
  		else if (STRNICMP(argv[0] + argv_idx, "echo-wid", 8) == 0)
  		{
  		    /* already processed, skip */
***************
*** 3120,3125 ****
--- 3138,3144 ----
  #endif
  #ifdef FEAT_GUI_W32
      main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+     main_msg(_("--windowid <HWND>\tOpen Vim inside another win32 widget"));
  #endif
  
  #ifdef FEAT_GUI_GNOME
*** ../vim-7.1.090/src/version.c	Thu Aug 30 11:46:46 2007
--- src/version.c	Thu Aug 30 12:21:02 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     91,
  /**/

-- 
       We're knights of the Round Table
       Our shows are formidable
       But many times
       We're given rhymes
       That are quite unsingable
       We're opera mad in Camelot
       We sing from the diaphragm a lot.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.092 ---
To: vim-dev at vim.org
Subject: patch 7.1.092 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.092 (extra, after 7.1.088)
Problem:    Wrong arguments for MoveWindowStructure().
Solution:   Remove "TRUE". (Michael Henry)
Files:	    src/gui_mac.c


*** ../vim-7.1.091/src/gui_mac.c	Thu Aug 30 10:34:19 2007
--- src/gui_mac.c	Thu Aug 30 12:48:41 2007
***************
*** 3149,3155 ****
      /* TODO:  Should make sure the window is move within range
       *	      e.g.: y > ~16 [Menu bar], x > 0, x < screen width
       */
!     MoveWindowStructure(gui.VimWindow, x, y, TRUE);
  }
  
      void
--- 3149,3155 ----
      /* TODO:  Should make sure the window is move within range
       *	      e.g.: y > ~16 [Menu bar], x > 0, x < screen width
       */
!     MoveWindowStructure(gui.VimWindow, x, y);
  }
  
      void
***************
*** 5293,5299 ****
      short	itemType;
      short	useIcon;
      short	width;
!     short	totalButtonWidth = 0;   /* the width of all button together
  					   including spacing */
      short	widestButton = 0;
      short	dfltButtonEdge     = 20;  /* gut feeling */
--- 5293,5299 ----
      short	itemType;
      short	useIcon;
      short	width;
!     short	totalButtonWidth = 0;   /* the width of all buttons together
  					   including spacing */
      short	widestButton = 0;
      short	dfltButtonEdge     = 20;  /* gut feeling */
***************
*** 5483,5489 ****
      {
  
  	macMoveDialogItem(theDialog, button, buttonItm.box.left, buttonItm.box.top, &box);
! 	/* With vertical, it's better to have all button the same lenght */
  	if (vertical)
  	{
  	    macSizeDialogItem(theDialog, button, widestButton, 0);
--- 5483,5489 ----
      {
  
  	macMoveDialogItem(theDialog, button, buttonItm.box.left, buttonItm.box.top, &box);
! 	/* With vertical, it's better to have all buttons the same length */
  	if (vertical)
  	{
  	    macSizeDialogItem(theDialog, button, widestButton, 0);
*** ../vim-7.1.091/src/version.c	Thu Aug 30 12:24:21 2007
--- src/version.c	Thu Aug 30 12:47:24 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     92,
  /**/

-- 
       In war we're tough and able.
       Quite indefatigable
       Between our quests
       We sequin vests
       And impersonate Clark Gable
       It's a busy life in Camelot.
       I have to push the pram a lot.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.093 ---
To: vim-dev at vim.org
Subject: patch 7.1.093
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.093
Problem:    Reading past end of a screen line when determining cell width.
	    (Dominique Pelle)
Solution:   Add an argument to mb_off2cells() for the maximum offset.
Files:	    src/globals.h, src/gui.c, src/mbyte.c, src/proto/mbyte.pro,
	    src/screen.c


*** ../vim-7.1.092/src/globals.h	Thu Aug 30 12:24:21 2007
--- src/globals.h	Wed Aug 29 22:27:45 2007
***************
*** 801,807 ****
  EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes);
  EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells);
  EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells);
! EXTERN int (*mb_off2cells) __ARGS((unsigned off)) INIT(= latin_off2cells);
  EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char);
  EXTERN int (*mb_head_off) __ARGS((char_u *base, char_u *p)) INIT(= latin_head_off);
  
--- 801,807 ----
  EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes);
  EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells);
  EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells);
! EXTERN int (*mb_off2cells) __ARGS((unsigned off, unsigned max_off)) INIT(= latin_off2cells);
  EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char);
  EXTERN int (*mb_head_off) __ARGS((char_u *base, char_u *p)) INIT(= latin_head_off);
  
*** ../vim-7.1.092/src/gui.c	Wed Aug 15 20:07:53 2007
--- src/gui.c	Wed Aug 29 22:16:51 2007
***************
*** 1080,1086 ****
  		cur_width = gui.char_width;
  	    }
  #ifdef FEAT_MBYTE
! 	    if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col) > 1)
  	    {
  		/* Double wide character. */
  		if (shape_table[idx].shape != SHAPE_VER)
--- 1080,1087 ----
  		cur_width = gui.char_width;
  	    }
  #ifdef FEAT_MBYTE
! 	    if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col,
! 				    LineOffset[gui.row] + screen_Columns) > 1)
  	    {
  		/* Double wide character. */
  		if (shape_table[idx].shape != SHAPE_VER)
***************
*** 1159,1165 ****
  #endif
  
  # if defined(FEAT_GUI_TABLINE) && (defined(FEAT_GUI_MSWIN) \
!  	|| defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_MAC))
      if (gui_has_tabline())
  	text_area_y += gui.tabline_height;
  #endif
--- 1160,1166 ----
  #endif
  
  # if defined(FEAT_GUI_TABLINE) && (defined(FEAT_GUI_MSWIN) \
! 	|| defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_MAC))
      if (gui_has_tabline())
  	text_area_y += gui.tabline_height;
  #endif
*** ../vim-7.1.092/src/mbyte.c	Sat Aug 11 13:57:31 2007
--- src/mbyte.c	Thu Aug 30 13:48:30 2007
***************
*** 1310,1329 ****
  /*
   * mb_off2cells() function pointer.
   * Return number of display cells for char at ScreenLines[off].
!  * Caller must make sure "off" and "off + 1" are valid!
   */
  /*ARGSUSED*/
      int
! latin_off2cells(off)
      unsigned	off;
  {
      return 1;
  }
  
      int
! dbcs_off2cells(off)
      unsigned	off;
  {
      /* Number of cells is equal to number of bytes, except for euc-jp when
       * the first byte is 0x8e. */
      if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
--- 1310,1335 ----
  /*
   * mb_off2cells() function pointer.
   * Return number of display cells for char at ScreenLines[off].
!  * We make sure that the offset used is less than "max_off".
   */
  /*ARGSUSED*/
      int
! latin_off2cells(off, max_off)
      unsigned	off;
+     unsigned	max_off;
  {
      return 1;
  }
  
      int
! dbcs_off2cells(off, max_off)
      unsigned	off;
+     unsigned	max_off;
  {
+     /* never check beyond end of the line */
+     if (off >= max_off)
+ 	return 1;
+ 
      /* Number of cells is equal to number of bytes, except for euc-jp when
       * the first byte is 0x8e. */
      if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
***************
*** 1332,1341 ****
  }
  
      int
! utf_off2cells(off)
      unsigned	off;
  {
!     return ScreenLines[off + 1] == 0 ? 2 : 1;
  }
  
  /*
--- 1338,1348 ----
  }
  
      int
! utf_off2cells(off, max_off)
      unsigned	off;
+     unsigned	max_off;
  {
!     return (off + 1 < max_off && ScreenLines[off + 1] == 0) ? 2 : 1;
  }
  
  /*
***************
*** 2899,2910 ****
      if (composing_hangul)
  	return TRUE;
  #endif
!     if (enc_dbcs != 0)
! 	return dbcs_off2cells(LineOffset[row] + col) > 1;
!     if (enc_utf8)
! 	return (col + 1 < Columns
! 		&& ScreenLines[LineOffset[row] + col + 1] == 0);
!     return FALSE;
  }
  
  # if defined(FEAT_CLIPBOARD) || defined(FEAT_GUI) || defined(FEAT_RIGHTLEFT) \
--- 2906,2913 ----
      if (composing_hangul)
  	return TRUE;
  #endif
!     return (*mb_off2cells)(LineOffset[row] + col,
! 					LineOffset[row] + screen_Columns) > 1;
  }
  
  # if defined(FEAT_CLIPBOARD) || defined(FEAT_GUI) || defined(FEAT_RIGHTLEFT) \
*** ../vim-7.1.092/src/proto/mbyte.pro	Sat May  5 20:02:52 2007
--- src/proto/mbyte.pro	Wed Aug 29 20:49:02 2007
***************
*** 12,20 ****
  int utf_ptr2cells __ARGS((char_u *p));
  int dbcs_ptr2cells __ARGS((char_u *p));
  int latin_char2cells __ARGS((int c));
! int latin_off2cells __ARGS((unsigned off));
! int dbcs_off2cells __ARGS((unsigned off));
! int utf_off2cells __ARGS((unsigned off));
  int latin_ptr2char __ARGS((char_u *p));
  int utf_ptr2char __ARGS((char_u *p));
  int mb_ptr2char_adv __ARGS((char_u **pp));
--- 12,20 ----
  int utf_ptr2cells __ARGS((char_u *p));
  int dbcs_ptr2cells __ARGS((char_u *p));
  int latin_char2cells __ARGS((int c));
! int latin_off2cells __ARGS((unsigned off, unsigned max_off));
! int dbcs_off2cells __ARGS((unsigned off, unsigned max_off));
! int utf_off2cells __ARGS((unsigned off, unsigned max_off));
  int latin_ptr2char __ARGS((char_u *p));
  int utf_ptr2char __ARGS((char_u *p));
  int mb_ptr2char_adv __ARGS((char_u **pp));
*** ../vim-7.1.092/src/screen.c	Sun Aug  5 20:10:16 2007
--- src/screen.c	Thu Aug 30 10:31:26 2007
***************
*** 1024,1030 ****
  	    type = VALID;
      }
  
!     /* Trick: we want to avoid clearning the screen twice.  screenclear() will
       * set "screen_cleared" to TRUE.  The special value MAYBE (which is still
       * non-zero and thus not FALSE) will indicate that screenclear() was not
       * called. */
--- 1024,1030 ----
  	    type = VALID;
      }
  
!     /* Trick: we want to avoid clearing the screen twice.  screenclear() will
       * set "screen_cleared" to TRUE.  The special value MAYBE (which is still
       * non-zero and thus not FALSE) will indicate that screenclear() was not
       * called. */
***************
*** 4632,4638 ****
  
  	/*
  	 * At end of screen line and there is more to come: Display the line
! 	 * so far.  If there is no more to display it is catched above.
  	 */
  	if ((
  #ifdef FEAT_RIGHTLEFT
--- 4632,4638 ----
  
  	/*
  	 * At end of screen line and there is more to come: Display the line
! 	 * so far.  If there is no more to display it is caught above.
  	 */
  	if ((
  #ifdef FEAT_RIGHTLEFT
***************
*** 4709,4717 ****
  #endif
  #ifdef FEAT_MBYTE
  			 && !(has_mbyte
! 			     && ((*mb_off2cells)(LineOffset[screen_row]) == 2
  				 || (*mb_off2cells)(LineOffset[screen_row - 1]
! 							+ (int)Columns - 2) == 2))
  #endif
  		   )
  		{
--- 4709,4721 ----
  #endif
  #ifdef FEAT_MBYTE
  			 && !(has_mbyte
! 			     && ((*mb_off2cells)(LineOffset[screen_row],
! 				     LineOffset[screen_row] + screen_Columns)
! 									  == 2
  				 || (*mb_off2cells)(LineOffset[screen_row - 1]
! 							+ (int)Columns - 2,
! 				     LineOffset[screen_row] + screen_Columns)
! 									== 2))
  #endif
  		   )
  		{
***************
*** 4871,4876 ****
--- 4875,4884 ----
  {
      unsigned	    off_from;
      unsigned	    off_to;
+ #ifdef FEAT_MBYTE
+     unsigned	    max_off_from;
+     unsigned	    max_off_to;
+ #endif
      int		    col = 0;
  #if defined(FEAT_GUI) || defined(UNIX) || defined(FEAT_VERTSPLIT)
      int		    hl;
***************
*** 4897,4902 ****
--- 4905,4914 ----
  
      off_from = (unsigned)(current_ScreenLine - ScreenLines);
      off_to = LineOffset[row] + coloff;
+ #ifdef FEAT_MBYTE
+     max_off_from = off_from + screen_Columns;
+     max_off_to = LineOffset[row] + screen_Columns;
+ #endif
  
  #ifdef FEAT_RIGHTLEFT
      if (rlflag)
***************
*** 4931,4937 ****
      {
  #ifdef FEAT_MBYTE
  	if (has_mbyte && (col + 1 < endcol))
! 	    char_cells = (*mb_off2cells)(off_from);
  	else
  	    char_cells = 1;
  #endif
--- 4943,4949 ----
      {
  #ifdef FEAT_MBYTE
  	if (has_mbyte && (col + 1 < endcol))
! 	    char_cells = (*mb_off2cells)(off_from, max_off_from);
  	else
  	    char_cells = 1;
  #endif
***************
*** 5008,5014 ****
  		 * ScreenLinesUC[] is sufficient. */
  		if (char_cells == 1
  			&& col + 1 < endcol
! 			&& (*mb_off2cells)(off_to) > 1)
  		{
  		    /* Writing a single-cell character over a double-cell
  		     * character: need to redraw the next cell. */
--- 5020,5026 ----
  		 * ScreenLinesUC[] is sufficient. */
  		if (char_cells == 1
  			&& col + 1 < endcol
! 			&& (*mb_off2cells)(off_to, max_off_to) > 1)
  		{
  		    /* Writing a single-cell character over a double-cell
  		     * character: need to redraw the next cell. */
***************
*** 5017,5024 ****
  		}
  		else if (char_cells == 2
  			&& col + 2 < endcol
! 			&& (*mb_off2cells)(off_to) == 1
! 			&& (*mb_off2cells)(off_to + 1) > 1)
  		{
  		    /* Writing the second half of a double-cell character over
  		     * a double-cell character: need to redraw the second
--- 5029,5036 ----
  		}
  		else if (char_cells == 2
  			&& col + 2 < endcol
! 			&& (*mb_off2cells)(off_to, max_off_to) == 1
! 			&& (*mb_off2cells)(off_to + 1, max_off_to) > 1)
  		{
  		    /* Writing the second half of a double-cell character over
  		     * a double-cell character: need to redraw the second
***************
*** 5037,5046 ****
  	     * char over the left halve of an existing one. */
  	    if (has_mbyte && col + char_cells == endcol
  		    && ((char_cells == 1
! 			    && (*mb_off2cells)(off_to) > 1)
  			|| (char_cells == 2
! 			    && (*mb_off2cells)(off_to) == 1
! 			    && (*mb_off2cells)(off_to + 1) > 1)))
  		clear_next = TRUE;
  #endif
  
--- 5049,5058 ----
  	     * char over the left halve of an existing one. */
  	    if (has_mbyte && col + char_cells == endcol
  		    && ((char_cells == 1
! 			    && (*mb_off2cells)(off_to, max_off_to) > 1)
  			|| (char_cells == 2
! 			    && (*mb_off2cells)(off_to, max_off_to) == 1
! 			    && (*mb_off2cells)(off_to + 1, max_off_to) > 1)))
  		clear_next = TRUE;
  #endif
  
***************
*** 5180,5189 ****
  			/* find previous character by counting from first
  			 * column and get its width. */
  			unsigned off = LineOffset[row];
  
  			while (off < off_to)
  			{
! 			    prev_cells = (*mb_off2cells)(off);
  			    off += prev_cells;
  			}
  		    }
--- 5192,5202 ----
  			/* find previous character by counting from first
  			 * column and get its width. */
  			unsigned off = LineOffset[row];
+ 			unsigned max_off = LineOffset[row] + screen_Columns;
  
  			while (off < off_to)
  			{
! 			    prev_cells = (*mb_off2cells)(off, max_off);
  			    off += prev_cells;
  			}
  		    }
***************
*** 5369,5375 ****
  static int skip_status_match_char __ARGS((expand_T *xp, char_u *s));
  
  /*
!  * Get the lenght of an item as it will be shown in the status line.
   */
      static int
  status_match_len(xp, s)
--- 5382,5388 ----
  static int skip_status_match_char __ARGS((expand_T *xp, char_u *s));
  
  /*
!  * Get the length of an item as it will be shown in the status line.
   */
      static int
  status_match_len(xp, s)
***************
*** 5435,5441 ****
      int		row;
      char_u	*buf;
      int		len;
!     int		clen;		/* lenght in screen cells */
      int		fillchar;
      int		attr;
      int		i;
--- 5448,5454 ----
      int		row;
      char_u	*buf;
      int		len;
!     int		clen;		/* length in screen cells */
      int		fillchar;
      int		attr;
      int		i;
***************
*** 6187,6192 ****
--- 6200,6206 ----
      char_u	*ptr = text;
      int		c;
  #ifdef FEAT_MBYTE
+     unsigned	max_off;
      int		mbyte_blen = 1;
      int		mbyte_cells = 1;
      int		u8c = 0;
***************
*** 6203,6208 ****
--- 6217,6225 ----
  	return;
  
      off = LineOffset[row] + col;
+ #ifdef FEAT_MBYTE
+     max_off = LineOffset[row] + screen_Columns;
+ #endif
      while (col < screen_Columns
  	    && (len < 0 || (int)(ptr - text) < len)
  	    && *ptr != NUL)
***************
*** 6326,6344 ****
  	    else if (has_mbyte
  		    && (len < 0 ? ptr[mbyte_blen] == NUL
  					     : ptr + mbyte_blen >= text + len)
! 		    && ((mbyte_cells == 1 && (*mb_off2cells)(off) > 1)
  			|| (mbyte_cells == 2
! 			    && (*mb_off2cells)(off) == 1
! 			    && (*mb_off2cells)(off + 1) > 1)))
  		clear_next_cell = TRUE;
  
  	    /* Make sure we never leave a second byte of a double-byte behind,
  	     * it confuses mb_off2cells(). */
  	    if (enc_dbcs
! 		    && ((mbyte_cells == 1 && (*mb_off2cells)(off) > 1)
  			|| (mbyte_cells == 2
! 			    && (*mb_off2cells)(off) == 1
! 			    && (*mb_off2cells)(off + 1) > 1)))
  		ScreenLines[off + mbyte_blen] = 0;
  #endif
  	    ScreenLines[off] = c;
--- 6343,6361 ----
  	    else if (has_mbyte
  		    && (len < 0 ? ptr[mbyte_blen] == NUL
  					     : ptr + mbyte_blen >= text + len)
! 		    && ((mbyte_cells == 1 && (*mb_off2cells)(off, max_off) > 1)
  			|| (mbyte_cells == 2
! 			    && (*mb_off2cells)(off, max_off) == 1
! 			    && (*mb_off2cells)(off + 1, max_off) > 1)))
  		clear_next_cell = TRUE;
  
  	    /* Make sure we never leave a second byte of a double-byte behind,
  	     * it confuses mb_off2cells(). */
  	    if (enc_dbcs
! 		    && ((mbyte_cells == 1 && (*mb_off2cells)(off, max_off) > 1)
  			|| (mbyte_cells == 2
! 			    && (*mb_off2cells)(off, max_off) == 1
! 			    && (*mb_off2cells)(off + 1, max_off) > 1)))
  		ScreenLines[off + mbyte_blen] = 0;
  #endif
  	    ScreenLines[off] = c;
***************
*** 6924,6929 ****
--- 6941,6949 ----
  {
      int		r, c;
      int		off;
+ #ifdef FEAT_MBYTE
+     int		max_off;
+ #endif
  
      /* Can't use ScreenLines unless initialized */
      if (ScreenLines == NULL)
***************
*** 6934,6943 ****
      for (r = row; r < row + height; ++r)
      {
  	off = LineOffset[r];
  	for (c = col; c < col + width; ++c)
  	{
  #ifdef FEAT_MBYTE
! 	    if (enc_dbcs != 0 && dbcs_off2cells(off + c) > 1)
  	    {
  		screen_char_2(off + c, r, c);
  		++c;
--- 6954,6966 ----
      for (r = row; r < row + height; ++r)
      {
  	off = LineOffset[r];
+ #ifdef FEAT_MBYTE
+ 	max_off = off + screen_Columns;
+ #endif
  	for (c = col; c < col + width; ++c)
  	{
  #ifdef FEAT_MBYTE
! 	    if (enc_dbcs != 0 && dbcs_off2cells(off + c, max_off) > 1)
  	    {
  		screen_char_2(off + c, r, c);
  		++c;
***************
*** 6947,6953 ****
  	    {
  		screen_char(off + c, r, c);
  #ifdef FEAT_MBYTE
! 		if (utf_off2cells(off + c) > 1)
  		    ++c;
  #endif
  	    }
--- 6970,6976 ----
  	    {
  		screen_char(off + c, r, c);
  #ifdef FEAT_MBYTE
! 		if (utf_off2cells(off + c, max_off) > 1)
  		    ++c;
  #endif
  	    }
*** ../vim-7.1.092/src/version.c	Thu Aug 30 12:50:00 2007
--- src/version.c	Thu Aug 30 13:45:25 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     93,
  /**/

-- 
There is a fine line between courage and foolishness.
Unfortunately, it's not a fence.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.094 ---
To: vim-dev at vim.org
Subject: patch 7.1.094
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.094
Problem:    When checking if syntax highlighting is present, looking in the
	    current buffer instead of the specified one.
Solution:   Use "buf" instead of "curbuf".
Files:	    src/syntax.c


*** ../vim-7.1.093/src/syntax.c	Tue Aug 21 17:29:04 2007
--- src/syntax.c	Wed Aug 29 23:27:52 2007
***************
*** 5987,5994 ****
  {
      return (buf->b_syn_patterns.ga_len != 0
  	    || buf->b_syn_clusters.ga_len != 0
! 	    || curbuf->b_keywtab.ht_used > 0
! 	    || curbuf->b_keywtab_ic.ht_used > 0);
  }
  
  #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
--- 5987,5994 ----
  {
      return (buf->b_syn_patterns.ga_len != 0
  	    || buf->b_syn_clusters.ga_len != 0
! 	    || buf->b_keywtab.ht_used > 0
! 	    || buf->b_keywtab_ic.ht_used > 0);
  }
  
  #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
*** ../vim-7.1.093/src/version.c	Thu Aug 30 13:51:52 2007
--- src/version.c	Thu Aug 30 19:35:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     94,
  /**/

-- 
MAN:     You don't frighten us, English pig-dog!  Go and boil your bottoms,
         son of a silly person.  I blow my nose on you, so-called Arthur-king,
         you and your silly English K...kaniggets.
   He puts hands to his ears and blows a raspberry.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.095 ---
To: vim-dev at vim.org
Subject: patch 7.1.095
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.095
Problem:    The FocusLost and FocusGained autocommands are triggered
	    asynchronously in the GUI.  This may cause arbitrary problems.
Solution:   Put the focus event in the input buffer and handle it when ready
	    for it.
Files:	    src/eval.c, src/getchar.c, src/gui.c, src/gui_gtk_x11.c,
	    src/keymap.h


*** ../vim-7.1.094/src/eval.c	Thu Aug 30 11:10:38 2007
--- src/eval.c	Mon Sep  3 22:48:09 2007
***************
*** 9912,9929 ****
  
      ++no_mapping;
      ++allow_keys;
!     if (argvars[0].v_type == VAR_UNKNOWN)
! 	/* getchar(): blocking wait. */
! 	n = safe_vgetc();
!     else if (get_tv_number_chk(&argvars[0], &error) == 1)
! 	/* getchar(1): only check if char avail */
! 	n = vpeekc();
!     else if (error || vpeekc() == NUL)
! 	/* illegal argument or getchar(0) and no char avail: return zero */
! 	n = 0;
!     else
! 	/* getchar(0) and char avail: return char */
! 	n = safe_vgetc();
      --no_mapping;
      --allow_keys;
  
--- 9912,9935 ----
  
      ++no_mapping;
      ++allow_keys;
!     for (;;)
!     {
! 	if (argvars[0].v_type == VAR_UNKNOWN)
! 	    /* getchar(): blocking wait. */
! 	    n = safe_vgetc();
! 	else if (get_tv_number_chk(&argvars[0], &error) == 1)
! 	    /* getchar(1): only check if char avail */
! 	    n = vpeekc();
! 	else if (error || vpeekc() == NUL)
! 	    /* illegal argument or getchar(0) and no char avail: return zero */
! 	    n = 0;
! 	else
! 	    /* getchar(0) and char avail: return char */
! 	    n = safe_vgetc();
! 	if (n == K_IGNORE)
! 	    continue;
! 	break;
!     }
      --no_mapping;
      --allow_keys;
  
*** ../vim-7.1.094/src/getchar.c	Thu May 10 18:43:02 2007
--- src/getchar.c	Wed Aug 29 22:38:49 2007
***************
*** 1596,1603 ****
  		continue;
  	    }
  #endif
- 
  #ifdef FEAT_GUI
  	    /* Translate K_CSI to CSI.  The special key is only used to avoid
  	     * it being recognized as the start of a special key. */
  	    if (c == K_CSI)
--- 1596,1610 ----
  		continue;
  	    }
  #endif
  #ifdef FEAT_GUI
+ 	    /* The caller doesn't need to know that the focus event is delayed
+ 	     * until getting a character. */
+ 	    if (c == K_FOCUSGAINED || c == K_FOCUSLOST)
+ 	    {
+ 		ui_focus_change(c == K_FOCUSGAINED);
+ 		continue;
+ 	    }
+ 
  	    /* Translate K_CSI to CSI.  The special key is only used to avoid
  	     * it being recognized as the start of a special key. */
  	    if (c == K_CSI)
*** ../vim-7.1.094/src/gui.c	Thu Aug 30 13:51:52 2007
--- src/gui.c	Thu Aug 30 14:10:48 2007
***************
*** 4519,4525 ****
      xim_set_focus(in_focus);
  # endif
  
!     ui_focus_change(in_focus);
  #endif
  }
  
--- 4519,4536 ----
      xim_set_focus(in_focus);
  # endif
  
!     /* Put events in the input queue only when allowed.
!      * ui_focus_change() isn't called directly, because it invokes
!      * autocommands and that must not happen asynchronously. */
!     if (!hold_gui_events)
!     {
! 	char_u  bytes[3];
! 
! 	bytes[0] = CSI;
! 	bytes[1] = KS_EXTRA;
! 	bytes[2] = in_focus ? (int)KE_FOCUSGAINED : (int)KE_FOCUSLOST;
! 	add_to_input_buf(bytes, 3);
!     }
  #endif
  }
  
*** ../vim-7.1.094/src/gui_gtk_x11.c	Tue Jun 19 18:07:52 2007
--- src/gui_gtk_x11.c	Wed Aug 29 22:43:34 2007
***************
*** 813,822 ****
      if (blink_state == BLINK_NONE)
  	gui_mch_start_blink();
  
!     /* make sure keyboard input goes to the draw area (if this is focus for a window) */
      if (widget != gui.drawarea)
  	gtk_widget_grab_focus(gui.drawarea);
  
      return TRUE;
  }
  
--- 813,827 ----
      if (blink_state == BLINK_NONE)
  	gui_mch_start_blink();
  
!     /* make sure keyboard input goes to the draw area (if this is focus for a
!      * window) */
      if (widget != gui.drawarea)
  	gtk_widget_grab_focus(gui.drawarea);
  
+     /* make sure the input buffer is read */
+     if (gtk_main_level() > 0)
+ 	gtk_main_quit();
+ 
      return TRUE;
  }
  
***************
*** 828,833 ****
--- 833,842 ----
  
      if (blink_state != BLINK_NONE)
  	gui_mch_stop_blink();
+ 
+     /* make sure the input buffer is read */
+     if (gtk_main_level() > 0)
+ 	gtk_main_quit();
  
      return TRUE;
  }
*** ../vim-7.1.094/src/keymap.h	Sat May  5 19:34:22 2007
--- src/keymap.h	Wed Aug 29 22:17:51 2007
***************
*** 254,259 ****
--- 254,261 ----
      , KE_DROP		/* DnD data is available */
      , KE_CURSORHOLD	/* CursorHold event */
      , KE_NOP		/* doesn't do something */
+     , KE_FOCUSGAINED	/* focus gained */
+     , KE_FOCUSLOST	/* focus lost */
  };
  
  /*
***************
*** 445,450 ****
--- 447,454 ----
  #define K_CMDWIN	TERMCAP2KEY(KS_EXTRA, KE_CMDWIN)
  
  #define K_DROP		TERMCAP2KEY(KS_EXTRA, KE_DROP)
+ #define K_FOCUSGAINED	TERMCAP2KEY(KS_EXTRA, KE_FOCUSGAINED)
+ #define K_FOCUSLOST	TERMCAP2KEY(KS_EXTRA, KE_FOCUSLOST)
  
  #define K_CURSORHOLD	TERMCAP2KEY(KS_EXTRA, KE_CURSORHOLD)
  
*** ../vim-7.1.094/src/version.c	Thu Aug 30 19:36:52 2007
--- src/version.c	Wed Sep  5 21:42:41 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     95,
  /**/

-- 
ARTHUR:      Who are you?
TALL KNIGHT: We are the Knights Who Say "Ni"!
BEDEVERE:    No!  Not the Knights Who Say "Ni"!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.096 ---
To: vim-dev at vim.org
Subject: patch 7.1.096
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.096
Problem:    Reading past end of a string when resizing Vim. (Dominique Pelle)
Solution:   Check the string pointer before getting the char it points to.
Files:	    src/message.c


*** ../vim-7.1.095/src/message.c	Tue Aug  7 21:59:26 2007
--- src/message.c	Thu Aug 30 22:53:03 2007
***************
*** 944,949 ****
--- 944,950 ----
  		c = K_IGNORE;
  	    }
  #endif
+ 
  	    /*
  	     * Allow scrolling back in the messages.
  	     * Also accept scroll-down commands when messages fill the screen,
***************
*** 1840,1845 ****
--- 1841,1847 ----
      char_u	*sb_str = str;
      int		sb_col = msg_col;
      int		wrap;
+     int		did_last_char;
  
      did_wait_return = FALSE;
      while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL)
***************
*** 1909,1915 ****
--- 1911,1920 ----
  		else
  #endif
  		    msg_screen_putchar(*s++, attr);
+ 		did_last_char = TRUE;
  	    }
+ 	    else
+ 		did_last_char = FALSE;
  
  	    if (p_more)
  		/* store text for scrolling back */
***************
*** 1944,1954 ****
  
  	    /* When we displayed a char in last column need to check if there
  	     * is still more. */
! 	    if (*s >= ' '
! #ifdef FEAT_RIGHTLEFT
! 		    && !cmdmsg_rl
! #endif
! 	       )
  		continue;
  	}
  
--- 1949,1955 ----
  
  	    /* When we displayed a char in last column need to check if there
  	     * is still more. */
! 	    if (did_last_char)
  		continue;
  	}
  
*** ../vim-7.1.095/src/version.c	Wed Sep  5 21:45:54 2007
--- src/version.c	Thu Sep  6 12:31:28 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     96,
  /**/

-- 
Yah, well, we had to carve our electrons out of driftwood we'd
find.  In the winter.  Uphill.  Both ways.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.097 ---
To: vim-dev at vim.org
Subject: patch 7.1.097
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.097
Problem:    ":setlocal stl=%!1+1" does not work.
Solution:   Adjust check for pointer. (Politz)
Files:	    src/option.c


*** ../vim-7.1.096/src/option.c	Sun Aug 12 15:50:26 2007
--- src/option.c	Wed Sep  5 22:34:27 2007
***************
*** 6348,6354 ****
  		errmsg = check_stl_option(p_ruf);
  	}
  	/* check 'statusline' only if it doesn't start with "%!" */
! 	else if (varp != &p_stl || s[0] != '%' || s[1] != '!')
  	    errmsg = check_stl_option(s);
  	if (varp == &p_ruf && errmsg == NULL)
  	    comp_col();
--- 6352,6358 ----
  		errmsg = check_stl_option(p_ruf);
  	}
  	/* check 'statusline' only if it doesn't start with "%!" */
! 	else if (varp == &p_ruf || s[0] != '%' || s[1] != '!')
  	    errmsg = check_stl_option(s);
  	if (varp == &p_ruf && errmsg == NULL)
  	    comp_col();
*** ../vim-7.1.096/src/version.c	Thu Sep  6 12:53:59 2007
--- src/version.c	Thu Sep  6 13:31:37 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     97,
  /**/

-- 
Not too long ago, cut and paste was done with scissors and glue...

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.098 ---
To: vim-dev at vim.org
Subject: patch 7.1.098
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.098
Problem:    ":call s:var()" doesn't work if "s:var" is a Funcref. (Andy Wokula)
Solution:   Before converting "s:" into a script ID, check if it is a Funcref.
Files:	    src/eval.c


*** ../vim-7.1.097/src/eval.c	Wed Sep  5 21:45:54 2007
--- src/eval.c	Thu Sep  6 12:11:19 2007
***************
*** 19367,19372 ****
--- 19367,19394 ----
      if (lv.ll_name == NULL)
      {
  	/* Error found, but continue after the function name. */
+ 	*pp = end;
+ 	goto theend;
+     }
+ 
+     /* Check if the name is a Funcref.  If so, use the value. */
+     if (lv.ll_exp_name != NULL)
+     {
+ 	len = (int)STRLEN(lv.ll_exp_name);
+ 	name = deref_func_name(lv.ll_exp_name, &len);
+ 	if (name == lv.ll_exp_name)
+ 	    name = NULL;
+     }
+     else
+     {
+ 	len = (int)(end - *pp);
+ 	name = deref_func_name(*pp, &len);
+ 	if (name == *pp)
+ 	    name = NULL;
+     }
+     if (name != NULL)
+     {
+ 	name = vim_strsave(name);
  	*pp = end;
  	goto theend;
      }
*** ../vim-7.1.097/src/version.c	Thu Sep  6 13:32:53 2007
--- src/version.c	Thu Sep  6 14:24:10 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     98,
  /**/

-- 
Not too long ago, a program was something you watched on TV...

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.099 ---
To: vim-dev at vim.org
Subject: patch 7.1.099
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.099
Problem:    When the 'keymap' and 'paste' options have a non-default value,
	    ":mkexrc" and ":mksession" do not correctly set the options.
Solution:   Set the options with side effects before other options.
Files:	    src/option.c

 
*** ../vim-7.1.098/src/option.c	Thu Sep  6 13:32:53 2007
--- src/option.c	Wed Sep  5 22:34:27 2007
***************
*** 427,432 ****
--- 427,434 ----
  #define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
  #define P_NFNAME       0x200000L/* only normal file name chars allowed */
  #define P_INSECURE     0x400000L/* option was set from a modeline */
+ #define P_PRI_MKRC     0x800000L/* priority for :mkvimrc (setting option has
+ 				   side effects) */
  
  #define ISK_LATIN1  (char_u *)"@,48-57,_,192-255"
  
***************
*** 773,778 ****
--- 775,782 ----
  			    {(char_u *)0L, (char_u *)0L}
  #endif
  			    },
+ 			    /* P_PRI_MKRC isn't needed here, optval_default()
+ 			     * always returns TRUE for 'compatible' */
      {"compatible",  "cp",   P_BOOL|P_RALL,
  			    (char_u *)&p_cp, PV_NONE,
  			    {(char_u *)TRUE, (char_u *)FALSE}},
***************
*** 1515,1521 ****
  			    {(char_u *)0L, (char_u *)0L}
  #endif
  			    },
!     {"keymap",	    "kmp",  P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME,
  #ifdef FEAT_KEYMAP
  			    (char_u *)&p_keymap, PV_KMAP,
  			    {(char_u *)"", (char_u *)0L}
--- 1519,1525 ----
  			    {(char_u *)0L, (char_u *)0L}
  #endif
  			    },
!     {"keymap",	    "kmp",  P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME|P_PRI_MKRC,
  #ifdef FEAT_KEYMAP
  			    (char_u *)&p_keymap, PV_KMAP,
  			    {(char_u *)"", (char_u *)0L}
***************
*** 1836,1842 ****
      {"paragraphs",  "para", P_STRING|P_VI_DEF,
  			    (char_u *)&p_para, PV_NONE,
  			    {(char_u *)"IPLPPPQPP LIpplpipbp", (char_u *)0L}},
!     {"paste",	    NULL,   P_BOOL|P_VI_DEF,
  			    (char_u *)&p_paste, PV_NONE,
  			    {(char_u *)FALSE, (char_u *)0L}},
      {"pastetoggle", "pt",   P_STRING|P_VI_DEF,
--- 1840,1846 ----
      {"paragraphs",  "para", P_STRING|P_VI_DEF,
  			    (char_u *)&p_para, PV_NONE,
  			    {(char_u *)"IPLPPPQPP LIpplpipbp", (char_u *)0L}},
!     {"paste",	    NULL,   P_BOOL|P_VI_DEF|P_PRI_MKRC,
  			    (char_u *)&p_paste, PV_NONE,
  			    {(char_u *)FALSE, (char_u *)0L}},
      {"pastetoggle", "pt",   P_STRING|P_VI_DEF,
***************
*** 8535,8547 ****
      char_u		*varp_local = NULL;	/* fresh value */
      char		*cmd;
      int			round;
  
      /*
       * The options that don't have a default (terminal name, columns, lines)
       * are never written.  Terminal options are also not written.
       */
!     for (p = &options[0]; !istermoption(p); p++)
! 	if (!(p->flags & P_NO_MKRC) && !istermoption(p))
  	{
  	    /* skip global option when only doing locals */
  	    if (p->indir == PV_NONE && !(opt_flags & OPT_GLOBAL))
--- 8539,8558 ----
      char_u		*varp_local = NULL;	/* fresh value */
      char		*cmd;
      int			round;
+     int			pri;
  
      /*
       * The options that don't have a default (terminal name, columns, lines)
       * are never written.  Terminal options are also not written.
+      * Do the loop over "options[]" twice: once for options with the
+      * P_PRI_MKRC flag and once without.
       */
!     for (pri = 1; pri >= 0; --pri)
!     {
!       for (p = &options[0]; !istermoption(p); p++)
! 	if (!(p->flags & P_NO_MKRC)
! 		&& !istermoption(p)
! 		&& ((pri == 1) == ((p->flags & P_PRI_MKRC) != 0)))
  	{
  	    /* skip global option when only doing locals */
  	    if (p->indir == PV_NONE && !(opt_flags & OPT_GLOBAL))
***************
*** 8637,8642 ****
--- 8648,8654 ----
  		}
  	    }
  	}
+     }
      return OK;
  }
  
*** ../vim-7.1.098/src/version.c	Thu Sep  6 14:25:50 2007
--- src/version.c	Thu Sep  6 16:32:31 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     99,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.100 ---
To: vim-dev at vim.org
Subject: patch 7.1.100
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.100
Problem:    Win32: Executing cscope doesn't always work properly.
Solution:   Use another way to invoke cscope. (Mike Williams)
Files:	    src/if_cscope.c, src/if_cscope.h, src/main.c,
	    src/proto/if_cscope.pro


*** ../vim-7.1.099/src/if_cscope.c	Tue Aug 21 18:02:58 2007
--- src/if_cscope.c	Sun Sep  2 16:50:50 2007
***************
*** 24,34 ****
      /* not UNIX, must be WIN32 */
  # include "vimio.h"
  # include <fcntl.h>
- # include <process.h>
- # define STDIN_FILENO    0
- # define STDOUT_FILENO   1
- # define STDERR_FILENO   2
- # define pipe(fds) _pipe(fds, 256, O_TEXT|O_NOINHERIT)
  #endif
  #include "if_cscope.h"
  
--- 24,29 ----
***************
*** 65,71 ****
  static char *	    cs_parse_results __ARGS((int cnumber, char *buf, int bufsize, char **context, char **linenumber, char **search));
  static char *	    cs_pathcomponents __ARGS((char *path));
  static void	    cs_print_tags_priv __ARGS((char **, char **, int));
! static int	    cs_read_prompt __ARGS((int ));
  static void	    cs_release_csp __ARGS((int, int freefnpp));
  static int	    cs_reset __ARGS((exarg_T *eap));
  static char *	    cs_resolve_file __ARGS((int, char *));
--- 60,66 ----
  static char *	    cs_parse_results __ARGS((int cnumber, char *buf, int bufsize, char **context, char **linenumber, char **search));
  static char *	    cs_pathcomponents __ARGS((char *path));
  static void	    cs_print_tags_priv __ARGS((char **, char **, int));
! static int	    cs_read_prompt __ARGS((int));
  static void	    cs_release_csp __ARGS((int, int freefnpp));
  static int	    cs_reset __ARGS((exarg_T *eap));
  static char *	    cs_resolve_file __ARGS((int, char *));
***************
*** 504,510 ****
  #if defined(UNIX)
      else if (S_ISREG(statbuf.st_mode) || S_ISLNK(statbuf.st_mode))
  #else
! 	/* substitute define S_ISREG from os_unix.h */
      else if (((statbuf.st_mode) & S_IFMT) == S_IFREG)
  #endif
      {
--- 499,505 ----
  #if defined(UNIX)
      else if (S_ISREG(statbuf.st_mode) || S_ISLNK(statbuf.st_mode))
  #else
! 	/* WIN32 - substitute define S_ISREG from os_unix.h */
      else if (((statbuf.st_mode) & S_IFMT) == S_IFREG)
  #endif
      {
***************
*** 717,733 ****
  cs_create_connection(i)
      int i;
  {
!     int to_cs[2], from_cs[2], len;
!     char *prog, *cmd, *ppath = NULL;
! #ifndef UNIX
!     int in_save, out_save, err_save;
!     long_i ph;
! # ifdef FEAT_GUI
!     HWND activewnd = NULL;
!     HWND consolewnd = NULL;
! # endif
  #endif
  
      /*
       * Cscope reads from to_cs[0] and writes to from_cs[1]; vi reads from
       * from_cs[0] and writes to to_cs[1].
--- 712,734 ----
  cs_create_connection(i)
      int i;
  {
! #ifdef UNIX
!     int		to_cs[2], from_cs[2];
! #endif
!     int		len;
!     char	*prog, *cmd, *ppath = NULL;
! #ifdef WIN32
!     int		fd;
!     SECURITY_ATTRIBUTES sa;
!     PROCESS_INFORMATION pi;
!     STARTUPINFO si;
!     BOOL	pipe_stdin = FALSE, pipe_stdout = FALSE;
!     HANDLE	stdin_rd, stdout_rd;
!     HANDLE	stdout_wr, stdin_wr;
!     BOOL	created;
  #endif
  
+ #if defined(UNIX)
      /*
       * Cscope reads from to_cs[0] and writes to from_cs[1]; vi reads from
       * from_cs[0] and writes to to_cs[1].
***************
*** 748,765 ****
  	return CSCOPE_FAILURE;
      }
  
- #if defined(UNIX)
      switch (csinfo[i].pid = fork())
      {
      case -1:
  	(void)EMSG(_("E622: Could not fork for cscope"));
  	goto err_closing;
      case 0:				/* child: run cscope. */
- #else
- 	in_save = dup(STDIN_FILENO);
- 	out_save = dup(STDOUT_FILENO);
- 	err_save = dup(STDERR_FILENO);
- #endif
  	if (dup2(to_cs[0], STDIN_FILENO) == -1)
  	    PERROR("cs_create_connection 1");
  	if (dup2(from_cs[1], STDOUT_FILENO) == -1)
--- 749,760 ----
***************
*** 768,782 ****
  	    PERROR("cs_create_connection 3");
  
  	/* close unused */
- #if defined(UNIX)
  	(void)close(to_cs[1]);
  	(void)close(from_cs[0]);
  #else
! 	/* On win32 we must close opposite ends because we are the parent */
! 	(void)close(to_cs[0]);
! 	to_cs[0] = -1;
! 	(void)close(from_cs[1]);
! 	from_cs[1] = -1;
  #endif
  	/* expand the cscope exec for env var's */
  	if ((prog = (char *)alloc(MAXPATHL + 1)) == NULL)
--- 763,794 ----
  	    PERROR("cs_create_connection 3");
  
  	/* close unused */
  	(void)close(to_cs[1]);
  	(void)close(from_cs[0]);
  #else
! 	/* WIN32 */
! 	/* Create pipes to communicate with cscope */
! 	sa.nLength = sizeof(SECURITY_ATTRIBUTES);
! 	sa.bInheritHandle = TRUE;
! 	sa.lpSecurityDescriptor = NULL;
! 
! 	if (!(pipe_stdin = CreatePipe(&stdin_rd, &stdin_wr, &sa, 0))
! 		|| !(pipe_stdout = CreatePipe(&stdout_rd, &stdout_wr, &sa, 0)))
! 	{
! 	    (void)EMSG(_("E566: Could not create cscope pipes"));
! err_closing:
! 	    if (pipe_stdin)
! 	    {
! 		CloseHandle(stdin_rd);
! 		CloseHandle(stdin_wr);
! 	    }
! 	    if (pipe_stdout)
! 	    {
! 		CloseHandle(stdout_rd);
! 		CloseHandle(stdout_wr);
! 	    }
! 	    return CSCOPE_FAILURE;
! 	}
  #endif
  	/* expand the cscope exec for env var's */
  	if ((prog = (char *)alloc(MAXPATHL + 1)) == NULL)
***************
*** 784,789 ****
--- 796,802 ----
  #ifdef UNIX
  	    return CSCOPE_FAILURE;
  #else
+ 	    /* WIN32 */
  	    goto err_closing;
  #endif
  	}
***************
*** 800,805 ****
--- 813,819 ----
  #ifdef UNIX
  		return CSCOPE_FAILURE;
  #else
+ 		/* WIN32 */
  		goto err_closing;
  #endif
  	    }
***************
*** 818,823 ****
--- 832,838 ----
  #ifdef UNIX
  	    return CSCOPE_FAILURE;
  #else
+ 	    /* WIN32 */
  	    goto err_closing;
  #endif
  	}
***************
*** 826,831 ****
--- 841,847 ----
  #if defined(UNIX)
  	(void)sprintf(cmd, "exec %s -dl -f %s", prog, csinfo[i].fname);
  #else
+ 	/* WIN32 */
  	(void)sprintf(cmd, "%s -dl -f %s", prog, csinfo[i].fname);
  #endif
  	if (csinfo[i].ppath != NULL)
***************
*** 851,910 ****
  	exit(127);
  	/* NOTREACHED */
      default:	/* parent. */
- #else
- # ifdef FEAT_GUI
- 	activewnd = GetForegroundWindow(); /* on win9x cscope steals focus */
- 	/* Dirty hack to hide annoying console window */
- 	if (AllocConsole())
- 	{
- 	    char *title;
- 	    title = (char *)alloc(1024);
- 	    if (title == NULL)
- 		FreeConsole();
- 	    else
- 	    {
- 		GetConsoleTitle(title, 1024); /* save for future restore */
- 		SetConsoleTitle(
- 		    "GVIMCS{5499421B-CBEF-45b0-85EF-38167FDEA5C5}GVIMCS");
- 		Sleep(40); /* as stated in MS KB we must wait 40 ms */
- 		consolewnd = FindWindow(NULL,
- 			"GVIMCS{5499421B-CBEF-45b0-85EF-38167FDEA5C5}GVIMCS");
- 		if (consolewnd != NULL)
- 		    ShowWindow(consolewnd, SW_HIDE);
- 		SetConsoleTitle(title);
- 		vim_free(title);
- 	    }
- 	}
- # endif
- 	/* May be use &shell, &shellquote etc */
- # ifdef __BORLANDC__
- 	/* BCC 5.5 uses a different function name for spawnlp */
- 	ph = (long_i)spawnlp(P_NOWAIT, prog, cmd, NULL);
- # else
- 	ph = (long_i)_spawnlp(_P_NOWAIT, prog, cmd, NULL);
- # endif
- 	vim_free(prog);
- 	vim_free(cmd);
- # ifdef FEAT_GUI
- 	/* Dirty hack part two */
- 	if (activewnd != NULL)
- 	    /* restoring focus */
- 	    SetForegroundWindow(activewnd);
- 	if (consolewnd != NULL)
- 	    FreeConsole();
- 
- # endif
- 	if (ph == -1)
- 	{
- 	    PERROR(_("cs_create_connection exec failed"));
- 	    (void)EMSG(_("E623: Could not spawn cscope process"));
- 	    goto err_closing;
- 	}
- 	/* else */
- 	csinfo[i].pid = 0;
- 	csinfo[i].hProc = (HANDLE)ph;
- 
- #endif /* !UNIX */
  	/*
  	 * Save the file descriptors for later duplication, and
  	 * reopen as streams.
--- 867,872 ----
***************
*** 914,935 ****
  	if ((csinfo[i].fr_fp = fdopen(from_cs[0], "r")) == NULL)
  	    PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
  
- #if defined(UNIX)
  	/* close unused */
  	(void)close(to_cs[0]);
  	(void)close(from_cs[1]);
  
  	break;
      }
  #else
! 	/* restore stdhandles */
!     dup2(in_save, STDIN_FILENO);
!     dup2(out_save, STDOUT_FILENO);
!     dup2(err_save, STDERR_FILENO);
!     close(in_save);
!     close(out_save);
!     close(err_save);
! #endif
      return CSCOPE_SUCCESS;
  } /* cs_create_connection */
  
--- 876,927 ----
  	if ((csinfo[i].fr_fp = fdopen(from_cs[0], "r")) == NULL)
  	    PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
  
  	/* close unused */
  	(void)close(to_cs[0]);
  	(void)close(from_cs[1]);
  
  	break;
      }
+ 
  #else
!     /* WIN32 */
!     /* Create a new process to run cscope and use pipes to talk with it */
!     GetStartupInfo(&si);
!     si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
!     si.wShowWindow = SW_HIDE;  /* Hide child application window */
!     si.hStdOutput = stdout_wr;
!     si.hStdError  = stdout_wr;
!     si.hStdInput  = stdin_rd;
!     created = CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE,
! 							NULL, NULL, &si, &pi);
!     vim_free(prog);
!     vim_free(cmd);
! 
!     if (!created)
!     {
! 	PERROR(_("cs_create_connection exec failed"));
! 	(void)EMSG(_("E623: Could not spawn cscope process"));
! 	goto err_closing;
!     }
!     /* else */
!     csinfo[i].pid = pi.dwProcessId;
!     csinfo[i].hProc = pi.hProcess;
!     CloseHandle(pi.hThread);
! 
!     /* TODO - tidy up after failure to create files on pipe handles. */
!     if (((fd = _open_osfhandle((intptr_t)stdin_wr, _O_TEXT|_O_APPEND)) < 0)
! 	    || ((csinfo[i].to_fp = _fdopen(fd, "w")) == NULL))
! 	PERROR(_("cs_create_connection: fdopen for to_fp failed"));
!     if (((fd = _open_osfhandle((intptr_t)stdout_rd, _O_TEXT|_O_RDONLY)) < 0)
! 	    || ((csinfo[i].fr_fp = _fdopen(fd, "r")) == NULL))
! 	PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
! 
!     /* Close handles for file descriptors inherited by the cscope process */
!     CloseHandle(stdin_rd);
!     CloseHandle(stdout_wr);
! 
! #endif /* !UNIX */
! 
      return CSCOPE_SUCCESS;
  } /* cs_create_connection */
  
***************
*** 2097,2104 ****
  /*
   * PRIVATE: cs_release_csp
   *
!  * does the actual free'ing for the cs ptr with an optional flag of whether
!  * or not to free the filename.  called by cs_kill and cs_reset.
   */
      static void
  cs_release_csp(i, freefnpp)
--- 2089,2096 ----
  /*
   * PRIVATE: cs_release_csp
   *
!  * Does the actual free'ing for the cs ptr with an optional flag of whether
!  * or not to free the filename.  Called by cs_kill and cs_reset.
   */
      static void
  cs_release_csp(i, freefnpp)
***************
*** 2116,2125 ****
  	(void)fputs("q\n", csinfo[i].to_fp);
  	(void)fflush(csinfo[i].to_fp);
      }
!     /* give cscope chance to exit normally */
!     if (csinfo[i].hProc != NULL
! 	    && WaitForSingleObject(csinfo[i].hProc, 1000) == WAIT_TIMEOUT)
! 	TerminateProcess(csinfo[i].hProc, 0);
  #endif
  
      if (csinfo[i].fr_fp != NULL)
--- 2108,2120 ----
  	(void)fputs("q\n", csinfo[i].to_fp);
  	(void)fflush(csinfo[i].to_fp);
      }
!     if (csinfo[i].hProc != NULL)
!     {
! 	/* Give cscope a chance to exit normally */
! 	if (WaitForSingleObject(csinfo[i].hProc, 1000) == WAIT_TIMEOUT)
! 	    TerminateProcess(csinfo[i].hProc, 0);
! 	CloseHandle(csinfo[i].hProc);
!     }
  #endif
  
      if (csinfo[i].fr_fp != NULL)
***************
*** 2301,2306 ****
--- 2296,2316 ----
      wait_return(TRUE);
      return CSCOPE_SUCCESS;
  } /* cs_show */
+ 
+ 
+ /*
+  * PUBLIC: cs_end
+  *
+  * Only called when VIM exits to quit any cscope sessions.
+  */
+     void
+ cs_end()
+ {
+     int i;
+ 
+     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
+ 	cs_release_csp(i, TRUE);
+ }
  
  #endif	/* FEAT_CSCOPE */
  
*** ../vim-7.1.099/src/if_cscope.h	Thu Jun 30 23:59:58 2005
--- src/if_cscope.h	Sun Sep  2 16:51:08 2007
***************
*** 72,78 ****
      ino_t	    st_ino;	/* inode number of cscope db */
  #else
  # if defined(WIN32)
!     int	    pid;	/* Can't get pid so set it to 0 ;) */
      HANDLE	    hProc;	/* cscope process handle */
      DWORD	    nVolume;	/* Volume serial number, instead of st_dev */
      DWORD	    nIndexHigh;	/* st_ino has no meaning in the Windows */
--- 72,78 ----
      ino_t	    st_ino;	/* inode number of cscope db */
  #else
  # if defined(WIN32)
!     DWORD	    pid;	/* PID of the connected cscope process. */
      HANDLE	    hProc;	/* cscope process handle */
      DWORD	    nVolume;	/* Volume serial number, instead of st_dev */
      DWORD	    nIndexHigh;	/* st_ino has no meaning in the Windows */
*** ../vim-7.1.099/src/main.c	Thu Aug 30 12:24:21 2007
--- src/main.c	Sun Sep  2 16:44:36 2007
***************
*** 1331,1336 ****
--- 1331,1339 ----
  #ifdef FEAT_NETBEANS_INTG
      netbeans_end();
  #endif
+ #ifdef FEAT_CSCOPE
+     cs_end();
+ #endif
  
      mch_exit(exitval);
  }
***************
*** 3671,3677 ****
  	mainerr_arg_missing((char_u *)filev[-1]);
      if (mch_dirname(cwd, MAXPATHL) != OK)
  	return NULL;
!     if ((p = vim_strsave_escaped_ext(cwd, PATH_ESC_CHARS, '\\', TRUE)) == NULL)
  	return NULL;
      ga_init2(&ga, 1, 100);
      ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
--- 3674,3686 ----
  	mainerr_arg_missing((char_u *)filev[-1]);
      if (mch_dirname(cwd, MAXPATHL) != OK)
  	return NULL;
!     if ((p = vim_strsave_escaped_ext(cwd,
! #ifdef BACKSLASH_IN_FILENAME
! 		    "",  /* rem_backslash() will tell what chars to escape */
! #else
! 		    PATH_ESC_CHARS,
! #endif
! 		    '\\', TRUE)) == NULL)
  	return NULL;
      ga_init2(&ga, 1, 100);
      ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
*** ../vim-7.1.099/src/proto/if_cscope.pro	Sat May  5 19:15:39 2007
--- src/proto/if_cscope.pro	Sun Sep  2 16:51:34 2007
***************
*** 6,9 ****
--- 6,10 ----
  void cs_free_tags __ARGS((void));
  void cs_print_tags __ARGS((void));
  int cs_connection __ARGS((int num, char_u *dbpath, char_u *ppath));
+ void cs_end __ARGS((void));
  /* vim: set ft=c : */
*** ../vim-7.1.099/src/version.c	Thu Sep  6 16:33:47 2007
--- src/version.c	Thu Sep  6 17:27:51 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     100,
  /**/

-- 
I have to exercise early in the morning before my brain
figures out what I'm doing.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.101 ---
To: vim-dev at vim.org
Subject: patch 7.1.101
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.101
Problem:    Ruby: The Buffer.line= method does not work.
Solution:   Add the "self" argument to set_current_line(). (Jonathan Hankins)
Files:	    src/if_ruby.c


*** ../vim-7.1.100/src/if_ruby.c	Sat May 12 15:01:49 2007
--- src/if_ruby.c	Mon Sep 10 10:40:38 2007
***************
*** 789,795 ****
      return get_buffer_line(curbuf, curwin->w_cursor.lnum);
  }
  
! static VALUE set_current_line(VALUE str)
  {
      return set_buffer_line(curbuf, curwin->w_cursor.lnum, str);
  }
--- 789,795 ----
      return get_buffer_line(curbuf, curwin->w_cursor.lnum);
  }
  
! static VALUE set_current_line(VALUE self, VALUE str)
  {
      return set_buffer_line(curbuf, curwin->w_cursor.lnum, str);
  }
*** ../vim-7.1.100/src/version.c	Thu Sep  6 17:38:06 2007
--- src/version.c	Thu Sep 13 14:59:47 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     101,
  /**/

-- 
The question is:  What do you do with your life?
The wrong answer is: Become the richest guy in the graveyard.
				(billionaire and Oracle founder Larry Ellison)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.102 ---
To: vim-dev at vim.org
Subject: patch 7.1.102
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.102
Problem:    Perl interface doesn't compile with new version of Perl.
Solution:   Add two variables to the dynamic library loading. (Suresh
	    Govindachar)
Files:	    src/if_perl.xs


*** ../vim-7.1.101/src/if_perl.xs	Wed Aug 16 19:33:57 2006
--- src/if_perl.xs	Wed Sep  5 22:00:36 2007
***************
*** 40,45 ****
--- 40,65 ----
  #    define PERL_SUBVERSION SUBVERSION
  #endif
  
+ /*
+  * Quoting Jan Dubois of Active State:
+  *    ActivePerl build 822 still identifies itself as 5.8.8 but already
+  *    contains many of the changes from the upcoming Perl 5.8.9 release.
+  *
+  * The changes include addition of two symbols (Perl_sv_2iv_flags,
+  * Perl_newXS_flags) not present in earlier releases.
+  *
+  * Jan Dubois suggested the following guarding scheme:
+  */
+ #if (ACTIVEPERL_VERSION >= 822)
+ # define PERL589_OR_LATER
+ #endif
+ #if (PERL_REVISION == 5) && (PERL_VERSION == 8) && (PERL_SUBVERSION >= 9)
+ # define PERL589_OR_LATER
+ #endif
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 9)
+ # define PERL589_OR_LATER
+ #endif
+ 
  #ifndef pTHX
  #    define pTHX void
  #    define pTHX_
***************
*** 109,114 ****
--- 129,138 ----
  # else
  #  define Perl_sv_catpvn dll_Perl_sv_catpvn
  # endif
+ #ifdef PERL589_OR_LATER
+ #  define Perl_sv_2iv_flags dll_Perl_sv_2iv_flags
+ #  define Perl_newXS_flags dll_Perl_newXS_flags
+ #endif
  # define Perl_sv_free dll_Perl_sv_free
  # define Perl_sv_isa dll_Perl_sv_isa
  # define Perl_sv_magic dll_Perl_sv_magic
***************
*** 192,197 ****
--- 216,225 ----
  #else
  static void (*Perl_sv_catpvn)(pTHX_ SV*, const char*, STRLEN);
  #endif
+ #ifdef PERL589_OR_LATER
+ static IV (*Perl_sv_2iv_flags)(pTHX_ SV* sv, I32 flags);
+ static CV * (*Perl_newXS_flags)(pTHX_ const char *name, XSUBADDR_t subaddr, const char *const filename, const char *const proto, U32 flags);
+ #endif
  static void (*Perl_sv_free)(pTHX_ SV*);
  static int (*Perl_sv_isa)(pTHX_ SV*, const char*);
  static void (*Perl_sv_magic)(pTHX_ SV*, SV*, int, const char*, I32);
***************
*** 266,271 ****
--- 294,303 ----
      {"Perl_sv_2pv_nolen", (PERL_PROC*)&Perl_sv_2pv_nolen},
  #else
      {"Perl_sv_2pv", (PERL_PROC*)&Perl_sv_2pv},
+ #endif
+ #ifdef PERL589_OR_LATER
+     {"Perl_sv_2iv_flags", (PERL_PROC*)&Perl_sv_2iv_flags},
+     {"Perl_newXS_flags", (PERL_PROC*)&Perl_newXS_flags},
  #endif
      {"Perl_sv_bless", (PERL_PROC*)&Perl_sv_bless},
  #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
*** ../vim-7.1.101/src/version.c	Thu Sep 13 15:00:28 2007
--- src/version.c	Thu Sep 13 15:18:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     102,
  /**/

-- 
Witches prefer brooms: vacuum-cleaners need extension cords!

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.103 ---
To: vim-dev at vim.org
Subject: patch 7.1.103
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.103
Problem:    Using "dw" with the cursor past the end of the last line (using
            CTRL-\ CTRL-O from Insert mode) deletes a character. (Tim Chase)
Solution:   Don't move the cursor back when the movement failed.
Files:      src/normal.c


*** ../vim-7.1.102/src/normal.c	Tue Aug 14 22:54:00 2007
--- src/normal.c	Tue Sep 11 19:32:42 2007
***************
*** 8364,8370 ****
  	n = fwd_word(cap->count1, cap->arg, cap->oap->op_type != OP_NOP);
  
      /* Don't leave the cursor on the NUL past a line */
!     if (curwin->w_cursor.col && gchar_cursor() == NUL)
      {
  	--curwin->w_cursor.col;
  	cap->oap->inclusive = TRUE;
--- 8364,8370 ----
  	n = fwd_word(cap->count1, cap->arg, cap->oap->op_type != OP_NOP);
  
      /* Don't leave the cursor on the NUL past a line */
!     if (n != FAIL && curwin->w_cursor.col > 0 && gchar_cursor() == NUL)
      {
  	--curwin->w_cursor.col;
  	cap->oap->inclusive = TRUE;
*** ../vim-7.1.102/src/version.c	Thu Sep 13 15:19:32 2007
--- src/version.c	Thu Sep 13 15:32:05 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     103,
  /**/

-- 
ARTHUR:  Then who is your lord?
WOMAN:   We don't have a lord.
ARTHUR:  What?
DENNIS:  I told you.  We're an anarcho-syndicalist commune.  We take it in
         turns to act as a sort of executive officer for the week.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.104 ---
To: vim-dev at vim.org
Subject: patch 7.1.104
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.104 (after 7.1.095)
Problem:    When 'lazyredraw' is set a focus event causes redraw to be
	    postponed until a key is pressed.
Solution:   Instead of not returning from vgetc() when a focus event is
	    encountered return K_IGNORE.  Add plain_vgetc() for when the
	    caller doesn't want to get K_IGNORE.
Files:	    src/digraph.c, src/edit.c, src/ex_cmds.c, src/ex_getln.c,
	    src/getchar.c, src/normal.c, src/proto/getchar.pro, src/window.c


*** ../vim-7.1.103/src/digraph.c	Sat Jul  7 13:57:39 2007
--- src/digraph.c	Thu Sep 13 16:11:54 2007
***************
*** 2028,2034 ****
  
      ++no_mapping;
      ++allow_keys;
!     c = safe_vgetc();
      --no_mapping;
      --allow_keys;
      if (c != ESC)		/* ESC cancels CTRL-K */
--- 2028,2034 ----
  
      ++no_mapping;
      ++allow_keys;
!     c = plain_vgetc();
      --no_mapping;
      --allow_keys;
      if (c != ESC)		/* ESC cancels CTRL-K */
***************
*** 2050,2056 ****
  #endif
  	++no_mapping;
  	++allow_keys;
! 	cc = safe_vgetc();
  	--no_mapping;
  	--allow_keys;
  	if (cc != ESC)	    /* ESC cancels CTRL-K */
--- 2050,2056 ----
  #endif
  	++no_mapping;
  	++allow_keys;
! 	cc = plain_vgetc();
  	--no_mapping;
  	--allow_keys;
  	if (cc != ESC)	    /* ESC cancels CTRL-K */
***************
*** 2350,2356 ****
      if (*curbuf->b_p_keymap == NUL)
      {
  	/* Stop any active keymap and clear the table.  Also remove
! 	 * b:keymap_unload, as no keymap is active now. */
  	keymap_unload();
  	do_cmdline_cmd((char_u *)"unlet! b:keymap_name");
      }
--- 2350,2356 ----
      if (*curbuf->b_p_keymap == NUL)
      {
  	/* Stop any active keymap and clear the table.  Also remove
! 	 * b:keymap_name, as no keymap is active now. */
  	keymap_unload();
  	do_cmdline_cmd((char_u *)"unlet! b:keymap_name");
      }
*** ../vim-7.1.103/src/edit.c	Sun Aug 12 16:38:03 2007
--- src/edit.c	Thu Sep 13 16:17:54 2007
***************
*** 788,794 ****
  	    ins_redraw(FALSE);
  	    ++no_mapping;
  	    ++allow_keys;
! 	    c = safe_vgetc();
  	    --no_mapping;
  	    --allow_keys;
  	    if (c != Ctrl_N && c != Ctrl_G && c != Ctrl_O)
--- 788,794 ----
  	    ins_redraw(FALSE);
  	    ++no_mapping;
  	    ++allow_keys;
! 	    c = plain_vgetc();
  	    --no_mapping;
  	    --allow_keys;
  	    if (c != Ctrl_N && c != Ctrl_G && c != Ctrl_O)
***************
*** 981,987 ****
  #ifdef FEAT_NETBEANS_INTG
  	case K_F21:	/* NetBeans command */
  	    ++no_mapping;		/* don't map the next key hits */
! 	    i = safe_vgetc();
  	    --no_mapping;
  	    netbeans_keycommand(i);
  	    break;
--- 981,987 ----
  #ifdef FEAT_NETBEANS_INTG
  	case K_F21:	/* NetBeans command */
  	    ++no_mapping;		/* don't map the next key hits */
! 	    i = plain_vgetc();
  	    --no_mapping;
  	    netbeans_keycommand(i);
  	    break;
***************
*** 5224,5233 ****
      i = 0;
      for (;;)
      {
! 	do
! 	    nc = safe_vgetc();
! 	while (nc == K_IGNORE || nc == K_VER_SCROLLBAR
! 						    || nc == K_HOR_SCROLLBAR);
  #ifdef FEAT_CMDL_INFO
  	if (!(State & CMDLINE)
  # ifdef FEAT_MBYTE
--- 5224,5230 ----
      i = 0;
      for (;;)
      {
! 	nc = plain_vgetc();
  #ifdef FEAT_CMDL_INFO
  	if (!(State & CMDLINE)
  # ifdef FEAT_MBYTE
***************
*** 7575,7581 ****
       * deleted when ESC is hit.
       */
      ++no_mapping;
!     regname = safe_vgetc();
  #ifdef FEAT_LANGMAP
      LANGMAP_ADJUST(regname, TRUE);
  #endif
--- 7572,7578 ----
       * deleted when ESC is hit.
       */
      ++no_mapping;
!     regname = plain_vgetc();
  #ifdef FEAT_LANGMAP
      LANGMAP_ADJUST(regname, TRUE);
  #endif
***************
*** 7586,7592 ****
  #ifdef FEAT_CMDL_INFO
  	add_to_showcmd_c(literally);
  #endif
! 	regname = safe_vgetc();
  #ifdef FEAT_LANGMAP
  	LANGMAP_ADJUST(regname, TRUE);
  #endif
--- 7583,7589 ----
  #ifdef FEAT_CMDL_INFO
  	add_to_showcmd_c(literally);
  #endif
! 	regname = plain_vgetc();
  #ifdef FEAT_LANGMAP
  	LANGMAP_ADJUST(regname, TRUE);
  #endif
***************
*** 7677,7683 ****
       * deleted when ESC is hit.
       */
      ++no_mapping;
!     c = safe_vgetc();
      --no_mapping;
      switch (c)
      {
--- 7674,7680 ----
       * deleted when ESC is hit.
       */
      ++no_mapping;
!     c = plain_vgetc();
      --no_mapping;
      switch (c)
      {
***************
*** 9356,9362 ****
       * mode message to be deleted when ESC is hit */
      ++no_mapping;
      ++allow_keys;
!     c = safe_vgetc();
      --no_mapping;
      --allow_keys;
      if (IS_SPECIAL(c) || mod_mask)	    /* special key */
--- 9353,9359 ----
       * mode message to be deleted when ESC is hit */
      ++no_mapping;
      ++allow_keys;
!     c = plain_vgetc();
      --no_mapping;
      --allow_keys;
      if (IS_SPECIAL(c) || mod_mask)	    /* special key */
***************
*** 9388,9394 ****
  	}
  	++no_mapping;
  	++allow_keys;
! 	cc = safe_vgetc();
  	--no_mapping;
  	--allow_keys;
  	if (cc != ESC)
--- 9385,9391 ----
  	}
  	++no_mapping;
  	++allow_keys;
! 	cc = plain_vgetc();
  	--no_mapping;
  	--allow_keys;
  	if (cc != ESC)
*** ../vim-7.1.103/src/ex_cmds.c	Tue Aug 21 15:28:32 2007
--- src/ex_cmds.c	Thu Sep 13 16:19:40 2007
***************
*** 4498,4504 ****
  	     *
  	     * The new text is built up in new_start[].  It has some extra
  	     * room to avoid using alloc()/free() too often.  new_start_len is
! 	     * the lenght of the allocated memory at new_start.
  	     *
  	     * Make a copy of the old line, so it won't be taken away when
  	     * updating the screen or handling a multi-line match.  The "old_"
--- 4499,4505 ----
  	     *
  	     * The new text is built up in new_start[].  It has some extra
  	     * room to avoid using alloc()/free() too often.  new_start_len is
! 	     * the length of the allocated memory at new_start.
  	     *
  	     * Make a copy of the old line, so it won't be taken away when
  	     * updating the screen or handling a multi-line match.  The "old_"
***************
*** 4669,4675 ****
  #endif
  			    ++no_mapping;	/* don't map this key */
  			    ++allow_keys;	/* allow special keys */
! 			    i = safe_vgetc();
  			    --allow_keys;
  			    --no_mapping;
  
--- 4670,4676 ----
  #endif
  			    ++no_mapping;	/* don't map this key */
  			    ++allow_keys;	/* allow special keys */
! 			    i = plain_vgetc();
  			    --allow_keys;
  			    --no_mapping;
  
*** ../vim-7.1.103/src/ex_getln.c	Mon Aug  6 22:27:12 2007
--- src/ex_getln.c	Thu Sep 13 16:20:49 2007
***************
*** 641,647 ****
  	{
  	    ++no_mapping;
  	    ++allow_keys;
! 	    c = safe_vgetc();
  	    --no_mapping;
  	    --allow_keys;
  	    /* CTRL-\ e doesn't work when obtaining an expression. */
--- 641,647 ----
  	{
  	    ++no_mapping;
  	    ++allow_keys;
! 	    c = plain_vgetc();
  	    --no_mapping;
  	    --allow_keys;
  	    /* CTRL-\ e doesn't work when obtaining an expression. */
***************
*** 1091,1101 ****
  #endif
  		putcmdline('"', TRUE);
  		++no_mapping;
! 		i = c = safe_vgetc();	/* CTRL-R <char> */
  		if (i == Ctrl_O)
  		    i = Ctrl_R;		/* CTRL-R CTRL-O == CTRL-R CTRL-R */
  		if (i == Ctrl_R)
! 		    c = safe_vgetc();	/* CTRL-R CTRL-R <char> */
  		--no_mapping;
  #ifdef FEAT_EVAL
  		/*
--- 1091,1101 ----
  #endif
  		putcmdline('"', TRUE);
  		++no_mapping;
! 		i = c = plain_vgetc();	/* CTRL-R <char> */
  		if (i == Ctrl_O)
  		    i = Ctrl_R;		/* CTRL-R CTRL-O == CTRL-R CTRL-R */
  		if (i == Ctrl_R)
! 		    c = plain_vgetc();	/* CTRL-R CTRL-R <char> */
  		--no_mapping;
  #ifdef FEAT_EVAL
  		/*
*** ../vim-7.1.103/src/getchar.c	Wed Sep  5 21:45:54 2007
--- src/getchar.c	Thu Sep 13 16:16:53 2007
***************
*** 1597,1608 ****
  	    }
  #endif
  #ifdef FEAT_GUI
! 	    /* The caller doesn't need to know that the focus event is delayed
! 	     * until getting a character. */
  	    if (c == K_FOCUSGAINED || c == K_FOCUSLOST)
  	    {
  		ui_focus_change(c == K_FOCUSGAINED);
! 		continue;
  	    }
  
  	    /* Translate K_CSI to CSI.  The special key is only used to avoid
--- 1597,1609 ----
  	    }
  #endif
  #ifdef FEAT_GUI
! 	    /* Handle focus event here, so that the caller doesn't need to
! 	     * know about it.  Return K_IGNORE so that we loop once (needed if
! 	     * 'lazyredraw' is set). */
  	    if (c == K_FOCUSGAINED || c == K_FOCUSLOST)
  	    {
  		ui_focus_change(c == K_FOCUSGAINED);
! 		c = K_IGNORE;
  	    }
  
  	    /* Translate K_CSI to CSI.  The special key is only used to avoid
***************
*** 1744,1749 ****
--- 1745,1766 ----
      c = vgetc();
      if (c == NUL)
  	c = get_keystroke();
+     return c;
+ }
+ 
+ /*
+  * Like safe_vgetc(), but loop to handle K_IGNORE.
+  * Also ignore scrollbar events.
+  */
+     int
+ plain_vgetc()
+ {
+     int c;
+ 
+     do
+     {
+ 	c = safe_vgetc();
+     } while (c == K_IGNORE || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR);
      return c;
  }
  
*** ../vim-7.1.103/src/normal.c	Thu Sep 13 15:33:18 2007
--- src/normal.c	Thu Sep 13 16:24:51 2007
***************
*** 696,702 ****
  		++allow_keys;		/* no mapping for nchar, but keys */
  	    }
  	    ++no_zero_mapping;		/* don't map zero here */
! 	    c = safe_vgetc();
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(c, TRUE);
  #endif
--- 696,702 ----
  		++allow_keys;		/* no mapping for nchar, but keys */
  	    }
  	    ++no_zero_mapping;		/* don't map zero here */
! 	    c = plain_vgetc();
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(c, TRUE);
  #endif
***************
*** 721,727 ****
  	    ca.count0 = 0;
  	    ++no_mapping;
  	    ++allow_keys;		/* no mapping for nchar, but keys */
! 	    c = safe_vgetc();		/* get next character */
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(c, TRUE);
  #endif
--- 721,727 ----
  	    ca.count0 = 0;
  	    ++no_mapping;
  	    ++allow_keys;		/* no mapping for nchar, but keys */
! 	    c = plain_vgetc();		/* get next character */
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(c, TRUE);
  #endif
***************
*** 900,906 ****
  	     * For 'g' get the next character now, so that we can check for
  	     * "gr", "g'" and "g`".
  	     */
! 	    ca.nchar = safe_vgetc();
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(ca.nchar, TRUE);
  #endif
--- 900,906 ----
  	     * For 'g' get the next character now, so that we can check for
  	     * "gr", "g'" and "g`".
  	     */
! 	    ca.nchar = plain_vgetc();
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(ca.nchar, TRUE);
  #endif
***************
*** 957,963 ****
  		im_set_active(TRUE);
  #endif
  
! 	    *cp = safe_vgetc();
  
  	    if (langmap_active)
  	    {
--- 957,963 ----
  		im_set_active(TRUE);
  #endif
  
! 	    *cp = plain_vgetc();
  
  	    if (langmap_active)
  	    {
***************
*** 1045,1051 ****
  		}
  		if (c > 0)
  		{
! 		    c = safe_vgetc();
  		    if (c != Ctrl_N && c != Ctrl_G)
  			vungetc(c);
  		    else
--- 1045,1051 ----
  		}
  		if (c > 0)
  		{
! 		    c = plain_vgetc();
  		    if (c != Ctrl_N && c != Ctrl_G)
  			vungetc(c);
  		    else
***************
*** 1064,1070 ****
  	    while (enc_utf8 && lang && (c = vpeekc()) > 0
  				 && (c >= 0x100 || MB_BYTE2LEN(vpeekc()) > 1))
  	    {
! 		c = safe_vgetc();
  		if (!utf_iscomposing(c))
  		{
  		    vungetc(c);		/* it wasn't, put it back */
--- 1064,1070 ----
  	    while (enc_utf8 && lang && (c = vpeekc()) > 0
  				 && (c >= 0x100 || MB_BYTE2LEN(vpeekc()) > 1))
  	    {
! 		c = plain_vgetc();
  		if (!utf_iscomposing(c))
  		{
  		    vungetc(c);		/* it wasn't, put it back */
***************
*** 4564,4570 ****
  #endif
  	    ++no_mapping;
  	    ++allow_keys;   /* no mapping for nchar, but allow key codes */
! 	    nchar = safe_vgetc();
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(nchar, TRUE);
  #endif
--- 4564,4570 ----
  #endif
  	    ++no_mapping;
  	    ++allow_keys;   /* no mapping for nchar, but allow key codes */
! 	    nchar = plain_vgetc();
  #ifdef FEAT_LANGMAP
  	    LANGMAP_ADJUST(nchar, TRUE);
  #endif
***************
*** 4922,4928 ****
      case 'u':	/* "zug" and "zuw": undo "zg" and "zw" */
  		++no_mapping;
  		++allow_keys;   /* no mapping for nchar, but allow key codes */
! 		nchar = safe_vgetc();
  #ifdef FEAT_LANGMAP
  		LANGMAP_ADJUST(nchar, TRUE);
  #endif
--- 4922,4928 ----
      case 'u':	/* "zug" and "zuw": undo "zg" and "zw" */
  		++no_mapping;
  		++allow_keys;   /* no mapping for nchar, but allow key codes */
! 		nchar = plain_vgetc();
  #ifdef FEAT_LANGMAP
  		LANGMAP_ADJUST(nchar, TRUE);
  #endif
*** ../vim-7.1.103/src/proto/getchar.pro	Sun May  6 15:04:24 2007
--- src/proto/getchar.pro	Thu Sep 13 16:13:19 2007
***************
*** 38,43 ****
--- 38,44 ----
  void updatescript __ARGS((int c));
  int vgetc __ARGS((void));
  int safe_vgetc __ARGS((void));
+ int plain_vgetc __ARGS((void));
  int vpeekc __ARGS((void));
  int vpeekc_nomap __ARGS((void));
  int vpeekc_any __ARGS((void));
*** ../vim-7.1.103/src/window.c	Sun Aug 12 16:55:01 2007
--- src/window.c	Thu Sep 13 16:25:01 2007
***************
*** 584,590 ****
  		++no_mapping;
  		++allow_keys;   /* no mapping for xchar, but allow key codes */
  		if (xchar == NUL)
! 		    xchar = safe_vgetc();
  #ifdef FEAT_LANGMAP
  		LANGMAP_ADJUST(xchar, TRUE);
  #endif
--- 584,590 ----
  		++no_mapping;
  		++allow_keys;   /* no mapping for xchar, but allow key codes */
  		if (xchar == NUL)
! 		    xchar = plain_vgetc();
  #ifdef FEAT_LANGMAP
  		LANGMAP_ADJUST(xchar, TRUE);
  #endif
*** ../vim-7.1.103/src/version.c	Thu Sep 13 15:33:18 2007
--- src/version.c	Thu Sep 13 18:22:59 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     104,
  /**/

-- 
ARTHUR:  I am your king!
WOMAN:   Well, I didn't vote for you.
ARTHUR:  You don't vote for kings.
WOMAN:   Well, 'ow did you become king then?
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.105 ---
To: vim-dev at vim.org
Subject: patch 7.1.105
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.105
Problem:    Internal error when using "0 ? {'a': 1} : {}". (A.Politz)
Solution:   When parsing a dictionary value without using the value, don't try
	    obtaining the key name.
Files:	    src/eval.c


*** ../vim-7.1.104/src/eval.c	Thu Sep  6 14:25:50 2007
--- src/eval.c	Thu Sep 13 20:29:31 2007
***************
*** 6746,6765 ****
  	    clear_tv(&tvkey);
  	    goto failret;
  	}
! 	key = get_tv_string_buf_chk(&tvkey, buf);
! 	if (key == NULL || *key == NUL)
  	{
! 	    /* "key" is NULL when get_tv_string_buf_chk() gave an errmsg */
! 	    if (key != NULL)
! 		EMSG(_(e_emptykey));
! 	    clear_tv(&tvkey);
! 	    goto failret;
  	}
  
  	*arg = skipwhite(*arg + 1);
  	if (eval1(arg, &tv, evaluate) == FAIL)	/* recursive! */
  	{
! 	    clear_tv(&tvkey);
  	    goto failret;
  	}
  	if (evaluate)
--- 6746,6769 ----
  	    clear_tv(&tvkey);
  	    goto failret;
  	}
! 	if (evaluate)
  	{
! 	    key = get_tv_string_buf_chk(&tvkey, buf);
! 	    if (key == NULL || *key == NUL)
! 	    {
! 		/* "key" is NULL when get_tv_string_buf_chk() gave an errmsg */
! 		if (key != NULL)
! 		    EMSG(_(e_emptykey));
! 		clear_tv(&tvkey);
! 		goto failret;
! 	    }
  	}
  
  	*arg = skipwhite(*arg + 1);
  	if (eval1(arg, &tv, evaluate) == FAIL)	/* recursive! */
  	{
! 	    if (evaluate)
! 		clear_tv(&tvkey);
  	    goto failret;
  	}
  	if (evaluate)
*** ../vim-7.1.104/src/version.c	Thu Sep 13 18:25:08 2007
--- src/version.c	Thu Sep 13 20:36:38 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     105,
  /**/

-- 
DENNIS:  Listen -- strange women lying in ponds distributing swords is no
         basis for a system of government.  Supreme executive power derives
         from a mandate from the masses, not from some farcical aquatic
         ceremony.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.106 ---
To: vim-dev at vim.org
Subject: patch 7.1.106
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.106
Problem:    ":messages" doesn't quit listing on ":".
Solution:   Break the loop when "got_int" is set.
Files:	    src/message.c


*** ../vim-7.1.105/src/message.c	Thu Sep  6 12:53:59 2007
--- src/message.c	Thu Sep 13 21:45:57 2007
***************
*** 828,834 ****
  		_("Messages maintainer: Bram Moolenaar <Bram at vim.org>"),
  		hl_attr(HLF_T));
  
!     for (p = first_msg_hist; p != NULL; p = p->next)
  	if (p->msg != NULL)
  	    msg_attr(p->msg, p->attr);
  
--- 828,834 ----
  		_("Messages maintainer: Bram Moolenaar <Bram at vim.org>"),
  		hl_attr(HLF_T));
  
!     for (p = first_msg_hist; p != NULL && !got_int; p = p->next)
  	if (p->msg != NULL)
  	    msg_attr(p->msg, p->attr);
  
*** ../vim-7.1.105/src/version.c	Thu Sep 13 20:39:58 2007
--- src/version.c	Thu Sep 13 21:57:40 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     106,
  /**/

-- 
I'm sure that I asked CBuilder to do a "full" install.  Looks like I got
a "fool" install, instead.		Charles E Campbell, Jr, PhD


 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.107 ---
To: vim-dev at vim.org
Subject: patch 7.1.107
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.107
Problem:    When doing a block selection and using "s" to change the text,
	    while triggering auto-indenting, causes the wrong text to be
	    repeated in other lines. (Adri Verhoef)
Solution:   Compute the change of indent and compensate for that.
Files:	    src/ops.c


*** ../vim-7.1.106/src/ops.c	Thu Jun 28 22:14:28 2007
--- src/ops.c	Thu Aug 30 11:41:10 2007
***************
*** 2477,2483 ****
  
  	/*
  	 * Spaces and tabs in the indent may have changed to other spaces and
! 	 * tabs.  Get the starting column again and correct the lenght.
  	 * Don't do this when "$" used, end-of-line will have changed.
  	 */
  	block_prep(oap, &bd2, oap->start.lnum, TRUE);
--- 2477,2483 ----
  
  	/*
  	 * Spaces and tabs in the indent may have changed to other spaces and
! 	 * tabs.  Get the starting column again and correct the length.
  	 * Don't do this when "$" used, end-of-line will have changed.
  	 */
  	block_prep(oap, &bd2, oap->start.lnum, TRUE);
***************
*** 2534,2540 ****
  #ifdef FEAT_VISUALEXTRA
      long		offset;
      linenr_T		linenr;
!     long		ins_len, pre_textlen = 0;
      char_u		*firstline;
      char_u		*ins_text, *newp, *oldp;
      struct block_def	bd;
--- 2534,2542 ----
  #ifdef FEAT_VISUALEXTRA
      long		offset;
      linenr_T		linenr;
!     long		ins_len;
!     long		pre_textlen = 0;
!     long		pre_indent = 0;
      char_u		*firstline;
      char_u		*ins_text, *newp, *oldp;
      struct block_def	bd;
***************
*** 2579,2585 ****
  						    || gchar_cursor() == NUL))
  	    coladvance_force(getviscol());
  # endif
! 	pre_textlen = (long)STRLEN(ml_get(oap->start.lnum));
  	bd.textcol = curwin->w_cursor.col;
      }
  #endif
--- 2581,2589 ----
  						    || gchar_cursor() == NUL))
  	    coladvance_force(getviscol());
  # endif
! 	firstline = ml_get(oap->start.lnum);
! 	pre_textlen = (long)STRLEN(firstline);
! 	pre_indent = (long)(skipwhite(firstline) - firstline);
  	bd.textcol = curwin->w_cursor.col;
      }
  #endif
***************
*** 2598,2610 ****
       */
      if (oap->block_mode && oap->start.lnum != oap->end.lnum)
      {
  	firstline = ml_get(oap->start.lnum);
! 	/*
! 	 * Subsequent calls to ml_get() flush the firstline data - take a
! 	 * copy of the required bit.
! 	 */
! 	if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
  	{
  	    if ((ins_text = alloc_check((unsigned)(ins_len + 1))) != NULL)
  	    {
  		vim_strncpy(ins_text, firstline + bd.textcol, (size_t)ins_len);
--- 2602,2623 ----
       */
      if (oap->block_mode && oap->start.lnum != oap->end.lnum)
      {
+ 	/* Auto-indenting may have changed the indent.  If the cursor was past
+ 	 * the indent, exclude that indent change from the inserted text. */
  	firstline = ml_get(oap->start.lnum);
! 	if (bd.textcol > pre_indent)
! 	{
! 	    long new_indent = (long)(skipwhite(firstline) - firstline);
! 
! 	    pre_textlen += new_indent - pre_indent;
! 	    bd.textcol += new_indent - pre_indent;
! 	}
! 
! 	ins_len = (long)STRLEN(firstline) - pre_textlen;
! 	if (ins_len > 0)
  	{
+ 	    /* Subsequent calls to ml_get() flush the firstline data - take a
+ 	     * copy of the inserted text.  */
  	    if ((ins_text = alloc_check((unsigned)(ins_len + 1))) != NULL)
  	    {
  		vim_strncpy(ins_text, firstline + bd.textcol, (size_t)ins_len);
*** ../vim-7.1.106/src/version.c	Thu Sep 13 22:04:30 2007
--- src/version.c	Thu Sep 13 22:38:28 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     107,
  /**/

-- 
Windows
M!uqoms

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.108 ---
To: vim-dev at vim.org
Subject: patch 7.1.108
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.108 (after 7.1.100)
Problem:    Win32: Compilation problems in Cscope code. (Jeff Lanzarotta)
Solution:   Use (long) instead of (intptr_t) when it's not defined.
Files:	    src/if_cscope.c


*** ../vim-7.1.107/src/if_cscope.c	Thu Sep  6 17:38:06 2007
--- src/if_cscope.c	Wed Sep 12 20:32:17 2007
***************
*** 726,731 ****
--- 726,740 ----
      HANDLE	stdin_rd, stdout_rd;
      HANDLE	stdout_wr, stdin_wr;
      BOOL	created;
+ # ifdef __BORLANDC__
+ #  define OPEN_OH_ARGTYPE long
+ # else
+ #  if (_MSC_VER >= 1300)
+ #   define OPEN_OH_ARGTYPE intptr_t
+ #  else
+ #   define OPEN_OH_ARGTYPE long
+ #  endif
+ # endif
  #endif
  
  #if defined(UNIX)
***************
*** 909,918 ****
      CloseHandle(pi.hThread);
  
      /* TODO - tidy up after failure to create files on pipe handles. */
!     if (((fd = _open_osfhandle((intptr_t)stdin_wr, _O_TEXT|_O_APPEND)) < 0)
  	    || ((csinfo[i].to_fp = _fdopen(fd, "w")) == NULL))
  	PERROR(_("cs_create_connection: fdopen for to_fp failed"));
!     if (((fd = _open_osfhandle((intptr_t)stdout_rd, _O_TEXT|_O_RDONLY)) < 0)
  	    || ((csinfo[i].fr_fp = _fdopen(fd, "r")) == NULL))
  	PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
  
--- 918,929 ----
      CloseHandle(pi.hThread);
  
      /* TODO - tidy up after failure to create files on pipe handles. */
!     if (((fd = _open_osfhandle((OPEN_OH_ARGTYPE)stdin_wr,
! 						      _O_TEXT|_O_APPEND)) < 0)
  	    || ((csinfo[i].to_fp = _fdopen(fd, "w")) == NULL))
  	PERROR(_("cs_create_connection: fdopen for to_fp failed"));
!     if (((fd = _open_osfhandle((OPEN_OH_ARGTYPE)stdout_rd,
! 						      _O_TEXT|_O_RDONLY)) < 0)
  	    || ((csinfo[i].fr_fp = _fdopen(fd, "r")) == NULL))
  	PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
  
*** ../vim-7.1.107/src/version.c	Thu Sep 13 22:40:47 2007
--- src/version.c	Fri Sep 14 19:55:12 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     108,
  /**/

-- 
Q:   How many hardware engineers does it take to change a lightbulb?
A:   None.  We'll fix it in software.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.109 ---
To: vim-dev at vim.org
Subject: patch 7.1.109
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.109
Problem:    GTK: when there are many tab pages, clicking on the arrow left of
	    the labels moves to the next tab page on the right. (Simeon Bird)
Solution:   Check the X coordinate of the click and pass -1 as value for the
	    left arrow.
Files:	    src/gui_gtk_x11.c, src/term.c


*** ../vim-7.1.108/src/gui_gtk_x11.c	Wed Sep  5 21:45:54 2007
--- src/gui_gtk_x11.c	Fri Sep 14 20:59:55 2007
***************
*** 3223,3230 ****
  	{
  	    if (clicked_page == 0)
  	    {
! 		/* Click after all tabs moves to next tab page. */
! 		if (send_tabline_event(0) && gtk_main_level() > 0)
  		    gtk_main_quit();
  	    }
  #ifndef HAVE_GTK2
--- 3223,3231 ----
  	{
  	    if (clicked_page == 0)
  	    {
! 		/* Click after all tabs moves to next tab page.  When "x" is
! 		 * small guess it's the left button. */
! 		if (send_tabline_event(x < 50 ? -1 : 0) && gtk_main_level() > 0)
  		    gtk_main_quit();
  	    }
  #ifndef HAVE_GTK2
*** ../vim-7.1.108/src/term.c	Thu May 10 20:48:32 2007
--- src/term.c	Fri Sep 14 20:56:40 2007
***************
*** 4809,4814 ****
--- 4809,4816 ----
  	    if (num_bytes == -1)
  		return -1;
  	    current_tab = (int)bytes[0];
+ 	    if (current_tab == 255)	/* -1 in a byte gives 255 */
+ 		current_tab = -1;
  	    slen += num_bytes;
  	}
  	else if (key_name[0] == (int)KS_TABMENU)
*** ../vim-7.1.108/src/version.c	Fri Sep 14 19:56:18 2007
--- src/version.c	Sat Sep 15 14:05:25 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     109,
  /**/

-- 
No letters of the alphabet were harmed in the creation of this message.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.110 ---
To: vim-dev at vim.org
Subject: patch 7.1.110
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.110 (after 7.1.102)
Problem:    Win32: Still compilation problems with Perl.
Solution:   Change the #ifdefs. (Suresh Govindachar)
Files:	    src/if_perl.xs


*** ../vim-7.1.109/src/if_perl.xs	Thu Sep 13 15:19:32 2007
--- src/if_perl.xs	Fri Sep 14 21:23:38 2007
***************
*** 48,60 ****
   * The changes include addition of two symbols (Perl_sv_2iv_flags,
   * Perl_newXS_flags) not present in earlier releases.
   *
!  * Jan Dubois suggested the following guarding scheme:
   */
! #if (ACTIVEPERL_VERSION >= 822)
! # define PERL589_OR_LATER
! #endif
! #if (PERL_REVISION == 5) && (PERL_VERSION == 8) && (PERL_SUBVERSION >= 9)
! # define PERL589_OR_LATER
  #endif
  #if (PERL_REVISION == 5) && (PERL_VERSION >= 9)
  # define PERL589_OR_LATER
--- 48,62 ----
   * The changes include addition of two symbols (Perl_sv_2iv_flags,
   * Perl_newXS_flags) not present in earlier releases.
   *
!  * Jan Dubois suggested the following guarding scheme.
!  *
!  * Active State defined ACTIVEPERL_VERSION as a string in versions before
!  * 5.8.8; and so the comparison to 822 below needs to be guarded.
   */
! #if (PERL_REVISION == 5) && (PERL_VERSION == 8) && (PERL_SUBVERSION >= 8)
! # if (ACTIVEPERL_VERSION >= 822) || (PERL_SUBVERSION >= 9)
! #  define PERL589_OR_LATER
! # endif
  #endif
  #if (PERL_REVISION == 5) && (PERL_VERSION >= 9)
  # define PERL589_OR_LATER
*** ../vim-7.1.109/src/version.c	Sat Sep 15 14:06:41 2007
--- src/version.c	Sat Sep 15 14:48:05 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     110,
  /**/

-- 
"It's so simple to be wise.  Just think of something stupid to say
and then don't say it."        -- Sam Levenson

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.111 ---
To: vim-dev at vim.org
Subject: patch 7.1.111
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.111
Problem:    When using ":vimgrep" with the "j" flag folds from another buffer
	    may be displayed. (A.Politz)
Solution:   When not jumping to another buffer update the folds.
Files:	    src/quickfix.c


*** ../vim-7.1.110/src/quickfix.c	Thu Jun 28 21:23:52 2007
--- src/quickfix.c	Fri Sep 14 22:16:23 2007
***************
*** 1612,1619 ****
  	}
  
  	/*
! 	 * If there is only one window and is the quickfix window, create a new
! 	 * one above the quickfix window.
  	 */
  	if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
  	{
--- 1612,1619 ----
  	}
  
  	/*
! 	 * If there is only one window and it is the quickfix window, create a
! 	 * new one above the quickfix window.
  	 */
  	if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
  	{
***************
*** 2981,2986 ****
--- 2981,2987 ----
      buf_T	*buf;
      int		duplicate_name = FALSE;
      int		using_dummy;
+     int		redraw_for_dummy = FALSE;
      int		found_match;
      buf_T	*first_match_buf = NULL;
      time_t	seconds = 0;
***************
*** 3097,3102 ****
--- 3098,3104 ----
  	    /* Remember that a buffer with this name already exists. */
  	    duplicate_name = (buf != NULL);
  	    using_dummy = TRUE;
+ 	    redraw_for_dummy = TRUE;
  
  #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
  	    /* Don't do Filetype autocommands to avoid loading syntax and
***************
*** 3243,3252 ****
--- 3245,3272 ----
      if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
      {
  	if ((flags & VGR_NOJUMP) == 0)
+ 	{
+ 	    buf = curbuf;
  	    qf_jump(qi, 0, 0, eap->forceit);
+ 	    if (buf != curbuf)
+ 		/* If we jumped to another buffer redrawing will already be
+ 		 * taken care of. */
+ 		redraw_for_dummy = FALSE;
+ 	}
      }
      else
  	EMSG2(_(e_nomatch2), s);
+ 
+     /* If we loaded a dummy buffer into the current window, the autocommands
+      * may have messed up things, need to redraw and recompute folds. */
+     if (redraw_for_dummy)
+     {
+ #ifdef FEAT_FOLDING
+ 	foldUpdateAll(curwin);
+ #else
+ 	redraw_later(NOT_VALID);
+ #endif
+     }
  
  theend:
      vim_free(regmatch.regprog);
*** ../vim-7.1.110/src/version.c	Sat Sep 15 14:48:57 2007
--- src/version.c	Sun Sep 16 13:23:48 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     111,
  /**/

-- 
Trees moving back and forth is what makes the wind blow.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.112 ---
To: vim-dev at vim.org
Subject: patch 7.1.112
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.112
Problem:    Using input() with a wrong argument may crash Vim. (A.Politz)
Solution:   Init the input() return value to NULL.
Files:	    src/eval.c


*** ../vim-7.1.111/src/eval.c	Thu Sep 13 20:39:58 2007
--- src/eval.c	Sat Sep 15 19:04:51 2007
***************
*** 11565,11578 ****
      char_u	*xp_arg = NULL;
  
      rettv->v_type = VAR_STRING;
  
  #ifdef NO_CONSOLE_INPUT
      /* While starting up, there is no place to enter text. */
      if (no_console_input())
-     {
- 	rettv->vval.v_string = NULL;
  	return;
-     }
  #endif
  
      cmd_silent = FALSE;		/* Want to see the prompt. */
--- 11566,11577 ----
      char_u	*xp_arg = NULL;
  
      rettv->v_type = VAR_STRING;
+     rettv->vval.v_string = NULL;
  
  #ifdef NO_CONSOLE_INPUT
      /* While starting up, there is no place to enter text. */
      if (no_console_input())
  	return;
  #endif
  
      cmd_silent = FALSE;		/* Want to see the prompt. */
*** ../vim-7.1.111/src/version.c	Sun Sep 16 13:26:56 2007
--- src/version.c	Sun Sep 16 14:19:04 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     112,
  /**/

-- 
The early bird gets the worm. If you want something else for
breakfast, get up later.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.113 ---
To: vim-dev at vim.org
Subject: patch 7.1.113
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.113
Problem:    Using map() to go over an empty list causes memory to be freed
	    twice. (A.Politz)
Solution:   Don't clear the typeval in restore_vimvar().
Files:	    src/eval.c


*** ../vim-7.1.112/src/eval.c	Sun Sep 16 14:20:18 2007
--- src/eval.c	Sun Sep 16 19:24:49 2007
***************
*** 1318,1324 ****
  {
      hashitem_T	*hi;
  
-     clear_tv(&vimvars[idx].vv_tv);
      vimvars[idx].vv_tv = *save_tv;
      if (vimvars[idx].vv_type == VAR_UNKNOWN)
      {
--- 1318,1323 ----
***************
*** 1362,1368 ****
  
      if (p_verbose == 0)
  	--emsg_off;
-     vimvars[VV_VAL].vv_str = NULL;
      restore_vimvar(VV_VAL, &save_val);
  
      return list;
--- 1361,1366 ----
***************
*** 9387,9401 ****
  {
      typval_T	rettv;
      char_u	*s;
  
      copy_tv(tv, &vimvars[VV_VAL].vv_tv);
      s = expr;
      if (eval1(&s, &rettv, TRUE) == FAIL)
! 	return FAIL;
      if (*s != NUL)  /* check for trailing chars after expr */
      {
  	EMSG2(_(e_invexpr2), s);
! 	return FAIL;
      }
      if (map)
      {
--- 9386,9401 ----
  {
      typval_T	rettv;
      char_u	*s;
+     int		retval = FAIL;
  
      copy_tv(tv, &vimvars[VV_VAL].vv_tv);
      s = expr;
      if (eval1(&s, &rettv, TRUE) == FAIL)
! 	goto theend;
      if (*s != NUL)  /* check for trailing chars after expr */
      {
  	EMSG2(_(e_invexpr2), s);
! 	goto theend;
      }
      if (map)
      {
***************
*** 9414,9423 ****
  	/* On type error, nothing has been removed; return FAIL to stop the
  	 * loop.  The error message was given by get_tv_number_chk(). */
  	if (error)
! 	    return FAIL;
      }
      clear_tv(&vimvars[VV_VAL].vv_tv);
!     return OK;
  }
  
  /*
--- 9414,9425 ----
  	/* On type error, nothing has been removed; return FAIL to stop the
  	 * loop.  The error message was given by get_tv_number_chk(). */
  	if (error)
! 	    goto theend;
      }
+     retval = OK;
+ theend:
      clear_tv(&vimvars[VV_VAL].vv_tv);
!     return retval;
  }
  
  /*
*** ../vim-7.1.112/src/version.c	Sun Sep 16 14:20:18 2007
--- src/version.c	Mon Sep 17 21:33:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     113,
  /**/

-- 
Mental Floss prevents moral decay!

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.114 ---
To: vim-dev at vim.org
Subject: patch 7.1.114
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.114
Problem:    Memory leak in getmatches().
Solution:   Don't increment the refcount twice.
Files:	    src/eval.c


*** ../vim-7.1.113/src/eval.c	Mon Sep 17 21:37:09 2007
--- src/eval.c	Sun Sep 16 19:24:49 2007
***************
*** 10351,10357 ****
  	    dict = dict_alloc();
  	    if (dict == NULL)
  		return;
- 	    ++dict->dv_refcount;
  	    dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id));
  	    dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
  	    dict_add_nr_str(dict, "priority", (long)cur->priority, NULL);
--- 10355,10360 ----
*** ../vim-7.1.113/src/version.c	Mon Sep 17 21:37:09 2007
--- src/version.c	Mon Sep 17 21:54:08 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     114,
  /**/

-- 
Be nice to your kids...  they'll be the ones choosing your nursing home.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.115 ---
To: vim-dev at vim.org
Subject: patch 7.1.115
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.115 (after 7.1.105)
Problem:    Compiler warning for uninitialized variable. (Tony Mechelynck)
Solution:   Init variable to NULL.
Files:	    src/eval.c


*** ../vim-7.1.114/src/eval.c	Mon Sep 17 21:55:02 2007
--- src/eval.c	Sun Sep 16 19:24:49 2007
***************
*** 6704,6710 ****
      dict_T	*d = NULL;
      typval_T	tvkey;
      typval_T	tv;
!     char_u	*key;
      dictitem_T	*item;
      char_u	*start = skipwhite(*arg + 1);
      char_u	buf[NUMBUFLEN];
--- 6705,6711 ----
      dict_T	*d = NULL;
      typval_T	tvkey;
      typval_T	tv;
!     char_u	*key = NULL;
      dictitem_T	*item;
      char_u	*start = skipwhite(*arg + 1);
      char_u	buf[NUMBUFLEN];
*** ../vim-7.1.114/src/version.c	Mon Sep 17 21:55:02 2007
--- src/version.c	Mon Sep 17 22:18:42 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     115,
  /**/

-- 
Proofread carefully to see if you any words out.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.116 ---
To: vim-dev at vim.org
Subject: patch 7.1.116
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.116
Problem:    Cannot display Unicode characters above 0x10000.
Solution:   Remove the replacement with a question mark when UNICODE16 is not
	    defined. (partly by Nicolas Weber)
Files:	    src/screen.c


*** ../vim-7.1.115/src/screen.c	Thu Aug 30 13:51:52 2007
--- src/screen.c	Mon Sep 10 22:29:42 2007
***************
*** 2305,2313 ****
--- 2305,2315 ----
  			prev_c = u8c;
  #endif
  		    /* Non-BMP character: display as ? or fullwidth ?. */
+ #ifdef UNICODE16
  		    if (u8c >= 0x10000)
  			ScreenLinesUC[idx] = (cells == 2) ? 0xff1f : (int)'?';
  		    else
+ #endif
  			ScreenLinesUC[idx] = u8c;
  		    for (i = 0; i < Screen_mco; ++i)
  		    {
***************
*** 3678,3690 ****
  		    if ((mb_l == 1 && c >= 0x80)
  			    || (mb_l >= 1 && mb_c == 0)
  			    || (mb_l > 1 && (!vim_isprintc(mb_c)
! 							 || mb_c >= 0x10000)))
  		    {
  			/*
  			 * Illegal UTF-8 byte: display as <xx>.
  			 * Non-BMP character : display as ? or fullwidth ?.
  			 */
  			if (mb_c < 0x10000)
  			{
  			    transchar_hex(extra, mb_c);
  # ifdef FEAT_RIGHTLEFT
--- 3680,3697 ----
  		    if ((mb_l == 1 && c >= 0x80)
  			    || (mb_l >= 1 && mb_c == 0)
  			    || (mb_l > 1 && (!vim_isprintc(mb_c)
! # ifdef UNICODE16
! 							 || mb_c >= 0x10000
! # endif
! 							 )))
  		    {
  			/*
  			 * Illegal UTF-8 byte: display as <xx>.
  			 * Non-BMP character : display as ? or fullwidth ?.
  			 */
+ # ifdef UNICODE16
  			if (mb_c < 0x10000)
+ # endif
  			{
  			    transchar_hex(extra, mb_c);
  # ifdef FEAT_RIGHTLEFT
***************
*** 3692,3702 ****
--- 3699,3711 ----
  				rl_mirror(extra);
  # endif
  			}
+ # ifdef UNICODE16
  			else if (utf_char2cells(mb_c) != 2)
  			    STRCPY(extra, "?");
  			else
  			    /* 0xff1f in UTF-8: full-width '?' */
  			    STRCPY(extra, "\357\274\237");
+ # endif
  
  			p_extra = extra;
  			c = *p_extra;
***************
*** 6245,6250 ****
--- 6254,6260 ----
  		else
  		    u8c = utfc_ptr2char(ptr, u8cc);
  		mbyte_cells = utf_char2cells(u8c);
+ # ifdef UNICODE16
  		/* Non-BMP character: display as ? or fullwidth ?. */
  		if (u8c >= 0x10000)
  		{
***************
*** 6252,6257 ****
--- 6262,6268 ----
  		    if (attr == 0)
  			attr = hl_attr(HLF_8);
  		}
+ # endif
  # ifdef FEAT_ARABIC
  		if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c))
  		{
*** ../vim-7.1.116/src/version.c	Mon Sep 17 22:19:43 2007
--- src/version.c	Mon Sep 17 22:37:31 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     116,
  /**/

-- 
There can't be a crisis today, my schedule is already full.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.117 ---
To: vim-dev at vim.org
Subject: patch 7.1.117
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.117
Problem:    Can't check wether Vim was compiled with Gnome. (Tony Mechelynck)
Solution:   Add gui_gnome to the has() list.
Files:	    src/eval.c


*** ../vim-7.1.116/src/eval.c	Mon Sep 17 22:19:43 2007
--- src/eval.c	Sun Sep 16 19:24:49 2007
***************
*** 10879,10884 ****
--- 10883,10891 ----
  	"gui_gtk2",
  # endif
  #endif
+ #ifdef FEAT_GUI_GNOME
+ 	"gui_gnome",
+ #endif
  #ifdef FEAT_GUI_MAC
  	"gui_mac",
  #endif
*** ../vim-7.1.116/src/version.c	Mon Sep 17 22:38:49 2007
--- src/version.c	Tue Sep 25 12:48:59 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     117,
  /**/

-- 
ARTHUR:  No, hang on!  Just answer the five questions ...
GALAHAD: Three questions ...
ARTHUR:  Three questions ...  And we shall watch ... and pray.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.118 ---
To: vim-dev at vim.org
Subject: patch 7.1.118
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.118 (after 7.1.107)
Problem:    Compiler warning for Visual C compiler.
Solution:   Add typecast. (Mike Williams)
Files:	    src/ops.c


*** ../vim-7.1.117/src/ops.c	Thu Sep 13 22:40:47 2007
--- src/ops.c	Mon Sep 24 18:30:09 2007
***************
*** 2605,2611 ****
  	/* Auto-indenting may have changed the indent.  If the cursor was past
  	 * the indent, exclude that indent change from the inserted text. */
  	firstline = ml_get(oap->start.lnum);
! 	if (bd.textcol > pre_indent)
  	{
  	    long new_indent = (long)(skipwhite(firstline) - firstline);
  
--- 2605,2611 ----
  	/* Auto-indenting may have changed the indent.  If the cursor was past
  	 * the indent, exclude that indent change from the inserted text. */
  	firstline = ml_get(oap->start.lnum);
! 	if (bd.textcol > (colnr_T)pre_indent)
  	{
  	    long new_indent = (long)(skipwhite(firstline) - firstline);
  
*** ../vim-7.1.117/src/version.c	Tue Sep 25 12:50:00 2007
--- src/version.c	Tue Sep 25 14:18:37 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     118,
  /**/

-- 
BRIDGEKEEPER: What is your favorite editor?
GAWAIN:       Emacs ...  No, Viiiiiiiiiiimmmmmmm!
           "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.119 ---
To: vim-dev at vim.org
Subject: patch 7.1.119
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.119
Problem:    Crash when 'cmdheight' set to very large value. (A.Politz)
Solution:   Limit 'cmdheight' to 'lines' minus one.  Store right value of
	    'cmdheight' when running out of room.
Files:	    src/option.c, src/window.c


*** ../vim-7.1.118/src/option.c	Thu Sep  6 16:33:47 2007
--- src/option.c	Tue Sep 25 12:17:35 2007
***************
*** 7824,7829 ****
--- 7824,7831 ----
  	    errmsg = e_positive;
  	    p_ch = 1;
  	}
+ 	if (p_ch > Rows - min_rows() + 1)
+ 	    p_ch = Rows - min_rows() + 1;
  
  	/* Only compute the new window layout when startup has been
  	 * completed. Otherwise the frame sizes may be wrong. */
*** ../vim-7.1.118/src/window.c	Thu Sep 13 18:25:08 2007
--- src/window.c	Tue Sep 25 12:13:56 2007
***************
*** 5523,5528 ****
--- 5523,5529 ----
  		{
  		    EMSG(_(e_noroom));
  		    p_ch = old_p_ch;
+ 		    curtab->tp_ch_used = p_ch;
  		    cmdline_row = Rows - p_ch;
  		    break;
  		}
*** ../vim-7.1.118/src/version.c	Tue Sep 25 14:19:35 2007
--- src/version.c	Tue Sep 25 14:48:14 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     119,
  /**/

-- 
Q: Why does /dev/null accept only integers?
A: You can't sink a float.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.120 ---
To: vim-dev at vim.org
Subject: patch 7.1.120
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.120
Problem:    Can't properly check memory leaks while running tests.
Solution:   Add an argument to garbagecollect().  Delete functions and
	    variables in the test scripts.
Files:	    runtime/doc/eval.txt, src/eval.c, src/globals.h, src/main.c,
	    src/testdir/Makefile, src/testdir/test14.in,
	    src/testdir/test26.in, src/testdir/test34.in,
	    src/testdir/test45.in, src/testdir/test47.in,
	    src/testdir/test49.in, src/testdir/test55.in,
	    src/testdir/test56.in, src/testdir/test58.in,
	    src/testdir/test59.in, src/testdir/test60.in,
	    src/testdir/test60.vim, src/testdir/test62.in,
	    src/testdir/test63.in, src/testdir/test64.in


*** ../vim-7.1.119/runtime/doc/eval.txt	Thu Jul 26 22:55:11 2007
--- runtime/doc/eval.txt	Tue Sep 25 17:40:30 2007
***************
*** 1,4 ****
! *eval.txt*      For Vim version 7.1.  Last change: 2007 Jul 25
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *eval.txt*      For Vim version 7.1.  Last change: 2007 Sep 25
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 1603,1609 ****
  foldtextresult( {lnum})		String	text for closed fold at {lnum}
  foreground( )			Number	bring the Vim window to the foreground
  function( {name})		Funcref reference to function {name}
! garbagecollect()		none	free memory, breaking cyclic references
  get( {list}, {idx} [, {def}])	any	get item {idx} from {list} or {def}
  get( {dict}, {key} [, {def}])	any	get item {key} from {dict} or {def}
  getbufline( {expr}, {lnum} [, {end}])
--- 1603,1609 ----
  foldtextresult( {lnum})		String	text for closed fold at {lnum}
  foreground( )			Number	bring the Vim window to the foreground
  function( {name})		Funcref reference to function {name}
! garbagecollect( [at_exit])	none	free memory, breaking cyclic references
  get( {list}, {idx} [, {def}])	any	get item {idx} from {list} or {def}
  get( {dict}, {key} [, {def}])	any	get item {key} from {dict} or {def}
  getbufline( {expr}, {lnum} [, {end}])
***************
*** 2673,2679 ****
  		{name} can be a user defined function or an internal function.
  
  
! garbagecollect()					*garbagecollect()*
  		Cleanup unused |Lists| and |Dictionaries| that have circular
  		references.  There is hardly ever a need to invoke this
  		function, as it is automatically done when Vim runs out of
--- 2673,2679 ----
  		{name} can be a user defined function or an internal function.
  
  
! garbagecollect([at_exit])				*garbagecollect()*
  		Cleanup unused |Lists| and |Dictionaries| that have circular
  		references.  There is hardly ever a need to invoke this
  		function, as it is automatically done when Vim runs out of
***************
*** 2683,2688 ****
--- 2683,2691 ----
  		This is useful if you have deleted a very big |List| and/or
  		|Dictionary| with circular references in a script that runs
  		for a long time.
+ 		When the optional "at_exit" argument is one, garbage
+ 		collection will also be done when exiting Vim, if it wasn't
+ 		done before.  This is useful when checking for memory leaks.
  
  get({list}, {idx} [, {default}])			*get()*
  		Get item {idx} from |List| {list}.  When this item is not
*** ../vim-7.1.119/src/eval.c	Tue Sep 25 12:50:00 2007
--- src/eval.c	Sun Sep 16 19:24:49 2007
***************
*** 6128,6133 ****
--- 6128,6134 ----
      /* Only do this once. */
      want_garbage_collect = FALSE;
      may_garbage_collect = FALSE;
+     garbage_collect_at_exit = FALSE;
  
      /*
       * 1. Go through all accessible variables and mark all lists and dicts
***************
*** 7110,7116 ****
      {"foldtextresult",	1, 1, f_foldtextresult},
      {"foreground",	0, 0, f_foreground},
      {"function",	1, 1, f_function},
!     {"garbagecollect",	0, 0, f_garbagecollect},
      {"get",		2, 3, f_get},
      {"getbufline",	2, 3, f_getbufline},
      {"getbufvar",	2, 2, f_getbufvar},
--- 7111,7117 ----
      {"foldtextresult",	1, 1, f_foldtextresult},
      {"foreground",	0, 0, f_foreground},
      {"function",	1, 1, f_function},
!     {"garbagecollect",	0, 1, f_garbagecollect},
      {"get",		2, 3, f_get},
      {"getbufline",	2, 3, f_getbufline},
      {"getbufvar",	2, 2, f_getbufvar},
***************
*** 9719,9724 ****
--- 9720,9728 ----
      /* This is postponed until we are back at the toplevel, because we may be
       * using Lists and Dicts internally.  E.g.: ":echo [garbagecollect()]". */
      want_garbage_collect = TRUE;
+ 
+     if (argvars[0].v_type != VAR_UNKNOWN && get_tv_number(&argvars[0]) == 1)
+ 	garbage_collect_at_exit = TRUE;
  }
  
  /*
*** ../vim-7.1.119/src/globals.h	Thu Aug 30 13:51:52 2007
--- src/globals.h	Sun Sep 16 18:42:41 2007
***************
*** 301,313 ****
  #endif
  
  #ifdef FEAT_EVAL
! /* Garbage collection can only take place when we are sure there are no Lists
   * or Dictionaries being used internally.  This is flagged with
   * "may_garbage_collect" when we are at the toplevel.
   * "want_garbage_collect" is set by the garbagecollect() function, which means
!  * we do garbage collection before waiting for a char at the toplevel. */
  EXTERN int	may_garbage_collect INIT(= FALSE);
  EXTERN int	want_garbage_collect INIT(= FALSE);
  
  /* ID of script being sourced or was sourced to define the current function. */
  EXTERN scid_T	current_SID INIT(= 0);
--- 301,317 ----
  #endif
  
  #ifdef FEAT_EVAL
! /*
!  * Garbage collection can only take place when we are sure there are no Lists
   * or Dictionaries being used internally.  This is flagged with
   * "may_garbage_collect" when we are at the toplevel.
   * "want_garbage_collect" is set by the garbagecollect() function, which means
!  * we do garbage collection before waiting for a char at the toplevel.
!  * "garbage_collect_at_exit" indicates garbagecollect(1) was called.
!  */
  EXTERN int	may_garbage_collect INIT(= FALSE);
  EXTERN int	want_garbage_collect INIT(= FALSE);
+ EXTERN int	garbage_collect_at_exit INIT(= FALSE);
  
  /* ID of script being sourced or was sourced to define the current function. */
  EXTERN scid_T	current_SID INIT(= 0);
*** ../vim-7.1.119/src/main.c	Thu Sep  6 17:38:06 2007
--- src/main.c	Sun Sep 16 18:44:54 2007
***************
*** 1334,1339 ****
--- 1334,1343 ----
  #ifdef FEAT_CSCOPE
      cs_end();
  #endif
+ #ifdef FEAT_EVAL
+     if (garbage_collect_at_exit)
+ 	garbage_collect();
+ #endif
  
      mch_exit(exitval);
  }
*** ../vim-7.1.119/src/testdir/Makefile	Tue Aug 14 17:28:14 2007
--- src/testdir/Makefile	Mon Sep 17 20:04:13 2007
***************
*** 6,12 ****
  
  # Uncomment this line for using valgrind.
  # The output goes into a file "valgrind.$PID" (sorry, no test number).
! # VALGRIND = valgrind --tool=memcheck --num-callers=15 --logfile=valgrind
  
  SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
  		test7.out test8.out test9.out test10.out test11.out \
--- 6,12 ----
  
  # Uncomment this line for using valgrind.
  # The output goes into a file "valgrind.$PID" (sorry, no test number).
! # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --logfile=valgrind
  
  SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
  		test7.out test8.out test9.out test10.out test11.out \
***************
*** 39,45 ****
  $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
  
  clean:
! 	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim test.ok X* viminfo
  
  test1.out: test1.in
  	-rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo
--- 39,45 ----
  $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
  
  clean:
! 	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim test.ok X* valgrind.pid* viminfo
  
  test1.out: test1.in
  	-rm -f $*.failed tiny.vim small.vim mbyte.vim test.ok X* viminfo
***************
*** 65,70 ****
--- 65,74 ----
  		else echo $* NO OUTPUT >>test.log; \
  		fi"
  	-rm -rf X* test.ok viminfo
+ 
+ test49.out: test49.vim
+ 
+ test60.out: test60.vim
  
  nolog:
  	-echo Test results: >test.log
*** ../vim-7.1.119/src/testdir/test14.in	Sun Jun 13 20:24:08 2004
--- src/testdir/test14.in	Sun Sep 16 15:57:54 2007
***************
*** 18,23 ****
--- 18,24 ----
  : let tt = "o\<C-V>65\<C-V>x42\<C-V>o103 \<C-V>33a\<C-V>xfg\<C-V>o78\<Esc>"
  :endif
  :exe "normal " . tt
+ :unlet tt
  :.w >>test.out
  :set vb
  /^Piece
*** ../vim-7.1.119/src/testdir/test26.in	Sun Jun 13 17:05:48 2004
--- src/testdir/test26.in	Sun Sep 16 16:54:19 2007
***************
*** 37,42 ****
--- 37,43 ----
  :    endif
  :  endif
  :endwhile
+ :unlet i j
  :'t,$w! test.out
  :qa!
  ENDTEST
*** ../vim-7.1.119/src/testdir/test34.in	Sun Apr 30 20:46:14 2006
--- src/testdir/test34.in	Sun Sep 16 21:25:47 2007
***************
*** 52,58 ****
  ---*---
  (one
  (two
! [(one again:$-5,$wq! test.out
  ENDTEST
  
  here
--- 52,66 ----
  ---*---
  (one
  (two
! [(one again:$-5,$w! test.out
! :delfunc Table
! :delfunc Compute
! :delfunc Expr1
! :delfunc Expr2
! :delfunc ListItem
! :delfunc ListReset
! :unlet retval counter
! :q!
  ENDTEST
  
  here
*** ../vim-7.1.119/src/testdir/test45.in	Sun Jun 13 19:57:02 2004
--- src/testdir/test45.in	Sun Sep 16 18:27:20 2007
***************
*** 55,60 ****
--- 55,61 ----
  /kk$
  :call append("$", foldlevel("."))
  :/^last/+1,$w! test.out
+ :delfun Flvl
  :qa!
  ENDTEST
  
*** ../vim-7.1.119/src/testdir/test47.in	Sun Jun 13 18:40:29 2004
--- src/testdir/test47.in	Sun Sep 16 18:32:03 2007
***************
*** 34,39 ****
--- 34,40 ----
  :call append("$", two)
  :call append("$", three)
  :$-2,$w! test.out
+ :unlet one two three
  :qa!
  ENDTEST
  
*** ../vim-7.1.119/src/testdir/test49.in	Sun Jun 13 18:10:00 2004
--- src/testdir/test49.in	Sun Sep 16 23:30:35 2007
***************
*** 1,13 ****
  This is a test of the script language.
  
  If after adding a new test, the test output doesn't appear properly in
! test49.failed, try to add one ore more "G"s at the line before ENDTEST.
  
  STARTTEST
  :so small.vim
  :se nocp nomore viminfo+=nviminfo
  :so test49.vim
! GGGGGGGGGG"rp:.-,$wq! test.out
  ENDTEST
  
  Results of test49.vim:
--- 1,29 ----
  This is a test of the script language.
  
  If after adding a new test, the test output doesn't appear properly in
! test49.failed, try to add one ore more "G"s at the line ending in "test.out"
  
  STARTTEST
  :so small.vim
  :se nocp nomore viminfo+=nviminfo
  :so test49.vim
! GGGGGGGGGGGGGG"rp:.-,$w! test.out
! :"
! :" make valgrind happy
! :redir => funclist
! :silent func
! :redir END
! :for line in split(funclist, "\n")
! :  let name = matchstr(line, 'function \zs[A-Z]\w*\ze(')
! :  if name != ''
! :    exe "delfunc " . name
! :  endif
! :endfor
! :for v in keys(g:)
! :  silent! exe "unlet " . v
! :endfor
! :unlet v
! :qa!
  ENDTEST
  
  Results of test49.vim:
*** ../vim-7.1.119/src/testdir/test55.in	Sat May  5 20:03:56 2007
--- src/testdir/test55.in	Mon Sep 17 19:53:48 2007
***************
*** 345,350 ****
--- 345,354 ----
  :endfun
  :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
  :"
+ :delfunc Test
+ :unlet dict
+ :call garbagecollect(1)
+ :"
  :/^start:/,$wq! test.out
  ENDTEST
  
*** ../vim-7.1.119/src/testdir/test56.in	Tue Sep  5 13:36:02 2006
--- src/testdir/test56.in	Sun Sep 16 17:54:20 2007
***************
*** 17,21 ****
  fun s:DoNothing()
    call append(line('$'), "nothing line")
  endfun
! nnoremap <buffer> _x	:call <SID>DoNothing()<bar>call <SID>DoLast()<cr>
  end:
--- 17,21 ----
  fun s:DoNothing()
    call append(line('$'), "nothing line")
  endfun
! nnoremap <buffer> _x	:call <SID>DoNothing()<bar>call <SID>DoLast()<bar>delfunc <SID>DoNothing<bar>delfunc <SID>DoLast<cr>
  end:
*** ../vim-7.1.119/src/testdir/test58.in	Wed Apr  5 22:38:56 2006
--- src/testdir/test58.in	Sun Sep 16 18:17:03 2007
***************
*** 86,91 ****
--- 86,92 ----
  :$put =str
  `m]s:let [str, a] = spellbadword()
  :$put =str
+ :unlet str a
  :"
  :" Postponed prefixes
  :call TestOne('2', '1')
***************
*** 99,104 ****
--- 100,109 ----
  :"
  :" NOSLITSUGS
  :call TestOne('8', '8')
+ :"
+ :" clean up for valgrind
+ :delfunc TestOne
+ :set spl= enc=latin1
  :"
  gg:/^test output:/,$wq! test.out
  ENDTEST
*** ../vim-7.1.119/src/testdir/test59.in	Wed Apr  5 22:27:11 2006
--- src/testdir/test59.in	Sun Sep 16 18:17:23 2007
***************
*** 90,95 ****
--- 90,96 ----
  :$put =str
  `m]s:let [str, a] = spellbadword()
  :$put =str
+ :unlet str a
  :"
  :" Postponed prefixes
  :call TestOne('2', '1')
***************
*** 100,105 ****
--- 101,110 ----
  :call TestOne('5', '5')
  :call TestOne('6', '6')
  :call TestOne('7', '7')
+ :"
+ :" clean up for valgrind
+ :delfunc TestOne
+ :set spl= enc=latin1
  :"
  gg:/^test output:/,$wq! test.out
  ENDTEST
*** ../vim-7.1.119/src/testdir/test60.in	Fri May  5 23:11:11 2006
--- src/testdir/test60.in	Mon Sep 17 19:58:43 2007
***************
*** 569,574 ****
--- 569,577 ----
      redir END
  endfunction
  :call TestExists()
+ :delfunc TestExists
+ :delfunc RunTest
+ :delfunc TestFuncArg
  :edit! test.out
  :set ff=unix
  :w
*** ../vim-7.1.119/src/testdir/test60.vim	Fri Jan 13 00:14:55 2006
--- src/testdir/test60.vim	Mon Sep 17 19:56:02 2007
***************
*** 94,97 ****
--- 94,98 ----
  else
      echo "FAILED"
  endif
+ unlet str
  
*** ../vim-7.1.119/src/testdir/test62.in	Sun Apr 30 20:28:14 2006
--- src/testdir/test62.in	Sun Sep 16 17:24:04 2007
***************
*** 7,12 ****
--- 7,13 ----
  :let nr = tabpagenr()
  :q
  :call append(line('$'), 'tab page ' . nr)
+ :unlet nr
  :"
  :" Open three tab pages and use ":tabdo"
  :0tabnew
***************
*** 23,28 ****
--- 24,30 ----
  :q!
  :call append(line('$'), line1)
  :call append(line('$'), line2)
+ :unlet line1 line2
  :"
  :"
  :/^Results/,$w! test.out
*** ../vim-7.1.119/src/testdir/test63.in	Thu Jul 26 22:55:11 2007
--- src/testdir/test63.in	Sun Sep 16 17:11:07 2007
***************
*** 60,66 ****
  :else
  :  let @r .= "FAILED\n"
  :endif
! :" --- Check that "matchdelete()" returns 0 if succesfull and otherwise -1.
  :let @r .= "*** Test 6: "
  :let m = matchadd("MyGroup1", "TODO")
  :let r1 = matchdelete(m)
--- 60,66 ----
  :else
  :  let @r .= "FAILED\n"
  :endif
! :" --- Check that "matchdelete()" returns 0 if successful and otherwise -1.
  :let @r .= "*** Test 6: "
  :let m = matchadd("MyGroup1", "TODO")
  :let r1 = matchdelete(m)
***************
*** 117,123 ****
  :" --- Check that "setmatches()" will not add two matches with the same ID. The
  :" --- expected behaviour (for now) is to add the first match but not the
  :" --- second and to return 0 (even though it is a matter of debate whether
! :" --- this can be considered succesfull behaviour).
  :let @r .= "*** Test 9: "
  :let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])
  :if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0
--- 117,123 ----
  :" --- Check that "setmatches()" will not add two matches with the same ID. The
  :" --- expected behaviour (for now) is to add the first match but not the
  :" --- second and to return 0 (even though it is a matter of debate whether
! :" --- this can be considered successful behaviour).
  :let @r .= "*** Test 9: "
  :let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])
  :if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0
***************
*** 127,133 ****
  :endif
  :call clearmatches()
  :unlet r1
! :" --- Check that "setmatches()" returns 0 if succesfull and otherwise -1.
  :" --- (A range of valid and invalid input values are tried out to generate the
  :" --- return values.)
  :let @r .= "*** Test 10: "
--- 127,133 ----
  :endif
  :call clearmatches()
  :unlet r1
! :" --- Check that "setmatches()" returns 0 if successful and otherwise -1.
  :" --- (A range of valid and invalid input values are tried out to generate the
  :" --- return values.)
  :let @r .= "*** Test 10: "
*** ../vim-7.1.119/src/testdir/test64.in	Tue Aug 14 17:28:14 2007
--- src/testdir/test64.in	Sun Sep 16 17:43:03 2007
***************
*** 44,51 ****
--- 44,53 ----
  :        $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
  :      endif
  :    endfor
+ :    unlet i
  :  endif
  :endfor
+ :unlet t tl e l
  :/^Results/,$wq! test.out
  ENDTEST
  
*** ../vim-7.1.119/src/version.c	Tue Sep 25 14:50:19 2007
--- src/version.c	Tue Sep 25 17:36:22 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     120,
  /**/

-- 
BEDEVERE: How do you know so much about swallows?
ARTHUR:   Well you have to know these things when you're a king, you know.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.121 ---
To: vim-dev at vim.org
Subject: patch 7.1.121
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.121
Problem:    Using ":cd %:h" when editing a file in the current directory
	    results in an error message for using an empty string.
Solution:   When "%:h" results in an empty string use ".".
Files:	    src/eval.c


*** ../vim-7.1.120/src/eval.c	Tue Sep 25 17:54:41 2007
--- src/eval.c	Sun Sep 16 19:24:49 2007
***************
*** 21308,21321 ****
  	*usedlen += 2;
  	s = get_past_head(*fnamep);
  	while (tail > s && after_pathsep(s, tail))
! 	    --tail;
  	*fnamelen = (int)(tail - *fnamep);
  #ifdef VMS
  	if (*fnamelen > 0)
  	    *fnamelen += 1; /* the path separator is part of the path */
  #endif
! 	while (tail > s && !after_pathsep(s, tail))
! 	    mb_ptr_back(*fnamep, tail);
      }
  
      /* ":8" - shortname  */
--- 21308,21334 ----
  	*usedlen += 2;
  	s = get_past_head(*fnamep);
  	while (tail > s && after_pathsep(s, tail))
! 	    mb_ptr_back(*fnamep, tail);
  	*fnamelen = (int)(tail - *fnamep);
  #ifdef VMS
  	if (*fnamelen > 0)
  	    *fnamelen += 1; /* the path separator is part of the path */
  #endif
! 	if (*fnamelen == 0)
! 	{
! 	    /* Result is empty.  Turn it into "." to make ":cd %:h" work. */
! 	    p = vim_strsave((char_u *)".");
! 	    if (p == NULL)
! 		return -1;
! 	    vim_free(*bufp);
! 	    *bufp = *fnamep = tail = p;
! 	    *fnamelen = 1;
! 	}
! 	else
! 	{
! 	    while (tail > s && !after_pathsep(s, tail))
! 		mb_ptr_back(*fnamep, tail);
! 	}
      }
  
      /* ":8" - shortname  */
*** ../vim-7.1.120/src/version.c	Tue Sep 25 17:54:41 2007
--- src/version.c	Tue Sep 25 20:38:08 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     121,
  /**/

-- 
It is illegal for anyone to try and stop a child from playfully jumping over
puddles of water.
		[real standing law in California, United States of America]

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.122 ---
To: vim-dev at vim.org
Subject: patch 7.1.122
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.122
Problem:    Mac: building Vim.app fails.  Using wrong architecture.
Solution:   Use line continuation for the gui_bundle dependency.  Detect the
	    system architecture with "uname -a".
Files:	    src/main.aap


*** ../vim-7.1.121/src/main.aap	Thu May 10 18:48:19 2007
--- src/main.aap	Tue Sep 25 21:26:03 2007
***************
*** 56,64 ****
      config {virtual} auto/config.h auto/config.aap :
                           auto/configure.aap configure.aap
                           config.arg config.h.in config.aap.in
          :sys CONFIG_STATUS=auto/config.status
                  ./configure.aap `file2string("config.arg")`
!                     --with-mac-arch=ppc
                      --cache-file=auto/config.cache
  
      # Configure arguments: create an empty "config.arg" file when its missing
--- 56,71 ----
      config {virtual} auto/config.h auto/config.aap :
                           auto/configure.aap configure.aap
                           config.arg config.h.in config.aap.in
+         # Use "uname -a" to detect the architecture of the system.
+         @ok, uname = redir_system('uname -a', 0)
+         @if string.find(uname, "i386") >= 0:
+         @   arch = "i386"
+         @else:
+         @   arch = "ppc"
+         :print Building for $arch system
          :sys CONFIG_STATUS=auto/config.status
                  ./configure.aap `file2string("config.arg")`
!                     --with-mac-arch=$arch
                      --cache-file=auto/config.cache
  
      # Configure arguments: create an empty "config.arg" file when its missing
***************
*** 1167,1173 ****
          :symlink `os.getcwd()`/../runtime $RESDIR/vim/runtime
  # TODO: Create the vimtutor application.
  
! gui_bundle {virtual}: $(RESDIR) bundle-dir bundle-executable bundle-info
                          bundle-resource bundle-language
  
  bundle-dir {virtual}: $(APPDIR)/Contents $(VIMTARGET)
--- 1174,1180 ----
          :symlink `os.getcwd()`/../runtime $RESDIR/vim/runtime
  # TODO: Create the vimtutor application.
  
! gui_bundle {virtual}: $(RESDIR) bundle-dir bundle-executable bundle-info \
                          bundle-resource bundle-language
  
  bundle-dir {virtual}: $(APPDIR)/Contents $(VIMTARGET)
***************
*** 1187,1193 ****
          :sys m4 $(M4FLAGSX) infplist.xml > $(APPDIR)/Contents/Info.plist
  
  bundle-resource {virtual}: bundle-dir bundle-rsrc
!     :copy {force} $(RSRC_DIR)/*.icns $(RESDIR)
  
  ### Classic resources
  # Resource fork (in the form of a .rsrc file) for Classic Vim (Mac OS 9)
--- 1194,1200 ----
          :sys m4 $(M4FLAGSX) infplist.xml > $(APPDIR)/Contents/Info.plist
  
  bundle-resource {virtual}: bundle-dir bundle-rsrc
!         :copy {force} $(RSRC_DIR)/*.icns $(RESDIR)
  
  ### Classic resources
  # Resource fork (in the form of a .rsrc file) for Classic Vim (Mac OS 9)
*** ../vim-7.1.121/src/version.c	Tue Sep 25 20:39:14 2007
--- src/version.c	Tue Sep 25 22:12:16 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     122,
  /**/

-- 
Men may not be seen publicly in any kind of strapless gown.
		[real standing law in Florida, United States of America]

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.123 ---
To: vim-dev at vim.org
Subject: patch 7.1.123
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.123
Problem:    Win32: ":edit foo ~ foo" expands "~".
Solution:   Change the call to expand_env().
Files:	    src/ex_docmd.c, src/misc1.c, src/proto/misc1.pro, src/option.c


*** ../vim-7.1.122/src/ex_docmd.c	Sun Aug 19 22:42:27 2007
--- src/ex_docmd.c	Wed Sep 26 20:29:36 2007
***************
*** 4403,4409 ****
  			    || vim_strchr(eap->arg, '~') != NULL)
  		    {
  			expand_env_esc(eap->arg, NameBuff, MAXPATHL,
! 								 TRUE, NULL);
  			has_wildcards = mch_has_wildcard(NameBuff);
  			p = NameBuff;
  		    }
--- 4402,4408 ----
  			    || vim_strchr(eap->arg, '~') != NULL)
  		    {
  			expand_env_esc(eap->arg, NameBuff, MAXPATHL,
! 							    TRUE, TRUE, NULL);
  			has_wildcards = mch_has_wildcard(NameBuff);
  			p = NameBuff;
  		    }
*** ../vim-7.1.122/src/misc1.c	Tue Aug 14 22:15:53 2007
--- src/misc1.c	Tue Sep 25 17:30:01 2007
***************
*** 3506,3514 ****
  #endif
  
  /*
   * Expand environment variable with path name.
   * "~/" is also expanded, using $HOME.	For Unix "~user/" is expanded.
!  * Skips over "\ ", "\~" and "\$".
   * If anything fails no expansion is done and dst equals src.
   */
      void
--- 3506,3543 ----
  #endif
  
  /*
+  * Call expand_env() and store the result in an allocated string.
+  * This is not very memory efficient, this expects the result to be freed
+  * again soon.
+  */
+     char_u *
+ expand_env_save(src)
+     char_u	*src;
+ {
+     return expand_env_save_opt(src, FALSE);
+ }
+ 
+ /*
+  * Idem, but when "one" is TRUE handle the string as one file name, only
+  * expand "~" at the start.
+  */
+     char_u *
+ expand_env_save_opt(src, one)
+     char_u	*src;
+     int		one;
+ {
+     char_u	*p;
+ 
+     p = alloc(MAXPATHL);
+     if (p != NULL)
+ 	expand_env_esc(src, p, MAXPATHL, FALSE, one, NULL);
+     return p;
+ }
+ 
+ /*
   * Expand environment variable with path name.
   * "~/" is also expanded, using $HOME.	For Unix "~user/" is expanded.
!  * Skips over "\ ", "\~" and "\$" (not for Win32 though).
   * If anything fails no expansion is done and dst equals src.
   */
      void
***************
*** 3517,3531 ****
      char_u	*dst;		/* where to put the result */
      int		dstlen;		/* maximum length of the result */
  {
!     expand_env_esc(src, dst, dstlen, FALSE, NULL);
  }
  
      void
! expand_env_esc(srcp, dst, dstlen, esc, startstr)
      char_u	*srcp;		/* input string e.g. "$HOME/vim.hlp" */
      char_u	*dst;		/* where to put the result */
      int		dstlen;		/* maximum length of the result */
      int		esc;		/* escape spaces in expanded variables */
      char_u	*startstr;	/* start again after this (can be NULL) */
  {
      char_u	*src;
--- 3546,3561 ----
      char_u	*dst;		/* where to put the result */
      int		dstlen;		/* maximum length of the result */
  {
!     expand_env_esc(src, dst, dstlen, FALSE, FALSE, NULL);
  }
  
      void
! expand_env_esc(srcp, dst, dstlen, esc, one, startstr)
      char_u	*srcp;		/* input string e.g. "$HOME/vim.hlp" */
      char_u	*dst;		/* where to put the result */
      int		dstlen;		/* maximum length of the result */
      int		esc;		/* escape spaces in expanded variables */
+     int		one;		/* "srcp" is one file name */
      char_u	*startstr;	/* start again after this (can be NULL) */
  {
      char_u	*src;
***************
*** 3766,3771 ****
--- 3796,3803 ----
  	{
  	    /*
  	     * Recognize the start of a new name, for '~'.
+ 	     * Don't do this when "one" is TRUE, to avoid expanding "~" in
+ 	     * ":edit foo ~ foo".
  	     */
  	    at_start = FALSE;
  	    if (src[0] == '\\' && src[1] != NUL)
***************
*** 3773,3779 ****
  		*dst++ = *src++;
  		--dstlen;
  	    }
! 	    else if (src[0] == ' ' || src[0] == ',')
  		at_start = TRUE;
  	    *dst++ = *src++;
  	    --dstlen;
--- 3805,3811 ----
  		*dst++ = *src++;
  		--dstlen;
  	    }
! 	    else if ((src[0] == ' ' || src[0] == ',') && !one)
  		at_start = TRUE;
  	    *dst++ = *src++;
  	    --dstlen;
***************
*** 4070,4092 ****
  }
  
  /*
-  * Call expand_env() and store the result in an allocated string.
-  * This is not very memory efficient, this expects the result to be freed
-  * again soon.
-  */
-     char_u *
- expand_env_save(src)
-     char_u	*src;
- {
-     char_u	*p;
- 
-     p = alloc(MAXPATHL);
-     if (p != NULL)
- 	expand_env(src, p, MAXPATHL);
-     return p;
- }
- 
- /*
   * Our portable version of setenv.
   */
      void
--- 4102,4107 ----
***************
*** 9139,9145 ****
  	     */
  	    if (vim_strpbrk(p, (char_u *)"$~") != NULL)
  	    {
! 		p = expand_env_save(p);
  		if (p == NULL)
  		    p = pat[i];
  #ifdef UNIX
--- 9154,9160 ----
  	     */
  	    if (vim_strpbrk(p, (char_u *)"$~") != NULL)
  	    {
! 		p = expand_env_save_opt(p, TRUE);
  		if (p == NULL)
  		    p = pat[i];
  #ifdef UNIX
*** ../vim-7.1.122/src/proto/misc1.pro	Sat May  5 20:15:33 2007
--- src/proto/misc1.pro	Tue Sep 25 17:22:36 2007
***************
*** 48,57 ****
  void vim_beep __ARGS((void));
  void init_homedir __ARGS((void));
  void free_homedir __ARGS((void));
  void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
! void expand_env_esc __ARGS((char_u *srcp, char_u *dst, int dstlen, int esc, char_u *startstr));
  char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
- char_u *expand_env_save __ARGS((char_u *src));
  void vim_setenv __ARGS((char_u *name, char_u *val));
  char_u *get_env_name __ARGS((expand_T *xp, int idx));
  void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
--- 48,58 ----
  void vim_beep __ARGS((void));
  void init_homedir __ARGS((void));
  void free_homedir __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));
! void expand_env_esc __ARGS((char_u *srcp, char_u *dst, int dstlen, int esc, int one, char_u *startstr));
  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));
  void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
*** ../vim-7.1.122/src/option.c	Tue Sep 25 14:50:19 2007
--- src/option.c	Tue Sep 25 17:20:05 2007
***************
*** 4996,5002 ****
       * For 'spellsuggest' expand after "file:".
       */
      expand_env_esc(val, NameBuff, MAXPATHL,
! 	    (char_u **)options[opt_idx].var == &p_tags,
  #ifdef FEAT_SPELL
  	    (char_u **)options[opt_idx].var == &p_sps ? (char_u *)"file:" :
  #endif
--- 4996,5002 ----
       * For 'spellsuggest' expand after "file:".
       */
      expand_env_esc(val, NameBuff, MAXPATHL,
! 	    (char_u **)options[opt_idx].var == &p_tags, FALSE,
  #ifdef FEAT_SPELL
  	    (char_u **)options[opt_idx].var == &p_sps ? (char_u *)"file:" :
  #endif
*** ../vim-7.1.122/src/version.c	Tue Sep 25 22:13:14 2007
--- src/version.c	Wed Sep 26 22:30:59 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     123,
  /**/

-- 
So when I saw the post to comp.editors, I rushed over to the FTP site to
grab it.  So I yank apart the tarball, light x candles, where x= the
vim version multiplied by the md5sum of the source divided by the MAC of
my NIC (8A3FA78155A8A1D346C3C4A), put on black robes, dim the lights,
wave a dead chicken over the hard drive, and summon the power of GNU GCC
with the magic words "make config ; make!".
		[Jason Spence, compiling Vim 5.0]

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.124 ---
To: vim-dev at vim.org
Subject: patch 7.1.124
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.124 (extra)
Problem:    Mac: When dropping a file on Vim.app that is already in the buffer
	    list (from .viminfo) results in editing an empty, unnamed buffer.
	    (Axel Kielhorn)  Also: warning for unused variable.
Solution:   Move to the buffer of the first agument.  Delete unused variable.
Files:	    src/gui_mac.c


*** ../vim-7.1.123/src/gui_mac.c	Thu Aug 30 12:50:00 2007
--- src/gui_mac.c	Sat Sep 29 13:12:26 2007
***************
*** 1046,1051 ****
--- 1046,1052 ----
      {
  	int i;
  	char_u *p;
+ 	int fnum = -1;
  
  	/* these are the initial files dropped on the Vim icon */
  	for (i = 0 ; i < numFiles; i++)
***************
*** 1055,1060 ****
--- 1056,1073 ----
  		mch_exit(2);
  	    else
  		alist_add(&global_alist, p, 2);
+ 	    if (fnum == -1)
+ 		fnum = GARGLIST[GARGCOUNT - 1].ae_fnum;
+ 	}
+ 
+ 	/* If the file name was already in the buffer list we need to switch
+ 	 * to it. */
+ 	if (curbuf->b_fnum != fnum)
+ 	{
+ 	    char_u cmd[30];
+ 
+ 	    vim_snprintf((char *)cmd, 30, "silent %dbuffer", fnum);
+ 	    do_cmdline_cmd(cmd);
  	}
  
  	/* Change directory to the location of the first file. */
***************
*** 2920,2926 ****
      /* TODO: Move most of this stuff toward gui_mch_init */
      Rect	windRect;
      MenuHandle	pomme;
-     long	gestalt_rc;
      EventTypeSpec   eventTypeSpec;
      EventHandlerRef mouseWheelHandlerRef;
  #ifdef USE_CARBONKEYHANDLER
--- 2933,2938 ----
*** ../vim-7.1.123/src/version.c	Wed Sep 26 22:35:06 2007
--- src/version.c	Sat Sep 29 13:13:16 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     124,
  /**/

-- 
ERIC IDLE PLAYED: THE DEAD COLLECTOR, MR BINT (A VILLAGE NE'ER-DO -WELL VERY
                  KEEN ON BURNING WITCHES), SIR ROBIN, THE GUARD WHO DOESN'T
                  HICOUGH BUT TRIES TO GET THINGS STRAIGHT, CONCORDE (SIR
                  LAUNCELOT'S TRUSTY STEED), ROGER THE SHRUBBER (A SHRUBBER),
                  BROTHER MAYNARD
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.125 ---
To: vim-dev at vim.org
Subject: patch 7.1.125
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.125
Problem:    The TermResponse autocommand event is not always triggered. (Aron
	    Griffis)
Solution:   When unblocking autocommands check if v:termresponse changed and
	    trigger the event then.
Files:	    src/buffer.c, src/diff.c, src/ex_getln.c, src/fileio.c,
	    src/globals.h, src/misc2.c, src/proto/fileio.pro, src/window.c


*** ../vim-7.1.124/src/buffer.c	Sun Aug 12 15:50:26 2007
--- src/buffer.c	Wed Sep 26 20:05:38 2007
***************
*** 5515,5525 ****
  
  #ifdef FEAT_AUTOCMD
      if (!aucmd)		    /* Don't trigger BufDelete autocommands here. */
! 	++autocmd_block;
  #endif
      close_buffer(NULL, buf, DOBUF_WIPE);
  #ifdef FEAT_AUTOCMD
      if (!aucmd)
! 	--autocmd_block;
  #endif
  }
--- 5512,5522 ----
  
  #ifdef FEAT_AUTOCMD
      if (!aucmd)		    /* Don't trigger BufDelete autocommands here. */
! 	block_autocmds();
  #endif
      close_buffer(NULL, buf, DOBUF_WIPE);
  #ifdef FEAT_AUTOCMD
      if (!aucmd)
! 	unblock_autocmds();
  #endif
  }
*** ../vim-7.1.124/src/diff.c	Tue Feb 20 04:43:13 2007
--- src/diff.c	Tue Sep 25 22:01:40 2007
***************
*** 840,850 ****
  		    tmp_orig, tmp_new);
  	    append_redir(cmd, p_srr, tmp_diff);
  #ifdef FEAT_AUTOCMD
! 	    ++autocmd_block;	/* Avoid ShellCmdPost stuff */
  #endif
  	    (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
  #ifdef FEAT_AUTOCMD
! 	    --autocmd_block;
  #endif
  	    vim_free(cmd);
  	}
--- 840,850 ----
  		    tmp_orig, tmp_new);
  	    append_redir(cmd, p_srr, tmp_diff);
  #ifdef FEAT_AUTOCMD
! 	    block_autocmds();	/* Avoid ShellCmdPost stuff */
  #endif
  	    (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
  #ifdef FEAT_AUTOCMD
! 	    unblock_autocmds();
  #endif
  	    vim_free(cmd);
  	}
***************
*** 949,959 ****
  # endif
  		eap->arg);
  #ifdef FEAT_AUTOCMD
! 	++autocmd_block;	/* Avoid ShellCmdPost stuff */
  #endif
  	(void)call_shell(buf, SHELL_FILTER | SHELL_COOKED);
  #ifdef FEAT_AUTOCMD
! 	--autocmd_block;
  #endif
      }
  
--- 949,959 ----
  # endif
  		eap->arg);
  #ifdef FEAT_AUTOCMD
! 	block_autocmds();	/* Avoid ShellCmdPost stuff */
  #endif
  	(void)call_shell(buf, SHELL_FILTER | SHELL_COOKED);
  #ifdef FEAT_AUTOCMD
! 	unblock_autocmds();
  #endif
      }
  
*** ../vim-7.1.124/src/ex_getln.c	Thu Sep 13 18:25:08 2007
--- src/ex_getln.c	Tue Sep 25 22:03:05 2007
***************
*** 5925,5931 ****
  
  # ifdef FEAT_AUTOCMD
      /* Don't execute autocommands while creating the window. */
!     ++autocmd_block;
  # endif
      /* don't use a new tab page */
      cmdmod.tab = 0;
--- 5925,5931 ----
  
  # ifdef FEAT_AUTOCMD
      /* Don't execute autocommands while creating the window. */
!     block_autocmds();
  # endif
      /* don't use a new tab page */
      cmdmod.tab = 0;
***************
*** 5934,5939 ****
--- 5934,5942 ----
      if (win_split((int)p_cwh, WSP_BOT) == FAIL)
      {
  	beep_flush();
+ # ifdef FEAT_AUTOCMD
+ 	unblock_autocmds();
+ # endif
  	return K_IGNORE;
      }
      cmdwin_type = ccline.cmdfirstc;
***************
*** 5956,5962 ****
  
  # ifdef FEAT_AUTOCMD
      /* Do execute autocommands for setting the filetype (load syntax). */
!     --autocmd_block;
  # endif
  
      /* Showing the prompt may have set need_wait_return, reset it. */
--- 5959,5965 ----
  
  # ifdef FEAT_AUTOCMD
      /* Do execute autocommands for setting the filetype (load syntax). */
!     unblock_autocmds();
  # endif
  
      /* Showing the prompt may have set need_wait_return, reset it. */
***************
*** 6110,6116 ****
  
  # ifdef FEAT_AUTOCMD
  	/* Don't execute autocommands while deleting the window. */
! 	++autocmd_block;
  # endif
  	wp = curwin;
  	bp = curbuf;
--- 6113,6119 ----
  
  # ifdef FEAT_AUTOCMD
  	/* Don't execute autocommands while deleting the window. */
! 	block_autocmds();
  # endif
  	wp = curwin;
  	bp = curbuf;
***************
*** 6122,6128 ****
  	win_size_restore(&winsizes);
  
  # ifdef FEAT_AUTOCMD
! 	--autocmd_block;
  # endif
      }
  
--- 6125,6131 ----
  	win_size_restore(&winsizes);
  
  # ifdef FEAT_AUTOCMD
! 	unblock_autocmds();
  # endif
      }
  
*** ../vim-7.1.124/src/fileio.c	Sun Aug 12 15:50:26 2007
--- src/fileio.c	Wed Sep 26 20:02:54 2007
***************
*** 7165,7170 ****
--- 7187,7193 ----
  
  static event_T	last_event;
  static int	last_group;
+ static int	autocmd_blocked = 0;	/* block all autocmds */
  
  /*
   * Show the autocommands for one AutoPat.
***************
*** 8454,8460 ****
       * Quickly return if there are no autocommands for this event or
       * autocommands are blocked.
       */
!     if (first_autopat[(int)event] == NULL || autocmd_block > 0)
  	goto BYPASS_AU;
  
      /*
--- 8477,8483 ----
       * Quickly return if there are no autocommands for this event or
       * autocommands are blocked.
       */
!     if (first_autopat[(int)event] == NULL || autocmd_blocked > 0)
  	goto BYPASS_AU;
  
      /*
***************
*** 8766,8771 ****
--- 8789,8828 ----
  	aubuflocal_remove(buf);
  
      return retval;
+ }
+ 
+ # ifdef FEAT_EVAL
+ static char_u	*old_termresponse = NULL;
+ # endif
+ 
+ /*
+  * Block triggering autocommands until unblock_autocmd() is called.
+  * Can be used recursively, so long as it's symmetric.
+  */
+     void
+ block_autocmds()
+ {
+ # ifdef FEAT_EVAL
+     /* Remember the value of v:termresponse. */
+     if (autocmd_blocked == 0)
+ 	old_termresponse = get_vim_var_str(VV_TERMRESPONSE);
+ # endif
+     ++autocmd_blocked;
+ }
+ 
+     void
+ unblock_autocmds()
+ {
+     --autocmd_blocked;
+ 
+ # ifdef FEAT_EVAL
+     /* When v:termresponse was set while autocommands were blocked, trigger
+      * the autocommands now.  Esp. useful when executing a shell command
+      * during startup (vimdiff). */
+     if (autocmd_blocked == 0
+ 		      && get_vim_var_str(VV_TERMRESPONSE) != old_termresponse)
+ 	apply_autocmds(EVENT_TERMRESPONSE, NULL, NULL, FALSE, curbuf);
+ # endif
  }
  
  /*
*** ../vim-7.1.124/src/globals.h	Tue Sep 25 17:54:41 2007
--- src/globals.h	Tue Sep 25 22:03:39 2007
***************
*** 366,372 ****
  EXTERN int	autocmd_busy INIT(= FALSE);	/* Is apply_autocmds() busy? */
  EXTERN int	autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */
  EXTERN int	autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */
- EXTERN int	autocmd_block INIT(= 0);	/* block all autocmds */
  EXTERN int	modified_was_set;		/* did ":set modified" */
  EXTERN int	did_filetype INIT(= FALSE);	/* FileType event found */
  EXTERN int	keep_filetype INIT(= FALSE);	/* value for did_filetype when
--- 366,371 ----
*** ../vim-7.1.124/src/misc2.c	Thu May 10 19:58:47 2007
--- src/misc2.c	Tue Sep 25 22:04:39 2007
***************
*** 972,978 ****
  	return;
      entered = TRUE;
  
!     ++autocmd_block;	    /* don't want to trigger autocommands here */
  
  #ifdef FEAT_WINDOWS
      /* close all tabs and windows */
--- 973,979 ----
  	return;
      entered = TRUE;
  
!     block_autocmds();	    /* don't want to trigger autocommands here */
  
  #ifdef FEAT_WINDOWS
      /* close all tabs and windows */
*** ../vim-7.1.124/src/proto/fileio.pro	Thu Jun 28 21:57:08 2007
--- src/proto/fileio.pro	Wed Sep 26 20:05:02 2007
***************
*** 40,45 ****
--- 41,48 ----
  int trigger_cursorhold __ARGS((void));
  int has_cursormoved __ARGS((void));
  int has_cursormovedI __ARGS((void));
+ void block_autocmds __ARGS((void));
+ void unblock_autocmds __ARGS((void));
  int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
  char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
  char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
*** ../vim-7.1.124/src/window.c	Tue Sep 25 14:50:19 2007
--- src/window.c	Tue Sep 25 22:05:45 2007
***************
*** 1291,1297 ****
       * Don't execute autocommands while creating the windows.  Must do that
       * when putting the buffers in the windows.
       */
!     ++autocmd_block;
  #endif
  
      /* todo is number of windows left to create */
--- 1291,1297 ----
       * Don't execute autocommands while creating the windows.  Must do that
       * when putting the buffers in the windows.
       */
!     block_autocmds();
  #endif
  
      /* todo is number of windows left to create */
***************
*** 1313,1319 ****
  	}
  
  #ifdef FEAT_AUTOCMD
!     --autocmd_block;
  #endif
  
      /* return actual number of windows */
--- 1313,1319 ----
  	}
  
  #ifdef FEAT_AUTOCMD
!     unblock_autocmds();
  #endif
  
      /* return actual number of windows */
***************
*** 3415,3421 ****
       * Don't execute autocommands while creating the tab pages.  Must do that
       * when putting the buffers in the windows.
       */
!     ++autocmd_block;
  #endif
  
      for (todo = count - 1; todo > 0; --todo)
--- 3415,3421 ----
       * Don't execute autocommands while creating the tab pages.  Must do that
       * when putting the buffers in the windows.
       */
!     block_autocmds();
  #endif
  
      for (todo = count - 1; todo > 0; --todo)
***************
*** 3423,3429 ****
  	    break;
  
  #ifdef FEAT_AUTOCMD
!     --autocmd_block;
  #endif
  
      /* return actual number of tab pages */
--- 3423,3429 ----
  	    break;
  
  #ifdef FEAT_AUTOCMD
!     unblock_autocmds();
  #endif
  
      /* return actual number of tab pages */
***************
*** 4162,4168 ****
  	/* Don't execute autocommands while the window is not properly
  	 * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
  	 * event. */
! 	++autocmd_block;
  #endif
  	/*
  	 * link the window in the window list
--- 4162,4168 ----
  	/* Don't execute autocommands while the window is not properly
  	 * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
  	 * event. */
! 	block_autocmds();
  #endif
  	/*
  	 * link the window in the window list
***************
*** 4207,4213 ****
  	foldInitWin(newwin);
  #endif
  #ifdef FEAT_AUTOCMD
! 	--autocmd_block;
  #endif
  #ifdef FEAT_SEARCH_EXTRA
  	newwin->w_match_head = NULL;
--- 4207,4213 ----
  	foldInitWin(newwin);
  #endif
  #ifdef FEAT_AUTOCMD
! 	unblock_autocmds();
  #endif
  #ifdef FEAT_SEARCH_EXTRA
  	newwin->w_match_head = NULL;
***************
*** 4232,4238 ****
  #ifdef FEAT_AUTOCMD
      /* Don't execute autocommands while the window is halfway being deleted.
       * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */
!     ++autocmd_block;
  #endif
  
  #ifdef FEAT_MZSCHEME
--- 4232,4238 ----
  #ifdef FEAT_AUTOCMD
      /* Don't execute autocommands while the window is halfway being deleted.
       * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */
!     block_autocmds();
  #endif
  
  #ifdef FEAT_MZSCHEME
***************
*** 4295,4301 ****
      vim_free(wp);
  
  #ifdef FEAT_AUTOCMD
!     --autocmd_block;
  #endif
  }
  
--- 4295,4301 ----
      vim_free(wp);
  
  #ifdef FEAT_AUTOCMD
!     unblock_autocmds();
  #endif
  }
  
*** ../vim-7.1.124/src/version.c	Sat Sep 29 13:15:29 2007
--- src/version.c	Sat Sep 29 14:08:31 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     125,
  /**/

-- 
MICHAEL PALIN PLAYED: 1ST SOLDIER WITH A KEEN INTEREST IN BIRDS, DENNIS, MR
                      DUCK (A VILLAGE CARPENTER WHO IS ALMOST KEENER THAN
                      ANYONE ELSE TO BURN WITCHES), THREE-HEADED KNIGHT, SIR
                      GALAHAD, KING OF SWAMP CASTLE, BROTHER MAYNARD'S ROOMATE
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.126 ---
To: vim-dev at vim.org
Subject: patch 7.1.126
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.126
Problem:    ":vimgrep */*" fails when a BufRead autocommand changes directory.
	    (Bernhard Kuhn)
Solution:   Change back to the original directory after loading a file.
	    Also: use shorten_fname1() to avoid duplicating code.
Files:	    src/buffer.c, src/ex_docmd.c, src/fileio.c, src/gui_gtk.c,
	    src/gui_w48.c, src/proto/ex_docmd.pro, src/proto/fileio.pro,
	    src/quickfix.c


*** ../vim-7.1.125/src/buffer.c	Sat Sep 29 14:15:00 2007
--- src/buffer.c	Wed Sep 26 20:05:38 2007
***************
*** 4261,4272 ****
  do_arg_all(count, forceit, keep_tabs)
      int	count;
      int	forceit;		/* hide buffers in current windows */
!     int keep_tabs;		/* keep curren tabs, for ":tab drop file" */
  {
      int		i;
      win_T	*wp, *wpnext;
      char_u	*opened;	/* array of flags for which args are open */
!     int		opened_len;	/* lenght of opened[] */
      int		use_firstwin = FALSE;	/* use first window for arglist */
      int		split_ret = OK;
      int		p_ea_save;
--- 4261,4272 ----
  do_arg_all(count, forceit, keep_tabs)
      int	count;
      int	forceit;		/* hide buffers in current windows */
!     int keep_tabs;		/* keep current tabs, for ":tab drop file" */
  {
      int		i;
      win_T	*wp, *wpnext;
      char_u	*opened;	/* array of flags for which args are open */
!     int		opened_len;	/* length of opened[] */
      int		use_firstwin = FALSE;	/* use first window for arglist */
      int		split_ret = OK;
      int		p_ea_save;
***************
*** 4946,4955 ****
  	/* Expand "~/" in the file name at "line + 1" to a full path.
  	 * Then try shortening it by comparing with the current directory */
  	expand_env(xline, NameBuff, MAXPATHL);
! 	mch_dirname(IObuff, IOSIZE);
! 	sfname = shorten_fname(NameBuff, IObuff);
! 	if (sfname == NULL)
! 	    sfname = NameBuff;
  
  	buf = buflist_new(NameBuff, sfname, (linenr_T)0, BLN_LISTED);
  	if (buf != NULL)	/* just in case... */
--- 4946,4952 ----
  	/* Expand "~/" in the file name at "line + 1" to a full path.
  	 * Then try shortening it by comparing with the current directory */
  	expand_env(xline, NameBuff, MAXPATHL);
! 	sfname = shorten_fname1(NameBuff);
  
  	buf = buflist_new(NameBuff, sfname, (linenr_T)0, BLN_LISTED);
  	if (buf != NULL)	/* just in case... */
*** ../vim-7.1.125/src/ex_docmd.c	Wed Sep 26 22:35:06 2007
--- src/ex_docmd.c	Wed Sep 26 20:29:36 2007
***************
*** 276,282 ****
  static void	ex_swapname __ARGS((exarg_T *eap));
  static void	ex_syncbind __ARGS((exarg_T *eap));
  static void	ex_read __ARGS((exarg_T *eap));
- static void	ex_cd __ARGS((exarg_T *eap));
  static void	ex_pwd __ARGS((exarg_T *eap));
  static void	ex_equal __ARGS((exarg_T *eap));
  static void	ex_sleep __ARGS((exarg_T *eap));
--- 276,281 ----
***************
*** 7778,7784 ****
  /*
   * ":cd", ":lcd", ":chdir" and ":lchdir".
   */
!     static void
  ex_cd(eap)
      exarg_T	*eap;
  {
--- 7777,7783 ----
  /*
   * ":cd", ":lcd", ":chdir" and ":lchdir".
   */
!     void
  ex_cd(eap)
      exarg_T	*eap;
  {
*** ../vim-7.1.125/src/fileio.c	Sat Sep 29 14:15:00 2007
--- src/fileio.c	Wed Sep 26 20:02:54 2007
***************
*** 114,120 ****
  {
      int		bw_fd;		/* file descriptor */
      char_u	*bw_buf;	/* buffer with data to be written */
!     int		bw_len;	/* lenght of data */
  #ifdef HAS_BW_FLAGS
      int		bw_flags;	/* FIO_ flags */
  #endif
--- 114,120 ----
  {
      int		bw_fd;		/* file descriptor */
      char_u	*bw_buf;	/* buffer with data to be written */
!     int		bw_len;		/* length of data */
  #ifdef HAS_BW_FLAGS
      int		bw_flags;	/* FIO_ flags */
  #endif
***************
*** 5552,5557 ****
--- 5553,5579 ----
      return (int)(p - buf);
  }
  #endif
+ 
+ /*
+  * Try to find a shortname by comparing the fullname with the current
+  * directory.
+  * Returns "full_path" or pointer into "full_path" if shortened.
+  */
+     char_u *
+ shorten_fname1(full_path)
+     char_u	*full_path;
+ {
+     char_u	dirname[MAXPATHL];
+     char_u	*p = full_path;
+ 
+     if (mch_dirname(dirname, MAXPATHL) == OK)
+     {
+ 	p = shorten_fname(full_path, dirname);
+ 	if (p == NULL || *p == NUL)
+ 	    p = full_path;
+     }
+     return p;
+ }
  
  /*
   * Try to find a shortname by comparing the fullname with the current
*** ../vim-7.1.125/src/gui_gtk.c	Tue Aug 14 14:59:41 2007
--- src/gui_gtk.c	Wed Sep 26 20:07:58 2007
***************
*** 1272,1278 ****
      GtkWidget		*fc;
  #endif
      char_u		dirbuf[MAXPATHL];
-     char_u		*p;
  
  # ifdef HAVE_GTK2
      title = CONVERT_TO_UTF8(title);
--- 1272,1277 ----
***************
*** 1363,1373 ****
  	return NULL;
  
      /* shorten the file name if possible */
!     mch_dirname(dirbuf, MAXPATHL);
!     p = shorten_fname(gui.browse_fname, dirbuf);
!     if (p == NULL)
! 	p = gui.browse_fname;
!     return vim_strsave(p);
  }
  
  #if defined(HAVE_GTK2) || defined(PROTO)
--- 1362,1368 ----
  	return NULL;
  
      /* shorten the file name if possible */
!     return vim_strsave(shorten_fname1(gui.browse_fname));
  }
  
  #if defined(HAVE_GTK2) || defined(PROTO)
***************
*** 1427,1437 ****
  	return NULL;
  
      /* shorten the file name if possible */
!     mch_dirname(dirbuf, MAXPATHL);
!     p = shorten_fname(dirname, dirbuf);
!     if (p == NULL || *p == NUL)
! 	p = dirname;
!     p = vim_strsave(p);
      g_free(dirname);
      return p;
  
--- 1422,1428 ----
  	return NULL;
  
      /* shorten the file name if possible */
!     p = vim_strsave(shorten_fname1(dirname));
      g_free(dirname);
      return p;
  
*** ../vim-7.1.125/src/gui_w48.c	Thu May 10 19:17:07 2007
--- src/gui_w48.c	Wed Sep 26 20:09:33 2007
***************
*** 3301,3311 ****
      SetFocus(s_hwnd);
  
      /* Shorten the file name if possible */
!     mch_dirname(IObuff, IOSIZE);
!     p = shorten_fname((char_u *)fileBuf, IObuff);
!     if (p == NULL)
! 	p = (char_u *)fileBuf;
!     return vim_strsave(p);
  }
  # endif /* FEAT_MBYTE */
  
--- 3301,3307 ----
      SetFocus(s_hwnd);
  
      /* Shorten the file name if possible */
!     return vim_strsave(shorten_fname1((char_u *)fileBuf));
  }
  # endif /* FEAT_MBYTE */
  
***************
*** 3450,3460 ****
      SetFocus(s_hwnd);
  
      /* Shorten the file name if possible */
!     mch_dirname(IObuff, IOSIZE);
!     p = shorten_fname((char_u *)fileBuf, IObuff);
!     if (p == NULL)
! 	p = (char_u *)fileBuf;
!     return vim_strsave(p);
  }
  #endif /* FEAT_BROWSE */
  
--- 3446,3452 ----
      SetFocus(s_hwnd);
  
      /* Shorten the file name if possible */
!     return vim_strsave(shorten_fname1((char_u *)fileBuf));
  }
  #endif /* FEAT_BROWSE */
  
*** ../vim-7.1.125/src/proto/ex_docmd.pro	Sun May  6 14:46:22 2007
--- src/proto/ex_docmd.pro	Wed Sep 26 20:30:10 2007
***************
*** 39,44 ****
--- 39,45 ----
  void tabpage_new __ARGS((void));
  void do_exedit __ARGS((exarg_T *eap, win_T *old_curwin));
  void free_cd_dir __ARGS((void));
+ void ex_cd __ARGS((exarg_T *eap));
  void do_sleep __ARGS((long msec));
  int vim_mkdir_emsg __ARGS((char_u *name, int prot));
  FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode));
*** ../vim-7.1.125/src/proto/fileio.pro	Sat Sep 29 14:15:00 2007
--- src/proto/fileio.pro	Wed Sep 26 20:05:02 2007
***************
*** 6,11 ****
--- 6,12 ----
  int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
  void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
  void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
+ char_u *shorten_fname1 __ARGS((char_u *full_path));
  char_u *shorten_fname __ARGS((char_u *full_path, char_u *dir_name));
  void shorten_fnames __ARGS((int force));
  void shorten_filenames __ARGS((char_u **fnames, int count));
*** ../vim-7.1.125/src/quickfix.c	Sun Sep 16 13:26:56 2007
--- src/quickfix.c	Sun Sep 30 13:58:38 2007
***************
*** 2972,2977 ****
--- 2972,2978 ----
      regmmatch_T	regmatch;
      int		fcount;
      char_u	**fnames;
+     char_u	*fname;
      char_u	*s;
      char_u	*p;
      int		fi;
***************
*** 2995,3000 ****
--- 2996,3004 ----
      int		flags = 0;
      colnr_T	col;
      long	tomatch;
+     char_u	dirname_start[MAXPATHL];
+     char_u	dirname_now[MAXPATHL];
+     char_u	*target_dir = NULL;
  
      switch (eap->cmdidx)
      {
***************
*** 3069,3085 ****
  	goto theend;
      }
  
      seconds = (time_t)0;
      for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
      {
  	if (time(NULL) > seconds)
  	{
! 	    /* Display the file name every second or so. */
  	    seconds = time(NULL);
  	    msg_start();
! 	    p = msg_strtrunc(fnames[fi], TRUE);
  	    if (p == NULL)
! 		msg_outtrans(fnames[fi]);
  	    else
  	    {
  		msg_outtrans(p);
--- 3073,3095 ----
  	goto theend;
      }
  
+     /* Remember the current directory, because a BufRead autocommand that does
+      * ":lcd %:p:h" changes the meaning of short path names. */
+     mch_dirname(dirname_start, MAXPATHL);
+ 
      seconds = (time_t)0;
      for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
      {
+ 	fname = shorten_fname1(fnames[fi]);
  	if (time(NULL) > seconds)
  	{
! 	    /* Display the file name every second or so, show the user we are
! 	     * working on it. */
  	    seconds = time(NULL);
  	    msg_start();
! 	    p = msg_strtrunc(fname, TRUE);
  	    if (p == NULL)
! 		msg_outtrans(fname);
  	    else
  	    {
  		msg_outtrans(p);
***************
*** 3111,3117 ****
  
  	    /* Load file into a buffer, so that 'fileencoding' is detected,
  	     * autocommands applied, etc. */
! 	    buf = load_dummy_buffer(fnames[fi]);
  
  	    p_mls = save_mls;
  #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
--- 3121,3139 ----
  
  	    /* Load file into a buffer, so that 'fileencoding' is detected,
  	     * autocommands applied, etc. */
! 	    buf = load_dummy_buffer(fname);
! 
! 	    /* When autocommands changed directory: go back.  We assume it was
! 	     * ":lcd %:p:h". */
! 	    mch_dirname(dirname_now, MAXPATHL);
! 	    if (STRCMP(dirname_start, dirname_now) != 0)
! 	    {
! 		exarg_T ea;
! 
! 		ea.arg = dirname_start;
! 		ea.cmdidx = CMD_lcd;
! 		ex_cd(&ea);
! 	    }
  
  	    p_mls = save_mls;
  #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
***************
*** 3125,3131 ****
  	if (buf == NULL)
  	{
  	    if (!got_int)
! 		smsg((char_u *)_("Cannot open file \"%s\""), fnames[fi]);
  	}
  	else
  	{
--- 3147,3153 ----
  	if (buf == NULL)
  	{
  	    if (!got_int)
! 		smsg((char_u *)_("Cannot open file \"%s\""), fname);
  	}
  	else
  	{
***************
*** 3139,3147 ****
  		while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
  								     col) > 0)
  		{
  		    if (qf_add_entry(qi, &prevp,
  				NULL,       /* dir */
! 				fnames[fi],
  				0,
  				ml_get_buf(buf,
  				     regmatch.startpos[0].lnum + lnum, FALSE),
--- 3161,3170 ----
  		while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
  								     col) > 0)
  		{
+ 		    ;
  		    if (qf_add_entry(qi, &prevp,
  				NULL,       /* dir */
! 				fname,
  				0,
  				ml_get_buf(buf,
  				     regmatch.startpos[0].lnum + lnum, FALSE),
***************
*** 3209,3214 ****
--- 3232,3244 ----
  
  		if (buf != NULL)
  		{
+ 		    /* If the buffer is still loaded we need to use the
+ 		     * directory we jumped to below. */
+ 		    if (buf == first_match_buf
+ 			    && target_dir == NULL
+ 			    && STRCMP(dirname_start, dirname_now) != 0)
+ 			target_dir = vim_strsave(dirname_now);
+ 
  		    /* The buffer is still loaded, the Filetype autocommands
  		     * need to be done now, in that buffer.  And the modelines
  		     * need to be done (again).  But not the window-local
***************
*** 3252,3257 ****
--- 3282,3297 ----
  		/* If we jumped to another buffer redrawing will already be
  		 * taken care of. */
  		redraw_for_dummy = FALSE;
+ 
+ 	    /* Jump to the directory used after loading the buffer. */
+ 	    if (curbuf == first_match_buf && target_dir != NULL)
+ 	    {
+ 		exarg_T ea;
+ 
+ 		ea.arg = target_dir;
+ 		ea.cmdidx = CMD_lcd;
+ 		ex_cd(&ea);
+ 	    }
  	}
      }
      else
***************
*** 3269,3274 ****
--- 3309,3315 ----
      }
  
  theend:
+     vim_free(target_dir);
      vim_free(regmatch.regprog);
  }
  
*** ../vim-7.1.125/src/version.c	Sat Sep 29 14:15:00 2007
--- src/version.c	Sun Sep 30 13:41:30 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     126,
  /**/

-- 
The MS-Windows registry is no more hostile than any other bunch of state
information... that is held in a binary format... a format that nobody
understands... and is replicated and cached in a complex and largely
undocumented way... and contains large amounts of duplicate and obfuscated
information...  (Ben Peterson)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.127 ---
To: vim-dev at vim.org
Subject: About patch 7.1.127
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.127
Problem:    Memory leak when doing cmdline completion. (Dominique Pelle)
Solution:   Free "orig" argument of ExpandOne() when it's not used.
Files:	    src/ex_getln.c


*** ../vim-7.1.126/src/ex_getln.c	Sat Sep 29 14:15:00 2007
--- src/ex_getln.c	Sun Sep 30 17:55:47 2007
***************
*** 3316,3321 ****
--- 3316,3325 ----
   * Return a pointer to alloced memory containing the new string.
   * Return NULL for failure.
   *
+  * "orig" is the originally expanded string, copied to allocated memory.  It
+  * should either be kept in orig_save or freed.  When "mode" is WILD_NEXT or
+  * WILD_PREV "orig" should be NULL.
+  *
   * Results are cached in xp->xp_files and xp->xp_numfiles, except when "mode"
   * is WILD_EXPAND_FREE or WILD_ALL.
   *
***************
*** 3400,3406 ****
  	    return NULL;
      }
  
! /* free old names */
      if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
      {
  	FreeWild(xp->xp_numfiles, xp->xp_files);
--- 3404,3410 ----
  	    return NULL;
      }
  
!     /* free old names */
      if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
      {
  	FreeWild(xp->xp_numfiles, xp->xp_files);
***************
*** 3540,3545 ****
--- 3544,3553 ----
  
      if (mode == WILD_EXPAND_FREE || mode == WILD_ALL)
  	ExpandCleanup(xp);
+ 
+     /* Free "orig" if it wasn't stored in "orig_save". */
+     if (orig != orig_save)
+ 	vim_free(orig);
  
      return ss;
  }
*** ../vim-7.1.126/src/version.c	Sun Sep 30 14:00:41 2007
--- src/version.c	Sun Sep 30 14:20:14 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     127,
  /**/

-- 
A M00se once bit my sister ...
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.128 ---
To: vim-dev at vim.org
Subject: About patch 7.1.128 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.128 (extra)
Problem:    Build problems with new version of Cygwin.
Solution:   Remove -D__IID_DEFINED__, like with MingW. (Guopeng Wen)
Files:	    src/Make_cyg.mak


*** ../vim-7.1.127/src/Make_cyg.mak	Sun Apr 30 20:46:49 2006
--- src/Make_cyg.mak	Sat Sep 29 13:09:34 2007
***************
*** 1,6 ****
  #
  # Makefile for VIM on Win32, using Cygnus gcc
! # Last updated by Dan Sharp.  Last Change: 2006 Apr 30
  #
  # Also read INSTALLpc.txt!
  #
--- 1,6 ----
  #
  # Makefile for VIM on Win32, using Cygnus gcc
! # Last updated by Dan Sharp.  Last Change: 2007 Sep 29
  #
  # Also read INSTALLpc.txt!
  #
***************
*** 503,509 ****
  	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
  
  $(OUTDIR)/if_ole.o:	if_ole.cpp $(INCL)
! 	$(CC) -c $(CFLAGS) -D__IID_DEFINED__ if_ole.cpp -o $(OUTDIR)/if_ole.o
  
  if_perl.c: if_perl.xs typemap
  	$(PERL)/bin/perl `cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
--- 503,509 ----
  	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
  
  $(OUTDIR)/if_ole.o:	if_ole.cpp $(INCL)
! 	$(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o
  
  if_perl.c: if_perl.xs typemap
  	$(PERL)/bin/perl `cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
*** ../vim-7.1.127/src/version.c	Sun Sep 30 22:10:45 2007
--- src/version.c	Sun Sep 30 22:27:51 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     128,
  /**/

-- 
Mynd you, m00se bites Kan be pretty nasti ...
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.129 ---
To: vim-dev at vim.org
Subject: About patch 7.1.129 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.129 (extra)
Problem:    Win32: Can't get the user name when it is longer than 15
	    characters.
Solution:   Use UNLEN instead of MAX_COMPUTERNAME_LENGTH. (Alexei Alexandrov)
Files:	    src/os_win32.c


*** ../vim-7.1.128/src/os_win32.c	Thu May 10 19:22:59 2007
--- src/os_win32.c	Mon Oct  1 20:07:24 2007
***************
*** 2378,2384 ****
      char_u  *s,
      int	    len)
  {
!     char szUserName[MAX_COMPUTERNAME_LENGTH + 1];
      DWORD cch = sizeof szUserName;
  
      if (GetUserName(szUserName, &cch))
--- 2378,2384 ----
      char_u  *s,
      int	    len)
  {
!     char szUserName[256 + 1];	/* UNLEN is 256 */
      DWORD cch = sizeof szUserName;
  
      if (GetUserName(szUserName, &cch))
*** ../vim-7.1.128/src/version.c	Sun Sep 30 22:28:08 2007
--- src/version.c	Mon Oct  1 20:32:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     129,
  /**/

-- 
ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of Camelot.
        King of all Britons, defeator of the Saxons, sovereign of all England!
   [Pause]
SOLDIER: Get away!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.130 ---
To: vim-dev at vim.org
Subject: About patch 7.1.130
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.130
Problem:    Crash with specific order of undo and redo. (A.Politz)
Solution:   Clear and adjust pointers properly.  Add u_check() for debugging.
Files:	    src/undo.c, src/structs.h


*** ../vim-7.1.129/src/undo.c	Thu May 10 20:01:43 2007
--- src/undo.c	Mon Oct  1 22:49:16 2007
***************
*** 76,81 ****
--- 76,87 ----
   * buffer is unloaded.
   */
  
+ /* Uncomment the next line for including the u_check() function.  This warns
+  * for errors in the debug information. */
+ /* #define U_DEBUG 1 */
+ #define UH_MAGIC 0x18dade	/* value for uh_magic when in use */
+ #define UE_MAGIC 0xabc123	/* value for ue_magic when in use */
+ 
  #include "vim.h"
  
  /* See below: use malloc()/free() for memory management. */
***************
*** 113,118 ****
--- 119,213 ----
   */
  static int	undo_undoes = FALSE;
  
+ #ifdef U_DEBUG
+ /*
+  * Check the undo structures for being valid.  Print a warning when something
+  * looks wrong.
+  */
+ static int seen_b_u_curhead;
+ static int seen_b_u_newhead;
+ static int header_count;
+ 
+     static void
+ u_check_tree(u_header_T *uhp,
+ 	u_header_T *exp_uh_next,
+ 	u_header_T *exp_uh_alt_prev)
+ {
+     u_entry_T *uep;
+ 
+     if (uhp == NULL)
+ 	return;
+     ++header_count;
+     if (uhp == curbuf->b_u_curhead && ++seen_b_u_curhead > 1)
+     {
+ 	EMSG("b_u_curhead found twice (looping?)");
+ 	return;
+     }
+     if (uhp == curbuf->b_u_newhead && ++seen_b_u_newhead > 1)
+     {
+ 	EMSG("b_u_newhead found twice (looping?)");
+ 	return;
+     }
+ 
+     if (uhp->uh_magic != UH_MAGIC)
+ 	EMSG("uh_magic wrong (may be using freed memory)");
+     else
+     {
+ 	/* Check pointers back are correct. */
+ 	if (uhp->uh_next != exp_uh_next)
+ 	{
+ 	    EMSG("uh_next wrong");
+ 	    smsg((char_u *)"expected: 0x%x, actual: 0x%x",
+ 						   exp_uh_next, uhp->uh_next);
+ 	}
+ 	if (uhp->uh_alt_prev != exp_uh_alt_prev)
+ 	{
+ 	    EMSG("uh_alt_prev wrong");
+ 	    smsg((char_u *)"expected: 0x%x, actual: 0x%x",
+ 					   exp_uh_alt_prev, uhp->uh_alt_prev);
+ 	}
+ 
+ 	/* Check the undo tree at this header. */
+ 	for (uep = uhp->uh_entry; uep != NULL; uep = uep->ue_next)
+ 	{
+ 	    if (uep->ue_magic != UE_MAGIC)
+ 	    {
+ 		EMSG("ue_magic wrong (may be using freed memory)");
+ 		break;
+ 	    }
+ 	}
+ 
+ 	/* Check the next alt tree. */
+ 	u_check_tree(uhp->uh_alt_next, uhp->uh_next, uhp);
+ 
+ 	/* Check the next header in this branch. */
+ 	u_check_tree(uhp->uh_prev, uhp, NULL);
+     }
+ }
+ 
+     void
+ u_check(int newhead_may_be_NULL)
+ {
+     seen_b_u_newhead = 0;
+     seen_b_u_curhead = 0;
+     header_count = 0;
+ 
+     u_check_tree(curbuf->b_u_oldhead, NULL, NULL);
+ 
+     if (seen_b_u_newhead == 0 && curbuf->b_u_oldhead != NULL
+ 	    && !(newhead_may_be_NULL && curbuf->b_u_newhead == NULL))
+ 	EMSGN("b_u_newhead invalid: 0x%x", curbuf->b_u_newhead);
+     if (curbuf->b_u_curhead != NULL && seen_b_u_curhead == 0)
+ 	EMSGN("b_u_curhead invalid: 0x%x", curbuf->b_u_curhead);
+     if (header_count != curbuf->b_u_numhead)
+     {
+ 	EMSG("b_u_numhead invalid");
+ 	smsg((char_u *)"expected: %ld, actual: %ld",
+ 			       (long)header_count, (long)curbuf->b_u_numhead);
+     }
+ }
+ #endif
+ 
  /*
   * Save the current line for both the "u" and "U" command.
   * Returns OK or FAIL.
***************
*** 243,248 ****
--- 338,346 ----
      if (!undo_allowed())
  	return FAIL;
  
+ #ifdef U_DEBUG
+     u_check(FALSE);
+ #endif
  #ifdef FEAT_NETBEANS_INTG
      /*
       * Netbeans defines areas that cannot be modified.  Bail out here when
***************
*** 294,299 ****
--- 392,400 ----
  	    uhp = (u_header_T *)U_ALLOC_LINE((unsigned)sizeof(u_header_T));
  	    if (uhp == NULL)
  		goto nomem;
+ #ifdef U_DEBUG
+ 	    uhp->uh_magic = UH_MAGIC;
+ #endif
  	}
  	else
  	    uhp = NULL;
***************
*** 316,323 ****
  	{
  	    u_header_T	    *uhfree = curbuf->b_u_oldhead;
  
! 	    /* If there is no branch only free one header. */
! 	    if (uhfree->uh_alt_next == NULL)
  		u_freeheader(curbuf, uhfree, &old_curhead);
  	    else
  	    {
--- 417,427 ----
  	{
  	    u_header_T	    *uhfree = curbuf->b_u_oldhead;
  
! 	    if (uhfree == old_curhead)
! 		/* Can't reconnect the branch, delete all of it. */
! 		u_freebranch(curbuf, uhfree, &old_curhead);
! 	    else if (uhfree->uh_alt_next == NULL)
! 		/* There is no branch, only free one header. */
  		u_freeheader(curbuf, uhfree, &old_curhead);
  	    else
  	    {
***************
*** 326,331 ****
--- 430,438 ----
  		    uhfree = uhfree->uh_alt_next;
  		u_freebranch(curbuf, uhfree, &old_curhead);
  	    }
+ #ifdef U_DEBUG
+ 	    u_check(TRUE);
+ #endif
  	}
  
  	if (uhp == NULL)		/* no undo at all */
***************
*** 478,483 ****
--- 585,593 ----
      uep = (u_entry_T *)U_ALLOC_LINE((unsigned)sizeof(u_entry_T));
      if (uep == NULL)
  	goto nomem;
+ #ifdef U_DEBUG
+     uep->ue_magic = UE_MAGIC;
+ #endif
  
      uep->ue_size = size;
      uep->ue_top = top;
***************
*** 525,530 ****
--- 635,643 ----
      curbuf->b_u_synced = FALSE;
      undo_undoes = FALSE;
  
+ #ifdef U_DEBUG
+     u_check(FALSE);
+ #endif
      return OK;
  
  nomem:
***************
*** 955,960 ****
--- 1068,1076 ----
      int		empty_buffer;		    /* buffer became empty */
      u_header_T	*curhead = curbuf->b_u_curhead;
  
+ #ifdef U_DEBUG
+     u_check(FALSE);
+ #endif
      old_flags = curhead->uh_flags;
      new_flags = (curbuf->b_changed ? UH_CHANGED : 0) +
  	       ((curbuf->b_ml.ml_flags & ML_EMPTY) ? UH_EMPTYBUF : 0);
***************
*** 1186,1191 ****
--- 1302,1310 ----
      /* The timestamp can be the same for multiple changes, just use the one of
       * the undone/redone change. */
      curbuf->b_u_seq_time = curhead->uh_time;
+ #ifdef U_DEBUG
+     u_check(FALSE);
+ #endif
  }
  
  /*
***************
*** 1515,1521 ****
  }
  
  /*
!  * Free one header and its entry list and adjust the pointers.
   */
      static void
  u_freeheader(buf, uhp, uhpp)
--- 1634,1640 ----
  }
  
  /*
!  * Free one header "uhp" and its entry list and adjust the pointers.
   */
      static void
  u_freeheader(buf, uhp, uhpp)
***************
*** 1523,1528 ****
--- 1642,1649 ----
      u_header_T	    *uhp;
      u_header_T	    **uhpp;	/* if not NULL reset when freeing this header */
  {
+     u_header_T	    *uhap;
+ 
      /* When there is an alternate redo list free that branch completely,
       * because we can never go there. */
      if (uhp->uh_alt_next != NULL)
***************
*** 1540,1546 ****
      if (uhp->uh_prev == NULL)
  	buf->b_u_newhead = uhp->uh_next;
      else
! 	uhp->uh_prev->uh_next = uhp->uh_next;
  
      u_freeentries(buf, uhp, uhpp);
  }
--- 1661,1668 ----
      if (uhp->uh_prev == NULL)
  	buf->b_u_newhead = uhp->uh_next;
      else
! 	for (uhap = uhp->uh_prev; uhap != NULL; uhap = uhap->uh_alt_next)
! 	    uhap->uh_next = uhp->uh_next;
  
      u_freeentries(buf, uhp, uhpp);
  }
***************
*** 1585,1590 ****
--- 1707,1714 ----
      /* Check for pointers to the header that become invalid now. */
      if (buf->b_u_curhead == uhp)
  	buf->b_u_curhead = NULL;
+     if (buf->b_u_newhead == uhp)
+ 	buf->b_u_newhead = NULL;  /* freeing the newest entry */
      if (uhpp != NULL && uhp == *uhpp)
  	*uhpp = NULL;
  
***************
*** 1594,1599 ****
--- 1718,1726 ----
  	u_freeentry(uep, uep->ue_size);
      }
  
+ #ifdef U_DEBUG
+     uhp->uh_magic = 0;
+ #endif
      U_FREE_LINE((char_u *)uhp);
      --buf->b_u_numhead;
  }
***************
*** 1609,1614 ****
--- 1736,1744 ----
      while (n > 0)
  	U_FREE_LINE(uep->ue_array[--n]);
      U_FREE_LINE((char_u *)uep->ue_array);
+ #ifdef U_DEBUG
+     uep->ue_magic = 0;
+ #endif
      U_FREE_LINE((char_u *)uep);
  }
  
*** ../vim-7.1.129/src/structs.h	Sun Aug 12 15:50:26 2007
--- src/structs.h	Sat Sep 29 15:03:38 2007
***************
*** 278,283 ****
--- 278,286 ----
      linenr_T	ue_lcount;	/* linecount when u_save called */
      char_u	**ue_array;	/* array of lines in undo block */
      long	ue_size;	/* number of lines in ue_array */
+ #ifdef U_DEBUG
+     int		ue_magic;	/* magic number to check allocation */
+ #endif
  };
  
  struct u_header
***************
*** 300,305 ****
--- 303,311 ----
      visualinfo_T uh_visual;	/* Visual areas before undo/after redo */
  #endif
      time_t	uh_time;	/* timestamp when the change was made */
+ #ifdef U_DEBUG
+     int		uh_magic;	/* magic number to check allocation */
+ #endif
  };
  
  /* values for uh_flags */
*** ../vim-7.1.129/src/version.c	Mon Oct  1 20:33:45 2007
--- src/version.c	Mon Oct  1 22:50:23 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     130,
  /**/

-- 
FIRST SOLDIER:  So they wouldn't be able to bring a coconut back anyway.
SECOND SOLDIER: Wait a minute! Suppose two swallows carried it together?
FIRST SOLDIER:  No, they'd have to have it on a line.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.131 ---
To: vim-dev at vim.org
Subject: patch 7.1.131
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.131
Problem:    ":mksession" always adds ":setlocal autoread". (Christian J.
	    Robinson)
Solution:   Skip boolean global/local option using global value.
Files:	    src/option.c


*** ../vim-7.1.130/src/option.c	Wed Sep 26 22:35:06 2007
--- src/option.c	Sun Sep 30 16:21:08 2007
***************
*** 8753,8758 ****
--- 8753,8760 ----
      char	*name;
      int		value;
  {
+     if (value < 0)	/* global/local option using global value */
+ 	return OK;
      if (fprintf(fd, "%s %s%s", cmd, value ? "" : "no", name) < 0
  	    || put_eol(fd) < 0)
  	return FAIL;
*** ../vim-7.1.130/src/version.c	Mon Oct  1 22:53:27 2007
--- src/version.c	Tue Oct  2 20:39:02 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     131,
  /**/

-- 
ARTHUR: Old woman!
DENNIS: Man!
ARTHUR: Man.  I'm sorry.  Old man, What knight live in that castle over there?
DENNIS: I'm thirty-seven.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.132 ---
To: vim-dev at vim.org
Subject: patch 7.1.132
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.132
Problem:    getpos("'>") may return a negative column number for a Linewise
	    selection. (A.Politz)
Solution:   Don't add one to MAXCOL.
Files:	    src/eval.c


*** ../vim-7.1.131/src/eval.c	Tue Sep 25 20:39:14 2007
--- src/eval.c	Mon Oct  1 20:56:09 2007
***************
*** 10388,10394 ****
  	    list_append_number(l, (varnumber_T)0);
  	list_append_number(l, (fp != NULL) ? (varnumber_T)fp->lnum
  							    : (varnumber_T)0);
! 	list_append_number(l, (fp != NULL) ? (varnumber_T)fp->col + 1
  							    : (varnumber_T)0);
  	list_append_number(l,
  #ifdef FEAT_VIRTUALEDIT
--- 10388,10395 ----
  	    list_append_number(l, (varnumber_T)0);
  	list_append_number(l, (fp != NULL) ? (varnumber_T)fp->lnum
  							    : (varnumber_T)0);
! 	list_append_number(l, (fp != NULL)
! 		     ? (varnumber_T)(fp->col == MAXCOL ? MAXCOL : fp->col + 1)
  							    : (varnumber_T)0);
  	list_append_number(l,
  #ifdef FEAT_VIRTUALEDIT
*** ../vim-7.1.131/src/version.c	Tue Oct  2 20:40:01 2007
--- src/version.c	Tue Oct  2 22:07:17 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     132,
  /**/

-- 
"The future's already arrived - it's just not evenly distributed yet."
		-- William Gibson

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.133 ---
To: vim-dev at vim.org
Subject: patch 7.1.133
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.133 (after 7.1.126)
Problem:    shorten_fname1() linked when it's not needed.
Solution:   Add #ifdef.
Files:	    src/fileio.c


*** ../vim-7.1.132/src/fileio.c	Sun Sep 30 14:00:41 2007
--- src/fileio.c	Sun Sep 30 16:32:43 2007
***************
*** 5553,5558 ****
--- 5554,5561 ----
  }
  #endif
  
+ #if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \
+     defined(FEAT_QUICKFIX) || defined(PROTO)
  /*
   * Try to find a shortname by comparing the fullname with the current
   * directory.
***************
*** 5573,5578 ****
--- 5576,5582 ----
      }
      return p;
  }
+ #endif
  
  /*
   * Try to find a shortname by comparing the fullname with the current
*** ../vim-7.1.132/src/version.c	Tue Oct  2 22:07:58 2007
--- src/version.c	Wed Oct  3 12:46:59 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     133,
  /**/

-- 
"Beware of bugs in the above code; I have only proved
it correct, not tried it." -- Donald Knuth

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.134 ---
To: vim-dev at vim.org
Subject: patch 7.1.134 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.134 (extra)
Problem:    Win32: Can't build with VC8
Solution:   Detect the MSVC version instead of using NMAKE_VER.
            (Mike Williams)
Files:      src/Make_mvc.mak


*** ../vim-7.1.133/src/Make_mvc.mak	Tue Feb 20 03:15:08 2007
--- src/Make_mvc.mak	Mon Oct  1 21:37:20 2007
***************
*** 92,97 ****
--- 92,99 ----
  #       Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
  #       doesn't work)
  #
+ #       Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
+ #
  # You can combine any of these interfaces
  #
  # Example: To build the non-debug, GUI version with Perl interface:
***************
*** 101,107 ****
  #	This makefile gives a fineness of control which is not supported in
  #	Visual C++ configuration files.  Therefore, debugging requires a bit of
  #	extra work.
! #	Make_dvc.mak is a Visual C++ project to access that support.
  #	To use Make_dvc.mak:
  #	1) Build Vim with Make_mvc.mak.
  #	     Use a "DEBUG=yes" argument to build Vim with debug support.
--- 103,110 ----
  #	This makefile gives a fineness of control which is not supported in
  #	Visual C++ configuration files.  Therefore, debugging requires a bit of
  #	extra work.
! #	Make_dvc.mak is a Visual C++ project to access that support.  It may be
! #	badly out of date for the Visual C++ you are using...
  #	To use Make_dvc.mak:
  #	1) Build Vim with Make_mvc.mak.
  #	     Use a "DEBUG=yes" argument to build Vim with debug support.
***************
*** 198,211 ****
  !if "$(DEBUG)" != "yes"
  NODEBUG = 1
  !else
  MAKEFLAGS_GVIMEXT = DEBUG=yes
  !endif
  
  
! # Get all sorts of useful, standard macros from the SDK.  (Note that
! # MSVC 2.2 does not install <ntwin32.mak> in the \msvc20\include
! # directory, but you can find it in \msvc20\include on the CD-ROM.
! # You may also need <win32.mak> from the same place.)
  
  !include <Win32.mak>
  
--- 201,212 ----
  !if "$(DEBUG)" != "yes"
  NODEBUG = 1
  !else
+ !undef NODEBUG
  MAKEFLAGS_GVIMEXT = DEBUG=yes
  !endif
  
  
! # Get all sorts of useful, standard macros from the Platform SDK.
  
  !include <Win32.mak>
  
***************
*** 272,283 ****
  
  # Set which version of the CRT to use
  !if defined(USE_MSVCRT)
! CVARS = $(cvarsdll)
  # !elseif defined(MULTITHREADED)
  # CVARS = $(cvarsmt)
  !else
  # CVARS = $(cvars)
! CVARS = $(cvarsmt)
  !endif
  
  # need advapi32.lib for GetUserName()
--- 273,284 ----
  
  # Set which version of the CRT to use
  !if defined(USE_MSVCRT)
! # CVARS = $(cvarsdll)
  # !elseif defined(MULTITHREADED)
  # CVARS = $(cvarsmt)
  !else
  # CVARS = $(cvars)
! # CVARS = $(cvarsmt)
  !endif
  
  # need advapi32.lib for GetUserName()
***************
*** 320,326 ****
--- 321,364 ----
  INTDIR=$(OBJDIR)
  OUTDIR=$(OBJDIR)
  
+ # Derive version of VC being used from nmake if not specified
+ !if "$(MSVCVER)" == ""
+ !if "$(_NMAKE_VER)" == ""
+ MSVCVER = 4.0
+ !endif
+ !if "$(_NMAKE_VER)" == "162"
+ MSVCVER = 5.0
+ !endif
+ !if "$(_NMAKE_VER)" == "6.00.8168.0"
+ MSVCVER = 6.0
+ !endif
+ !if "$(_NMAKE_VER)" == "7.00.9466"
+ MSVCVER = 7.0
+ !endif
+ !if "$(_NMAKE_VER)" == "7.10.3077"
+ MSVCVER = 7.1
+ !endif
+ !if "$(_NMAKE_VER)" == "8.00.50727.42"
+ MSVCVER = 8.0
+ !endif
+ !if "$(_NMAKE_VER)" == "8.00.50727.762"
+ MSVCVER = 8.0
+ !endif
+ !endif
+ 
+ # Abort bulding VIM if version of VC is unrecognised.
+ !ifndef MSVCVER
+ !message *** ERROR
+ !message Cannot determine Visual C version being used.  If you are using the
+ !message Windows SDK then you must have the environment variable MSVCVER set to
+ !message your version of the VC compiler.  If you are not using the Express
+ !message version of Visual C you van either set MSVCVER or update this makefile
+ !message to handle the new value for _NMAKE_VER.
+ !error Make aborted.
+ !endif
+ 
  # Convert processor ID to MVC-compatible number
+ !if "$(MSVCVER)" != "8.0"
  !if "$(CPUNR)" == "i386"
  CPUARG = /G3
  !elseif "$(CPUNR)" == "i486"
***************
*** 334,339 ****
--- 372,386 ----
  !else
  CPUARG =
  !endif
+ !else
+ # VC8 only allows specifying SSE architecture
+ !if "$(CPUNR)" == "pentium4"
+ CPUARG = /arch:SSE2
+ !endif
+ !endif
+ 
+ LIBC =
+ DEBUGINFO = /Zi
  
  !ifdef NODEBUG
  VIM = vim
***************
*** 344,384 ****
  !else # MAXSPEED
  OPTFLAG = /Ox
  !endif
  CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
  RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
  ! ifdef USE_MSVCRT
! CFLAGS = $(CFLAGS) -MD
  LIBC = msvcrt.lib
- # CFLAGS = $(CFLAGS) $(cvarsdll)
- # ! elseif defined(MULTITHREADED)
- # LIBC = libcmt.lib
- # CFLAGS = $(CFLAGS) $(cvarsmt)
  ! else
- # LIBC = libc.lib
  LIBC = libcmt.lib
! # CFLAGS = $(CFLAGS) $(cvars)
  ! endif
  !else  # DEBUG
  VIM = vimd
  CFLAGS = $(CFLAGS) -D_DEBUG -DDEBUG /Od
  RCFLAGS = $(rcflags) $(rcvars) -D_DEBUG -DDEBUG
  # The /fixed:no is needed for Quantify. Assume not 4.? as unsupported in VC4.0.
! ! if "$(_NMAKE_VER)" == ""
  LIBC =
  ! else
  LIBC = /fixed:no
  ! endif
  ! ifdef USE_MSVCRT
! CFLAGS = $(CFLAGS) -MDd
  LIBC = $(LIBC) msvcrtd.lib
- # CFLAGS = $(CFLAGS) $(cvarsdll)
- # ! elseif defined(MULTITHREADED)
- # LIBC = $(LIBC) libcmtd.lib
- # CFLAGS = $(CFLAGS) $(cvarsmt)
  ! else
- # LIBC = $(LIBC) libcd.lib
  LIBC = $(LIBC) libcmtd.lib
! # CFLAGS = $(CFLAGS) $(cvars)
  ! endif
  !endif # DEBUG
  
--- 391,430 ----
  !else # MAXSPEED
  OPTFLAG = /Ox
  !endif
+ !if "$(MSVCVER)" == "8.0"
+ # Use link time code generation if not worried about size
+ !if "$(OPTIMIZE)" != "SPACE"
+ OPTFLAG = $(OPTFLAG) /GL
+ !endif
+ !endif
  CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
  RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
  ! ifdef USE_MSVCRT
! CFLAGS = $(CFLAGS) /MD
  LIBC = msvcrt.lib
  ! else
  LIBC = libcmt.lib
! CFLAGS = $(CFLAGS) /MT
  ! endif
  !else  # DEBUG
  VIM = vimd
+ ! if "$(CPU)" == "i386"
+ DEBUGINFO = /ZI
+ ! endif
  CFLAGS = $(CFLAGS) -D_DEBUG -DDEBUG /Od
  RCFLAGS = $(rcflags) $(rcvars) -D_DEBUG -DDEBUG
  # The /fixed:no is needed for Quantify. Assume not 4.? as unsupported in VC4.0.
! ! if "$(MSVCVER)" == "4.0"
  LIBC =
  ! else
  LIBC = /fixed:no
  ! endif
  ! ifdef USE_MSVCRT
! CFLAGS = $(CFLAGS) /MDd
  LIBC = $(LIBC) msvcrtd.lib
  ! else
  LIBC = $(LIBC) libcmtd.lib
! CFLAGS = $(CFLAGS) /MTd
  ! endif
  !endif # DEBUG
  
***************
*** 681,696 ****
  #
  # Always generate the .pdb file, so that we get debug symbols that can be used
  # on a crash (doesn't add overhead to the executable).
  #
! CFLAGS = $(CFLAGS) /Zi /Fd$(OUTDIR)/
! LINK_PDB = /PDB:$(VIM).pdb -debug # -debug:full -debugtype:cv,fixup
  
  #
  # End extra feature include
  #
  !message
  
! conflags = /nologo /subsystem:$(SUBSYSTEM) /incremental:no
  
  PATHDEF_SRC = $(OUTDIR)\pathdef.c
  
--- 727,744 ----
  #
  # Always generate the .pdb file, so that we get debug symbols that can be used
  # on a crash (doesn't add overhead to the executable).
+ # Generate edit-and-continue debug info when no optimization - allows to
+ # debug more conveniently (able to look at variables which are in registers)
  #
! CFLAGS = $(CFLAGS) /Fd$(OUTDIR)/ $(DEBUGINFO)
! LINK_PDB = /PDB:$(VIM).pdb -debug
  
  #
  # End extra feature include
  #
  !message
  
! conflags = /nologo /subsystem:$(SUBSYSTEM)
  
  PATHDEF_SRC = $(OUTDIR)\pathdef.c
  
***************
*** 702,712 ****
  conflags = $(conflags) /map /mapinfo:lines
  !ENDIF
  
! LINKARGS1 = $(linkdebug) $(conflags) /nodefaultlib:libc
  LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(LIBC) $(OLE_LIB)  user32.lib $(SNIFF_LIB) \
  		$(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(RUBY_LIB) \
  		$(TCL_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(LINK_PDB)
  
  all:	$(VIM).exe vimrun.exe install.exe uninstal.exe xxd/xxd.exe \
  		GvimExt/gvimext.dll
  
--- 750,769 ----
  conflags = $(conflags) /map /mapinfo:lines
  !ENDIF
  
! LINKARGS1 = $(linkdebug) $(conflags)
  LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(LIBC) $(OLE_LIB)  user32.lib $(SNIFF_LIB) \
  		$(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(RUBY_LIB) \
  		$(TCL_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(LINK_PDB)
  
+ # Report link time code generation progress if used. 
+ !ifdef NODEBUG
+ !if "$(MSVCVER)" == "8.0"
+ !if "$(OPTIMIZE)" != "SPACE"
+ LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
+ !endif
+ !endif
+ !endif
+ 
  all:	$(VIM).exe vimrun.exe install.exe uninstal.exe xxd/xxd.exe \
  		GvimExt/gvimext.dll
  
***************
*** 794,800 ****
  
  # Create a default rule for transforming .c files to .obj files in $(OUTDIR)
  # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
! !IF "$(_NMAKE_VER)" == ""
  .c{$(OUTDIR)/}.obj:
  !ELSE
  .c{$(OUTDIR)/}.obj::
--- 851,857 ----
  
  # Create a default rule for transforming .c files to .obj files in $(OUTDIR)
  # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
! !IF "$(MSVCVER)" == "4.0"
  .c{$(OUTDIR)/}.obj:
  !ELSE
  .c{$(OUTDIR)/}.obj::
***************
*** 803,809 ****
  
  # Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
  # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
! !IF "$(_NMAKE_VER)" == ""
  .cpp{$(OUTDIR)/}.obj:
  !ELSE
  .cpp{$(OUTDIR)/}.obj::
--- 860,866 ----
  
  # Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
  # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
! !IF "$(MSVCVER)" == "4.0"
  .cpp{$(OUTDIR)/}.obj:
  !ELSE
  .cpp{$(OUTDIR)/}.obj::
*** ../vim-7.1.133/src/version.c	Wed Oct  3 12:49:24 2007
--- src/version.c	Wed Oct  3 13:23:51 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     134,
  /**/

-- 
BLACK KNIGHT: The Black Knight always triumphs. Have at you!
   ARTHUR takes his last leg off.  The BLACK KNIGHT's body lands upright.
BLACK KNIGHT: All right, we'll call it a draw.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.135 ---
To: vim-dev at vim.org
Subject: patch 7.1.135
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.135
Problem:    Win32: When editing a file c:\tmp\foo and c:\tmp\\foo we have two
	    buffers for the same file. (Suresh Govindachar)
Solution:   Invoke FullName_save() when a path contains "//" or "\\".
Files:	    src/buffer.c


*** ../vim-7.1.134/src/buffer.c	Sun Sep 30 14:00:41 2007
--- src/buffer.c	Wed Oct  3 14:24:52 2007
***************
*** 4175,4203 ****
       * mess up the full path name, even though it starts with a '/'.
       * Also expand when there is ".." in the file name, try to remove it,
       * because "c:/src/../README" is equal to "c:/README".
       * For MS-Windows also expand names like "longna~1" to "longname".
       */
  #ifdef UNIX
      return FullName_save(fname, TRUE);
  #else
!     if (!vim_isAbsName(fname) || strstr((char *)fname, "..") != NULL
! #if defined(MSWIN) || defined(DJGPP)
  	    || vim_strchr(fname, '~') != NULL
! #endif
  	    )
  	return FullName_save(fname, FALSE);
  
      fname = vim_strsave(fname);
  
! #ifdef USE_FNAME_CASE
! # ifdef USE_LONG_FNAME
      if (USE_LONG_FNAME)
! # endif
      {
  	if (fname != NULL)
  	    fname_case(fname, 0);	/* set correct case for file name */
      }
! #endif
  
      return fname;
  #endif
--- 4175,4209 ----
       * mess up the full path name, even though it starts with a '/'.
       * Also expand when there is ".." in the file name, try to remove it,
       * because "c:/src/../README" is equal to "c:/README".
+      * Similarly "c:/src//file" is equal to "c:/src/file".
       * For MS-Windows also expand names like "longna~1" to "longname".
       */
  #ifdef UNIX
      return FullName_save(fname, TRUE);
  #else
!     if (!vim_isAbsName(fname)
! 	    || strstr((char *)fname, "..") != NULL
! 	    || strstr((char *)fname, "//") != NULL
! # ifdef BACKSLASH_IN_FILENAME
! 	    || strstr((char *)fname, "\\\\") != NULL
! # endif
! # if defined(MSWIN) || defined(DJGPP)
  	    || vim_strchr(fname, '~') != NULL
! # endif
  	    )
  	return FullName_save(fname, FALSE);
  
      fname = vim_strsave(fname);
  
! # ifdef USE_FNAME_CASE
! #  ifdef USE_LONG_FNAME
      if (USE_LONG_FNAME)
! #  endif
      {
  	if (fname != NULL)
  	    fname_case(fname, 0);	/* set correct case for file name */
      }
! # endif
  
      return fname;
  #endif
*** ../vim-7.1.134/src/version.c	Wed Oct  3 13:28:40 2007
--- src/version.c	Wed Oct  3 14:26:54 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     135,
  /**/

-- 
   A village.  Sound of chanting of Latin canon, punctuated by short, sharp
   cracks.  It comes nearer.  We see it is a line of MONKS ala SEVENTH SEAL
   flagellation scene, chanting and banging themselves on the foreheads with
   wooden boards.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.136 ---
To: vim-dev at vim.org
Subject: Patch 7.1.136
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.136
Problem:    Memory leak when using Ruby syntax highlighting. (Dominique Pelle)
Solution:   Free the contained-in list.
Files:	    src/syntax.c


*** ../vim-7.1.135/src/syntax.c	Thu Aug 30 19:36:52 2007
--- src/syntax.c	Sun Oct  7 15:10:54 2007
***************
*** 3354,3359 ****
--- 3354,3360 ----
      {
  	vim_free(SYN_ITEMS(buf)[i].sp_cont_list);
  	vim_free(SYN_ITEMS(buf)[i].sp_next_list);
+ 	vim_free(SYN_ITEMS(buf)[i].sp_syn.cont_in_list);
      }
  }
  
*** ../vim-7.1.135/src/version.c	Wed Oct  3 14:30:54 2007
--- src/version.c	Sun Oct  7 15:20:22 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     136,
  /**/

-- 
Every engineer dreams about saving the universe and having sex with aliens.
This is much more glamorous than the real life of an engineer, which consists
of hiding from the universe and having sex without the participation of other
life forms.                     (Scott Adams - The Dilbert principle)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.137 ---
To: vim-dev at vim.org
Subject: Patch 7.1.137
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.137
Problem:    Build failure when using EXITFREE. (Dominique Pelle)
Solution:   Add an #ifdef around using clip_exclude_prog.
Files:      src/misc2.c
    

*** ../vim-7.1.136/src/misc2.c	Sat Sep 29 14:15:00 2007
--- src/misc2.c	Sun Sep 30 18:00:09 2007
***************
*** 1037,1043 ****
--- 1038,1046 ----
  
      /* Free some global vars. */
      vim_free(username);
+ # ifdef FEAT_CLIPBOARD
      vim_free(clip_exclude_prog);
+ # endif
      vim_free(last_cmdline);
      vim_free(new_last_cmdline);
      set_keep_msg(NULL, 0);
*** ../vim-7.1.136/src/version.c	Sun Oct  7 15:21:31 2007
--- src/version.c	Sun Oct  7 15:42:26 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     137,
  /**/

-- 
For society, it's probably a good thing that engineers value function over
appearance.  For example, you wouldn't want engineers to build nuclear power
plants that only _look_ like they would keep all the radiation inside.
				(Scott Adams - The Dilbert principle)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.138 ---
To: vim-dev at vim.org
Subject: Patch 7.1.138
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.138
Problem:    The Perl Msg() function doesn't stop when "q" is typed at the more
	    prompt. (Hari Krishna Dara)
Solution:   Check got_int.
Files:	    src/if_perl.xs


*** ../vim-7.1.137/src/if_perl.xs	Sat Sep 15 14:48:57 2007
--- src/if_perl.xs	Wed Oct  3 17:00:16 2007
***************
*** 445,457 ****
      char *next;
      char *token = (char *)s;
  
!     while ((next = strchr(token, '\n')))
      {
  	*next++ = '\0';			/* replace \n with \0 */
  	msg_attr((char_u *)token, attr);
  	token = next;
      }
!     if (*token)
  	msg_attr((char_u *)token, attr);
  }
  
--- 445,457 ----
      char *next;
      char *token = (char *)s;
  
!     while ((next = strchr(token, '\n')) && !got_int)
      {
  	*next++ = '\0';			/* replace \n with \0 */
  	msg_attr((char_u *)token, attr);
  	token = next;
      }
!     if (*token && !got_int)
  	msg_attr((char_u *)token, attr);
  }
  
*** ../vim-7.1.137/src/version.c	Sun Oct  7 15:44:28 2007
--- src/version.c	Tue Oct  9 10:45:08 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     138,
  /**/

-- 
A consultant is a person who takes your money and annoys your employees while
tirelessly searching for the best way to extend the consulting contract.
				(Scott Adams - The Dilbert principle)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.139 ---
To: vim-dev at vim.org
Subject: Patch 7.1.139
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.139
Problem:    When using marker folding and ending Insert mode with CTRL-C the
	    current fold is truncated. (Fred Kater)
Solution:   Ignore got_int while updating folds.
Files:	    src/fold.c


*** ../vim-7.1.138/src/fold.c	Thu May 10 21:02:13 2007
--- src/fold.c	Sun Oct 14 15:27:13 2007
***************
*** 858,864 ****
--- 858,871 ----
  	    || foldmethodIsDiff(wp)
  #endif
  	    || foldmethodIsSyntax(wp))
+     {
+ 	int save_got_int = got_int;
+ 
+ 	/* reset got_int here, otherwise it won't work */
+ 	got_int = FALSE;
  	foldUpdateIEMS(wp, top, bot);
+ 	got_int |= save_got_int;
+     }
  }
  
  /* foldUpdateAll() {{{2 */
*** ../vim-7.1.138/src/version.c	Tue Oct  9 10:46:39 2007
--- src/version.c	Sun Oct 14 15:31:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     139,
  /**/

-- 
If Pacman had affected us as kids we'd be running around in dark rooms,
munching pills and listening to repetitive music.
                       -- Marcus Brigstocke

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.140 ---
To: vim-dev at vim.org
Subject: Patch 7.1.140
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.140
Problem:    v:count is set only after typing a non-digit, that makes it
	    difficult to make a nice mapping.
Solution:   Set v:count while still typing the count.
Files:	    src/normal.c


*** ../vim-7.1.139/src/normal.c	Thu Sep 13 18:25:08 2007
--- src/normal.c	Sun Oct 14 17:15:36 2007
***************
*** 690,695 ****
--- 690,702 ----
  		ca.count0 = ca.count0 * 10 + (c - '0');
  	    if (ca.count0 < 0)	    /* got too large! */
  		ca.count0 = 999999999L;
+ #ifdef FEAT_EVAL
+ 	    /* Set v:count here, when called from main() and not a stuffed
+ 	     * command, so that v:count can be used in an expression mapping
+ 	     * right after the count. */
+ 	    if (toplevel && stuff_empty())
+ 		set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0);
+ #endif
  	    if (ctrl_w)
  	    {
  		++no_mapping;
*** ../vim-7.1.139/src/version.c	Sun Oct 14 15:32:10 2007
--- src/version.c	Sun Oct 14 17:13:15 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     140,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
11. Specify that your drive-through order is "to go".

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.141 ---
To: vim-dev at vim.org
Subject: Patch 7.1.141
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.141
Problem:    GTK: -geom argument doesn't support a negative offset.
Solution:   Compute position from the right/lower corner.
Files:	    src/gui_gtk_x11.c


*** ../vim-7.1.140/src/gui_gtk_x11.c	Sat Sep 15 14:06:41 2007
--- src/gui_gtk_x11.c	Mon Oct  8 21:26:50 2007
***************
*** 4044,4049 ****
--- 4044,4051 ----
  	unsigned int	w, h;
  	int		x = 0;
  	int		y = 0;
+ 	guint		pixel_width;
+ 	guint		pixel_height;
  
  	mask = XParseGeometry((char *)gui.geom, &x, &y, &w, &h);
  
***************
*** 4055,4066 ****
--- 4057,4087 ----
  		p_window = h - 1;
  	    Rows = h;
  	}
+ 
+ 	pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width);
+ 	pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height);
+ 
+ #ifdef HAVE_GTK2
+ 	pixel_width  += get_menu_tool_width();
+ 	pixel_height += get_menu_tool_height();
+ #endif
+ 
  	if (mask & (XValue | YValue))
+ 	{
+ 	    int w, h;
+ 	    gui_mch_get_screen_dimensions(&w, &h);
+ 	    h += p_ghr + get_menu_tool_height();
+ 	    w += get_menu_tool_width();
+ 	    if (mask & XNegative)
+ 		x += w - pixel_width;
+ 	    if (mask & YNegative)
+ 		y += h - pixel_height;
  #ifdef HAVE_GTK2
  	    gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
  #else
  	    gtk_widget_set_uposition(gui.mainwin, x, y);
  #endif
+ 	}
  	vim_free(gui.geom);
  	gui.geom = NULL;
  
***************
*** 4071,4084 ****
  	 */
  	if (gtk_socket_id != 0  &&  (mask & WidthValue || mask & HeightValue))
  	{
- 	    guint pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width);
- 	    guint pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height);
- 
- #ifdef HAVE_GTK2
- 	    pixel_width  += get_menu_tool_width();
- 	    pixel_height += get_menu_tool_height();
- #endif
- 
  	    update_window_manager_hints(pixel_width, pixel_height);
  	    init_window_hints_state = 1;
  	    g_timeout_add(1000, check_startup_plug_hints, NULL);
--- 4092,4097 ----
*** ../vim-7.1.140/src/version.c	Sun Oct 14 17:15:45 2007
--- src/version.c	Fri Oct 19 14:28:52 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     141,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
35. Your husband tells you he's had the beard for 2 months.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.142 ---
To: vim-dev at vim.org
Subject: Patch 7.1.142
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.142
Problem:    ":redir @A>" doesn't work.
Solution:   Ignore the extra ">" also when appending. (James Vega)
Files:	    src/ex_docmd.c


*** ../vim-7.1.141/src/ex_docmd.c	Sun Sep 30 14:00:41 2007
--- src/ex_docmd.c	Tue Oct  9 11:09:09 2007
***************
*** 8426,8446 ****
  		    || *arg == '"')
  	    {
  		redir_reg = *arg++;
! 		if (*arg == '>' && arg[1] == '>')
  		    arg += 2;
! 		else if ((*arg == NUL || (*arg == '>' && arg[1] == NUL)) &&
! 			 (islower(redir_reg)
! # ifdef FEAT_CLIPBOARD
! 			    || redir_reg == '*'
! 			    || redir_reg == '+'
! # endif
! 			    || redir_reg == '"'))
  		{
  		    if (*arg == '>')
  			arg++;
! 
! 		    /* make register empty */
! 		    write_reg_contents(redir_reg, (char_u *)"", -1, FALSE);
  		}
  	    }
  	    if (*arg != NUL)
--- 8426,8442 ----
  		    || *arg == '"')
  	    {
  		redir_reg = *arg++;
! 		if (*arg == '>' && arg[1] == '>')  /* append */
  		    arg += 2;
! 		else
  		{
+ 		    /* Can use both "@a" and "@a>". */
  		    if (*arg == '>')
  			arg++;
! 		    /* Make register empty when not using @A- at Z and the
! 		     * command is valid. */
! 		    if (*arg == NUL && !isupper(redir_reg))
! 			write_reg_contents(redir_reg, (char_u *)"", -1, FALSE);
  		}
  	    }
  	    if (*arg != NUL)
*** ../vim-7.1.141/src/version.c	Fri Oct 19 14:32:50 2007
--- src/version.c	Fri Oct 19 16:18:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     142,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
36. You miss more than five meals a week downloading the latest games from
    Apogee.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.143 ---
To: vim-dev at vim.org
Subject: Patch 7.1.143
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.143
Problem:    Uninitialized memory read when diffing three files. (Dominique
	    Pelle)
Solution:   Remove "+ !notset" so that we don't use fields that were not
	    computed.
Files:	    src/diff.c


*** ../vim-7.1.142/src/diff.c	Sat Sep 29 14:15:00 2007
--- src/diff.c	Sun Oct 14 21:52:56 2007
***************
*** 1310,1316 ****
  		    dp->df_count[idx_new] += -off;
  		off = 0;
  	    }
! 	    for (i = idx_orig; i < idx_new + !notset; ++i)
  		if (curtab->tp_diffbuf[i] != NULL)
  		    dp->df_count[i] = dpl->df_lnum[i] + dpl->df_count[i]
  						       - dp->df_lnum[i] + off;
--- 1310,1316 ----
  		    dp->df_count[idx_new] += -off;
  		off = 0;
  	    }
! 	    for (i = idx_orig; i < idx_new; ++i)
  		if (curtab->tp_diffbuf[i] != NULL)
  		    dp->df_count[i] = dpl->df_lnum[i] + dpl->df_count[i]
  						       - dp->df_lnum[i] + off;
*** ../vim-7.1.142/src/version.c	Fri Oct 19 16:20:09 2007
--- src/version.c	Fri Oct 19 17:32:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     143,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
37. You start looking for hot HTML addresses in public restrooms.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.144 ---
To: vim-dev at vim.org
Subject: Patch 7.1.144
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.144
Problem:    After ":diffup" cursor can be in the wrong position.
Solution:   Force recomputing the cursor position.
Files:	    src/diff.c


*** ../vim-7.1.143/src/diff.c	Fri Oct 19 17:32:58 2007
--- src/diff.c	Fri Oct 19 18:54:13 2007
***************
*** 791,796 ****
--- 791,799 ----
      }
      mch_remove(tmp_orig);
  
+     /* force updating cursor position on screen */
+     curwin->w_valid_cursor.lnum = 0;
+ 
      diff_redraw(TRUE);
  
  theend:
*** ../vim-7.1.143/src/version.c	Fri Oct 19 17:32:58 2007
--- src/version.c	Fri Oct 19 18:56:49 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     144,
  /**/

-- 
He who laughs last, thinks slowest.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.145 ---
To: vim-dev at vim.org
Subject: Patch 7.1.145
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.145
Problem:    Insert mode completion: When using the popup menu, after
	    completing a word and typing a non-word character Vim is still
	    completing the same word, following CTRL-N doesn't work.
	    Insert mode Completion: When using CTRL-X O and there is only
	    "struct." before the cursor, typing one char to reduce the
	    matches, then BS completion stops.
Solution:   When typing a character that is not part of the item being
	    completed, stop complete mode.  For whole line completion also
	    accept a space.  For file name completion stop at a path
	    separator.
	    For omni completion stay in completion mode even if completing
	    with empty string.
Files:	    src/edit.c


*** ../vim-7.1.144/src/edit.c	Thu Sep 13 18:25:08 2007
--- src/edit.c	Fri Oct 19 16:04:38 2007
***************
*** 129,134 ****
--- 129,135 ----
  
  static void ins_ctrl_x __ARGS((void));
  static int  has_compl_option __ARGS((int dict_opt));
+ static int  ins_compl_accept_char __ARGS((int c));
  static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup));
  static int  ins_compl_equal __ARGS((compl_T *match, char_u *str, int len));
  static void ins_compl_longest_match __ARGS((compl_T *match));
***************
*** 754,761 ****
  		    continue;
  		}
  
! 		/* A printable, non-white character: Add to "compl_leader". */
! 		if (vim_isprintc(c) && !vim_iswhite(c))
  		{
  		    ins_compl_addleader(c);
  		    continue;
--- 755,763 ----
  		    continue;
  		}
  
! 		/* A non-white character that fits in with the current
! 		 * completion: Add to "compl_leader". */
! 		if (ins_compl_accept_char(c))
  		{
  		    ins_compl_addleader(c);
  		    continue;
***************
*** 2053,2058 ****
--- 2055,2094 ----
  }
  
  /*
+  * Return TRUE when character "c" is part of the item currently being
+  * completed.  Used to decide whether to abandon complete mode when the menu
+  * is visible.
+  */
+     static int
+ ins_compl_accept_char(c)
+     int c;
+ {
+     if (ctrl_x_mode & CTRL_X_WANT_IDENT)
+ 	/* When expanding an identifier only accept identifier chars. */
+ 	return vim_isIDc(c);
+ 
+     switch (ctrl_x_mode)
+     {
+ 	case CTRL_X_FILES:
+ 	    /* When expanding file name only accept file name chars. But not
+ 	     * path separators, so that "proto/<Tab>" expands files in
+ 	     * "proto", not "proto/" as a whole */
+ 	    return vim_isfilec(c) && !vim_ispathsep(c);
+ 
+ 	case CTRL_X_CMDLINE:
+ 	case CTRL_X_OMNI:
+ 	    /* Command line and Omni completion can work with just about any
+ 	     * printable character, but do stop at white space. */
+ 	    return vim_isprintc(c) && !vim_iswhite(c);
+ 
+ 	case CTRL_X_WHOLE_LINE:
+ 	    /* For while line completion a space can be part of the line. */
+ 	    return vim_isprintc(c);
+     }
+     return vim_iswordc(c);
+ }
+ 
+ /*
   * This is like ins_compl_add(), but if 'ic' and 'inf' are set, then the
   * case of the originally typed text is used, and the case of the completed
   * text is inferred, ie this tries to work out what case you probably wanted
***************
*** 3128,3135 ****
      p = line + curwin->w_cursor.col;
      mb_ptr_back(line, p);
  
!     /* Stop completion when the whole word was deleted. */
!     if ((int)(p - line) - (int)compl_col <= 0)
  	return K_BS;
  
      /* Deleted more than what was used to find matches or didn't finish
--- 3164,3174 ----
      p = line + curwin->w_cursor.col;
      mb_ptr_back(line, p);
  
!     /* Stop completion when the whole word was deleted.  For Omni completion
!      * allow the word to be deleted, we won't match everything. */
!     if ((int)(p - line) - (int)compl_col < 0
! 	    || ((int)(p - line) - (int)compl_col == 0
! 		&& (ctrl_x_mode & CTRL_X_OMNI) == 0))
  	return K_BS;
  
      /* Deleted more than what was used to find matches or didn't finish
***************
*** 4591,4604 ****
  	curs_col = curwin->w_cursor.col;
  	compl_pending = 0;
  
! 	/* if this same ctrl_x_mode has been interrupted use the text from
  	 * "compl_startpos" to the cursor as a pattern to add a new word
  	 * instead of expand the one before the cursor, in word-wise if
! 	 * "compl_startpos"
! 	 * is not in the same line as the cursor then fix it (the line has
! 	 * been split because it was longer than 'tw').  if SOL is set then
! 	 * skip the previous pattern, a word at the beginning of the line has
! 	 * been inserted, we'll look for that  -- Acevedo. */
  	if ((compl_cont_status & CONT_INTRPT) == CONT_INTRPT
  					    && compl_cont_mode == ctrl_x_mode)
  	{
--- 4630,4642 ----
  	curs_col = curwin->w_cursor.col;
  	compl_pending = 0;
  
! 	/* If this same ctrl_x_mode has been interrupted use the text from
  	 * "compl_startpos" to the cursor as a pattern to add a new word
  	 * instead of expand the one before the cursor, in word-wise if
! 	 * "compl_startpos" is not in the same line as the cursor then fix it
! 	 * (the line has been split because it was longer than 'tw').  if SOL
! 	 * is set then skip the previous pattern, a word at the beginning of
! 	 * the line has been inserted, we'll look for that  -- Acevedo. */
  	if ((compl_cont_status & CONT_INTRPT) == CONT_INTRPT
  					    && compl_cont_mode == ctrl_x_mode)
  	{
*** ../vim-7.1.144/src/version.c	Fri Oct 19 18:57:33 2007
--- src/version.c	Fri Oct 19 20:38:21 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     145,
  /**/

-- 
Micro$oft: where do you want to go today?
    Linux: where do you want to go tomorrow?
  FreeBSD: are you guys coming, or what?

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.146 ---
To: vim-dev at vim.org
Subject: Patch 7.1.146 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.146 (extra)
Problem:    VMS: Files with a very rare record organization (VFC) cannot be
	    properly written by Vim.
	    On older VAX systems mms runs into a syntax error.
Solution:   Check for this special situation.  Do not wrap a comment, make it
	    one long line.  (Zoltan Arpadffy)
Files:	    src/fileio.c, src/Make_vms.mms


*** ../vim-7.1.145/src/fileio.c	Wed Oct  3 12:49:24 2007
--- src/fileio.c	Mon Oct 22 21:10:00 2007
***************
*** 4251,4257 ****
  	 * they don't it adds one.
  	 * With other RMS structures it works perfect without this fix.
  	 */
! 	if ((buf->b_fab_rat & (FAB$M_FTN | FAB$M_CR)) != 0)
  	{
  	    int b2write;
  
--- 4252,4259 ----
  	 * they don't it adds one.
  	 * With other RMS structures it works perfect without this fix.
  	 */
! 	if (buf->b_fab_rfm == FAB$C_VFC
! 		|| ((buf->b_fab_rat & (FAB$M_FTN | FAB$M_CR)) != 0))
  	{
  	    int b2write;
  
*** ../vim-7.1.145/src/Make_vms.mms	Thu May 10 20:47:35 2007
--- src/Make_vms.mms	Mon Oct 22 21:13:08 2007
***************
*** 2,8 ****
  # Makefile for Vim on OpenVMS
  #
  # Maintainer:   Zoltan Arpadffy <arpadffy at polarhome.com>
! # Last change:  2007 May 07
  #
  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
  # with MMS and MMK
--- 2,8 ----
  # Makefile for Vim on OpenVMS
  #
  # Maintainer:   Zoltan Arpadffy <arpadffy at polarhome.com>
! # Last change:  2007 Oct 22
  #
  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
  # with MMS and MMK
***************
*** 96,103 ****
  
  .IFDEF MMSVAX
  .IFDEF DECC	     # VAX with DECC
! CC_DEF  = cc # /decc # some system requires this switch
! 		     # but when it is not required /ver might fail
  PREFIX  = /prefix=all
  .ELSE		     # VAX with VAXC
  CC_DEF	= cc
--- 96,102 ----
  
  .IFDEF MMSVAX
  .IFDEF DECC	     # VAX with DECC
! CC_DEF  = cc # /decc # some system requires this switch but when it is not required /ver might fail
  PREFIX  = /prefix=all
  .ELSE		     # VAX with VAXC
  CC_DEF	= cc
*** ../vim-7.1.145/src/version.c	Fri Oct 19 20:39:56 2007
--- src/version.c	Mon Oct 29 22:36:20 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     146,
  /**/

-- 
Be thankful to be in a traffic jam, because it means you own a car.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.147 ---
To: vim-dev at vim.org
Subject: Patch 7.1.147
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.147 (after 7.1.127)
Problem:    Freeing memory already freed when completing user name. (Meino
	    Cramer)
Solution:   Use a flag to remember if "orig" needs to be freed.
Files:	    src/ex_getln.c


*** ../vim-7.1.146/src/ex_getln.c	Sun Sep 30 22:10:45 2007
--- src/ex_getln.c	Tue Oct 30 17:13:33 2007
***************
*** 3353,3358 ****
--- 3353,3359 ----
      char_u	*ss = NULL;
      static int	findex;
      static char_u *orig_save = NULL;	/* kept value of orig */
+     int		orig_saved = FALSE;
      int		i;
      long_u	len;
      int		non_suf_match;		/* number without matching suffix */
***************
*** 3421,3426 ****
--- 3422,3428 ----
      {
  	vim_free(orig_save);
  	orig_save = orig;
+ 	orig_saved = TRUE;
  
  	/*
  	 * Do the expansion.
***************
*** 3546,3552 ****
  	ExpandCleanup(xp);
  
      /* Free "orig" if it wasn't stored in "orig_save". */
!     if (orig != orig_save)
  	vim_free(orig);
  
      return ss;
--- 3548,3554 ----
  	ExpandCleanup(xp);
  
      /* Free "orig" if it wasn't stored in "orig_save". */
!     if (!orig_saved)
  	vim_free(orig);
  
      return ss;
*** ../vim-7.1.146/src/version.c	Mon Oct 29 22:37:57 2007
--- src/version.c	Tue Oct 30 17:30:35 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     147,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
59. Your wife says communication is important in a marriage...so you buy
    another computer and install a second phone line so the two of you can
    chat.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.148 ---
To: vim-dev at vim.org
Subject: Patch 7.1.148
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.148
Problem:    Some types are not found by configure.
Solution:   Test for the sys/types.h header file. (Sean Boudreau)
Files:	    src/configure.in, src/auto/configure


*** ../vim-7.1.147/src/configure.in	Thu Jun 28 13:02:22 2007
--- src/configure.in	Sat Oct 27 15:52:16 2007
***************
*** 2026,2032 ****
  fi
  
  AC_CHECK_HEADERS(stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
! 	termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h termio.h \
  	iconv.h langinfo.h unistd.h stropts.h errno.h \
  	sys/resource.h sys/systeminfo.h locale.h \
  	sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
--- 2026,2032 ----
  fi
  
  AC_CHECK_HEADERS(stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
! 	termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \
  	iconv.h langinfo.h unistd.h stropts.h errno.h \
  	sys/resource.h sys/systeminfo.h locale.h \
  	sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
*** ../vim-7.1.147/src/auto/configure	Thu Jun 28 13:02:22 2007
--- src/auto/configure	Sun Nov  4 15:34:14 2007
***************
*** 10265,10272 ****
  
  
  
  for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
! 	termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h termio.h \
  	iconv.h langinfo.h unistd.h stropts.h errno.h \
  	sys/resource.h sys/systeminfo.h locale.h \
  	sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
--- 10265,10273 ----
  
  
  
+ 
  for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
! 	termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \
  	iconv.h langinfo.h unistd.h stropts.h errno.h \
  	sys/resource.h sys/systeminfo.h locale.h \
  	sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
*** ../vim-7.1.147/src/version.c	Tue Oct 30 17:36:31 2007
--- src/version.c	Sun Nov  4 15:34:26 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     148,
  /**/

-- 
If your nose runs, and your feet smell, you might be upside down.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.149 ---
To: vim-dev at vim.org
Subject: Patch 7.1.149
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.149
Problem:    GTK GUI: When the completion popup menu is used scrolling another
	    window by the scrollbar is OK, but using the scroll wheel it
	    behaves line <Enter>.
Solution:   Ignore K_MOUSEDOWN and K_MOUSEUP.  Fix redrawing the popup menu.
Files:	    src/edit.c, src/gui.c


*** ../vim-7.1.148/src/edit.c	Fri Oct 19 20:39:56 2007
--- src/edit.c	Sun Nov  4 16:17:42 2007
***************
*** 3385,3392 ****
      if (c != Ctrl_R && vim_is_ctrl_x_key(c))
  	edit_submode_extra = NULL;
  
!     /* Ignore end of Select mode mapping */
!     if (c == K_SELECT)
  	return retval;
  
      /* Set "compl_get_longest" when finding the first matches. */
--- 3385,3392 ----
      if (c != Ctrl_R && vim_is_ctrl_x_key(c))
  	edit_submode_extra = NULL;
  
!     /* Ignore end of Select mode mapping and mouse scroll buttons. */
!     if (c == K_SELECT || c == K_MOUSEDOWN || c == K_MOUSEUP)
  	return retval;
  
      /* Set "compl_get_longest" when finding the first matches. */
***************
*** 8652,8666 ****
      int		up;
  {
      pos_T	tpos;
! # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
!     win_T	*old_curwin;
  # endif
  
      tpos = curwin->w_cursor;
  
  # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
-     old_curwin = curwin;
- 
      /* Currently the mouse coordinates are only known in the GUI. */
      if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
      {
--- 8652,8667 ----
      int		up;
  {
      pos_T	tpos;
! # if defined(FEAT_WINDOWS)
!     win_T	*old_curwin = curwin;
! # endif
! # ifdef FEAT_INS_EXPAND
!     int		did_scroll = FALSE;
  # endif
  
      tpos = curwin->w_cursor;
  
  # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
      /* Currently the mouse coordinates are only known in the GUI. */
      if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
      {
***************
*** 8677,8692 ****
  # endif
  	undisplay_dollar();
  
!     if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
! 	scroll_redraw(up, (long)(curwin->w_botline - curwin->w_topline));
!     else
! 	scroll_redraw(up, 3L);
  
  # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
      curwin->w_redr_status = TRUE;
  
      curwin = old_curwin;
      curbuf = curwin->w_buffer;
  # endif
  
      if (!equalpos(curwin->w_cursor, tpos))
--- 8678,8717 ----
  # endif
  	undisplay_dollar();
  
! # ifdef FEAT_INS_EXPAND
!     /* Don't scroll the window in which completion is being done. */
!     if (!pum_visible()
! #  if defined(FEAT_WINDOWS)
! 	    || curwin != old_curwin
! #  endif
! 	    )
! # endif
!     {
! 	if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
! 	    scroll_redraw(up, (long)(curwin->w_botline - curwin->w_topline));
! 	else
! 	    scroll_redraw(up, 3L);
! # ifdef FEAT_INS_EXPAND
! 	did_scroll = TRUE;
! # endif
!     }
  
  # if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
      curwin->w_redr_status = TRUE;
  
      curwin = old_curwin;
      curbuf = curwin->w_buffer;
+ # endif
+ 
+ # ifdef FEAT_INS_EXPAND
+     /* The popup menu may overlay the window, need to redraw it.
+      * TODO: Would be more efficient to only redraw the windows that are
+      * overlapped by the popup menu. */
+     if (pum_visible() && did_scroll)
+     {
+ 	redraw_all_later(NOT_VALID);
+ 	ins_compl_show_pum();
+     }
  # endif
  
      if (!equalpos(curwin->w_cursor, tpos))
*** ../vim-7.1.148/src/gui.c	Wed Sep  5 21:45:54 2007
--- src/gui.c	Fri Oct 19 16:14:57 2007
***************
*** 4214,4220 ****
  #endif
  	    )
      {
! 	redraw_win_later(wp, VALID);
  	updateWindow(wp);   /* update window, status line, and cmdline */
      }
  
--- 4214,4232 ----
  #endif
  	    )
      {
! 	int type = VALID;
! 
! #ifdef FEAT_INS_EXPAND
! 	if (pum_visible())
! 	{
! 	    type = NOT_VALID;
! 	    wp->w_lines_valid = 0;
! 	}
! #endif
! 	/* Don't set must_redraw here, it may cause the popup menu to
! 	 * disappear when losing focus after a scrollbar drag. */
! 	if (wp->w_redr_type < type)
! 	    wp->w_redr_type = type;
  	updateWindow(wp);   /* update window, status line, and cmdline */
      }
  
*** ../vim-7.1.148/src/version.c	Sun Nov  4 15:35:23 2007
--- src/version.c	Tue Nov  6 22:21:03 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     149,
  /**/

-- 
>From "know your smileys":
 ...---...   SOS

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.150 ---
To: vim-dev at vim.org
Subject: Patch 7.1.150
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.150
Problem:    When 'clipboard' has "unnamed" using "p" in Visual mode doesn't
	    work correctly. (Jianrong Yu)
Solution:   When 'clipboard' has "unnamed" also obtain the selection when
	    getting the default register.
Files:	    src/ops.c


*** ../vim-7.1.149/src/ops.c	Tue Sep 25 14:19:35 2007
--- src/ops.c	Sun Oct 28 13:58:35 2007
***************
*** 933,941 ****
  #ifdef FEAT_CLIPBOARD
      /* When Visual area changed, may have to update selection.  Obtain the
       * selection too. */
!     if (name == '*' && clip_star.available && clip_isautosel())
      {
! 	clip_update_selection();
  	may_get_selection(name);
      }
  #endif
--- 933,942 ----
  #ifdef FEAT_CLIPBOARD
      /* When Visual area changed, may have to update selection.  Obtain the
       * selection too. */
!     if (name == '*' && clip_star.available)
      {
! 	if (clip_isautosel())
! 	    clip_update_selection();
  	may_get_selection(name);
      }
  #endif
*** ../vim-7.1.149/src/version.c	Tue Nov  6 22:26:39 2007
--- src/version.c	Thu Nov  8 10:34:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     150,
  /**/

-- 
>From "know your smileys":
 8<}}	Glasses, big nose, beard

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.151 ---
To: vim-dev at vim.org
Subject: Patch 7.1.151
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.151
Problem:    Using whole line completion with 'ignorecase' and 'infercase' set
	    and the line is empty get an lalloc(0) error.
Solution:   Don't try changing case for an empty match. (Matthew Wozniski)
Files:	    src/edit.c


*** ../vim-7.1.150/src/edit.c	Tue Nov  6 22:26:39 2007
--- src/edit.c	Sun Nov  4 16:17:42 2007
***************
*** 2111,2117 ****
      int		has_lower = FALSE;
      int		was_letter = FALSE;
  
!     if (p_ic && curbuf->b_p_inf)
      {
  	/* Infer case of completed part. */
  
--- 2111,2117 ----
      int		has_lower = FALSE;
      int		was_letter = FALSE;
  
!     if (p_ic && curbuf->b_p_inf && len > 0)
      {
  	/* Infer case of completed part. */
  
***************
*** 2225,2231 ****
  		    wca[i] = MB_TOUPPER(wca[i]);
  	    }
  
! 	    /* 
  	     * Generate encoding specific output from wide character array.
  	     * Multi-byte characters can occupy up to five bytes more than
  	     * ASCII characters, and we also need one byte for NUL, so stay
--- 2225,2231 ----
  		    wca[i] = MB_TOUPPER(wca[i]);
  	    }
  
! 	    /*
  	     * Generate encoding specific output from wide character array.
  	     * Multi-byte characters can occupy up to five bytes more than
  	     * ASCII characters, and we also need one byte for NUL, so stay
*** ../vim-7.1.150/src/version.c	Thu Nov  8 10:35:02 2007
--- src/version.c	Thu Nov  8 13:01:34 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     151,
  /**/

-- 
>From "know your smileys":
 %-)	After staring at screen for 15 hours

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.152 ---
To: vim-dev at vim.org
Subject: Patch 7.1.152
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.152
Problem:    Display problem when 'hls' and 'cursorcolumn' are set and
	    searching for "$".  (John Mullin)  Also when scrolling
	    horizontally when 'wrap' is off.
Solution:   Keep track of the column where highlighting was set.  Check the
	    column offset when skipping characters.
Files:	    src/screen.c


*** ../vim-7.1.151/src/screen.c	Mon Sep 17 22:37:05 2007
--- src/screen.c	Fri Oct 19 15:18:49 2007
***************
*** 2599,2604 ****
--- 2599,2605 ----
      int		syntax_attr = 0;	/* attributes desired by syntax */
      int		has_syntax = FALSE;	/* this buffer has syntax highl. */
      int		save_did_emsg;
+     int		eol_hl_off = 0;		/* 1 if highlighted char after EOL */
  #endif
  #ifdef FEAT_SPELL
      int		has_spell = FALSE;	/* this buffer has spell checking */
***************
*** 4312,4317 ****
--- 4313,4322 ----
  	{
  #ifdef FEAT_SEARCH_EXTRA
  	    long prevcol = (long)(ptr - line) - (c == NUL);
+ 
+ 	    /* we're not really at that column when skipping some text */
+ 	    if ((wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
+ 		++prevcol;
  #endif
  
  	    /* invert at least one char, used for Visual and empty line or
***************
*** 4408,4418 ****
--- 4413,4432 ----
  		ScreenAttrs[off] = char_attr;
  #ifdef FEAT_RIGHTLEFT
  		if (wp->w_p_rl)
+ 		{
  		    --col;
+ 		    --off;
+ 		}
  		else
  #endif
+ 		{
  		    ++col;
+ 		    ++off;
+ 		}
  		++vcol;
+ #ifdef FEAT_SYN_HL
+ 		eol_hl_off = 1;
+ #endif
  	    }
  	}
  
***************
*** 4422,4427 ****
--- 4436,4449 ----
  	if (c == NUL)
  	{
  #ifdef FEAT_SYN_HL
+ 	    if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol)
+ 	    {
+ 		/* highlight last char after line */
+ 		--col;
+ 		--off;
+ 		--vcol;
+ 	    }
+ 
  	    /* Highlight 'cursorcolumn' past end of the line. */
  	    if (wp->w_p_wrap)
  		v = wp->w_skipcol;
***************
*** 4432,4438 ****
  
  		vcol = v + col - win_col_off(wp);
  	    if (wp->w_p_cuc
! 		    && (int)wp->w_virtcol >= vcol
  		    && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
  									   + v
  		    && lnum != wp->w_cursor.lnum
--- 4454,4460 ----
  
  		vcol = v + col - win_col_off(wp);
  	    if (wp->w_p_cuc
! 		    && (int)wp->w_virtcol >= vcol - eol_hl_off
  		    && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
  									   + v
  		    && lnum != wp->w_cursor.lnum
*** ../vim-7.1.151/src/version.c	Thu Nov  8 13:03:33 2007
--- src/version.c	Thu Nov  8 14:48:59 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     152,
  /**/

-- 
>From "know your smileys":
 2B|^2B	  Message from Shakespeare

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.153 ---
To: vim-dev at vim.org
Subject: Patch 7.1.153
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.153
Problem:    Compiler warnings on SGI.  Undefined XpmAllocColor (Charles
	    Campbell)
Solution:   Add type casts.  Init st_dev and st_ino separately.  Don't use
	    type casts for vim_snprintf() when HAVE_STDARG_H is defined.
	    Define XpmAllocColor when needed.
Files:	    src/eval.c, src/ex_cmds.c, src/fileio.c, src/misc2.c,
	    src/gui_xmebw.c


*** ../vim-7.1.152/src/eval.c	Tue Oct  2 22:07:58 2007
--- src/eval.c	Mon Oct  1 20:56:09 2007
***************
*** 8729,8735 ****
      static int		fnum = 0;
      static int		change_start = 0;
      static int		change_end = 0;
!     static hlf_T	hlID = 0;
      int			filler_lines;
      int			col;
  
--- 8729,8735 ----
      static int		fnum = 0;
      static int		change_start = 0;
      static int		change_end = 0;
!     static hlf_T	hlID = (hlf_T)0;
      int			filler_lines;
      int			col;
  
*** ../vim-7.1.152/src/ex_cmds.c	Thu Sep 13 18:25:08 2007
--- src/ex_cmds.c	Thu Sep 13 16:19:40 2007
***************
*** 1774,1780 ****
  	 * overwrite a user's viminfo file after a "su root", with a
  	 * viminfo file that the user can't read.
  	 */
! 	st_old.st_dev = st_old.st_ino = 0;
  	st_old.st_mode = 0600;
  	if (mch_stat((char *)fname, &st_old) == 0
  		&& getuid() != ROOT_UID
--- 1774,1781 ----
  	 * overwrite a user's viminfo file after a "su root", with a
  	 * viminfo file that the user can't read.
  	 */
! 	st_old.st_dev = 0;
! 	st_old.st_ino = 0;
  	st_old.st_mode = 0600;
  	if (mch_stat((char *)fname, &st_old) == 0
  		&& getuid() != ROOT_UID
*** ../vim-7.1.152/src/fileio.c	Mon Oct 29 22:37:57 2007
--- src/fileio.c	Mon Oct 22 21:10:00 2007
***************
*** 3209,3215 ****
       * Get information about original file (if there is one).
       */
  #if defined(UNIX) && !defined(ARCHIE)
!     st_old.st_dev = st_old.st_ino = 0;
      perm = -1;
      if (mch_stat((char *)fname, &st_old) < 0)
  	newfile = TRUE;
--- 3209,3216 ----
       * Get information about original file (if there is one).
       */
  #if defined(UNIX) && !defined(ARCHIE)
!     st_old.st_dev = 0;
!     st_old.st_ino = 0;
      perm = -1;
      if (mch_stat((char *)fname, &st_old) < 0)
  	newfile = TRUE;
*** ../vim-7.1.152/src/misc2.c	Sun Oct  7 15:44:28 2007
--- src/misc2.c	Sun Sep 30 18:00:09 2007
***************
*** 5924,5930 ****
--- 5925,5935 ----
  {
      if (emsg_not_now())
  	return TRUE;		/* no error messages at the moment */
+ #ifdef HAVE_STDARG_H
+     vim_snprintf((char *)IObuff, IOSIZE, (char *)s, a1, a2);
+ #else
      vim_snprintf((char *)IObuff, IOSIZE, (char *)s, (long_u)a1, (long_u)a2);
+ #endif
      return emsg(IObuff);
  }
  
*** ../vim-7.1.152/src/gui_xmebw.c	Thu May 10 19:46:55 2007
--- src/gui_xmebw.c	Thu Sep  6 12:57:51 2007
***************
*** 395,405 ****
  
      /* Create the "highlight" pixmap. */
      color[4].pixel = eb->primitive.bottom_shadow_color;
      attr.valuemask = XpmColorSymbols | XpmCloseness | XpmAllocColor;
      attr.closeness = 65535;	/* accuracy isn't crucial */
      attr.colorsymbols = color;
      attr.numsymbols = XtNumber(color);
-     attr.alloc_color = alloc_color;
  
      status = XpmCreatePixmapFromData(dpy, root, data, &pix, NULL, &attr);
      XpmFreeAttributes(&attr);
--- 395,409 ----
  
      /* Create the "highlight" pixmap. */
      color[4].pixel = eb->primitive.bottom_shadow_color;
+ #ifdef XpmAllocColor /* SGI doesn't have it */
      attr.valuemask = XpmColorSymbols | XpmCloseness | XpmAllocColor;
+     attr.alloc_color = alloc_color;
+ #else
+     attr.valuemask = XpmColorSymbols | XpmCloseness;
+ #endif
      attr.closeness = 65535;	/* accuracy isn't crucial */
      attr.colorsymbols = color;
      attr.numsymbols = XtNumber(color);
  
      status = XpmCreatePixmapFromData(dpy, root, data, &pix, NULL, &attr);
      XpmFreeAttributes(&attr);
*** ../vim-7.1.152/src/version.c	Thu Nov  8 14:50:58 2007
--- src/version.c	Thu Nov  8 20:45:56 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     153,
  /**/

-- 
>From "know your smileys":
 @:-()	Elvis Presley

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.154 ---
To: vim-dev at vim.org
Subject: Patch 7.1.154
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.154
Problem:    Compiler warning for signed/unsigned compare.
Solution:   Add type cast.
Files:	    src/screen.c


*** ../vim-7.1.153/src/screen.c	Thu Nov  8 14:50:58 2007
--- src/screen.c	Thu Nov  8 21:18:46 2007
***************
*** 4315,4321 ****
  	    long prevcol = (long)(ptr - line) - (c == NUL);
  
  	    /* we're not really at that column when skipping some text */
! 	    if ((wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
  		++prevcol;
  #endif
  
--- 4315,4321 ----
  	    long prevcol = (long)(ptr - line) - (c == NUL);
  
  	    /* we're not really at that column when skipping some text */
! 	    if ((long)(wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
  		++prevcol;
  #endif
  
*** ../vim-7.1.153/src/version.c	Thu Nov  8 20:47:34 2007
--- src/version.c	Thu Nov  8 21:19:59 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     154,
  /**/

-- 
>From "know your smileys":
 :-F	Bucktoothed vampire with one tooth missing

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.155 ---
To: vim-dev at vim.org
Subject: Patch 7.1.155
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.155
Problem:    Crash when 'undolevels' is 0 and repeating "udd". (James Vega)
Solution:   When there is only one branch use u_freeheader() to delete it.
Files:	    src/undo.c


*** ../vim-7.1.154/src/undo.c	Mon Oct  1 22:53:27 2007
--- src/undo.c	Sat Nov 10 13:45:28 2007
***************
*** 1677,1682 ****
--- 1677,1690 ----
      u_header_T	    **uhpp;	/* if not NULL reset when freeing this header */
  {
      u_header_T	    *tofree, *next;
+ 
+     /* If this is the top branch we may need to use u_freeheader() to update
+      * all the pointers. */
+     if (uhp == buf->b_u_oldhead)
+     {
+ 	u_freeheader(buf, uhp, uhpp);
+ 	return;
+     }
  
      if (uhp->uh_alt_prev != NULL)
  	uhp->uh_alt_prev->uh_alt_next = NULL;
*** ../vim-7.1.154/src/version.c	Thu Nov  8 21:23:34 2007
--- src/version.c	Sat Nov 10 22:49:40 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     155,
  /**/

-- 
I AM THANKFUL...
...for the piles of laundry and ironing because it means I
have plenty of clothes to wear.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.156 ---
To: vim-dev at vim.org
Subject: Patch 7.1.156
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.156
Problem:    Overlapping arguments for strcpy() when expanding command line
	    variables.
Solution:   Use mch_memmove() instead of STRCPY().  Also fix a few typos.
	    (Dominique Pelle)
Files:	    src/ex_docmd.c


*** ../vim-7.1.155/src/ex_docmd.c	Fri Oct 19 16:20:09 2007
--- src/ex_docmd.c	Sat Nov 10 12:39:51 2007
***************
*** 666,672 ****
  		if (ex_pressedreturn)
  		{
  		    /* go up one line, to overwrite the ":<CR>" line, so the
! 		     * output doensn't contain empty lines. */
  		    msg_row = prev_msg_row;
  		    if (prev_msg_row == Rows - 1)
  			msg_row--;
--- 666,672 ----
  		if (ex_pressedreturn)
  		{
  		    /* go up one line, to overwrite the ":<CR>" line, so the
! 		     * output doesn't contain empty lines. */
  		    msg_row = prev_msg_row;
  		    if (prev_msg_row == Rows - 1)
  			msg_row--;
***************
*** 2760,2766 ****
  
      /*
       * Isolate the command and search for it in the command table.
!      * Exeptions:
       * - the 'k' command can directly be followed by any character.
       * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
       *	    but :sre[wind] is another command, as are :scrip[tnames],
--- 2760,2766 ----
  
      /*
       * Isolate the command and search for it in the command table.
!      * Exceptions:
       * - the 'k' command can directly be followed by any character.
       * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
       *	    but :sre[wind] is another command, as are :scrip[tnames],
***************
*** 6677,6683 ****
   * The list should be allocated using alloc(), as should each item in the
   * list. This function takes over responsibility for freeing the list.
   *
!  * XXX The list is made into the arggument list. This is freed using
   * FreeWild(), which does a series of vim_free() calls, unless the two defines
   * __EMX__ and __ALWAYS_HAS_TRAILING_NUL_POINTER are set. In this case, a
   * routine _fnexplodefree() is used. This may cause problems, but as the drop
--- 6677,6683 ----
   * The list should be allocated using alloc(), as should each item in the
   * list. This function takes over responsibility for freeing the list.
   *
!  * XXX The list is made into the argument list. This is freed using
   * FreeWild(), which does a series of vim_free() calls, unless the two defines
   * __EMX__ and __ALWAYS_HAS_TRAILING_NUL_POINTER are set. In this case, a
   * routine _fnexplodefree() is used. This may cause problems, but as the drop
***************
*** 7795,7801 ****
  	if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
  							     && !eap->forceit)
  	{
! 	    EMSG(_("E747: Cannot change directory, buffer is modifed (add ! to override)"));
  	    return;
  	}
  
--- 7795,7801 ----
  	if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
  							     && !eap->forceit)
  	{
! 	    EMSG(_("E747: Cannot change directory, buffer is modified (add ! to override)"));
  	    return;
  	}
  
***************
*** 9391,9397 ****
      if (src > srcstart && src[-1] == '\\')
      {
  	*usedlen = 0;
! 	STRCPY(src - 1, src);		/* remove backslash */
  	return NULL;
      }
  
--- 9391,9397 ----
      if (src > srcstart && src[-1] == '\\')
      {
  	*usedlen = 0;
! 	mch_memmove(src - 1, src, STRLEN(src) + 1);	/* remove backslash */
  	return NULL;
      }
  
*** ../vim-7.1.155/src/version.c	Sat Nov 10 22:50:20 2007
--- src/version.c	Sun Nov 11 19:15:51 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     156,
  /**/

-- 
Common sense is what tells you that the world is flat.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.157 ---
To: vim-dev at vim.org
Subject: Patch 7.1.157
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.157
Problem:    In Ex mode, :" gives an error at end-of-file. (Michael Hordijk)
Solution:   Only give an error for an empty line, not for a comment.
Files:	    src/ex_docmd.c


*** ../vim-7.1.156/src/ex_docmd.c	Sun Nov 11 19:16:44 2007
--- src/ex_docmd.c	Sat Nov 17 20:23:38 2007
***************
*** 1741,1747 ****
  	}
  
  	/* ignore comment and empty lines */
! 	if (*ea.cmd == '"' || *ea.cmd == NUL)
  	{
  	    ex_pressedreturn = TRUE;
  	    goto doend;
--- 1741,1749 ----
  	}
  
  	/* ignore comment and empty lines */
! 	if (*ea.cmd == '"')
! 	    goto doend;
! 	if (*ea.cmd == NUL)
  	{
  	    ex_pressedreturn = TRUE;
  	    goto doend;
*** ../vim-7.1.156/src/version.c	Sun Nov 11 19:16:44 2007
--- src/version.c	Tue Nov 20 12:28:22 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     157,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
119. You are reading a book and look for the scroll bar to get to
     the next page.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.158 ---
To: vim-dev at vim.org
Subject: Patch 7.1.158 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.158 (extra)
Problem:    Win32 console: When 'encoding' is "utf-8" and typing Alt-y the
            result is wrong.  Win32 GUI: Alt-y results in "u" when 'encoding'
            is "cp1250" (Lukas Cerman)
Solution:   For utf-8 don't set the 7th bit in a byte, convert to the correct
            byte sequence.  For cp1250, when conversion to 'encoding' results
            in the 7th bit not set, set the 7th bit after conversion.
Files:      src/os_win32.c, src/gui_w48.c


*** ../vim-7.1.157/src/os_win32.c	Mon Oct  1 20:33:45 2007
--- src/os_win32.c	Sat Oct 27 17:35:04 2007
***************
*** 1521,1527 ****
--- 1521,1532 ----
  #endif
  		   )
  		{
+ #ifdef FEAT_MBYTE
+ 		    n = (*mb_char2bytes)(typeahead[typeaheadlen] | 0x80,
+ 						    typeahead + typeaheadlen);
+ #else
  		    typeahead[typeaheadlen] |= 0x80;
+ #endif
  		    modifiers &= ~MOD_MASK_ALT;
  		}
  
*** ../vim-7.1.157/src/gui_w48.c	Sun Sep 30 14:00:41 2007
--- src/gui_w48.c	Mon Oct 29 20:00:25 2007
***************
*** 486,495 ****
  
  /*
   * Convert Unicode character "ch" to bytes in "string[slen]".
   * Return the length.
   */
      static int
! char_to_string(int ch, char_u *string, int slen)
  {
      int		len;
      int		i;
--- 486,496 ----
  
  /*
   * Convert Unicode character "ch" to bytes in "string[slen]".
+  * When "had_alt" is TRUE the ALT key was included in "ch".
   * Return the length.
   */
      static int
! char_to_string(int ch, char_u *string, int slen, int had_alt)
  {
      int		len;
      int		i;
***************
*** 522,529 ****
--- 523,544 ----
  	 * "enc_codepage" is non-zero use the standard Win32 function,
  	 * otherwise use our own conversion function (e.g., for UTF-8). */
  	if (enc_codepage > 0)
+ 	{
  	    len = WideCharToMultiByte(enc_codepage, 0, wstring, len,
  						       string, slen, 0, NULL);
+ 	    /* If we had included the ALT key into the character but now the
+ 	     * upper bit is no longer set, that probably means the conversion
+ 	     * failed.  Convert the original character and set the upper bit
+ 	     * afterwards. */
+ 	    if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80)
+ 	    {
+ 		wstring[0] = ch & 0x7f;
+ 		len = WideCharToMultiByte(enc_codepage, 0, wstring, len,
+ 						       string, slen, 0, NULL);
+ 		if (len == 1) /* safety check */
+ 		    string[0] |= 0x80;
+ 	    }
+ 	}
  	else
  	{
  	    len = 1;
***************
*** 573,579 ****
      char_u	string[40];
      int		len = 0;
  
!     len = char_to_string(ch, string, 40);
      if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts)
      {
  	trash_input_buf();
--- 588,594 ----
      char_u	string[40];
      int		len = 0;
  
!     len = char_to_string(ch, string, 40, FALSE);
      if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts)
      {
  	trash_input_buf();
***************
*** 640,646 ****
      {
  	/* Although the documentation isn't clear about it, we assume "ch" is
  	 * a Unicode character. */
! 	len += char_to_string(ch, string + len, 40 - len);
      }
  
      add_to_input_buf(string, len);
--- 655,661 ----
      {
  	/* Although the documentation isn't clear about it, we assume "ch" is
  	 * a Unicode character. */
! 	len += char_to_string(ch, string + len, 40 - len, TRUE);
      }
  
      add_to_input_buf(string, len);
***************
*** 1775,1781 ****
  		    int	len;
  
  		    /* Handle "key" as a Unicode character. */
! 		    len = char_to_string(key, string, 40);
  		    add_to_input_buf(string, len);
  		}
  		break;
--- 1790,1796 ----
  		    int	len;
  
  		    /* Handle "key" as a Unicode character. */
! 		    len = char_to_string(key, string, 40, FALSE);
  		    add_to_input_buf(string, len);
  		}
  		break;
*** ../vim-7.1.157/src/version.c	Tue Nov 20 12:30:31 2007
--- src/version.c	Tue Nov 20 17:19:18 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     158,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
123. You ask the car dealer to install an extra cigarette lighter
     on your new car to power your notebook.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.159 ---
To: vim-dev at vim.org
Subject: Patch 7.1.159
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.159
Problem:    strcpy() has overlapping arguments.
Solution:   Use mch_memmove() instead. (Dominique Pelle)
Files:	    src/ex_cmds.c


*** ../vim-7.1.158/src/ex_cmds.c	Thu Nov  8 20:47:34 2007
--- src/ex_cmds.c	Sun Nov 18 14:11:58 2007
***************
*** 4885,4891 ****
  			    ++line2;
  			    /* move the cursor to the new line, like Vi */
  			    ++curwin->w_cursor.lnum;
! 			    STRCPY(new_start, p1 + 1);	/* copy the rest */
  			    p1 = new_start - 1;
  			}
  		    }
--- 4885,4892 ----
  			    ++line2;
  			    /* move the cursor to the new line, like Vi */
  			    ++curwin->w_cursor.lnum;
! 			    /* copy the rest */
! 			    mch_memmove(new_start, p1 + 1, STRLEN(p1 + 1) + 1);
  			    p1 = new_start - 1;
  			}
  		    }
*** ../vim-7.1.158/src/version.c	Tue Nov 20 17:21:28 2007
--- src/version.c	Tue Nov 20 18:01:45 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     159,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
125. You begin to wonder how often it REALLY is necessary to get up
     and shower or bathe.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.160 ---
To: vim-dev at vim.org
Subject: Patch 7.1.160
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.160
Problem:    When a focus autocommand is defined, getting or losing focus
	    causes the hit-enter prompt to be redrawn. (Bjorn Winckler)
Solution:   Overwrite the last line.
Files:	    src/message.c


*** ../vim-7.1.159/src/message.c	Thu Sep 13 22:04:30 2007
--- src/message.c	Sun Nov  4 17:33:15 2007
***************
*** 2850,2855 ****
--- 2850,2864 ----
      }
      else if (State == HITRETURN || State == SETWSIZE)
      {
+ 	if (msg_row == Rows - 1)
+ 	{
+ 	    /* Avoid drawing the "hit-enter" prompt below the previous one,
+ 	     * overwrite it.  Esp. useful when regaining focus and a
+ 	     * FocusGained autocmd exists but didn't draw anything. */
+ 	    msg_didout = FALSE;
+ 	    msg_col = 0;
+ 	    msg_clr_eos();
+ 	}
  	hit_return_msg();
  	msg_row = Rows - 1;
      }
*** ../vim-7.1.159/src/version.c	Tue Nov 20 18:03:34 2007
--- src/version.c	Sat Nov 24 15:41:43 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     160,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
142. You dream about creating the world's greatest web site.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.161 ---
To: vim-dev at vim.org
Subject: Patch 7.1.161
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.161
Problem:    Compilation errors with tiny features and EXITFREE.
Solution:   Add #ifdefs. (Dominique Pelle)
Files:	    src/edit.c, src/misc2.c


*** ../vim-7.1.160/src/edit.c	Thu Nov  8 13:03:33 2007
--- src/edit.c	Sat Nov 24 14:57:46 2007
***************
*** 2236,2242 ****
  	    while (i < actual_len && (p - IObuff + 6) < IOSIZE)
  #ifdef FEAT_MBYTE
  		if (has_mbyte)
! 		    p += mb_char2bytes(wca[i++], p);
  		else
  #endif
  		    *(p++) = wca[i++];
--- 2236,2242 ----
  	    while (i < actual_len && (p - IObuff + 6) < IOSIZE)
  #ifdef FEAT_MBYTE
  		if (has_mbyte)
! 		    p += (*mb_char2bytes)(wca[i++], p);
  		else
  #endif
  		    *(p++) = wca[i++];
***************
*** 6444,6451 ****
--- 6444,6453 ----
  {
      vim_free(last_insert);
      last_insert = NULL;
+ # ifdef FEAT_INS_EXPAND
      vim_free(compl_orig_text);
      compl_orig_text = NULL;
+ # endif
  }
  #endif
  
*** ../vim-7.1.160/src/misc2.c	Thu Nov  8 20:47:34 2007
--- src/misc2.c	Sat Nov 24 15:01:46 2007
***************
*** 964,970 ****
  {
      buf_T	*buf, *nextbuf;
      static int	entered = FALSE;
-     win_T	*win;
  
      /* When we cause a crash here it is caught and Vim tries to exit cleanly.
       * Don't try freeing everything again. */
--- 965,970 ----
***************
*** 972,986 ****
  	return;
      entered = TRUE;
  
      block_autocmds();	    /* don't want to trigger autocommands here */
  
! #ifdef FEAT_WINDOWS
      /* close all tabs and windows */
      if (first_tabpage->tp_next != NULL)
  	do_cmdline_cmd((char_u *)"tabonly!");
      if (firstwin != lastwin)
  	do_cmdline_cmd((char_u *)"only!");
! #endif
  
  # if defined(FEAT_SPELL)
      /* Free all spell info. */
--- 972,988 ----
  	return;
      entered = TRUE;
  
+ # ifdef FEAT_AUTOCMD
      block_autocmds();	    /* don't want to trigger autocommands here */
+ # endif
  
! # ifdef FEAT_WINDOWS
      /* close all tabs and windows */
      if (first_tabpage->tp_next != NULL)
  	do_cmdline_cmd((char_u *)"tabonly!");
      if (firstwin != lastwin)
  	do_cmdline_cmd((char_u *)"only!");
! # endif
  
  # if defined(FEAT_SPELL)
      /* Free all spell info. */
***************
*** 1031,1038 ****
--- 1033,1044 ----
      free_regexp_stuff();
      free_tag_stuff();
      free_cd_dir();
+ # ifdef FEAT_EVAL
      set_expr_line(NULL);
+ # endif
+ # ifdef FEAT_DIFF
      diff_clear(curtab);
+ # endif
      clear_sb_text();	      /* free any scrollback text */
  
      /* Free some global vars. */
***************
*** 1041,1059 ****
      vim_free(clip_exclude_prog);
  # endif
      vim_free(last_cmdline);
      vim_free(new_last_cmdline);
      set_keep_msg(NULL, 0);
      vim_free(ff_expand_buffer);
  
      /* Clear cmdline history. */
      p_hi = 0;
      init_history();
  
  #ifdef FEAT_QUICKFIX
!     qf_free_all(NULL);
!     /* Free all location lists */
!     FOR_ALL_WINDOWS(win)
! 	qf_free_all(win);
  #endif
  
      /* Close all script inputs. */
--- 1047,1073 ----
      vim_free(clip_exclude_prog);
  # endif
      vim_free(last_cmdline);
+ # ifdef FEAT_CMDHIST
      vim_free(new_last_cmdline);
+ # endif
      set_keep_msg(NULL, 0);
      vim_free(ff_expand_buffer);
  
      /* Clear cmdline history. */
      p_hi = 0;
+ # ifdef FEAT_CMDHIST
      init_history();
+ # endif
  
  #ifdef FEAT_QUICKFIX
!     {
! 	win_T	*win;
! 
! 	qf_free_all(NULL);
! 	/* Free all location lists */
! 	FOR_ALL_WINDOWS(win)
! 	    qf_free_all(win);
!     }
  #endif
  
      /* Close all script inputs. */
*** ../vim-7.1.160/src/version.c	Sat Nov 24 15:44:17 2007
--- src/version.c	Sat Nov 24 20:55:38 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     161,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
143. You dream in pallettes of 216 websafe colors.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.162 ---
To: vim-dev at vim.org
Subject: Patch 7.1.162
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.162
Problem:    Crash when using a modifier before "while" or "for". (A.Politz)
Solution:   Skip modifiers when checking for a loop command.
Files:	    src/proto/ex_docmd.pro, src/ex_docmd.c, src/ex_eval.c


*** ../vim-7.1.161/src/proto/ex_docmd.pro	Sun Sep 30 14:00:41 2007
--- src/proto/ex_docmd.pro	Sat Nov 24 16:34:06 2007
***************
*** 5,10 ****
--- 5,11 ----
  int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
  void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
  int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
+ int modifier_len __ARGS((char_u *cmd));
  int cmd_exists __ARGS((char_u *name));
  char_u *set_one_cmd_context __ARGS((expand_T *xp, char_u *buff));
  char_u *skip_range __ARGS((char_u *cmd, int *ctx));
*** ../vim-7.1.161/src/ex_docmd.c	Tue Nov 20 12:30:31 2007
--- src/ex_docmd.c	Sat Nov 24 16:41:20 2007
***************
*** 2963,2968 ****
--- 2963,3019 ----
  #endif
  
  #if defined(FEAT_EVAL) || defined(PROTO)
+ static struct cmdmod
+ {
+     char	*name;
+     int		minlen;
+     int		has_count;  /* :123verbose  :3tab */
+ } cmdmods[] = {
+     {"aboveleft", 3, FALSE},
+     {"belowright", 3, FALSE},
+     {"botright", 2, FALSE},
+     {"browse", 3, FALSE},
+     {"confirm", 4, FALSE},
+     {"hide", 3, FALSE},
+     {"keepalt", 5, FALSE},
+     {"keepjumps", 5, FALSE},
+     {"keepmarks", 3, FALSE},
+     {"leftabove", 5, FALSE},
+     {"lockmarks", 3, FALSE},
+     {"rightbelow", 6, FALSE},
+     {"sandbox", 3, FALSE},
+     {"silent", 3, FALSE},
+     {"tab", 3, TRUE},
+     {"topleft", 2, FALSE},
+     {"verbose", 4, TRUE},
+     {"vertical", 4, FALSE},
+ };
+ 
+ /*
+  * Return length of a command modifier (including optional count).
+  * Return zero when it's not a modifier.
+  */
+     int
+ modifier_len(cmd)
+     char_u	*cmd;
+ {
+     int		i, j;
+     char_u	*p = cmd;
+ 
+     if (VIM_ISDIGIT(*cmd))
+ 	p = skipwhite(skipdigits(cmd));
+     for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
+     {
+ 	for (j = 0; p[j] != NUL; ++j)
+ 	    if (p[j] != cmdmods[i].name[j])
+ 		break;
+ 	if (!isalpha(p[j]) && j >= cmdmods[i].minlen
+ 					&& (p == cmd || cmdmods[i].has_count))
+ 	    return j + (p - cmd);
+     }
+     return 0;
+ }
+ 
  /*
   * Return > 0 if an Ex command "name" exists.
   * Return 2 if there is an exact match.
***************
*** 2977,3006 ****
      int		i;
      int		j;
      char_u	*p;
-     static struct cmdmod
-     {
- 	char	*name;
- 	int	minlen;
-     } cmdmods[] = {
- 	{"aboveleft", 3},
- 	{"belowright", 3},
- 	{"botright", 2},
- 	{"browse", 3},
- 	{"confirm", 4},
- 	{"hide", 3},
- 	{"keepalt", 5},
- 	{"keepjumps", 5},
- 	{"keepmarks", 3},
- 	{"leftabove", 5},
- 	{"lockmarks", 3},
- 	{"rightbelow", 6},
- 	{"sandbox", 3},
- 	{"silent", 3},
- 	{"tab", 3},
- 	{"topleft", 2},
- 	{"verbose", 4},
- 	{"vertical", 4},
-     };
  
      /* Check command modifiers. */
      for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
--- 3028,3033 ----
*** ../vim-7.1.161/src/ex_eval.c	Wed Aug  1 15:47:06 2007
--- src/ex_eval.c	Sat Nov 24 16:34:09 2007
***************
*** 2269,2277 ****
  has_loop_cmd(p)
      char_u	*p;
  {
!     p = skipwhite(p);
!     while (*p == ':')
! 	p = skipwhite(p + 1);
      if ((p[0] == 'w' && p[1] == 'h')
  	    || (p[0] == 'f' && p[1] == 'o' && p[2] == 'r'))
  	return TRUE;
--- 2269,2286 ----
  has_loop_cmd(p)
      char_u	*p;
  {
!     int		len;
! 
!     /* skip modifiers, white space and ':' */
!     for (;;)
!     {
! 	while (*p == ' ' || *p == '\t' || *p == ':')
! 	    ++p;
! 	len = modifier_len(p);
! 	if (len == 0)
! 	    break;
! 	p += len;
!     }
      if ((p[0] == 'w' && p[1] == 'h')
  	    || (p[0] == 'f' && p[1] == 'o' && p[2] == 'r'))
  	return TRUE;
*** ../vim-7.1.161/src/version.c	Sat Nov 24 21:27:33 2007
--- src/version.c	Sat Nov 24 21:48:38 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     162,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
144. You eagerly await the update of the "Cool Site of the Day."

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.163 ---
To: vim-dev at vim.org
Subject: Patch 7.1.163
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.163
Problem:    Warning for the unknown option 'bufsecret'.
Solution:   Remove the lines .vim that use this option. (Andy Wokula)
Files:	    runtime/menu.vim


*** ../vim-7.1.162/runtime/menu.vim	Sun May  6 15:21:23 2007
--- runtime/menu.vim	Mon Nov 19 23:17:11 2007
***************
*** 2,8 ****
  " You can also use this as a start for your own set of menus.
  "
  " Maintainer:	Bram Moolenaar <Bram at vim.org>
! " Last Change:	2007 Jan 09
  
  " Note that ":an" (short for ":anoremenu") is often used to make a menu work
  " in all modes and avoid side effects from mappings defined by the user.
--- 2,8 ----
  " You can also use this as a start for your own set of menus.
  "
  " Maintainer:	Bram Moolenaar <Bram at vim.org>
! " Last Change:	2007 Nov 19
  
  " Note that ":an" (short for ":anoremenu") is often used to make a menu work
  " in all modes and avoid side effects from mappings defined by the user.
***************
*** 658,664 ****
    let buf = 1
    while buf <= bufnr('$')
      if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
- 					    \ && !getbufvar(buf, "&bufsecret")
        let s:bmenu_count = s:bmenu_count + 1
      endif
      let buf = buf + 1
--- 658,663 ----
***************
*** 671,677 ****
    let buf = 1
    while buf <= bufnr('$')
      if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
- 					    \ && !getbufvar(buf, "&bufsecret")
        call <SID>BMFilename(bufname(buf), buf)
      endif
      let buf = buf + 1
--- 670,675 ----
*** ../vim-7.1.162/src/version.c	Sat Nov 24 21:49:19 2007
--- src/version.c	Thu Nov 29 17:44:08 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     163,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
158. You get a tuner card so you can watch TV while surfing.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.164 ---
To: vim-dev at vim.org
Subject: Patch 7.1.164
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.164
Problem:    Reading past end of regexp pattern. (Dominique Pelle)
Solution:   Use utf_ptr2len().
Files:	    src/regexp.c


*** ../vim-7.1.163/src/regexp.c	Sat Aug 11 13:57:31 2007
--- src/regexp.c	Sat Nov 24 13:23:53 2007
***************
*** 2770,2776 ****
      {
  #ifdef FEAT_MBYTE
  	if (enc_utf8)
! 	    prevchr_len += utf_char2len(mb_ptr2char(regparse + prevchr_len));
  	else if (has_mbyte)
  	    prevchr_len += (*mb_ptr2len)(regparse + prevchr_len);
  	else
--- 2770,2777 ----
      {
  #ifdef FEAT_MBYTE
  	if (enc_utf8)
! 	    /* exclude composing chars that mb_ptr2len does include */
! 	    prevchr_len += utf_ptr2len(regparse + prevchr_len);
  	else if (has_mbyte)
  	    prevchr_len += (*mb_ptr2len)(regparse + prevchr_len);
  	else
*** ../vim-7.1.163/src/version.c	Thu Nov 29 17:46:01 2007
--- src/version.c	Thu Nov 29 21:25:45 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     164,
  /**/

-- 
Send $25.00 for handy leaflet on how to make money by selling leaflets

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.165 ---
To: vim-dev at vim.org
Subject: Patch 7.1.165
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.165
Problem:    Crash related to getting X window ID. (Dominique Pelle)
Solution:   Don't trust the window ID that we got in the past, check it every
	    time.
Files:	    src/os_unix.c


*** ../vim-7.1.164/src/os_unix.c	Thu Aug 30 11:46:46 2007
--- src/os_unix.c	Thu Nov 29 18:19:56 2007
***************
*** 310,316 ****
  }
  
  /*
!  * mch_inchar(): low level input funcion.
   * Get a characters from the keyboard.
   * Return the number of characters that are available.
   * If wtime == 0 do not wait for characters.
--- 310,316 ----
  }
  
  /*
!  * mch_inchar(): low level input function.
   * Get a characters from the keyboard.
   * Return the number of characters that are available.
   * If wtime == 0 do not wait for characters.
***************
*** 1567,1584 ****
  #ifdef FEAT_XCLIPBOARD
      if (xterm_dpy != NULL && x11_window != 0)
      {
! 	/* Checked it already. */
! 	if (x11_display_from == XD_XTERM)
! 	    return OK;
! 
! 	/*
! 	 * If the X11 display was opened here before, for the window where Vim
! 	 * was started, close that one now to avoid a memory leak.
! 	 */
! 	if (x11_display_from == XD_HERE && x11_display != NULL)
! 	    XCloseDisplay(x11_display);
! 	x11_display = xterm_dpy;
! 	x11_display_from = XD_XTERM;
  	if (test_x11_window(x11_display) == FAIL)
  	{
  	    /* probably bad $WINDOWID */
--- 1567,1585 ----
  #ifdef FEAT_XCLIPBOARD
      if (xterm_dpy != NULL && x11_window != 0)
      {
! 	/* We may have checked it already, but Gnome terminal can move us to
! 	 * another window, so we need to check every time. */
! 	if (x11_display_from != XD_XTERM)
! 	{
! 	    /*
! 	     * If the X11 display was opened here before, for the window where
! 	     * Vim was started, close that one now to avoid a memory leak.
! 	     */
! 	    if (x11_display_from == XD_HERE && x11_display != NULL)
! 		XCloseDisplay(x11_display);
! 	    x11_display = xterm_dpy;
! 	    x11_display_from = XD_XTERM;
! 	}
  	if (test_x11_window(x11_display) == FAIL)
  	{
  	    /* probably bad $WINDOWID */
***************
*** 2421,2427 ****
  /*
   * Set the case of the file name, if it already exists.  This will cause the
   * file name to remain exactly the same.
!  * Only required for file systems where case is ingored and preserved.
   */
  /*ARGSUSED*/
      void
--- 2422,2428 ----
  /*
   * Set the case of the file name, if it already exists.  This will cause the
   * file name to remain exactly the same.
!  * Only required for file systems where case is ignored and preserved.
   */
  /*ARGSUSED*/
      void
***************
*** 4653,4659 ****
  	ret = poll(fds, nfd, towait);
  # ifdef FEAT_MZSCHEME
  	if (ret == 0 && mzquantum_used)
! 	    /* MzThreads scheduling is required and timeout occured */
  	    finished = FALSE;
  # endif
  
--- 4654,4660 ----
  	ret = poll(fds, nfd, towait);
  # ifdef FEAT_MZSCHEME
  	if (ret == 0 && mzquantum_used)
! 	    /* MzThreads scheduling is required and timeout occurred */
  	    finished = FALSE;
  # endif
  
***************
*** 4801,4807 ****
  #endif
  # ifdef FEAT_MZSCHEME
  	if (ret == 0 && mzquantum_used)
! 	    /* loop if MzThreads must be scheduled and timeout occured */
  	    finished = FALSE;
  # endif
  
--- 4802,4808 ----
  #endif
  # ifdef FEAT_MZSCHEME
  	if (ret == 0 && mzquantum_used)
! 	    /* loop if MzThreads must be scheduled and timeout occurred */
  	    finished = FALSE;
  # endif
  
***************
*** 5191,5197 ****
  	{
  	    /* When using system() always add extra quotes, because the shell
  	     * is started twice.  Otherwise put a backslash before special
! 	     * characters, except insice ``. */
  #ifdef USE_SYSTEM
  	    STRCAT(command, " \"");
  	    STRCAT(command, pat[i]);
--- 5192,5198 ----
  	{
  	    /* When using system() always add extra quotes, because the shell
  	     * is started twice.  Otherwise put a backslash before special
! 	     * characters, except inside ``. */
  #ifdef USE_SYSTEM
  	    STRCAT(command, " \"");
  	    STRCAT(command, pat[i]);
***************
*** 5675,5681 ****
  	    /* gpm library tries to handling TSTP causes
  	     * problems. Anyways, we close connection to Gpm whenever
  	     * we are going to suspend or starting an external process
! 	     * so we should'nt  have problem with this
  	     */
  	    signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
  	    return 1; /* succeed */
--- 5676,5682 ----
  	    /* gpm library tries to handling TSTP causes
  	     * problems. Anyways, we close connection to Gpm whenever
  	     * we are going to suspend or starting an external process
! 	     * so we shouldn't  have problem with this
  	     */
  	    signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
  	    return 1; /* succeed */
*** ../vim-7.1.164/src/version.c	Thu Nov 29 21:26:38 2007
--- src/version.c	Sat Dec  1 17:17:20 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     165,
  /**/

-- 
"Hit any key to continue" is very confusing when you have two keyboards.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.166 ---
To: vim-dev at vim.org
Subject: Patch 7.1.166
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.166
Problem:    Memory leak for using "gp" in Visual mode.
Solution:   Free memory in put_register(). (Dominique Pelle)
Files:	    src/ops.c


*** ../vim-7.1.165/src/ops.c	Thu Nov  8 10:35:02 2007
--- src/ops.c	Sun Nov 25 15:17:43 2007
***************
*** 927,934 ****
      int		name;
      int		copy;	/* make a copy, if FALSE make register empty. */
  {
!     static struct yankreg	*reg;
!     int				i;
  
  #ifdef FEAT_CLIPBOARD
      /* When Visual area changed, may have to update selection.  Obtain the
--- 927,934 ----
      int		name;
      int		copy;	/* make a copy, if FALSE make register empty. */
  {
!     struct yankreg	*reg;
!     int			i;
  
  #ifdef FEAT_CLIPBOARD
      /* When Visual area changed, may have to update selection.  Obtain the
***************
*** 967,973 ****
  }
  
  /*
!  * Put "reg" into register "name".  Free any previous contents.
   */
      void
  put_register(name, reg)
--- 967,973 ----
  }
  
  /*
!  * Put "reg" into register "name".  Free any previous contents and "reg".
   */
      void
  put_register(name, reg)
***************
*** 977,982 ****
--- 977,983 ----
      get_yank_register(name, 0);
      free_yank_all();
      *y_current = *(struct yankreg *)reg;
+     vim_free(reg);
  
  # ifdef FEAT_CLIPBOARD
      /* Send text written to clipboard register to the clipboard. */
*** ../vim-7.1.165/src/version.c	Sat Dec  1 17:18:45 2007
--- src/version.c	Sat Dec  1 21:11:25 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     166,
  /**/

-- 
An error has occurred.  Hit any user to continue.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.167 ---
To: vim-dev at vim.org
Subject: Patch 7.1.167
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.167
Problem:    Xxd crashes when using "xxd -b -c 110". (Debian bug 452789)
Solution:   Allocate more memory.  Fix check for maximum number of columns.
Files:	    src/xxd/xxd.c


*** ../vim-7.1.166/src/xxd/xxd.c	Thu May 10 19:07:42 2007
--- src/xxd/xxd.c	Thu Nov 29 21:05:16 2007
***************
*** 212,218 ****
  
  #define TRY_SEEK	/* attempt to use lseek, or skip forward by reading */
  #define COLS 256	/* change here, if you ever need more columns */
! #define LLEN (9 + (5*COLS-1)/2 + 2 + COLS)
  
  char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa;
  
--- 212,218 ----
  
  #define TRY_SEEK	/* attempt to use lseek, or skip forward by reading */
  #define COLS 256	/* change here, if you ever need more columns */
! #define LLEN (11 + (9*COLS-1)/1 + COLS + 2)
  
  char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa;
  
***************
*** 590,596 ****
        default:			octspergrp = 0; break;
        }
  
!   if (cols < 1 || (!hextype && (cols > COLS)))
      {
        fprintf(stderr, "%s: invalid number of columns (max. %d).\n", pname, COLS);
        exit(1);
--- 590,597 ----
        default:			octspergrp = 0; break;
        }
  
!   if (cols < 1 || ((hextype == HEX_NORMAL || hextype == HEX_BITS)
! 							    && (cols > COLS)))
      {
        fprintf(stderr, "%s: invalid number of columns (max. %d).\n", pname, COLS);
        exit(1);
***************
*** 750,755 ****
--- 751,757 ----
  	}
        if (ebcdic)
  	e = (e < 64) ? '.' : etoa64[e-64];
+       /* When changing this update definition of LLEN above. */
        l[11 + (grplen * cols - 1)/octspergrp + p] =
  #ifdef __MVS__
  	  (e >= 64)
*** ../vim-7.1.166/src/version.c	Sat Dec  1 21:12:23 2007
--- src/version.c	Mon Dec  3 21:30:31 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     167,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
178. You look for an icon to double-click to open your bedroom window.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.168 ---
To: vim-dev at vim.org
Subject: Patch 7.1.168 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.168 (extra)
Problem:    Win32 GUI: Since patch 7.1.095, when the Vim window does not have
	    focus, clicking in it doesn't position the cursor. (Juergen
	    Kraemer)
Solution:   Don't reset s_button_pending just after receiving focus.
Files:	    src/gui_w48.c


*** ../vim-7.1.167/src/gui_w48.c	Tue Nov 20 17:21:28 2007
--- src/gui_w48.c	Mon Dec  3 22:13:16 2007
***************
*** 290,295 ****
--- 290,300 ----
  
  /* Local variables */
  static int		s_button_pending = -1;
+ 
+ /* s_getting_focus is set when we got focus but didn't see mouse-up event yet,
+  * so don't reset s_button_pending. */
+ static int		s_getting_focus = FALSE;
+ 
  static int		s_x_pending;
  static int		s_y_pending;
  static UINT		s_kFlags_pending;
***************
*** 671,676 ****
--- 676,683 ----
  {
      int vim_modifiers = 0x0;
  
+     s_getting_focus = FALSE;
+ 
      if (keyFlags & MK_SHIFT)
  	vim_modifiers |= MOUSE_SHIFT;
      if (keyFlags & MK_CONTROL)
***************
*** 792,797 ****
--- 799,805 ----
  {
      int button;
  
+     s_getting_focus = FALSE;
      if (s_button_pending > -1)
      {
  	/* Delayed action for mouse down event */
***************
*** 1951,1958 ****
  	    allow_scrollbar = FALSE;
  
  	    /* Clear pending mouse button, the release event may have been
! 	     * taken by the dialog window. */
! 	    s_button_pending = -1;
  
  	    return OK;
  	}
--- 1959,1968 ----
  	    allow_scrollbar = FALSE;
  
  	    /* Clear pending mouse button, the release event may have been
! 	     * taken by the dialog window.  But don't do this when getting
! 	     * focus, we need the mouse-up event then. */
! 	    if (!s_getting_focus)
! 		s_button_pending = -1;
  
  	    return OK;
  	}
***************
*** 2702,2707 ****
--- 2712,2718 ----
      HWND hwndOldFocus)
  {
      gui_focus_change(TRUE);
+     s_getting_focus = TRUE;
      (void)MyWindowProc(hwnd, WM_SETFOCUS, (WPARAM)hwndOldFocus, 0);
  }
  
***************
*** 2711,2716 ****
--- 2722,2728 ----
      HWND hwndNewFocus)
  {
      gui_focus_change(FALSE);
+     s_getting_focus = FALSE;
      (void)MyWindowProc(hwnd, WM_KILLFOCUS, (WPARAM)hwndNewFocus, 0);
  }
  
*** ../vim-7.1.167/src/version.c	Mon Dec  3 21:31:56 2007
--- src/version.c	Mon Dec  3 22:16:32 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     168,
  /**/

-- 
Rule #1: Don't give somebody a tool that he's going to hurt himself with.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.169 ---
To: vim-dev at vim.org
Subject: Patch 7.1.169
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.169
Problem:    Using uninitialized variable when system() fails. (Dominique
            Pelle)
Solution:   Let system() return an empty string when it fails.
Files:      src/eval.c


*** ../vim-7.1.168/src/eval.c	Thu Nov  8 20:47:34 2007
--- src/eval.c	Fri Nov 30 21:01:26 2007
***************
*** 15826,15832 ****
      FILE	*fd;
  
      if (check_restricted() || check_secure())
! 	return;
  
      if (argvars[1].v_type != VAR_UNKNOWN)
      {
--- 15826,15832 ----
      FILE	*fd;
  
      if (check_restricted() || check_secure())
! 	goto done;
  
      if (argvars[1].v_type != VAR_UNKNOWN)
      {
***************
*** 15837,15843 ****
  	if ((infile = vim_tempname('i')) == NULL)
  	{
  	    EMSG(_(e_notmp));
! 	    return;
  	}
  
  	fd = mch_fopen((char *)infile, WRITEBIN);
--- 15837,15843 ----
  	if ((infile = vim_tempname('i')) == NULL)
  	{
  	    EMSG(_(e_notmp));
! 	    goto done;
  	}
  
  	fd = mch_fopen((char *)infile, WRITEBIN);
*** ../vim-7.1.168/src/version.c	Mon Dec  3 22:20:17 2007
--- src/version.c	Fri Dec  7 17:07:32 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     169,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.170 ---
To: vim-dev at vim.org
Subject: Patch 7.1.170
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.170
Problem:    Valgrind warning for overlapping arguments for strcpy().
Solution:   Use mch_memmove() instead. (Dominique Pelle)
Files:	    src/getchar.c


*** ../vim-7.1.169/src/getchar.c	Thu Sep 13 18:25:08 2007
--- src/getchar.c	Mon Dec  3 20:42:29 2007
***************
*** 253,260 ****
  	return;
      }
      else if (buf->bh_index != 0)
! 	STRCPY(buf->bh_first.b_next->b_str,
! 				 buf->bh_first.b_next->b_str + buf->bh_index);
      buf->bh_index = 0;
  
      if (buf->bh_space >= (int)slen)
--- 253,261 ----
  	return;
      }
      else if (buf->bh_index != 0)
! 	mch_memmove(buf->bh_first.b_next->b_str,
! 		    buf->bh_first.b_next->b_str + buf->bh_index,
! 		    STRLEN(buf->bh_first.b_next->b_str + buf->bh_index) + 1);
      buf->bh_index = 0;
  
      if (buf->bh_space >= (int)slen)
*** ../vim-7.1.169/src/version.c	Fri Dec  7 17:08:35 2007
--- src/version.c	Fri Dec  7 17:27:13 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     170,
  /**/

-- 
Some of the well know MS-Windows errors:
	ESLEEP		Operator fell asleep
	ENOERR		No error yet
	EDOLLAR		OS too expensive
	EWINDOWS	MS-Windows loaded, system in danger

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.171 ---
To: vim-dev at vim.org
Subject: Patch 7.1.171
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.171
Problem:    Reading one byte before allocated memory.
Solution:   Check index not to become negative. (Dominique Pelle)
Files:	    src/ex_getln.c


*** ../vim-7.1.170/src/ex_getln.c	Tue Oct 30 17:36:31 2007
--- src/ex_getln.c	Tue Dec  4 21:49:24 2007
***************
*** 1186,1195 ****
  	case K_LEFT:
  	case K_S_LEFT:
  	case K_C_LEFT:
  		do
  		{
- 		    if (ccline.cmdpos == 0)
- 			break;
  		    --ccline.cmdpos;
  #ifdef FEAT_MBYTE
  		    if (has_mbyte)	/* move to first byte of char */
--- 1186,1195 ----
  	case K_LEFT:
  	case K_S_LEFT:
  	case K_C_LEFT:
+ 		if (ccline.cmdpos == 0)
+ 		    goto cmdline_not_changed;
  		do
  		{
  		    --ccline.cmdpos;
  #ifdef FEAT_MBYTE
  		    if (has_mbyte)	/* move to first byte of char */
***************
*** 1198,1204 ****
  #endif
  		    ccline.cmdspos -= cmdline_charsize(ccline.cmdpos);
  		}
! 		while ((c == K_S_LEFT || c == K_C_LEFT
  			       || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
  			&& ccline.cmdbuff[ccline.cmdpos - 1] != ' ');
  #ifdef FEAT_MBYTE
--- 1198,1205 ----
  #endif
  		    ccline.cmdspos -= cmdline_charsize(ccline.cmdpos);
  		}
! 		while (ccline.cmdpos > 0
! 			&& (c == K_S_LEFT || c == K_C_LEFT
  			       || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
  			&& ccline.cmdbuff[ccline.cmdpos - 1] != ' ');
  #ifdef FEAT_MBYTE
*** ../vim-7.1.170/src/version.c	Fri Dec  7 17:30:04 2007
--- src/version.c	Fri Dec  7 20:00:06 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     171,
  /**/

-- 
Some of the well know MS-Windows errors:
	EMULTI		Multitasking attempted, system confused
	EKEYBOARD	Keyboard locked, try getting out of this one!
	EXPLAIN		Unexplained error, please tell us what happened
	EFUTURE		Reserved for our future mistakes

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.172 ---
To: vim-dev at vim.org
Subject: Patch 7.1.172
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.172
Problem:    When 'buftype' is "acwrite" Vim still checks if the file or
	    directory exists before overwriting.
Solution:   Don't check for overwriting when the buffer name is not a file
	    name.
Files:	    src/ex_cmds.c


*** ../vim-7.1.171/src/ex_cmds.c	Tue Nov 20 18:03:34 2007
--- src/ex_cmds.c	Fri Dec  7 22:13:32 2007
***************
*** 2732,2737 ****
--- 2732,2740 ----
  		    && vim_strchr(p_cpo, CPO_OVERNEW) == NULL)
  		|| (buf->b_flags & BF_READERR))
  	    && !p_wa
+ #ifdef FEAT_QUICKFIX
+ 	    && !bt_nofile(buf)
+ #endif
  	    && vim_fexists(ffname))
      {
  	if (!eap->forceit && !eap->append)
*** ../vim-7.1.171/src/version.c	Fri Dec  7 20:28:13 2007
--- src/version.c	Sat Dec  8 22:18:54 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     172,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
206. You religiously respond immediately to e-mail, while ignoring
     your growing pile of snail mail.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.173 ---
To: vim-dev at vim.org
Subject: Patch 7.1.173
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.173
Problem:    Accessing freed memory. (Dominique Pelle)
Solution:   Don't call reg_getline() to check if a line is the first in the
	    file.
Files:	    src/regexp.c


*** ../vim-7.1.172/src/regexp.c	Thu Nov 29 21:26:38 2007
--- src/regexp.c	Sat Dec  8 15:54:05 2007
***************
*** 3810,3820 ****
  	    break;
  
  	  case RE_BOF:
! 	    /* Passing -1 to the getline() function provided for the search
! 	     * should always return NULL if the current line is the first
! 	     * line of the file. */
  	    if (reglnum != 0 || reginput != regline
! 			|| (REG_MULTI && reg_getline((linenr_T)-1) != NULL))
  		status = RA_NOMATCH;
  	    break;
  
--- 3810,3820 ----
  	    break;
  
  	  case RE_BOF:
! 	    /* We're not at the beginning of the file when below the first
! 	     * line where we started, not at the start of the line or we
! 	     * didn't start at the first line of the buffer. */
  	    if (reglnum != 0 || reginput != regline
! 					  || (REG_MULTI && reg_firstlnum > 1))
  		status = RA_NOMATCH;
  	    break;
  
*** ../vim-7.1.172/src/version.c	Sat Dec  8 22:20:24 2007
--- src/version.c	Sun Dec  9 19:24:36 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     173,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
213. Your kids start referring to you as "that guy in front of the monitor."

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.174 ---
To: vim-dev at vim.org
Subject: Patch 7.1.174
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.174
Problem:    Writing NUL past end of a buffer.
Solution:   Copy one byte less when using strncat(). (Dominuque Pelle)
Files:	    src/ex_cmds.c, src/ex_docmd.c


*** ../vim-7.1.173/src/ex_cmds.c	Sat Dec  8 22:20:24 2007
--- src/ex_cmds.c	Fri Dec  7 22:13:32 2007
***************
*** 1650,1656 ****
  {
      vim_snprintf((char *)IObuff, IOSIZE, _("%sviminfo: %s in line: "),
  							     errnum, message);
!     STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff));
      if (IObuff[STRLEN(IObuff) - 1] == '\n')
  	IObuff[STRLEN(IObuff) - 1] = NUL;
      emsg(IObuff);
--- 1650,1656 ----
  {
      vim_snprintf((char *)IObuff, IOSIZE, _("%sviminfo: %s in line: "),
  							     errnum, message);
!     STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff) - 1);
      if (IObuff[STRLEN(IObuff) - 1] == '\n')
  	IObuff[STRLEN(IObuff) - 1] = NUL;
      emsg(IObuff);
*** ../vim-7.1.173/src/ex_docmd.c	Sat Nov 24 21:49:19 2007
--- src/ex_docmd.c	Fri Dec  7 21:01:03 2007
***************
*** 2660,2666 ****
  		errormsg = IObuff;
  	    }
  	    STRCAT(errormsg, ": ");
! 	    STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff));
  	}
  	emsg(errormsg);
      }
--- 2660,2666 ----
  		errormsg = IObuff;
  	    }
  	    STRCAT(errormsg, ": ");
! 	    STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
  	}
  	emsg(errormsg);
      }
*** ../vim-7.1.173/src/version.c	Sun Dec  9 19:25:35 2007
--- src/version.c	Sun Dec  9 19:36:50 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     174,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
214. Your MCI "Circle of Friends" are all Hayes-compatible.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.175 ---
To: vim-dev at vim.org
Subject: Patch 7.1.175
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.175
Problem:    <BS> doesn't work with some combination of 'sts', 'linebreak' and
	    'backspace'. (Francois Ingelrest)
Solution:   When adding white space results in not moving back delete one
	    character.
Files:	    src/edit.c


*** ../vim-7.1.174/src/edit.c	Sat Nov 24 21:27:33 2007
--- src/edit.c	Fri Dec  7 21:32:48 2007
***************
*** 8189,8194 ****
--- 8189,8217 ----
      AppendCharToRedobuff(K_DEL);
  }
  
+ static void ins_bs_one __ARGS((colnr_T *vcolp));
+ 
+ /*
+  * Delete one character for ins_bs().
+  */
+     static void
+ ins_bs_one(vcolp)
+     colnr_T	*vcolp;
+ {
+     dec_cursor();
+     getvcol(curwin, &curwin->w_cursor, vcolp, NULL, NULL);
+     if (State & REPLACE_FLAG)
+     {
+ 	/* Don't delete characters before the insert point when in
+ 	 * Replace mode */
+ 	if (curwin->w_cursor.lnum != Insstart.lnum
+ 		|| curwin->w_cursor.col >= Insstart.col)
+ 	    replace_do_bs();
+     }
+     else
+ 	(void)del_char(FALSE);
+ }
+ 
  /*
   * Handle Backspace, delete-word and delete-line in Insert mode.
   * Return TRUE when backspace was actually used.
***************
*** 8418,8426 ****
  	    int		ts;
  	    colnr_T	vcol;
  	    colnr_T	want_vcol;
! #if 0
! 	    int		extra = 0;
! #endif
  
  	    *inserted_space_p = FALSE;
  	    if (p_sta && in_indent)
--- 8441,8447 ----
  	    int		ts;
  	    colnr_T	vcol;
  	    colnr_T	want_vcol;
! 	    colnr_T	start_vcol;
  
  	    *inserted_space_p = FALSE;
  	    if (p_sta && in_indent)
***************
*** 8431,8436 ****
--- 8452,8458 ----
  	     * 'showbreak' may get in the way, need to get the last column of
  	     * the previous character. */
  	    getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
+ 	    start_vcol = vcol;
  	    dec_cursor();
  	    getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol);
  	    inc_cursor();
***************
*** 8439,8468 ****
  	    /* delete characters until we are at or before want_vcol */
  	    while (vcol > want_vcol
  		    && (cc = *(ml_get_cursor() - 1), vim_iswhite(cc)))
! 	    {
! 		dec_cursor();
! 		getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
! 		if (State & REPLACE_FLAG)
! 		{
! 		    /* Don't delete characters before the insert point when in
! 		     * Replace mode */
! 		    if (curwin->w_cursor.lnum != Insstart.lnum
! 			    || curwin->w_cursor.col >= Insstart.col)
! 		    {
! #if 0	/* what was this for?  It causes problems when sw != ts. */
! 			if (State == REPLACE && (int)vcol < want_vcol)
! 			{
! 			    (void)del_char(FALSE);
! 			    extra = 2;	/* don't pop too much */
! 			}
! 			else
! #endif
! 			    replace_do_bs();
! 		    }
! 		}
! 		else
! 		    (void)del_char(FALSE);
! 	    }
  
  	    /* insert extra spaces until we are at want_vcol */
  	    while (vcol < want_vcol)
--- 8461,8467 ----
  	    /* delete characters until we are at or before want_vcol */
  	    while (vcol > want_vcol
  		    && (cc = *(ml_get_cursor() - 1), vim_iswhite(cc)))
! 		ins_bs_one(&vcol);
  
  	    /* insert extra spaces until we are at want_vcol */
  	    while (vcol < want_vcol)
***************
*** 8479,8500 ****
  #endif
  		{
  		    ins_str((char_u *)" ");
! 		    if ((State & REPLACE_FLAG) /* && extra <= 1 */)
! 		    {
! #if 0
! 			if (extra)
! 			    replace_push_off(NUL);
! 			else
! #endif
! 			    replace_push(NUL);
! 		    }
! #if 0
! 		    if (extra == 2)
! 			extra = 1;
! #endif
  		}
  		getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
  	    }
  	}
  
  	/*
--- 8478,8493 ----
  #endif
  		{
  		    ins_str((char_u *)" ");
! 		    if ((State & REPLACE_FLAG))
! 			replace_push(NUL);
  		}
  		getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
  	    }
+ 
+ 	    /* If we are now back where we started delete one character.  Can
+ 	     * happen when using 'sts' and 'linebreak'. */
+ 	    if (vcol >= start_vcol)
+ 		ins_bs_one(&vcol);
  	}
  
  	/*
*** ../vim-7.1.174/src/version.c	Sun Dec  9 19:37:37 2007
--- src/version.c	Sun Dec  9 20:24:11 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     175,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
215. Your mouse-clicking forearm rivals Popeye's.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.176 ---
To: vim-dev at vim.org
Subject: Patch 7.1.176
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.176
Problem:    Building with Aap fails when the "compiledby" argument contains
	    '<' or '>' characters. (Alex Yeh)
Solution:   Change how quoting is done in the Aap recipe.
Files:	    src/main.aap


*** ../vim-7.1.175/src/main.aap	Tue Sep 25 22:13:14 2007
--- src/main.aap	Fri Dec  7 17:03:31 2007
***************
*** 63,70 ****
          @else:
          @   arch = "ppc"
          :print Building for $arch system
          :sys CONFIG_STATUS=auto/config.status
!                 ./configure.aap `file2string("config.arg")`
                      --with-mac-arch=$arch
                      --cache-file=auto/config.cache
  
--- 63,71 ----
          @else:
          @   arch = "ppc"
          :print Building for $arch system
+         config_args = `file2string("config.arg")`
          :sys CONFIG_STATUS=auto/config.status
!                 ./configure.aap $config_args
                      --with-mac-arch=$arch
                      --cache-file=auto/config.cache
  
***************
*** 440,450 ****
          :print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
          @if _no.get("COMPILEDBY"):
              who = $COMPILEDBY
!             where = ''
          @else:
              :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
  
              :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
          :print >> $target char_u *compiled_user = (char_u *)"$who";
          :print >> $target char_u *compiled_sys = (char_u *)"$where";
  
--- 441,453 ----
          :print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
          @if _no.get("COMPILEDBY"):
              who = $COMPILEDBY
!             where =
          @else:
              :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
  
              :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
+         @who = string.replace(who, '"', '\\"')
+         @where = string.replace(where, '"', '\\"')
          :print >> $target char_u *compiled_user = (char_u *)"$who";
          :print >> $target char_u *compiled_sys = (char_u *)"$where";
  
*** ../vim-7.1.175/src/version.c	Sun Dec  9 20:25:59 2007
--- src/version.c	Mon Dec 31 16:40:01 2007
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     176,
  /**/

-- 
E  M  A  C  S
s  e  l  o  h
c  t  t  n  i
a  a     t  f
p        r  t
e        o
         l

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.177 ---
To: vim-dev at vim.org
Subject: Patch 7.1.177
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.177
Problem:    Freeing memory twice when in debug mode while reading a script.
Solution:   Ignore script input while in debug mode.
Files:	    src/ex_cmds2.c, src/getchar.c, src/globals.h


*** ../vim-7.1.176/src/ex_cmds2.c	Thu May 10 20:55:46 2007
--- src/ex_cmds2.c	Tue Jan  1 14:13:41 2008
***************
*** 93,98 ****
--- 93,100 ----
      int		save_emsg_silent = emsg_silent;
      int		save_redir_off = redir_off;
      tasave_T	typeaheadbuf;
+     int		typeahead_saved = FALSE;
+     int		save_ignore_script;
  # ifdef FEAT_EX_EXTRA
      int		save_ex_normal_busy;
  # endif
***************
*** 159,176 ****
  	 * This makes sure we get input from the user here and don't interfere
  	 * with the commands being executed.  Reset "ex_normal_busy" to avoid
  	 * the side effects of using ":normal". Save the stuff buffer and make
! 	 * it empty. */
  # ifdef FEAT_EX_EXTRA
  	save_ex_normal_busy = ex_normal_busy;
  	ex_normal_busy = 0;
  # endif
  	if (!debug_greedy)
  	    save_typeahead(&typeaheadbuf);
  
  	cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
  
! 	if (!debug_greedy)
  	    restore_typeahead(&typeaheadbuf);
  # ifdef FEAT_EX_EXTRA
  	ex_normal_busy = save_ex_normal_busy;
  # endif
--- 161,186 ----
  	 * This makes sure we get input from the user here and don't interfere
  	 * with the commands being executed.  Reset "ex_normal_busy" to avoid
  	 * the side effects of using ":normal". Save the stuff buffer and make
! 	 * it empty. Set ignore_script to avoid reading from script input. */
  # ifdef FEAT_EX_EXTRA
  	save_ex_normal_busy = ex_normal_busy;
  	ex_normal_busy = 0;
  # endif
  	if (!debug_greedy)
+ 	{
  	    save_typeahead(&typeaheadbuf);
+ 	    typeahead_saved = TRUE;
+ 	    save_ignore_script = ignore_script;
+ 	    ignore_script = TRUE;
+ 	}
  
  	cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
  
! 	if (typeahead_saved)
! 	{
  	    restore_typeahead(&typeaheadbuf);
+ 	    ignore_script = save_ignore_script;
+ 	}
  # ifdef FEAT_EX_EXTRA
  	ex_normal_busy = save_ex_normal_busy;
  # endif
*** ../vim-7.1.176/src/getchar.c	Fri Dec  7 17:30:04 2007
--- src/getchar.c	Tue Jan  1 14:11:42 2008
***************
*** 1279,1286 ****
      void
  free_typebuf()
  {
!     vim_free(typebuf.tb_buf);
!     vim_free(typebuf.tb_noremap);
  }
  
  /*
--- 1279,1292 ----
      void
  free_typebuf()
  {
!     if (typebuf.tb_buf == typebuf_init)
! 	EMSG2(_(e_intern2), "Free typebuf 1");
!     else
! 	vim_free(typebuf.tb_buf);
!     if (typebuf.tb_buf == noremapbuf_init)
! 	EMSG2(_(e_intern2), "Free typebuf 2");
!     else
! 	vim_free(typebuf.tb_noremap);
  }
  
  /*
***************
*** 1359,1364 ****
--- 1365,1375 ----
  	EMSG(_(e_nesting));
  	return;
      }
+ #ifdef FEAT_EVAL
+     if (ignore_script)
+ 	/* Not reading from script, also don't open one.  Warning message? */
+ 	return;
+ #endif
  
      if (scriptin[curscript] != NULL)	/* already reading script */
  	++curscript;
***************
*** 2346,2352 ****
  						   current_menu->silent[idx]);
  				}
  			    }
! #endif /* FEAT_GUI */
  			    continue;	/* try mapping again */
  			}
  
--- 2357,2363 ----
  						   current_menu->silent[idx]);
  				}
  			    }
! #endif /* FEAT_GUI && FEAT_MENU */
  			    continue;	/* try mapping again */
  			}
  
***************
*** 2862,2872 ****
      undo_off = FALSE;		    /* restart undo now */
  
      /*
!      * first try script file
!      *	If interrupted: Stop reading script files.
       */
      script_char = -1;
!     while (scriptin[curscript] != NULL && script_char < 0)
      {
  	if (got_int || (script_char = getc(scriptin[curscript])) < 0)
  	{
--- 2873,2887 ----
      undo_off = FALSE;		    /* restart undo now */
  
      /*
!      * Get a character from a script file if there is one.
!      * If interrupted: Stop reading script files, close them all.
       */
      script_char = -1;
!     while (scriptin[curscript] != NULL && script_char < 0
! #ifdef FEAT_EVAL
! 	    && !ignore_script
! #endif
! 	    )
      {
  	if (got_int || (script_char = getc(scriptin[curscript])) < 0)
  	{
*** ../vim-7.1.176/src/globals.h	Sat Sep 29 14:15:00 2007
--- src/globals.h	Mon Dec 31 17:00:21 2007
***************
*** 954,959 ****
--- 954,962 ----
  EXTERN int	ex_normal_busy INIT(= 0); /* recursiveness of ex_normal() */
  EXTERN int	ex_normal_lock INIT(= 0); /* forbid use of ex_normal() */
  #endif
+ #ifdef FEAT_EVAL
+ EXTERN int	ignore_script INIT(= FALSE);  /* ignore script input */
+ #endif
  EXTERN int	stop_insert_mode;	/* for ":stopinsert" and 'insertmode' */
  
  EXTERN int	KeyTyped;		/* TRUE if user typed current char */
*** ../vim-7.1.176/src/version.c	Mon Dec 31 16:41:31 2007
--- src/version.c	Tue Jan  1 14:00:09 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     177,
  /**/

-- 
Back up my hard drive?  I can't find the reverse switch!

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.178 ---
To: vim-dev at vim.org
Subject: Patch 7.1.178
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.178
Problem:    "%" doesn't work on "/* comment *//* comment */".
Solution:   Don't handle the "//" in "*//*" as a C++ comment. (Markus
	    Heidelberg)
Files:	    src/search.c


*** ../vim-7.1.177/src/search.c	Wed Aug  8 22:48:16 2007
--- src/search.c	Mon Dec 10 21:21:17 2007
***************
*** 2319,2325 ****
  #endif
      while ((p = vim_strchr(p, '/')) != NULL)
      {
! 	if (p[1] == '/')
  	    break;
  	++p;
      }
--- 2319,2327 ----
  #endif
      while ((p = vim_strchr(p, '/')) != NULL)
      {
! 	/* accept a double /, unless it's preceded with * and followed by *,
! 	 * because * / / * is an end and start of a C comment */
! 	if (p[1] == '/' && (p == line || p[-1] != '*' || p[2] != '*'))
  	    break;
  	++p;
      }
*** ../vim-7.1.177/src/version.c	Tue Jan  1 14:16:42 2008
--- src/version.c	Tue Jan  1 15:41:33 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     178,
  /**/

-- 
I'd like to meet the man who invented sex and see what he's working on now.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.179 ---
To: vim-dev at vim.org
Subject: Patch 7.1.179
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.179
Problem:    Need to check for TCL 8.5.
Solution:   Adjust configure script. (Alexey Froloff)
Files:	    src/configure.in, src/auto/configure


*** ../vim-7.1.178/src/configure.in	Sun Nov  4 15:35:23 2007
--- src/configure.in	Sun Dec 30 13:55:28 2007
***************
*** 759,773 ****
  
  if test "$enable_tclinterp" = "yes"; then
  
!   dnl on FreeBSD tclsh is a silly script, look for tclsh8.[420]
    AC_MSG_CHECKING(--with-tclsh argument)
    AC_ARG_WITH(tclsh, [  --with-tclsh=PATH       which tclsh to use (default: tclsh8.0)],
  	tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
! 	tclsh_name="tclsh8.4"; AC_MSG_RESULT(no))
    AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
    AC_SUBST(vi_cv_path_tcl)
  
!   dnl when no specific version specified, also try 8.2 and 8.0
    if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
      tclsh_name="tclsh8.2"
      AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
--- 759,777 ----
  
  if test "$enable_tclinterp" = "yes"; then
  
!   dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420]
    AC_MSG_CHECKING(--with-tclsh argument)
    AC_ARG_WITH(tclsh, [  --with-tclsh=PATH       which tclsh to use (default: tclsh8.0)],
  	tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name),
! 	tclsh_name="tclsh8.5"; AC_MSG_RESULT(no))
    AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
    AC_SUBST(vi_cv_path_tcl)
  
!   dnl when no specific version specified, also try 8.4, 8.2 and 8.0
!   if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
!     tclsh_name="tclsh8.4"
!     AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
!   fi
    if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
      tclsh_name="tclsh8.2"
      AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name)
***************
*** 810,815 ****
--- 814,820 ----
  	AC_MSG_CHECKING(for location of tclConfig.sh script)
  	if test "x$MACOSX" != "xyes"; then
  	  tclcnf=`echo $tclinc | sed s/include/lib/g`
+ 	  tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
  	else
  	  dnl For Mac OS X 10.3, use the OS-provided framework location
  	  tclcnf="/System/Library/Frameworks/Tcl.framework"
***************
*** 830,835 ****
--- 835,841 ----
  	  AC_MSG_RESULT(<not found>)
  	  AC_MSG_CHECKING(for Tcl library by myself)
  	  tcllib=`echo $tclinc | sed s/include/lib/g`
+ 	  tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
  	  for ext in .so .a ; do
  	    for ver in "" $tclver ; do
  	      for try in $tcllib ; do
*** ../vim-7.1.178/src/auto/configure	Sun Nov  4 15:35:23 2007
--- src/auto/configure	Sun Dec 30 13:55:35 2007
***************
*** 4445,4451 ****
    tclsh_name="$withval"; echo "$as_me:$LINENO: result: $tclsh_name" >&5
  echo "${ECHO_T}$tclsh_name" >&6
  else
!   tclsh_name="tclsh8.4"; echo "$as_me:$LINENO: result: no" >&5
  echo "${ECHO_T}no" >&6
  fi;
    # Extract the first word of "$tclsh_name", so it can be a program name with args.
--- 4445,4451 ----
    tclsh_name="$withval"; echo "$as_me:$LINENO: result: $tclsh_name" >&5
  echo "${ECHO_T}$tclsh_name" >&6
  else
!   tclsh_name="tclsh8.5"; echo "$as_me:$LINENO: result: no" >&5
  echo "${ECHO_T}no" >&6
  fi;
    # Extract the first word of "$tclsh_name", so it can be a program name with args.
***************
*** 4489,4495 ****
  
  
  
!     if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
      tclsh_name="tclsh8.2"
      # Extract the first word of "$tclsh_name", so it can be a program name with args.
  set dummy $tclsh_name; ac_word=$2
--- 4489,4537 ----
  
  
  
!     if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then
!     tclsh_name="tclsh8.4"
!     # Extract the first word of "$tclsh_name", so it can be a program name with args.
! set dummy $tclsh_name; ac_word=$2
! echo "$as_me:$LINENO: checking for $ac_word" >&5
! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   case $vi_cv_path_tcl in
!   [\\/]* | ?:[\\/]*)
!   ac_cv_path_vi_cv_path_tcl="$vi_cv_path_tcl" # Let the user override the test with a path.
!   ;;
!   *)
!   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!   for ac_exec_ext in '' $ac_executable_extensions; do
!   if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
!     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
! done
! 
!   ;;
! esac
! fi
! vi_cv_path_tcl=$ac_cv_path_vi_cv_path_tcl
! 
! if test -n "$vi_cv_path_tcl"; then
!   echo "$as_me:$LINENO: result: $vi_cv_path_tcl" >&5
! echo "${ECHO_T}$vi_cv_path_tcl" >&6
! else
!   echo "$as_me:$LINENO: result: no" >&5
! echo "${ECHO_T}no" >&6
! fi
! 
!   fi
!   if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then
      tclsh_name="tclsh8.2"
      # Extract the first word of "$tclsh_name", so it can be a program name with args.
  set dummy $tclsh_name; ac_word=$2
***************
*** 4649,4654 ****
--- 4691,4697 ----
  echo $ECHO_N "checking for location of tclConfig.sh script... $ECHO_C" >&6
  	if test "x$MACOSX" != "xyes"; then
  	  tclcnf=`echo $tclinc | sed s/include/lib/g`
+ 	  tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`"
  	else
  	  	  tclcnf="/System/Library/Frameworks/Tcl.framework"
  	fi
***************
*** 4668,4673 ****
--- 4711,4717 ----
  	  echo "$as_me:$LINENO: checking for Tcl library by myself" >&5
  echo $ECHO_N "checking for Tcl library by myself... $ECHO_C" >&6
  	  tcllib=`echo $tclinc | sed s/include/lib/g`
+ 	  tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`"
  	  for ext in .so .a ; do
  	    for ver in "" $tclver ; do
  	      for try in $tcllib ; do
*** ../vim-7.1.178/src/version.c	Tue Jan  1 15:42:45 2008
--- src/version.c	Tue Jan  1 16:24:07 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     179,
  /**/

-- 
Just think of all the things we haven't thought of yet.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.180 ---
To: vim-dev at vim.org
Subject: Patch 7.1.180
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.180
Problem:    Regexp patterns not tested sufficiently.
Solution:   Add more checks to the regexp test.
Files:	    src/testdir/test64.in, src/testdir/test64.ok


*** ../vim-7.1.179/src/testdir/test64.in	Tue Sep 25 17:54:41 2007
--- src/testdir/test64.in	Mon Dec 31 14:20:23 2007
***************
*** 14,23 ****
--- 14,136 ----
  :"    etc.
  :"  When there is no match use only the first two items.
  :let tl = []
+ :call add(tl, ['ab', 'aab', 'ab'])
  :call add(tl, ['b', 'abcdef', 'b'])
  :call add(tl, ['bc*', 'abccccdef', 'bcccc'])
  :call add(tl, ['bc\{-}', 'abccccdef', 'b'])
  :call add(tl, ['bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
+ :call add(tl, ['bc*', 'abbdef', 'b'])
+ :call add(tl, ['c*', 'ccc', 'ccc'])
+ :call add(tl, ['bc*', 'abdef', 'b'])
+ :call add(tl, ['c*', 'abdef', ''])
+ :call add(tl, ['bc\+', 'abccccdef', 'bcccc'])
+ :call add(tl, ['bc\+', 'abdef']) "no match
+ :"
+ :"operator \|
+ :call add(tl, ['a\|ab', 'cabd', 'a']) "alternation is ordered
+ :"
+ :call add(tl, ['c\?', 'ccb', 'c'])
+ :call add(tl, ['bc\?', 'abd', 'b'])
+ :call add(tl, ['bc\?', 'abccd', 'bc'])
+ :"
+ :call add(tl, ['\va{1}', 'ab', 'a'])
+ :"
+ :call add(tl, ['\va{2}', 'aa', 'aa'])
+ :call add(tl, ['\va{2}', 'caad', 'aa'])
+ :call add(tl, ['\va{2}', 'aba'])
+ :call add(tl, ['\va{2}', 'ab'])
+ :call add(tl, ['\va{2}', 'abaa', 'aa'])
+ :call add(tl, ['\va{2}', 'aaa', 'aa'])
+ :"
+ :call add(tl, ['\vb{1}', 'abca', 'b'])
+ :call add(tl, ['\vba{2}', 'abaa', 'baa'])
+ :call add(tl, ['\vba{3}', 'aabaac'])
+ :"
+ :call add(tl, ['\v(ab){1}', 'ab', 'ab', 'ab'])
+ :call add(tl, ['\v(ab){1}', 'dabc', 'ab', 'ab'])
+ :call add(tl, ['\v(ab){1}', 'acb'])
+ :"
+ :call add(tl, ['\v(ab){0,2}', 'acb', "", ""])
+ :call add(tl, ['\v(ab){0,2}', 'ab', 'ab', 'ab'])
+ :call add(tl, ['\v(ab){1,2}', 'ab', 'ab', 'ab'])
+ :call add(tl, ['\v(ab){1,2}', 'ababc', 'abab', 'ab'])
+ :call add(tl, ['\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
+ :call add(tl, ['\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
+ :"
+ :call add(tl, ['\v(ab){2}', 'abab', 'abab', 'ab'])
+ :call add(tl, ['\v(ab){2}', 'cdababe', 'abab', 'ab'])
+ :call add(tl, ['\v(ab){2}', 'abac'])
+ :call add(tl, ['\v(ab){2}', 'abacabab', 'abab', 'ab'])
+ :call add(tl, ['\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
+ :call add(tl, ['\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
+ :"
+ :call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
+ :call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
+ :call add(tl, ['\v(a{2}){1}', 'aaac', 'aa', 'aa'])
+ :call add(tl, ['\v(a{2}){1}', 'daaac', 'aa', 'aa'])
+ :call add(tl, ['\v(a{1}){2}', 'daaac', 'aa', 'a'])
+ :call add(tl, ['\v(a{1}){2}', 'aaa', 'aa', 'a'])
+ :call add(tl, ['\v(a{2})+', 'adaac', 'aa', 'aa'])
+ :call add(tl, ['\v(a{2})+', 'aa', 'aa', 'aa'])
+ :call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
+ :call add(tl, ['\v(a{1}){2}', 'aa', 'aa', 'a'])
+ :call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
+ :call add(tl, ['\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
+ :call add(tl, ['\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
+ :"
+ :call add(tl, ['\v(a+){2}', 'dadaac', 'aa', 'a'])
+ :call add(tl, ['\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
+ :"
+ :call add(tl, ['\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
+ :call add(tl, ['\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
+ :call add(tl, ['\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
+ :call add(tl, ['\v(a{1,3}){3}', 'daac'])
+ :call add(tl, ['\v(a{1,2}){2}', 'dac'])
+ :call add(tl, ['\v(a+)+', 'daac', 'aa', 'aa'])
+ :call add(tl, ['\v(a+)+', 'aaa', 'aaa', 'aaa'])
+ :call add(tl, ['\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
+ :call add(tl, ['\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
+ :call add(tl, ['\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
+ :call add(tl, ['\v(a|b|c)+', 'aacb', 'aacb', 'b'])
+ :call add(tl, ['\v(a|b|c){2}', 'abcb', 'ab', 'b'])
+ :call add(tl, ['\v(abc){2}', 'abcabd', ])
+ :call add(tl, ['\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
+ :"
+ :call add(tl, ['a*', 'cc', ''])
+ :call add(tl, ['\v(a*)+', 'cc', ''])
+ :call add(tl, ['\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
+ :call add(tl, ['\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
+ :call add(tl, ['\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
+ :call add(tl, ['\v(a{0,2})+', 'cc', ''])
+ :call add(tl, ['\v(a*)+', '', ''])
+ :call add(tl, ['\v((a*)+)+', '', ''])
+ :call add(tl, ['\v((ab)*)+', '', ''])
+ :call add(tl, ['\va{1,3}', 'aab', 'aa'])
+ :call add(tl, ['\va{2,3}', 'abaa', 'aa'])
+ :"
+ :call add(tl, ['\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
+ :call add(tl, ['\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
+ :call add(tl, ['\va{2}|b{2}', 'abab'])
+ :call add(tl, ['\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
+ :call add(tl, ['\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
+ :call add(tl, ['\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
+ :call add(tl, ['\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
+ :call add(tl, ['\va(bc){2}d', 'aabcbfbc' ])
+ :call add(tl, ['\va*a{2}', 'a', ])
+ :call add(tl, ['\va*a{2}', 'aa', 'aa' ])
+ :call add(tl, ['\va*a{2}', 'aaa', 'aaa' ])
+ :call add(tl, ['\va*a{2}', 'bbbabcc', ])
+ :call add(tl, ['\va*b*|a*c*', 'a', 'a'])
+ :call add(tl, ['\va{1}b{1}|a{1}b{1}', ''])
+ :"
+ :"submatches
+ :call add(tl, ['\v(a)', 'ab', 'a', 'a'])
+ :call add(tl, ['\v(a)(b)', 'ab', 'ab', 'a', 'b'])
+ :call add(tl, ['\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
+ :call add(tl, ['\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
+ :call add(tl, ['\v(a)|(b)', 'ab', 'a', 'a'])
+ :"
+ :call add(tl, ['\v(a*)+', 'aaaa', 'aaaa', ''])
  :call add(tl, ['x', 'abcdef'])
  :"
  :for t in tl
*** ../vim-7.1.179/src/testdir/test64.ok	Tue Aug 14 17:28:14 2007
--- src/testdir/test64.ok	Mon Dec 31 14:20:26 2007
***************
*** 4,6 ****
--- 4,102 ----
  OK
  OK
  OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
+ OK
*** ../vim-7.1.179/src/version.c	Tue Jan  1 16:25:33 2008
--- src/version.c	Tue Jan  1 17:34:32 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     180,
  /**/

-- 
CONCORDE: Message for you, sir.
   He falls forward revealing the arrow with the note.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.181 ---
To: vim-dev at vim.org
Subject: Patch 7.1.181
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.181
Problem:    Accessing uninitialized memory in Farsi mode. (Dominuque Pelle)
Solution:   Only invoke lrF_sub() when there is something to do.
Files:	    src/ex_cmds.c


*** ../vim-7.1.180/src/ex_cmds.c	Sun Dec  9 19:37:37 2007
--- src/ex_cmds.c	Mon Dec 31 17:29:25 2007
***************
*** 4212,4222 ****
  	sub_nlines = 0;
      }
  
- #ifdef FEAT_FKMAP	/* reverse the flow of the Farsi characters */
-     if (p_altkeymap && curwin->w_p_rl)
- 	lrF_sub(cmd);
- #endif
- 
      if (eap->cmdidx == CMD_tilde)
  	which_pat = RE_LAST;	/* use last used regexp */
      else
--- 4212,4217 ----
***************
*** 4252,4257 ****
--- 4247,4256 ----
  	}
  	else		/* find the end of the regexp */
  	{
+ #ifdef FEAT_FKMAP	/* reverse the flow of the Farsi characters */
+ 	    if (p_altkeymap && curwin->w_p_rl)
+ 		lrF_sub(cmd);
+ #endif
  	    which_pat = RE_LAST;	    /* use last used regexp */
  	    delimiter = *cmd++;		    /* remember delimiter character */
  	    pat = cmd;			    /* remember start of search pat */
*** ../vim-7.1.180/src/version.c	Tue Jan  1 17:37:01 2008
--- src/version.c	Wed Jan  2 13:57:31 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     181,
  /**/

-- 
Yah, well, we had to carve our electrons out of driftwood we'd
find.  In the winter.  Uphill.  Both ways.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.182 ---
To: vim-dev at vim.org
Subject: Patch 7.1.182
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.182
Problem:    When using tab pages and an argument list the session file may
	    contain wrong "next" commands. (Alexander Bluem)
Solution:   Use "argu" commands and only when needed.
Files:	    src/ex_docmd.c


*** ../vim-7.1.181/src/ex_docmd.c	Sun Dec  9 19:37:37 2007
--- src/ex_docmd.c	Mon Dec 31 18:24:16 2007
***************
*** 372,378 ****
  static char_u	*arg_all __ARGS((void));
  #ifdef FEAT_SESSION
  static int	makeopens __ARGS((FILE *fd, char_u *dirnow));
! static int	put_view __ARGS((FILE *fd, win_T *wp, int add_edit, unsigned *flagp));
  static void	ex_loadview __ARGS((exarg_T *eap));
  static char_u	*get_view_file __ARGS((int c));
  static int	did_lcd;	/* whether ":lcd" was produced for a session */
--- 372,378 ----
  static char_u	*arg_all __ARGS((void));
  #ifdef FEAT_SESSION
  static int	makeopens __ARGS((FILE *fd, char_u *dirnow));
! static int	put_view __ARGS((FILE *fd, win_T *wp, int add_edit, unsigned *flagp, int current_arg_idx));
  static void	ex_loadview __ARGS((exarg_T *eap));
  static char_u	*get_view_file __ARGS((int c));
  static int	did_lcd;	/* whether ":lcd" was produced for a session */
***************
*** 8762,8768 ****
  	    }
  	    else
  	    {
! 		failed |= (put_view(fd, curwin, !using_vdir, flagp) == FAIL);
  	    }
  	    if (put_line(fd, "let &so = s:so_save | let &siso = s:siso_save")
  								      == FAIL)
--- 8762,8769 ----
  	    }
  	    else
  	    {
! 		failed |= (put_view(fd, curwin, !using_vdir, flagp,
! 								 -1) == FAIL);
  	    }
  	    if (put_line(fd, "let &so = s:so_save | let &siso = s:siso_save")
  								      == FAIL)
***************
*** 9761,9766 ****
--- 9762,9769 ----
      int		tabnr;
      win_T	*tab_firstwin;
      frame_T	*tab_topframe;
+     int		cur_arg_idx = 0;
+     int		next_arg_idx;
  
      if (ssop_flags & SSOP_BUFFERS)
  	only_save_windows = FALSE;		/* Save ALL buffers */
***************
*** 9976,9987 ****
  	{
  	    if (!ses_do_win(wp))
  		continue;
! 	    if (put_view(fd, wp, wp != edited_win, &ssop_flags) == FAIL)
  		return FAIL;
  	    if (nr > 1 && put_line(fd, "wincmd w") == FAIL)
  		return FAIL;
  	}
  
  	/*
  	 * Restore cursor to the current window if it's not the first one.
  	 */
--- 9979,9997 ----
  	{
  	    if (!ses_do_win(wp))
  		continue;
! 	    if (put_view(fd, wp, wp != edited_win, &ssop_flags,
! 							 cur_arg_idx) == FAIL)
  		return FAIL;
  	    if (nr > 1 && put_line(fd, "wincmd w") == FAIL)
  		return FAIL;
+ 	    next_arg_idx = wp->w_arg_idx;
  	}
  
+ 	/* The argument index in the first tab page is zero, need to set it in
+ 	 * each window.  For further tab pages it's the window where we do
+ 	 * "tabedit". */
+ 	cur_arg_idx = next_arg_idx;
+ 
  	/*
  	 * Restore cursor to the current window if it's not the first one.
  	 */
***************
*** 10190,10200 ****
   * Caller must make sure 'scrolloff' is zero.
   */
      static int
! put_view(fd, wp, add_edit, flagp)
      FILE	*fd;
      win_T	*wp;
      int		add_edit;	/* add ":edit" command to view */
      unsigned	*flagp;		/* vop_flags or ssop_flags */
  {
      win_T	*save_curwin;
      int		f;
--- 10200,10212 ----
   * Caller must make sure 'scrolloff' is zero.
   */
      static int
! put_view(fd, wp, add_edit, flagp, current_arg_idx)
      FILE	*fd;
      win_T	*wp;
      int		add_edit;	/* add ":edit" command to view */
      unsigned	*flagp;		/* vop_flags or ssop_flags */
+     int		current_arg_idx; /* current argument index of the window, use
+ 				  * -1 if unknown */
  {
      win_T	*save_curwin;
      int		f;
***************
*** 10224,10233 ****
  
      /* Only when part of a session: restore the argument index.  Some
       * arguments may have been deleted, check if the index is valid. */
!     if (wp->w_arg_idx != 0 && wp->w_arg_idx <= WARGCOUNT(wp)
  						      && flagp == &ssop_flags)
      {
! 	if (fprintf(fd, "%ldnext", (long)wp->w_arg_idx) < 0
  		|| put_eol(fd) == FAIL)
  	    return FAIL;
  	did_next = TRUE;
--- 10236,10245 ----
  
      /* Only when part of a session: restore the argument index.  Some
       * arguments may have been deleted, check if the index is valid. */
!     if (wp->w_arg_idx != current_arg_idx && wp->w_arg_idx <= WARGCOUNT(wp)
  						      && flagp == &ssop_flags)
      {
! 	if (fprintf(fd, "%ldargu", (long)wp->w_arg_idx + 1) < 0
  		|| put_eol(fd) == FAIL)
  	    return FAIL;
  	did_next = TRUE;
*** ../vim-7.1.181/src/version.c	Wed Jan  2 13:58:17 2008
--- src/version.c	Wed Jan  2 15:10:01 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     182,
  /**/

-- 
You were lucky. We lived for three months in a brown paper bag in a 
septic tank. We used to have to get up at six o'clock in the morning, 
clean the bag, eat a crust of stale bread, go to work down mill for 
fourteen hours a day week in-week out. When we got home, our Dad
would thrash us to sleep with his belt!

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.183 ---
To: vim-dev at vim.org
Subject: Patch 7.1.183
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.183
Problem:    "Internal error" for ":echo matchstr('a', 'a\%[\&]')" (Mitanu
	    Paul)
Solution:   Inside "\%[]" detect \&, \| and \) as an error.
Files:	    src/regexp.c


*** ../vim-7.1.182/src/regexp.c	Sun Dec  9 19:25:35 2007
--- src/regexp.c	Wed Jan  2 15:02:37 2008
***************
*** 1288,1295 ****
  }
  
  /*
!  * regbranch - one alternative of an | operator
!  *
   * Implements the & operator.
   */
      static char_u *
--- 1288,1294 ----
  }
  
  /*
!  * Handle one alternative of an | operator.
   * Implements the & operator.
   */
      static char_u *
***************
*** 1330,1337 ****
  }
  
  /*
!  * regbranch - one alternative of an | or & operator
!  *
   * Implements the concatenation operator.
   */
      static char_u *
--- 1329,1335 ----
  }
  
  /*
!  * Handle one alternative of an | or & operator.
   * Implements the concatenation operator.
   */
      static char_u *
***************
*** 1708,1713 ****
--- 1706,1713 ----
        case Magic('|'):
        case Magic('&'):
        case Magic(')'):
+ 	if (one_exactly)
+ 	    EMSG_ONE_RET_NULL;
  	EMSG_RET_NULL(_(e_internal));	/* Supposed to be caught earlier. */
  	/* NOTREACHED */
  
***************
*** 3106,3112 ****
   * slow, we keep one allocated piece of memory and only re-allocate it when
   * it's too small.  It's freed in vim_regexec_both() when finished.
   */
! static char_u	*reg_tofree;
  static unsigned	reg_tofreelen;
  
  /*
--- 3106,3112 ----
   * slow, we keep one allocated piece of memory and only re-allocate it when
   * it's too small.  It's freed in vim_regexec_both() when finished.
   */
! static char_u	*reg_tofree = NULL;
  static unsigned	reg_tofreelen;
  
  /*
*** ../vim-7.1.182/src/version.c	Wed Jan  2 15:12:29 2008
--- src/version.c	Wed Jan  2 15:33:52 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     183,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.184 ---
To: vim-dev at vim.org
Subject: Patch 7.1.184
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.184
Problem:    Crash when deleting backwards over a line break in Insert mode.
Solution:   Don't advance the cursor when it's already on the NUL after a
	    line. (Matthew Wozniski)
Files:	    src/normal.c


*** ../vim-7.1.183/src/normal.c	Sun Oct 14 17:15:45 2007
--- src/normal.c	Tue Jan  1 16:40:24 2008
***************
*** 5849,5860 ****
  		/* When the NL before the first char has to be deleted we
  		 * put the cursor on the NUL after the previous line.
  		 * This is a very special case, be careful!
! 		 * don't adjust op_end now, otherwise it won't work */
  		if (	   (cap->oap->op_type == OP_DELETE
  			    || cap->oap->op_type == OP_CHANGE)
  			&& !lineempty(curwin->w_cursor.lnum))
  		{
! 		    ++curwin->w_cursor.col;
  		    cap->retval |= CA_NO_ADJ_OP_END;
  		}
  		continue;
--- 5849,5861 ----
  		/* When the NL before the first char has to be deleted we
  		 * put the cursor on the NUL after the previous line.
  		 * This is a very special case, be careful!
! 		 * Don't adjust op_end now, otherwise it won't work. */
  		if (	   (cap->oap->op_type == OP_DELETE
  			    || cap->oap->op_type == OP_CHANGE)
  			&& !lineempty(curwin->w_cursor.lnum))
  		{
! 		    if (*ml_get_cursor() != NUL)
! 			++curwin->w_cursor.col;
  		    cap->retval |= CA_NO_ADJ_OP_END;
  		}
  		continue;
*** ../vim-7.1.183/src/version.c	Wed Jan  2 15:34:48 2008
--- src/version.c	Wed Jan  2 16:24:19 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     184,
  /**/

-- 
Not too long ago, cut and paste was done with scissors and glue...

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.185 ---
To: vim-dev at vim.org
Subject: Patch 7.1.185
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.185
Problem:    Using "gR" with a multi-byte encoding and typing a CR pushes
	    characters onto the replace stack incorrectly, resulting in BS
	    putting back the wrong characters. (Paul B. Mahol)
Solution:   Push multi-byte characters onto the replace stack in reverse byte
	    order.  Add replace_push_mb().
Files:	    src/edit.c, src/misc1.c, src/proto/edit.pro


*** ../vim-7.1.184/src/edit.c	Sun Dec  9 20:25:59 2007
--- src/edit.c	Tue Jan  1 17:28:07 2008
***************
*** 6939,6944 ****
--- 6939,6963 ----
      ++replace_stack_nr;
  }
  
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+  * Push a character onto the replace stack.  Handles a multi-byte character in
+  * reverse byte order, so that the first byte is popped off first.
+  * Return the number of bytes done (includes composing characters).
+  */
+     int
+ replace_push_mb(p)
+     char_u *p;
+ {
+     int l = (*mb_ptr2len)(p);
+     int j;
+ 
+     for (j = l - 1; j >= 0; --j)
+ 	replace_push(p[j]);
+     return l;
+ }
+ #endif
+ 
  #if 0
  /*
   * call replace_push(c) with replace_offset set to the first NUL.
*** ../vim-7.1.184/src/misc1.c	Wed Sep 26 22:35:06 2007
--- src/misc1.c	Wed Jan  2 17:48:00 2008
***************
*** 591,597 ****
  	replace_push(NUL);
  	p = saved_line + curwin->w_cursor.col;
  	while (*p != NUL)
! 	    replace_push(*p++);
  	saved_line[curwin->w_cursor.col] = NUL;
      }
  #endif
--- 592,605 ----
  	replace_push(NUL);
  	p = saved_line + curwin->w_cursor.col;
  	while (*p != NUL)
! 	{
! #ifdef FEAT_MBYTE
! 	    if (has_mbyte)
! 		p += replace_push_mb(p);
! 	    else
! #endif
! 		replace_push(*p++);
! 	}
  	saved_line[curwin->w_cursor.col] = NUL;
      }
  #endif
***************
*** 1914,1920 ****
      int		charlen;
  {
      int		c = buf[0];
-     int		l, j;
  #endif
      int		newlen;		/* nr of bytes inserted */
      int		oldlen;		/* nr of bytes deleted (0 when not replacing) */
--- 1922,1927 ----
***************
*** 2016,2028 ****
  	for (i = 0; i < oldlen; ++i)
  	{
  #ifdef FEAT_MBYTE
! 	    l = (*mb_ptr2len)(oldp + col + i) - 1;
! 	    for (j = l; j >= 0; --j)
! 		replace_push(oldp[col + i + j]);
! 	    i += l;
! #else
! 	    replace_push(oldp[col + i]);
  #endif
  	}
      }
  
--- 2023,2033 ----
  	for (i = 0; i < oldlen; ++i)
  	{
  #ifdef FEAT_MBYTE
! 	    if (has_mbyte)
! 		i += replace_push_mb(oldp + col + i) - 1;
! 	    else
  #endif
+ 		replace_push(oldp[col + i]);
  	}
      }
  
*** ../vim-7.1.184/src/proto/edit.pro	Sat May  5 20:21:34 2007
--- src/proto/edit.pro	Tue Jan  1 17:21:24 2008
***************
*** 32,37 ****
--- 32,38 ----
  char_u *get_last_insert __ARGS((void));
  char_u *get_last_insert_save __ARGS((void));
  void replace_push __ARGS((int c));
+ int replace_push_mb __ARGS((char_u *p));
  void fixthisline __ARGS((int (*get_the_indent)(void)));
  void fix_indent __ARGS((void));
  int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty));
*** ../vim-7.1.184/src/version.c	Wed Jan  2 16:25:20 2008
--- src/version.c	Wed Jan  2 17:45:10 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     185,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.186 ---
To: vim-dev at vim.org
Subject: Patch 7.1.186
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.186
Problem:    "expand('<afile>')" returns a bogus value after changing
	    directory. (Dave Fishburn)
Solution:   Copy "autocmd_fname" to allocated memory and expand to full
	    filename.  Shorten the path when expanding <afile>.
Files:	    src/ex_docmd.c, src/fileio.c


*** ../vim-7.1.185/src/ex_docmd.c	Wed Jan  2 15:12:29 2008
--- src/ex_docmd.c	Wed Jan  2 20:12:33 2008
***************
*** 7799,7804 ****
--- 7799,7805 ----
  free_cd_dir()
  {
      vim_free(prev_dir);
+     prev_dir = NULL;
  }
  #endif
  
***************
*** 9521,9526 ****
--- 9522,9528 ----
  		    *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\"");
  		    return NULL;
  		}
+ 		result = shorten_fname1(result);
  		break;
  
  	case SPEC_ABUF:		/* buffer number for autocommand */
*** ../vim-7.1.185/src/fileio.c	Thu Nov  8 20:47:34 2007
--- src/fileio.c	Wed Jan  2 20:21:43 2008
***************
*** 5556,5562 ****
  #endif
  
  #if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \
!     defined(FEAT_QUICKFIX) || defined(PROTO)
  /*
   * Try to find a shortname by comparing the fullname with the current
   * directory.
--- 5556,5562 ----
  #endif
  
  #if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \
!     defined(FEAT_QUICKFIX) || defined(FEAT_AUTOCMD) || defined(PROTO)
  /*
   * Try to find a shortname by comparing the fullname with the current
   * directory.
***************
*** 8546,8551 ****
--- 8546,8553 ----
  
      /*
       * Set the file name to be used for <afile>.
+      * Make a copy to avoid that changing a buffer name or directory makes it
+      * invalid.
       */
      if (fname_io == NULL)
      {
***************
*** 8558,8563 ****
--- 8560,8567 ----
      }
      else
  	autocmd_fname = fname_io;
+     if (autocmd_fname != NULL)
+ 	autocmd_fname = FullName_save(autocmd_fname, FALSE);
  
      /*
       * Set the buffer number to be used for <abuf>.
***************
*** 8740,8745 ****
--- 8744,8750 ----
      vim_free(sourcing_name);
      sourcing_name = save_sourcing_name;
      sourcing_lnum = save_sourcing_lnum;
+     vim_free(autocmd_fname);
      autocmd_fname = save_autocmd_fname;
      autocmd_bufnr = save_autocmd_bufnr;
      autocmd_match = save_autocmd_match;
*** ../vim-7.1.185/src/version.c	Wed Jan  2 17:48:24 2008
--- src/version.c	Wed Jan  2 21:06:35 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     186,
  /**/

-- 
   LAUNCELOT leaps into SHOT with a mighty cry and runs the GUARD through and
   hacks him to the floor.  Blood.  Swashbuckling music (perhaps).
   LAUNCELOT races through into the castle screaming.
SECOND SENTRY: Hey!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.187 ---
To: vim-dev at vim.org
Subject: Patch 7.1.187
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.187
Problem:    Win32 GUI: Custom completion using system() no longer works
	    after patch 7.1.104. (Erik Falor)
Solution:   Loop when safe_vgetc() returns K_IGNORE.
Files:	    src/ex_getln.c


*** ../vim-7.1.186/src/ex_getln.c	Fri Dec  7 20:28:13 2007
--- src/ex_getln.c	Wed Jan  2 21:42:51 2008
***************
*** 335,341 ****
  	quit_more = FALSE;	/* reset after CTRL-D which had a more-prompt */
  
  	cursorcmd();		/* set the cursor on the right spot */
! 	c = safe_vgetc();
  	if (KeyTyped)
  	{
  	    some_key_typed = TRUE;
--- 335,348 ----
  	quit_more = FALSE;	/* reset after CTRL-D which had a more-prompt */
  
  	cursorcmd();		/* set the cursor on the right spot */
! 
! 	/* Get a character.  Ignore K_IGNORE, it should not do anything, such
! 	 * as stop completion. */
! 	do
! 	{
! 	    c = safe_vgetc();
! 	} while (c == K_IGNORE);
! 
  	if (KeyTyped)
  	{
  	    some_key_typed = TRUE;
***************
*** 1209,1215 ****
  		goto cmdline_not_changed;
  
  	case K_IGNORE:
! 		goto cmdline_not_changed;	/* Ignore mouse */
  
  #ifdef FEAT_GUI_W32
  	    /* On Win32 ignore <M-F4>, we get it when closing the window was
--- 1216,1223 ----
  		goto cmdline_not_changed;
  
  	case K_IGNORE:
! 		/* Ignore mouse event or ex_window() result. */
! 		goto cmdline_not_changed;
  
  #ifdef FEAT_GUI_W32
  	    /* On Win32 ignore <M-F4>, we get it when closing the window was
*** ../vim-7.1.186/src/version.c	Wed Jan  2 21:07:32 2008
--- src/version.c	Wed Jan  2 21:53:24 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     187,
  /**/

-- 
FATHER:    Who are you?
PRINCE:    I'm ... your son ...
FATHER:    Not you.
LAUNCELOT: I'm ... er ... Sir Launcelot, sir.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.188 ---
To: vim-dev at vim.org
Subject: Patch 7.1.188
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.188
Problem:    When 'showmode' is off the message for changing a readonly file is
	    given in the second column instead of the first.  (Payl B.  Mahol)
Solution:   Put the W10 message in the first column.
Files:	    src/edit.c


*** ../vim-7.1.187/src/edit.c	Wed Jan  2 17:48:24 2008
--- src/edit.c	Wed Jan  2 20:56:46 2008
***************
*** 550,556 ****
  	i = showmode();
  
      if (!p_im && did_restart_edit == 0)
! 	change_warning(i + 1);
  
  #ifdef CURSOR_SHAPE
      ui_cursor_shape();		/* may show different cursor shape */
--- 550,556 ----
  	i = showmode();
  
      if (!p_im && did_restart_edit == 0)
! 	change_warning(i == 0 ? 0 : i + 1);
  
  #ifdef CURSOR_SHAPE
      ui_cursor_shape();		/* may show different cursor shape */
*** ../vim-7.1.187/src/version.c	Wed Jan  2 21:54:33 2008
--- src/version.c	Wed Jan  2 22:06:19 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     188,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.189 ---
To: vim-dev at vim.org
Subject: Patch 7.1.189
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.189 (after 7.1.104)
Problem:    Patch 7.1.104 was incomplete.
Solution:   Also call plain_vgetc() in ask_yesno().
Files:	    src/misc1.c


*** ../vim-7.1.188/src/misc1.c	Wed Jan  2 17:48:24 2008
--- src/misc1.c	Wed Jan  2 17:48:00 2008
***************
*** 222,231 ****
  	    *s++ = *p++;
  	    orig_char_len--;
  	}
  	/* Skip over any additional white space (useful when newindent is less
  	 * than old) */
  	while (vim_iswhite(*p))
! 	    (void)*p++;
  
      }
      else
--- 222,232 ----
  	    *s++ = *p++;
  	    orig_char_len--;
  	}
+ 
  	/* Skip over any additional white space (useful when newindent is less
  	 * than old) */
  	while (vim_iswhite(*p))
! 	    ++p;
  
      }
      else
***************
*** 3024,3030 ****
  	if (direct)
  	    r = get_keystroke();
  	else
! 	    r = safe_vgetc();
  	if (r == Ctrl_C || r == ESC)
  	    r = 'n';
  	msg_putchar(r);	    /* show what you typed */
--- 3025,3031 ----
  	if (direct)
  	    r = get_keystroke();
  	else
! 	    r = plain_vgetc();
  	if (r == Ctrl_C || r == ESC)
  	    r = 'n';
  	msg_putchar(r);	    /* show what you typed */
*** ../vim-7.1.188/src/version.c	Wed Jan  2 22:08:43 2008
--- src/version.c	Thu Jan  3 12:40:31 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     189,
  /**/

-- 
Q: How does a UNIX Guru do Sex ?
A: unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.190 ---
To: vim-dev at vim.org
Subject: Patch 7.1.190
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.190
Problem:    Cursor after end-of-line: "iA sentence.<Esc>)"
Solution:   Move cursor back and make motion inclusive.
Files:	    src/normal.c


*** ../vim-7.1.189/src/normal.c	Wed Jan  2 16:25:20 2008
--- src/normal.c	Wed Jan  2 22:04:38 2008
***************
*** 6564,6569 ****
--- 6564,6575 ----
  	clearopbeep(cap->oap);
      else
      {
+ 	/* Don't leave the cursor on the NUL past a line */
+ 	if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL)
+ 	{
+ 	    --curwin->w_cursor.col;
+ 	    cap->oap->inclusive = TRUE;
+ 	}
  #ifdef FEAT_VIRTUALEDIT
  	curwin->w_cursor.coladd = 0;
  #endif
*** ../vim-7.1.189/src/version.c	Thu Jan  3 12:42:39 2008
--- src/version.c	Thu Jan  3 13:19:03 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     190,
  /**/

-- 
    [clop clop]
GUARD #1:  Halt!  Who goes there?
ARTHUR:    It is I, Arthur, son of Uther Pendragon, from the castle of
           Camelot.  King of the Britons, defeator of the Saxons, sovereign of
           all England!
GUARD #1:  Pull the other one!
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.191 ---
To: vim-dev at vim.org
Subject: Patch 7.1.191
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.191
Problem:    Win32 GUI: after patch 7.1.168 there is still a problem when
	    clicking in a scrollbar. (Juergen Jottkaerr)
Solution:   Don't check the input buffer when dragging the scrollbar.
Files:	    src/gui.c


*** ../vim-7.1.190/src/gui.c	Tue Nov  6 22:26:39 2007
--- src/gui.c	Thu Jan  3 13:16:29 2008
***************
*** 3734,3741 ****
      sb->value = value;
  
  #ifdef USE_ON_FLY_SCROLL
!     /* When not allowed to do the scrolling right now, return. */
!     if (dont_scroll || input_available())
  	return;
  #endif
  #ifdef FEAT_INS_EXPAND
--- 3734,3743 ----
      sb->value = value;
  
  #ifdef USE_ON_FLY_SCROLL
!     /* When not allowed to do the scrolling right now, return.
!      * This also checked input_available(), but that causes the first click in
!      * a scrollbar to be ignored when Vim doesn't have focus. */
!     if (dont_scroll)
  	return;
  #endif
  #ifdef FEAT_INS_EXPAND
*** ../vim-7.1.190/src/version.c	Thu Jan  3 13:19:50 2008
--- src/version.c	Thu Jan  3 16:13:23 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     191,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.192 ---
To: vim-dev at vim.org
Subject: Patch 7.1.192
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.192
Problem:    With Visual block selection, "s" and typing something, CTRL-C
	    doesn't stop Vim from repeating the replacement in other lines,
	    like happens for "I".
Solution:   Check for "got_int" to be set.
Files:	    src/ops.c


*** ../vim-7.1.191/src/ops.c	Sat Dec  1 21:12:23 2007
--- src/ops.c	Thu Jan  3 16:26:37 2008
***************
*** 2468,2476 ****
  
      edit(NUL, FALSE, (linenr_T)count1);
  
!     /* if user has moved off this line, we don't know what to do, so do
!      * nothing */
!     if (curwin->w_cursor.lnum != oap->start.lnum)
  	return;
  
      if (oap->block_mode)
--- 2468,2477 ----
  
      edit(NUL, FALSE, (linenr_T)count1);
  
!     /* If user has moved off this line, we don't know what to do, so do
!      * nothing.
!      * Also don't repeat the insert when Insert mode ended with CTRL-C. */
!     if (curwin->w_cursor.lnum != oap->start.lnum || got_int)
  	return;
  
      if (oap->block_mode)
***************
*** 2601,2608 ****
      /*
       * In Visual block mode, handle copying the new text to all lines of the
       * block.
       */
!     if (oap->block_mode && oap->start.lnum != oap->end.lnum)
      {
  	/* Auto-indenting may have changed the indent.  If the cursor was past
  	 * the indent, exclude that indent change from the inserted text. */
--- 2602,2610 ----
      /*
       * In Visual block mode, handle copying the new text to all lines of the
       * block.
+      * Don't repeat the insert when Insert mode ended with CTRL-C.
       */
!     if (oap->block_mode && oap->start.lnum != oap->end.lnum && !got_int)
      {
  	/* Auto-indenting may have changed the indent.  If the cursor was past
  	 * the indent, exclude that indent change from the inserted text. */
*** ../vim-7.1.191/src/version.c	Thu Jan  3 16:14:25 2008
--- src/version.c	Thu Jan  3 16:30:07 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     192,
  /**/

-- 
"A mouse can be just as dangerous as a bullet or a bomb."
             (US Representative Lamar Smith, R-Texas)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.193 ---
To: vim-dev at vim.org
Subject: Patch 7.1.193
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.193
Problem:    Some Vim 5.x digraphs are missing in Vim 7, even though the
	    character pairs are not used. (Philippe de Muyter)
Solution:   Add those Vim 5.x digraphs that don't conflict with others.
Files:	    src/digraph.c


*** ../vim-7.1.192/src/digraph.c	Thu Sep 13 18:25:08 2007
--- src/digraph.c	Thu Jan  3 17:48:47 2008
***************
*** 1978,1983 ****
--- 1978,2038 ----
  	{'f', 't', 0xfb05},
  	{'s', 't', 0xfb06},
  #      endif /* FEAT_MBYTE */
+ 
+ 	/* Vim 5.x compatible digraphs that don't conflict with the above */
+ 	{'~', '!', 161},	/* ¡ */
+ 	{'c', '|', 162},	/* ¢ */
+ 	{'$', '$', 163},	/* £ */
+ 	{'o', 'x', 164},	/* ¤ - currency symbol in ISO 8859-1 */
+ 	{'Y', '-', 165},	/* ¥ */
+ 	{'|', '|', 166},	/* ¦ */
+ 	{'c', 'O', 169},	/* © */
+ 	{'-', ',', 172},	/* ¬ */
+ 	{'-', '=', 175},	/* ¯ */
+ 	{'~', 'o', 176},	/* ° */
+ 	{'2', '2', 178},	/* ² */
+ 	{'3', '3', 179},	/* ³ */
+ 	{'p', 'p', 182},	/* ¶ */
+ 	{'~', '.', 183},	/* · */
+ 	{'1', '1', 185},	/* ¹ */
+ 	{'~', '?', 191},	/* ¿ */
+ 	{'A', '`', 192},	/* À */
+ 	{'A', '^', 194},	/* Â */
+ 	{'A', '~', 195},	/* Ã */
+ 	{'A', '"', 196},	/* Ä */
+ 	{'A', '@', 197},	/* Å */
+ 	{'E', '`', 200},	/* È */
+ 	{'E', '^', 202},	/* Ê */
+ 	{'E', '"', 203},	/* Ë */
+ 	{'I', '`', 204},	/* Ì */
+ 	{'I', '^', 206},	/* Î */
+ 	{'I', '"', 207},	/* Ï */
+ 	{'N', '~', 209},	/* Ñ */
+ 	{'O', '`', 210},	/* Ò */
+ 	{'O', '^', 212},	/* Ô */
+ 	{'O', '~', 213},	/* Õ */
+ 	{'/', '\\', 215},	/* × - multiplication symbol in ISO 8859-1 */
+ 	{'U', '`', 217},	/* Ù */
+ 	{'U', '^', 219},	/* Û */
+ 	{'I', 'p', 222},	/* Þ */
+ 	{'a', '`', 224},	/* à */
+ 	{'a', '^', 226},	/* â */
+ 	{'a', '~', 227},	/* ã */
+ 	{'a', '"', 228},	/* ä */
+ 	{'a', '@', 229},	/* å */
+ 	{'e', '`', 232},	/* è */
+ 	{'e', '^', 234},	/* ê */
+ 	{'e', '"', 235},	/* ë */
+ 	{'i', '`', 236},	/* ì */
+ 	{'i', '^', 238},	/* î */
+ 	{'n', '~', 241},	/* ñ */
+ 	{'o', '`', 242},	/* ò */
+ 	{'o', '^', 244},	/* ô */
+ 	{'o', '~', 245},	/* õ */
+ 	{'u', '`', 249},	/* ù */
+ 	{'u', '^', 251},	/* û */
+ 	{'y', '"', 255},	/* x XX */
+ 
  	{NUL, NUL, NUL}
         };
  
*** ../vim-7.1.192/src/version.c	Thu Jan  3 16:31:17 2008
--- src/version.c	Thu Jan  3 17:52:51 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     193,
  /**/

-- 
Futility Factor: No experiment is ever a complete failure - it can always
serve as a negative example.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.194 ---
To: vim-dev at vim.org
Subject: Patch 7.1.194
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.194
Problem:    ":echo glob('~/{}')" results in /home/user//.
Solution:   Don't add a slash if there already is one.
Files:	    src/os_unix.c


*** ../vim-7.1.193/src/os_unix.c	Sat Dec  1 17:18:45 2007
--- src/os_unix.c	Thu Jan  3 18:52:22 2008
***************
*** 5482,5488 ****
  	{
  	    STRCPY(p, (*file)[i]);
  	    if (dir)
! 		STRCAT(p, "/");	    /* add '/' to a directory name */
  	    (*file)[j++] = p;
  	}
      }
--- 5482,5488 ----
  	{
  	    STRCPY(p, (*file)[i]);
  	    if (dir)
! 		add_pathsep(p);	    /* add '/' to a directory name */
  	    (*file)[j++] = p;
  	}
      }
*** ../vim-7.1.193/src/version.c	Thu Jan  3 17:53:41 2008
--- src/version.c	Thu Jan  3 18:54:41 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     194,
  /**/

-- 
ARTHUR:    Will you ask your master if he wants to join my court at Camelot?!
GUARD #1:  But then of course African swallows are not migratory.
GUARD #2:  Oh, yeah...
GUARD #1:  So they couldn't bring a coconut back anyway...
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.195 ---
To: vim-dev at vim.org
Subject: Patch 7.1.195
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.195
Problem:    '0 mark doesn't work for "~/foo ~ foo".
Solution:   Don't expand the whole file name, only "~/".
Files:	    src/mark.c


*** ../vim-7.1.194/src/mark.c	Thu May 10 18:48:03 2007
--- src/mark.c	Thu Jan  3 20:17:29 2008
***************
*** 505,513 ****
      {
  	/*
  	 * First expand "~/" in the file name to the home directory.
! 	 * Try to shorten the file name.
  	 */
! 	expand_env(fm->fname, NameBuff, MAXPATHL);
  	mch_dirname(IObuff, IOSIZE);
  	p = shorten_fname(NameBuff, IObuff);
  
--- 505,528 ----
      {
  	/*
  	 * First expand "~/" in the file name to the home directory.
! 	 * Don't expand the whole name, it may contain other '~' chars.
  	 */
! 	if (fm->fname[0] == '~' && (fm->fname[1] == '/'
! #ifdef BACKSLASH_IN_FILENAME
! 		    || fm->fname[1] == '\\'
! #endif
! 		    ))
! 	{
! 	    int len;
! 
! 	    expand_env((char_u *)"~/", NameBuff, MAXPATHL);
! 	    len = STRLEN(NameBuff);
! 	    vim_strncpy(NameBuff + len, fm->fname + 2, MAXPATHL - len - 1);
! 	}
! 	else
! 	    vim_strncpy(NameBuff, fm->fname, MAXPATHL - 1);
! 
! 	/* Try to shorten the file name. */
  	mch_dirname(IObuff, IOSIZE);
  	p = shorten_fname(NameBuff, IObuff);
  
*** ../vim-7.1.194/src/version.c	Thu Jan  3 18:55:21 2008
--- src/version.c	Thu Jan  3 20:10:16 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     195,
  /**/

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

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.196 ---
To: vim-dev at vim.org
Subject: Patch 7.1.196 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.196 (extra)
Problem:    Win32 GUI: "\n" in a tooltip doesn't cause a line break. (Erik
	    Falor)
Solution:   Use the TTM_SETMAXTIPWIDTH message.
Files:	    src/gui_w32.c


*** ../vim-7.1.195/src/gui_w32.c	Thu Aug 30 12:24:21 2007
--- src/gui_w32.c	Thu Jan  3 13:56:26 2008
***************
*** 987,992 ****
--- 987,997 ----
  			{
  			    LPNMTTDISPINFOW	lpdi = (LPNMTTDISPINFOW)lParam;
  
+ 			    /* Set the maximum width, this also enables using
+ 			     * \n for line break. */
+ 			    SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
+ 								      0, 500);
+ 
  			    tt_text = enc_to_ucs2(str, NULL);
  			    lpdi->lpszText = tt_text;
  			    /* can't show tooltip if failed */
***************
*** 996,1001 ****
--- 1001,1011 ----
  			{
  			    LPNMTTDISPINFO	lpdi = (LPNMTTDISPINFO)lParam;
  
+ 			    /* Set the maximum width, this also enables using
+ 			     * \n for line break. */
+ 			    SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
+ 								      0, 500);
+ 
  			    if (STRLEN(str) < sizeof(lpdi->szText)
  				    || ((tt_text = vim_strsave(str)) == NULL))
  				vim_strncpy(lpdi->szText, str,
***************
*** 4734,4745 ****
  	    cur_beval->showState = ShS_NEUTRAL;
  	    break;
  	case TTN_GETDISPINFO:
! 	{
! 	    /* if you get there then we have new common controls */
! 	    NMTTDISPINFO_NEW *info = (NMTTDISPINFO_NEW *)pnmh;
! 	    info->lpszText = (LPSTR)info->lParam;
! 	    info->uFlags |= TTF_DI_SETITEM;
! 	}
  	    break;
  	}
      }
--- 4744,4755 ----
  	    cur_beval->showState = ShS_NEUTRAL;
  	    break;
  	case TTN_GETDISPINFO:
! 	    {
! 		/* if you get there then we have new common controls */
! 		NMTTDISPINFO_NEW *info = (NMTTDISPINFO_NEW *)pnmh;
! 		info->lpszText = (LPSTR)info->lParam;
! 		info->uFlags |= TTF_DI_SETITEM;
! 	    }
  	    break;
  	}
      }
*** ../vim-7.1.195/src/version.c	Thu Jan  3 20:21:34 2008
--- src/version.c	Thu Jan  3 20:43:22 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     196,
  /**/

-- 
Shit makes the flowers grow and that's beautiful

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.197 ---
To: vim-dev at vim.org
Subject: Patch 7.1.197
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.197
Problem:    Mac: "make install" doesn't work when prefix defined.
Solution:   Pass different arguments to "make installruntime".  (Jjgod Jiang)
Files:	    src/Makefile


*** ../vim-7.1.196/src/Makefile	Thu Jan  3 20:44:40 2008
--- src/Makefile	Thu Jan  3 18:30:02 2008
***************
*** 2559,2566 ****
  #	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
  	srcdir=`pwd`; $(MAKE) -f Makefile installruntime \
  		VIMEXE=$$srcdir/$(VIMTARGET) \
! 		prefix=$(DESTDIR)$(prefix)/$(RESDIR)/vim \
! 		VIMRTLOC=$(DESTDIR)$(prefix)/$(RESDIR)/vim/runtime
  # Put the link back.
  	ln -s `pwd`/../runtime $(RESDIR)/vim
  # Copy rgb.txt, Mac doesn't always have X11
--- 2564,2574 ----
  #	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
  	srcdir=`pwd`; $(MAKE) -f Makefile installruntime \
  		VIMEXE=$$srcdir/$(VIMTARGET) \
! 		prefix=$(DESTDIR)$(prefix)/$(RESDIR)$(VIMDIR) \
! 		exec_prefix=$(DESTDIR)$(prefix)/$(APPDIR)/Contents \
! 		BINDIR=$(DESTDIR)$(prefix)/$(APPDIR)/Contents/MacOS \
! 		VIMLOC=$(DESTDIR)$(prefix)/$(RESDIR)$(VIMDIR) \
! 		VIMRTLOC=$(DESTDIR)$(prefix)/$(RESDIR)$(VIMDIR)/runtime
  # Put the link back.
  	ln -s `pwd`/../runtime $(RESDIR)/vim
  # Copy rgb.txt, Mac doesn't always have X11
*** ../vim-7.1.196/src/version.c	Thu Jan  3 20:44:35 2008
--- src/version.c	Fri Jan  4 11:52:46 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     197,
  /**/

-- 
CUSTOMER:     Well, can you hang around a couple of minutes?  He won't be
              long.
MORTICIAN:    Naaah, I got to go on to Robinson's -- they've lost nine today.
CUSTOMER:     Well, when is your next round?
MORTICIAN:    Thursday.
DEAD PERSON:  I think I'll go for a walk.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.198 ---
To: vim-dev at vim.org
Subject: Patch 7.1.198
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.198
Problem:    Hang when using ":s/\n//gn". (Burak Gorkemli)
Solution:   Set "skip_match".
Files:	    src/ex_cmds.c


*** ../vim-7.1.197/src/ex_cmds.c	Wed Jan  2 13:58:17 2008
--- src/ex_cmds.c	Fri Jan  4 14:46:34 2008
***************
*** 4575,4580 ****
--- 4575,4581 ----
  		    {
  			matchcol = (colnr_T)STRLEN(sub_firstline);
  			nmatch = 1;
+ 			skip_match = TRUE;
  		    }
  		    sub_nsubs++;
  		    did_sub = TRUE;
*** ../vim-7.1.197/src/version.c	Fri Jan  4 11:54:11 2008
--- src/version.c	Fri Jan  4 14:52:09 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     198,
  /**/

-- 
    [clop clop]
ARTHUR:  Old woman!
DENNIS:  Man!
ARTHUR:  Man, sorry.  What knight lives in that castle over there?
DENNIS:  I'm thirty seven.
ARTHUR:  What?
DENNIS:  I'm thirty seven -- I'm not old!
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.199 ---
To: vim-dev at vim.org
Subject: Patch 7.1.199
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.199
Problem:    Can't do command line completion for a specific file name
	    extension.
Solution:   When the pattern ends in "$" don't add a star for completion and
	    remove the "$" before matching with file names.
Files:	    runtime/doc/cmdline.txt, src/ex_getln.c


*** ../vim-7.1.198/runtime/doc/cmdline.txt	Sat May 12 15:38:39 2007
--- runtime/doc/cmdline.txt	Fri Jan  4 15:13:06 2008
***************
*** 1,4 ****
! *cmdline.txt*   For Vim version 7.1.  Last change: 2006 Jul 18
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *cmdline.txt*   For Vim version 7.1.  Last change: 2008 Jan 04
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 316,322 ****
  command-line is shown.  (Note: the shifted arrow keys do not work on all
  terminals)
  
! 							*his* *:history*
  :his[tory]	Print the history of last entered commands.
  		{not in Vi}
  		{not available when compiled without the |+cmdline_hist|
--- 316,322 ----
  command-line is shown.  (Note: the shifted arrow keys do not work on all
  terminals)
  
! 							*:his* *:history*
  :his[tory]	Print the history of last entered commands.
  		{not in Vi}
  		{not available when compiled without the |+cmdline_hist|
***************
*** 447,452 ****
--- 447,457 ----
  
  To completely ignore files with some extension use 'wildignore'.
  
+ To match only files that end at the end of the typed text append a "$".  For
+ example, to match only files that end in ".c": >
+ 	:e *.c$
+ This will not match a file ending in ".cpp".  Without the "$" it does match.
+ 
  The old value of an option can be obtained by hitting 'wildchar' just after
  the '='.  For example, typing 'wildchar' after ":set dir=" will insert the
  current value of 'dir'.  This overrules file name completion for the options
*** ../vim-7.1.198/src/ex_getln.c	Wed Jan  2 21:54:33 2008
--- src/ex_getln.c	Fri Jan  4 15:05:31 2008
***************
*** 4078,4083 ****
--- 4078,4084 ----
  	     * ~ would be at the start of the file name, but not the tail.
  	     * $ could be anywhere in the tail.
  	     * ` could be anywhere in the file name.
+ 	     * When the name ends in '$' don't add a star, remove the '$'.
  	     */
  	    tail = gettail(retval);
  	    if ((*retval != '~' || tail != retval)
***************
*** 4085,4090 ****
--- 4086,4093 ----
  		    && vim_strchr(tail, '$') == NULL
  		    && vim_strchr(retval, '`') == NULL)
  		retval[len++] = '*';
+ 	    else if (len > 0 && retval[len - 1] == '$')
+ 		--len;
  	    retval[len] = NUL;
  	}
      }
*** ../vim-7.1.198/src/version.c	Fri Jan  4 14:52:14 2008
--- src/version.c	Fri Jan  4 15:14:29 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     199,
  /**/

-- 
ARTHUR:  Well, I can't just call you `Man'.
DENNIS:  Well, you could say `Dennis'.
ARTHUR:  Well, I didn't know you were called `Dennis.'
DENNIS:  Well, you didn't bother to find out, did you?
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.200 ---
To: vim-dev at vim.org
Subject: Patch 7.1.200
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.200 (after 7.1.177 and 7.1.182)
Problem:    Compiler warnings for uninitialized variables.
Solution:   Init variables.
Files:	    src/ex_cmds2.c, src/ex_docmd.c


*** ../vim-7.1.199/src/ex_cmds2.c	Tue Jan  1 14:16:42 2008
--- src/ex_cmds2.c	Fri Jan  4 15:55:54 2008
***************
*** 94,100 ****
      int		save_redir_off = redir_off;
      tasave_T	typeaheadbuf;
      int		typeahead_saved = FALSE;
!     int		save_ignore_script;
  # ifdef FEAT_EX_EXTRA
      int		save_ex_normal_busy;
  # endif
--- 94,100 ----
      int		save_redir_off = redir_off;
      tasave_T	typeaheadbuf;
      int		typeahead_saved = FALSE;
!     int		save_ignore_script = 0;
  # ifdef FEAT_EX_EXTRA
      int		save_ex_normal_busy;
  # endif
*** ../vim-7.1.199/src/ex_docmd.c	Wed Jan  2 21:07:32 2008
--- src/ex_docmd.c	Fri Jan  4 15:57:28 2008
***************
*** 9765,9771 ****
      win_T	*tab_firstwin;
      frame_T	*tab_topframe;
      int		cur_arg_idx = 0;
!     int		next_arg_idx;
  
      if (ssop_flags & SSOP_BUFFERS)
  	only_save_windows = FALSE;		/* Save ALL buffers */
--- 9766,9772 ----
      win_T	*tab_firstwin;
      frame_T	*tab_topframe;
      int		cur_arg_idx = 0;
!     int		next_arg_idx = 0;
  
      if (ssop_flags & SSOP_BUFFERS)
  	only_save_windows = FALSE;		/* Save ALL buffers */
*** ../vim-7.1.199/src/version.c	Fri Jan  4 15:16:57 2008
--- src/version.c	Fri Jan  4 15:59:46 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     200,
  /**/

-- 
ARTHUR:  I did say sorry about the `old woman,' but from the behind you
         looked--
DENNIS:  What I object to is you automatically treat me like an inferior!
ARTHUR:  Well, I AM king...
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.201 ---
To: vim-dev at vim.org
Subject: Patch 7.1.201
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.201
Problem:    When reading stdin 'fenc' and 'ff are not set.
Solution:   Set the options after reading stdin. (Ben Schmidt)
Files:	    src/fileio.c


*** ../vim-7.1.200/src/fileio.c	Wed Jan  2 21:07:32 2008
--- src/fileio.c	Fri Jan  4 16:18:27 2008
***************
*** 221,231 ****
  {
      int		fd = 0;
      int		newfile = (flags & READ_NEW);
-     int		set_options = newfile || (eap != NULL && eap->read_edit);
      int		check_readonly;
      int		filtering = (flags & READ_FILTER);
      int		read_stdin = (flags & READ_STDIN);
      int		read_buffer = (flags & READ_BUFFER);
      linenr_T	read_buf_lnum = 1;	/* next line to read from curbuf */
      colnr_T	read_buf_col = 0;	/* next char to read from this line */
      char_u	c;
--- 221,232 ----
  {
      int		fd = 0;
      int		newfile = (flags & READ_NEW);
      int		check_readonly;
      int		filtering = (flags & READ_FILTER);
      int		read_stdin = (flags & READ_STDIN);
      int		read_buffer = (flags & READ_BUFFER);
+     int		set_options = newfile || read_buffer
+ 					   || (eap != NULL && eap->read_edit);
      linenr_T	read_buf_lnum = 1;	/* next line to read from curbuf */
      colnr_T	read_buf_col = 0;	/* next char to read from this line */
      char_u	c;
***************
*** 650,657 ****
  
      if (set_options)
      {
! 	curbuf->b_p_eol = TRUE;
! 	curbuf->b_start_eol = TRUE;
  #ifdef FEAT_MBYTE
  	curbuf->b_p_bomb = FALSE;
  	curbuf->b_start_bomb = FALSE;
--- 651,663 ----
  
      if (set_options)
      {
! 	/* Don't change 'eol' if reading from buffer as it will already be
! 	 * correctly set when reading stdin. */
! 	if (!read_buffer)
! 	{
! 	    curbuf->b_p_eol = TRUE;
! 	    curbuf->b_start_eol = TRUE;
! 	}
  #ifdef FEAT_MBYTE
  	curbuf->b_p_bomb = FALSE;
  	curbuf->b_start_bomb = FALSE;
*** ../vim-7.1.200/src/version.c	Fri Jan  4 16:00:10 2008
--- src/version.c	Fri Jan  4 16:27:01 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     201,
  /**/

-- 
A mathematician is a device for turning coffee into theorems.
					Paul Erdos
A computer programmer is a device for turning coffee into bugs.
					Bram Moolenaar

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.202 ---
To: vim-dev at vim.org
Subject: Patch 7.1.202
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.202
Problem:    Incomplete utf-8 byte sequence is not checked for validity.
Solution:   Check the bytes that are present for being valid. (Ben Schmidt)
Files:	    src/mbyte.c


*** ../vim-7.1.201/src/mbyte.c	Thu Aug 30 13:51:52 2007
--- src/mbyte.c	Fri Jan  4 17:30:16 2008
***************
*** 1642,1648 ****
   * Get the length of UTF-8 byte sequence "p[size]".  Does not include any
   * following composing characters.
   * Returns 1 for "".
!  * Returns 1 for an illegal byte sequence.
   * Returns number > "size" for an incomplete byte sequence.
   */
      int
--- 1642,1648 ----
   * Get the length of UTF-8 byte sequence "p[size]".  Does not include any
   * following composing characters.
   * Returns 1 for "".
!  * Returns 1 for an illegal byte sequence (also in incomplete byte seq.).
   * Returns number > "size" for an incomplete byte sequence.
   */
      int
***************
*** 1652,1664 ****
  {
      int		len;
      int		i;
  
      if (*p == NUL)
  	return 1;
!     len = utf8len_tab[*p];
      if (len > size)
! 	return len;	/* incomplete byte sequence. */
!     for (i = 1; i < len; ++i)
  	if ((p[i] & 0xc0) != 0x80)
  	    return 1;
      return len;
--- 1652,1665 ----
  {
      int		len;
      int		i;
+     int		m;
  
      if (*p == NUL)
  	return 1;
!     m = len = utf8len_tab[*p];
      if (len > size)
! 	m = size;	/* incomplete byte sequence. */
!     for (i = 1; i < m; ++i)
  	if ((p[i] & 0xc0) != 0x80)
  	    return 1;
      return len;
*** ../vim-7.1.201/src/version.c	Fri Jan  4 16:30:40 2008
--- src/version.c	Fri Jan  4 17:45:33 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     202,
  /**/

-- 
A computer programmer is a device for turning requirements into
undocumented features.  It runs on cola, pizza and Dilbert cartoons.
					Bram Moolenaar

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.203 ---
To: vim-dev at vim.org
Subject: Patch 7.1.203
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.203
Problem:    When 'virtualedit' is "onemore" then "99|" works but ":normal 99|"
	    doesn't.  (Andy Wokula)
Solution:   Check for "onemore" flag in check_cursor_col().
Files:	    src/misc2.c


*** ../vim-7.1.202/src/misc2.c	Sat Nov 24 21:27:33 2007
--- src/misc2.c	Fri Jan  4 21:24:46 2008
***************
*** 507,517 ****
  	curwin->w_cursor.col = 0;
      else if (curwin->w_cursor.col >= len)
      {
! 	/* Allow cursor past end-of-line in Insert mode, restarting Insert
! 	 * mode or when in Visual mode and 'selection' isn't "old" */
  	if ((State & INSERT) || restart_edit
  #ifdef FEAT_VISUAL
  		|| (VIsual_active && *p_sel != 'o')
  #endif
  		|| virtual_active())
  	    curwin->w_cursor.col = len;
--- 508,523 ----
  	curwin->w_cursor.col = 0;
      else if (curwin->w_cursor.col >= len)
      {
! 	/* Allow cursor past end-of-line when:
! 	 * - in Insert mode or restarting Insert mode
! 	 * - in Visual mode and 'selection' isn't "old"
! 	 * - 'virtualedit' is set */
  	if ((State & INSERT) || restart_edit
  #ifdef FEAT_VISUAL
  		|| (VIsual_active && *p_sel != 'o')
+ #endif
+ #ifdef FEAT_VIRTUALEDIT
+ 		|| (ve_flags & VE_ONEMORE)
  #endif
  		|| virtual_active())
  	    curwin->w_cursor.col = len;
*** ../vim-7.1.202/src/version.c	Fri Jan  4 17:46:46 2008
--- src/version.c	Fri Jan  4 21:22:29 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     203,
  /**/

-- 
`When any government, or any church for that matter, undertakes to say to
 its subjects, "This you may not read, this you must not see, this you are
 forbidden to know," the end result is tyranny and oppression no matter how
 holy the motives' -- Robert A Heinlein, "If this goes on --"

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.204 ---
To: vim-dev at vim.org
Subject: Patch 7.1.204 (extra)
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.204 (extra)
Problem:    Win32: Using the example at 'balloonexpr' the balloon disappears
	    after four seconds and then comes back again.  Also moves the
	    mouse pointer a little bit.  (Yongwei Wu)
Solution:   Set the autopop time to 30 seconds (the max value).  (Sergey
	    Khorev)  Move the mouse two pixels forward and one back to end up
	    in the same position (really!).
Files:	    src/gui_w32.c



*** ../vim-7.1.203/src/gui_w32.c	Thu Jan  3 20:44:35 2008
--- src/gui_w32.c	Sat Jan  5 13:09:56 2008
***************
*** 4575,4585 ****
      SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti);
      /* Make tooltip appear sooner */
      SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10);
      /*
       * HACK: force tooltip to appear, because it'll not appear until
       * first mouse move. D*mn M$
       */
!     mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
      mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
      vim_free(pti);
  }
--- 4575,4589 ----
      SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti);
      /* Make tooltip appear sooner */
      SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10);
+     /* I've performed some tests and it seems the longest possible life time
+      * of tooltip is 30 seconds */
+     SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_AUTOPOP, 30000);
      /*
       * HACK: force tooltip to appear, because it'll not appear until
       * first mouse move. D*mn M$
+      * Amazingly moving (2, 2) and then (-1, -1) the mouse doesn't move.
       */
!     mouse_event(MOUSEEVENTF_MOVE, 2, 2, 0, 0);
      mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
      vim_free(pti);
  }
*** ../vim-7.1.203/src/version.c	Fri Jan  4 21:25:01 2008
--- src/version.c	Sat Jan  5 13:12:22 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     204,
  /**/

-- 
WOMAN:   I didn't know we had a king. I thought we were an autonomous
         collective.
DENNIS:  You're fooling yourself.  We're living in a dictatorship.  A
         self-perpetuating autocracy in which the working classes--
WOMAN:   Oh there you go, bringing class into it again.
DENNIS:  That's what it's all about if only people would--
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.205 ---
To: vim-dev at vim.org
Subject: Patch 7.1.205
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.205
Problem:    Can't get the operator in an ":omap".
Solution:   Add the "v:operator" variable. (Ben Schmidt)
Files:	    runtime/doc/eval.txt, src/eval.c, src/normal.c, src/vim.h


*** ../vim-7.1.204/runtime/doc/eval.txt	Tue Sep 25 17:54:41 2007
--- runtime/doc/eval.txt	Fri Jan  4 20:38:55 2008
***************
*** 1,4 ****
! *eval.txt*      For Vim version 7.1.  Last change: 2007 Sep 25
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 04
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 1401,1410 ****
  		This is the screen column number, like with |virtcol()|.  The
  		value is zero when there was no mouse button click.
  
  					*v:prevcount* *prevcount-variable*
  v:prevcount	The count given for the last but one Normal mode command.
  		This is the v:count value of the previous command.  Useful if
! 		you want to cancel Visual mode and then use the count. >
  			:vmap % <Esc>:call MyFilter(v:prevcount)<CR>
  <		Read-only.
  
--- 1401,1424 ----
  		This is the screen column number, like with |virtcol()|.  The
  		value is zero when there was no mouse button click.
  
+ 					*v:operator* *operator-variable*
+ v:operator	The last operator given in Normal mode.  This is a single
+ 		character except for commands starting with <g> or <z>,
+ 		in which case it is two characters.  Best used alongside
+ 		|v:prevcount| and |v:register|.  Useful if you want to cancel
+ 		Operator-pending mode and then use the operator, e.g.: >
+ 			:omap O <Esc>:call MyMotion(v:operator)<CR>
+ <		The value remains set until another operator is entered, thus
+ 		don't expect it to be empty.
+ 		v:operator is not set for |:delete|, |:yank| or other Ex
+ 		commands.
+ 		Read-only.
+ 
  					*v:prevcount* *prevcount-variable*
  v:prevcount	The count given for the last but one Normal mode command.
  		This is the v:count value of the previous command.  Useful if
! 		you want to cancel Visual or Operator-pending mode and then
! 		use the count, e.g.: >
  			:vmap % <Esc>:call MyFilter(v:prevcount)<CR>
  <		Read-only.
  
*** ../vim-7.1.204/src/eval.c	Fri Dec  7 17:08:35 2007
--- src/eval.c	Sat Jan  5 13:22:52 2008
***************
*** 345,350 ****
--- 345,351 ----
      {VV_NAME("mouse_win",	 VAR_NUMBER), 0},
      {VV_NAME("mouse_lnum",	 VAR_NUMBER), 0},
      {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
+     {VV_NAME("operator",	 VAR_STRING), VV_RO},
  };
  
  /* shorthand */
*** ../vim-7.1.204/src/normal.c	Thu Jan  3 13:19:50 2008
--- src/normal.c	Fri Jan  4 20:53:43 2008
***************
*** 141,146 ****
--- 141,149 ----
  static void	nv_Undo __ARGS((cmdarg_T *cap));
  static void	nv_tilde __ARGS((cmdarg_T *cap));
  static void	nv_operator __ARGS((cmdarg_T *cap));
+ #ifdef FEAT_EVAL
+ static void	set_op_var __ARGS((int optype));
+ #endif
  static void	nv_lineop __ARGS((cmdarg_T *cap));
  static void	nv_home __ARGS((cmdarg_T *cap));
  static void	nv_pipe __ARGS((cmdarg_T *cap));
***************
*** 7180,7185 ****
--- 7183,7191 ----
  	{
  	    cap->oap->start = curwin->w_cursor;
  	    cap->oap->op_type = OP_DELETE;
+ #ifdef FEAT_EVAL
+ 	    set_op_var(OP_DELETE);
+ #endif
  	    cap->count1 = 1;
  	    nv_dollar(cap);
  	    finish_op = TRUE;
***************
*** 8219,8226 ****
--- 8225,8257 ----
      {
  	cap->oap->start = curwin->w_cursor;
  	cap->oap->op_type = op_type;
+ #ifdef FEAT_EVAL
+ 	set_op_var(op_type);
+ #endif
+     }
+ }
+ 
+ #ifdef FEAT_EVAL
+ /*
+  * Set v:operator to the characters for "optype".
+  */
+     static void
+ set_op_var(optype)
+     int optype;
+ {
+     char_u	opchars[3];
+ 
+     if (optype == OP_NOP)
+ 	set_vim_var_string(VV_OP, NULL, 0);
+     else
+     {
+ 	opchars[0] = get_op_char(optype);
+ 	opchars[1] = get_extra_op_char(optype);
+ 	opchars[2] = NUL;
+ 	set_vim_var_string(VV_OP, opchars, -1);
      }
  }
+ #endif
  
  /*
   * Handle linewise operator "dd", "yy", etc.
*** ../vim-7.1.204/src/vim.h	Sat Aug 11 13:57:31 2007
--- src/vim.h	Fri Jan  4 19:11:31 2008
***************
*** 1688,1694 ****
  #define VV_MOUSE_WIN	49
  #define VV_MOUSE_LNUM   50
  #define VV_MOUSE_COL	51
! #define VV_LEN		52	/* number of v: vars */
  
  #ifdef FEAT_CLIPBOARD
  
--- 1688,1695 ----
  #define VV_MOUSE_WIN	49
  #define VV_MOUSE_LNUM   50
  #define VV_MOUSE_COL	51
! #define VV_OP		52
! #define VV_LEN		53	/* number of v: vars */
  
  #ifdef FEAT_CLIPBOARD
  
*** ../vim-7.1.204/src/version.c	Sat Jan  5 13:15:08 2008
--- src/version.c	Sat Jan  5 13:31:49 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     205,
  /**/

-- 
ARTHUR:  Then who is your lord?
WOMAN:   We don't have a lord.
ARTHUR:  What?
DENNIS:  I told you.  We're an anarcho-syndicalist commune.  We take it in
         turns to act as a sort of executive officer for the week.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.206 ---
To: vim-dev at vim.org
Subject: Patch 7.1.206
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.206
Problem:    Compiler warnings when using MODIFIED_BY.
Solution:   Add type casts. (Ben Schmidt)
Files:	    src/version.c


*** ../vim-7.1.205/src/version.c	Sat Jan  5 13:34:01 2008
--- src/version.c	Sat Jan  5 13:56:55 2008
***************
*** 1587,1595 ****
  
      if (*mesg == ' ')
      {
! 	vim_strncpy(modby, _("Modified by "), MODBY_LEN - 1);
  	l = STRLEN(modby);
! 	vim_strncpy(modby + l, MODIFIED_BY, MODBY_LEN - l - 1);
  	mesg = modby;
      }
  #endif
--- 1589,1597 ----
  
      if (*mesg == ' ')
      {
! 	vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1);
  	l = STRLEN(modby);
! 	vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1);
  	mesg = modby;
      }
  #endif
*** ../vim-7.1.205/src/version.c	Sat Jan  5 13:34:01 2008
--- src/version.c	Sat Jan  5 13:56:55 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     206,
  /**/

-- 
ARTHUR:  I am your king!
WOMAN:   Well, I didn't vote for you.
ARTHUR:  You don't vote for kings.
WOMAN:   Well, 'ow did you become king then?
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.207 ---
To: vim-dev at vim.org
Subject: Patch 7.1.207
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.207
Problem:    Netbeans: "remove" cannot delete one line. 
Solution:   Remove partial lines and whole lines properly.  Avoid a memory
	    leak.  (Xavier de Gaye)
Files:	    src/netbeans.c


*** ../vim-7.1.206/src/netbeans.c	Thu May 10 18:40:48 2007
--- src/netbeans.c	Sat Jan  5 18:03:24 2008
***************
*** 1204,1209 ****
--- 1204,1257 ----
      return result;
  }
  
+ /*
+  * Remove from "first" byte to "last" byte (inclusive), at line "lnum" of the
+  * current buffer.  Remove to end of line when "last" is MAXCOL.
+  */
+     static void
+ nb_partialremove(linenr_T lnum, colnr_T first, colnr_T last)
+ {
+     char_u *oldtext, *newtext;
+     int oldlen;
+     int lastbyte = last;
+ 
+     oldtext = ml_get(lnum);
+     oldlen = STRLEN(oldtext);
+     if (first >= oldlen || oldlen == 0)  /* just in case */
+ 	return;
+     if (lastbyte >= oldlen)
+ 	lastbyte = oldlen - 1;
+     newtext = alloc(oldlen - (int)(lastbyte - first));
+     if (newtext != NULL)
+     {
+ 	mch_memmove(newtext, oldtext, first);
+ 	mch_memmove(newtext + first, oldtext + lastbyte + 1, STRLEN(oldtext + lastbyte + 1) + 1);
+ 	nbdebug(("    NEW LINE %d: %s\n", lnum, newtext));
+ 	ml_replace(lnum, newtext, FALSE);
+     }
+ }
+ 
+ /*
+  * Replace the "first" line with the concatenation of the "first" and
+  * the "other" line. The "other" line is not removed.
+  */
+     static void
+ nb_joinlines(linenr_T first, linenr_T other)
+ {
+     int len_first, len_other;
+     char_u *p;
+ 
+     len_first = STRLEN(ml_get(first));
+     len_other = STRLEN(ml_get(other));
+     p = alloc((unsigned)(len_first + len_other + 1));
+     if (p != NULL)
+     {
+       mch_memmove(p, ml_get(first), len_first);
+       mch_memmove(p + len_first, ml_get(other), len_other + 1);
+       ml_replace(first, p, FALSE);
+     }
+ }
+ 
  #define SKIP_STOP 2
  #define streq(a,b) (strcmp(a,b) == 0)
  static int needupdate = 0;
***************
*** 1371,1376 ****
--- 1419,1426 ----
  	    long count;
  	    pos_T first, last;
  	    pos_T *pos;
+ 	    pos_T *next;
+ 	    linenr_T del_from_lnum, del_to_lnum;  /* lines to be deleted as a whole */
  	    int oldFire = netbeansFireChanges;
  	    int oldSuppress = netbeansSuppressNoLines;
  	    int wasChanged;
***************
*** 1420,1444 ****
  		}
  		last = *pos;
  		nbdebug(("    LAST POS: line %d, col %d\n", last.lnum, last.col));
! 		curwin->w_cursor = first;
  		doupdate = 1;
  
! 		/* keep part of first line */
! 		if (first.lnum == last.lnum && first.col != last.col)
  		{
! 		    /* deletion is within one line */
! 		    char_u *p = ml_get(first.lnum);
! 		    mch_memmove(p + first.col, p + last.col + 1, STRLEN(p + last.col) + 1);
! 		    nbdebug(("    NEW LINE %d: %s\n", first.lnum, p));
! 		    ml_replace(first.lnum, p, TRUE);
  		}
  
! 		if (first.lnum < last.lnum)
  		{
  		    int i;
  
  		    /* delete signs from the lines being deleted */
! 		    for (i = first.lnum; i <= last.lnum; i++)
  		    {
  			int id = buf_findsign_id(buf->bufp, (linenr_T)i);
  			if (id > 0)
--- 1470,1544 ----
  		}
  		last = *pos;
  		nbdebug(("    LAST POS: line %d, col %d\n", last.lnum, last.col));
! 		del_from_lnum = first.lnum;
! 		del_to_lnum = last.lnum;
  		doupdate = 1;
  
! 		/* Get the position of the first byte after the deleted
! 		 * section.  "next" is NULL when deleting to the end of the
! 		 * file. */
! 		next = off2pos(buf->bufp, off + count);
! 
! 		/* Remove part of the first line. */
! 		if (first.col != 0 || (next != NULL && first.lnum == next->lnum))
  		{
! 		    if (first.lnum != last.lnum
! 			    || (next != NULL && first.lnum != next->lnum))
! 		    {
! 			/* remove to the end of the first line */
! 			nb_partialremove(first.lnum, first.col,
! 							     (colnr_T)MAXCOL);
! 			if (first.lnum == last.lnum)
! 			{
! 			    /* Partial line to remove includes the end of
! 			     * line.  Join the line with the next one, have
! 			     * the next line deleted below. */
! 			    nb_joinlines(first.lnum, next->lnum);
! 			    del_to_lnum = next->lnum;
! 			}
! 		    }
! 		    else
! 		    {
! 			/* remove within one line */
! 			nb_partialremove(first.lnum, first.col, last.col);
! 		    }
! 		    ++del_from_lnum;  /* don't delete the first line */
! 		}
! 
! 		/* Remove part of the last line. */
! 		if (first.lnum != last.lnum && next != NULL
! 			&& next->col != 0 && last.lnum == next->lnum)
! 		{
! 		    nb_partialremove(last.lnum, 0, last.col);
! 		    if (del_from_lnum > first.lnum)
! 		    {
! 			/* Join end of last line to start of first line; last
! 			 * line is deleted below. */
! 			nb_joinlines(first.lnum, last.lnum);
! 		    }
! 		    else
! 			/* First line is deleted as a whole, keep the last
! 			 * line. */
! 			--del_to_lnum;
  		}
  
! 		/* First is partial line; last line to remove includes
! 		 * the end of line; join first line to line following last
! 		 * line; line following last line is deleted below. */
! 		if (first.lnum != last.lnum && del_from_lnum > first.lnum
! 			&& next != NULL && last.lnum != next->lnum)
! 		{
! 		    nb_joinlines(first.lnum, next->lnum);
! 		    del_to_lnum = next->lnum;
! 		}
! 
! 		/* Delete whole lines if there are any. */
! 		if (del_to_lnum >= del_from_lnum)
  		{
  		    int i;
  
  		    /* delete signs from the lines being deleted */
! 		    for (i = del_from_lnum; i <= del_to_lnum; i++)
  		    {
  			int id = buf_findsign_id(buf->bufp, (linenr_T)i);
  			if (id > 0)
***************
*** 1450,1459 ****
  			    nbdebug(("    No sign on line %d\n", i));
  		    }
  
! 		    /* delete whole lines */
! 		    nbdebug(("    Deleting lines %d through %d\n", first.lnum, last.lnum));
! 		    del_lines(last.lnum - first.lnum + 1, FALSE);
  		}
  		buf->bufp->b_changed = wasChanged; /* logically unchanged */
  		netbeansFireChanges = oldFire;
  		netbeansSuppressNoLines = oldSuppress;
--- 1550,1564 ----
  			    nbdebug(("    No sign on line %d\n", i));
  		    }
  
! 		    nbdebug(("    Deleting lines %d through %d\n", del_from_lnum, del_to_lnum));
! 		    curwin->w_cursor.lnum = del_from_lnum;
! 		    curwin->w_cursor.col = 0;
! 		    del_lines(del_to_lnum - del_from_lnum + 1, FALSE);
  		}
+ 
+ 		/* Leave cursor at first deleted byte. */
+ 		curwin->w_cursor = first;
+ 		check_cursor_lnum();
  		buf->bufp->b_changed = wasChanged; /* logically unchanged */
  		netbeansFireChanges = oldFire;
  		netbeansSuppressNoLines = oldSuppress;
***************
*** 2374,2381 ****
   * the current buffer as "buf".
   */
      static void
! nb_set_curbuf(buf)
!     buf_T *buf;
  {
      if (curbuf != buf && buf_jump_open_win(buf) == NULL)
  	set_curbuf(buf, DOBUF_GOTO);
--- 2479,2485 ----
   * the current buffer as "buf".
   */
      static void
! nb_set_curbuf(buf_T *buf)
  {
      if (curbuf != buf && buf_jump_open_win(buf) == NULL)
  	set_curbuf(buf, DOBUF_GOTO);
*** ../vim-7.1.206/src/version.c	Sat Jan  5 13:58:48 2008
--- src/version.c	Sat Jan  5 18:06:04 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     207,
  /**/

-- 
Q:   How many hardware engineers does it take to change a lightbulb?
A:   None.  We'll fix it in software.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.208 ---
To: vim-dev at vim.org
Subject: Patch 7.1.208
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.208
Problem:    On Alpha get an unaligned access error.
Solution:   Store the dictitem pointer before using it. (Matthew Luckie)
Files:	    src/eval.c


*** ../vim-7.1.207/src/eval.c	Sat Jan  5 13:34:01 2008
--- src/eval.c	Sat Jan  5 13:22:52 2008
***************
*** 3407,3412 ****
--- 3407,3413 ----
      hashtab_T	*ht;
      hashitem_T	*hi;
      char_u	*varname;
+     dictitem_T	*di;
  
      ht = find_var_ht(name, &varname);
      if (ht != NULL && *varname != NUL)
***************
*** 3414,3422 ****
  	hi = hash_find(ht, varname);
  	if (!HASHITEM_EMPTY(hi))
  	{
! 	    if (var_check_fixed(HI2DI(hi)->di_flags, name))
! 		return FAIL;
! 	    if (var_check_ro(HI2DI(hi)->di_flags, name))
  		return FAIL;
  	    delete_var(ht, hi);
  	    return OK;
--- 3415,3423 ----
  	hi = hash_find(ht, varname);
  	if (!HASHITEM_EMPTY(hi))
  	{
! 	    di = HI2DI(hi);
! 	    if (var_check_fixed(di->di_flags, name)
! 		    || var_check_ro(di->di_flags, name))
  		return FAIL;
  	    delete_var(ht, hi);
  	    return OK;
*** ../vim-7.1.207/src/version.c	Sat Jan  5 18:06:33 2008
--- src/version.c	Sat Jan  5 22:14:17 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     208,
  /**/

-- 
ARTHUR:  Bloody peasant!
DENNIS:  Oh, what a give away.  Did you here that, did you here that, eh?
         That's what I'm on about -- did you see him repressing me, you saw it
         didn't you?
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.209 ---
To: vim-dev at vim.org
Subject: Patch 7.1.209
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.209
Problem:    GTK: When using the netrw plugin and doing ":gui" Vim hangs.
Solution:   Stop getting a selection after three seconds.  This is a hack.
Files:	    src/gui_gtk_x11.c


*** ../vim-7.1.208/src/gui_gtk_x11.c	Fri Oct 19 14:32:50 2007
--- src/gui_gtk_x11.c	Sun Jan  6 15:15:52 2008
***************
*** 6660,6665 ****
--- 6660,6666 ----
      unsigned	i;
      int		nbytes;
      char_u	*buffer;
+     time_t	start;
  
      for (i = 0; i < N_SELECTION_TARGETS; ++i)
      {
***************
*** 6670,6676 ****
  			      cbd->gtk_sel_atom, target,
  			      (guint32)GDK_CURRENT_TIME);
  
! 	while (received_selection == RS_NONE)
  	    gtk_main();	/* wait for selection_received_cb */
  
  	if (received_selection != RS_FAIL)
--- 6671,6681 ----
  			      cbd->gtk_sel_atom, target,
  			      (guint32)GDK_CURRENT_TIME);
  
! 	/* Hack: Wait up to three seconds for the selection.  A hang was
! 	 * noticed here when using the netrw plugin combined with ":gui"
! 	 * during the FocusGained event. */
! 	start = time(NULL);
! 	while (received_selection == RS_NONE && time(NULL) < start + 3)
  	    gtk_main();	/* wait for selection_received_cb */
  
  	if (received_selection != RS_FAIL)
*** ../vim-7.1.208/src/version.c	Sat Jan  5 22:15:21 2008
--- src/version.c	Sun Jan  6 15:14:48 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     209,
  /**/

-- 
BLACK KNIGHT:  I move for no man.
ARTHUR:        So be it!
    [hah] [parry thrust]
    [ARTHUR chops the BLACK KNIGHT's left arm off]
ARTHUR:        Now stand aside, worthy adversary.
BLACK KNIGHT:  'Tis but a scratch.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.210 ---
To: vim-dev at vim.org
Subject: Patch 7.1.210
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.210
Problem:    Listing mapping for 0xdb fails when 'encoding' is utf-8. (Tony
	    Mechelynck)
Solution:   Recognize K_SPECIAL KS_EXTRA KE_CSI as a CSI byte.
Files:	    src/mbyte.c


*** ../vim-7.1.209/src/mbyte.c	Fri Jan  4 17:46:46 2008
--- src/mbyte.c	Sun Jan  6 17:13:51 2008
***************
*** 2863,2877 ****
  	    buf[m++] = K_SPECIAL;
  	    n += 2;
  	}
  # ifdef FEAT_GUI
! 	else if (str[n] == CSI
  		&& str[n + 1] == KS_EXTRA
  		&& str[n + 2] == (int)KE_CSI)
  	{
  	    buf[m++] = CSI;
  	    n += 2;
  	}
- # endif
  	else if (str[n] == K_SPECIAL
  # ifdef FEAT_GUI
  		|| str[n] == CSI
--- 2882,2898 ----
  	    buf[m++] = K_SPECIAL;
  	    n += 2;
  	}
+ 	else if ((str[n] == K_SPECIAL
  # ifdef FEAT_GUI
! 		    || str[n] == CSI
! # endif
! 		 )
  		&& str[n + 1] == KS_EXTRA
  		&& str[n + 2] == (int)KE_CSI)
  	{
  	    buf[m++] = CSI;
  	    n += 2;
  	}
  	else if (str[n] == K_SPECIAL
  # ifdef FEAT_GUI
  		|| str[n] == CSI
*** ../vim-7.1.209/src/version.c	Sun Jan  6 15:16:12 2008
--- src/version.c	Sun Jan  6 17:17:25 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     210,
  /**/

-- 
ARTHUR:        A scratch?  Your arm's off!
BLACK KNIGHT:  No, it isn't.
ARTHUR:        Well, what's that then?
BLACK KNIGHT:  I've had worse.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


--- NEW FILE 7.1.211 ---
To: vim-dev at vim.org
Subject: Patch 7.1.211
Fcc: outbox
From: Bram Moolenaar <Bram at moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.211
Problem:    The matchparen plugin may take an unexpected amount of time, so
	    that it looks like Vim hangs.
Solution:   Add a timeout to searchpair(), searchpairpos(), search() and
	    searchpos().  Use half a second timeout in the plugin.
Files:	    runtime/doc/eval.txt, runtime/plugin/matchparen.vim, src/edit.c,
	    src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/normal.c,
	    src/proto/eval.pro, src/proto/ex_cmds2.pro, src/proto/search.pro,
	    src/search.c


*** ../vim-7.1.210/runtime/doc/eval.txt	Sat Jan  5 13:34:01 2008
--- runtime/doc/eval.txt	Sun Jan  6 16:27:33 2008
***************
*** 1,4 ****
! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 04
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 06
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 1733,1746 ****
  repeat( {expr}, {count})	String	repeat {expr} {count} times
  resolve( {filename})		String	get filename a shortcut points to
  reverse( {list})		List	reverse {list} in-place
! search( {pattern} [, {flags}])	Number	search for {pattern}
  searchdecl({name} [, {global} [, {thisblock}]])
  				Number  search for variable declaration
! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
  				Number	search for other end of start/end pair
! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
  				List	search for other end of start/end pair
! searchpos( {pattern} [, {flags} [, {stopline}]])
  				List	search for {pattern}
  server2client( {clientid}, {string})
  				Number	send reply string
--- 1733,1747 ----
  repeat( {expr}, {count})	String	repeat {expr} {count} times
  resolve( {filename})		String	get filename a shortcut points to
  reverse( {list})		List	reverse {list} in-place
! search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
! 				Number	search for {pattern}
  searchdecl({name} [, {global} [, {thisblock}]])
  				Number  search for variable declaration
! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
  				Number	search for other end of start/end pair
! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
  				List	search for other end of start/end pair
! searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
  				List	search for {pattern}
  server2client( {clientid}, {string})
  				Number	send reply string
***************
*** 4212,4218 ****
  		If you want a list to remain unmodified make a copy first: >
  			:let revlist = reverse(copy(mylist))
  
! search({pattern} [, {flags} [, {stopline}]])			*search()*
  		Search for regexp pattern {pattern}.  The search starts at the
  		cursor position (you can use |cursor()| to set it).
  
--- 4216,4222 ----
  		If you want a list to remain unmodified make a copy first: >
  			:let revlist = reverse(copy(mylist))
  
! search({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*search()*
  		Search for regexp pattern {pattern}.  The search starts at the
  		cursor position (you can use |cursor()| to set it).
  
***************
*** 4240,4245 ****
--- 4244,4257 ----
  			let end = search('END', '', line("w$"))
  <		When {stopline} is used and it is not zero this also implies
  		that the search does not wrap around the end of the file.
+ 		A zero value is equal to not giving the argument.
+ 
+ 		When the {timeout} argument is given the search stops when
+ 		more than this many milli seconds have passed.  Thus when
+ 		{timeout} is 500 the search stops after half a second.
+ 		The value must not be negative.  A zero value is like not
+ 		giving the argument.
+ 		{only available when compiled with the +reltime feature}
  
  		If there is no match a 0 is returned and the cursor doesn't
  		move.  No error message is given.
***************
*** 4302,4308 ****
  			endif
  <
  							*searchpair()*
! searchpair({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
  		Search for the match of a nested start-end pair.  This can be
  		used to find the "endif" that matches an "if", while other
  		if/endif pairs in between are ignored.
--- 4314,4321 ----
  			endif
  <
  							*searchpair()*
! searchpair({start}, {middle}, {end} [, {flags} [, {skip}
! 				[, {stopline} [, {timeout}]]]])
  		Search for the match of a nested start-end pair.  This can be
  		used to find the "endif" that matches an "if", while other
  		if/endif pairs in between are ignored.
***************
*** 4337,4343 ****
  		When evaluating {skip} causes an error the search is aborted
  		and -1 returned.
  
! 		For {stopline} see |search()|.
  
  		The value of 'ignorecase' is used.  'magic' is ignored, the
  		patterns are used like it's on.
--- 4350,4356 ----
  		When evaluating {skip} causes an error the search is aborted
  		and -1 returned.
  
! 		For {stopline} and {timeout} see |search()|.
  
  		The value of 'ignorecase' is used.  'magic' is ignored, the
  		patterns are used like it's on.
***************
*** 4383,4389 ****
  	     \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
  <
  							*searchpairpos()*
! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
  		Same as searchpair(), but returns a |List| with the line and
  		column position of the match. The first element of the |List|
  		is the line number and the second element is the byte index of
--- 4396,4403 ----
  	     \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
  <
  							*searchpairpos()*
! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
! 				[, {stopline} [, {timeout}]]]])
  		Same as searchpair(), but returns a |List| with the line and
  		column position of the match. The first element of the |List|
  		is the line number and the second element is the byte index of
***************
*** 4394,4400 ****
  <
  		See |match-parens| for a bigger and more useful example.
  
! searchpos({pattern} [, {flags} [, {stopline}]])		*searchpos()*
  		Same as |search()|, but returns a |List| with the line and
  		column position of the match. The first element of the |List|
  		is the line number and the second element is the byte index of
--- 4408,4414 ----
  <
  		See |match-parens| for a bigger and more useful example.
  
! searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*searchpos()*
  		Same as |search()|, but returns a |List| with the line and
  		column position of the match. The first element of the |List|
  		is the line number and the second element is the byte index of
*** ../vim-7.1.210/runtime/plugin/matchparen.vim	Sat Aug 18 18:20:57 2007
--- runtime/plugin/matchparen.vim	Sun Jan  6 16:22:39 2008
***************
*** 1,6 ****
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <Bram at vim.org>
! " Last Change: 2007 Aug 8
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
--- 1,6 ----
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <Bram at vim.org>
! " Last Change: 2008 Jan 06
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
***************
*** 111,117 ****
  	\ '=~?  "string\\|character\\|singlequote\\|comment"'
    execute 'if' s_skip '| let s_skip = 0 | endif'
  
!   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
  
    if before > 0
      call winrestview(save_cursor)
--- 111,122 ----
  	\ '=~?  "string\\|character\\|singlequote\\|comment"'
    execute 'if' s_skip '| let s_skip = 0 | endif'
  
!   try
!     " Limit the search time to 500 msec to avoid a hang on very long lines.
!     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 500)
!   catch /E118/
!     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
!   endtry
  
    if before > 0
      call winrestview(save_cursor)
*** ../vim-7.1.210/src/edit.c	Wed Jan  2 22:08:43 2008
--- src/edit.c	Sun Jan  6 16:08:00 2008
***************
*** 4062,4068 ****
  		    found_new_match = searchit(NULL, ins_buf, pos,
  							      compl_direction,
  				 compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
! 							RE_LAST, (linenr_T)0);
  		--msg_silent;
  		if (!compl_started)
  		{
--- 4062,4068 ----
  		    found_new_match = searchit(NULL, ins_buf, pos,
  							      compl_direction,
  				 compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
! 						  RE_LAST, (linenr_T)0, NULL);
  		--msg_silent;
  		if (!compl_started)
  		{
*** ../vim-7.1.210/src/eval.c	Sat Jan  5 22:15:21 2008
--- src/eval.c	Sun Jan  6 16:37:42 2008
***************
*** 7213,7223 ****
      {"repeat",		2, 2, f_repeat},
      {"resolve",		1, 1, f_resolve},
      {"reverse",		1, 1, f_reverse},
!     {"search",		1, 3, f_search},
      {"searchdecl",	1, 3, f_searchdecl},
!     {"searchpair",	3, 6, f_searchpair},
!     {"searchpairpos",	3, 6, f_searchpairpos},
!     {"searchpos",	1, 3, f_searchpos},
      {"server2client",	2, 2, f_server2client},
      {"serverlist",	0, 0, f_serverlist},
      {"setbufvar",	3, 3, f_setbufvar},
--- 7213,7223 ----
      {"repeat",		2, 2, f_repeat},
      {"resolve",		1, 1, f_resolve},
      {"reverse",		1, 1, f_reverse},
!     {"search",		1, 4, f_search},
      {"searchdecl",	1, 3, f_searchdecl},
!     {"searchpair",	3, 7, f_searchpair},
!     {"searchpairpos",	3, 7, f_searchpairpos},
!     {"searchpos",	1, 4, f_searchpos},
      {"server2client",	2, 2, f_server2client},
      {"serverlist",	0, 0, f_serverlist},
      {"setbufvar",	3, 3, f_setbufvar},
***************
*** 14020,14025 ****
--- 14020,14029 ----
      int		dir;
      int		retval = 0;	/* default: FAIL */
      long	lnum_stop = 0;
+     proftime_T	tm;
+ #ifdef FEAT_RELTIME
+     long	time_limit = 0;
+ #endif
      int		options = SEARCH_KEEP;
      int		subpatnum;
  
***************
*** 14033,14047 ****
      if (flags & SP_END)
  	options |= SEARCH_END;
  
!     /* Optional extra argument: line number to stop searching. */
!     if (argvars[1].v_type != VAR_UNKNOWN
! 	    && argvars[2].v_type != VAR_UNKNOWN)
      {
  	lnum_stop = get_tv_number_chk(&argvars[2], NULL);
  	if (lnum_stop < 0)
  	    goto theend;
      }
  
      /*
       * This function does not accept SP_REPEAT and SP_RETCOUNT flags.
       * Check to make sure only those flags are set.
--- 14037,14063 ----
      if (flags & SP_END)
  	options |= SEARCH_END;
  
!     /* Optional arguments: line number to stop searching and timeout. */
!     if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN)
      {
  	lnum_stop = get_tv_number_chk(&argvars[2], NULL);
  	if (lnum_stop < 0)
  	    goto theend;
+ #ifdef FEAT_RELTIME
+ 	if (argvars[3].v_type != VAR_UNKNOWN)
+ 	{
+ 	    time_limit = get_tv_number_chk(&argvars[3], NULL);
+ 	    if (time_limit < 0)
+ 		goto theend;
+ 	}
+ #endif
      }
  
+ #ifdef FEAT_RELTIME
+     /* Set the time limit, if there is one. */
+     profile_setlimit(time_limit, &tm);
+ #endif
+ 
      /*
       * This function does not accept SP_REPEAT and SP_RETCOUNT flags.
       * Check to make sure only those flags are set.
***************
*** 14057,14063 ****
  
      pos = save_cursor = curwin->w_cursor;
      subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! 				     options, RE_SEARCH, (linenr_T)lnum_stop);
      if (subpatnum != FAIL)
      {
  	if (flags & SP_SUBPAT)
--- 14073,14079 ----
  
      pos = save_cursor = curwin->w_cursor;
      subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! 				options, RE_SEARCH, (linenr_T)lnum_stop, &tm);
      if (subpatnum != FAIL)
      {
  	if (flags & SP_SUBPAT)
***************
*** 14147,14152 ****
--- 14163,14169 ----
      char_u	nbuf3[NUMBUFLEN];
      int		retval = 0;		/* default: FAIL */
      long	lnum_stop = 0;
+     long	time_limit = 0;
  
      /* Get the three pattern arguments: start, middle, end. */
      spat = get_tv_string_chk(&argvars[0]);
***************
*** 14182,14194 ****
  	    lnum_stop = get_tv_number_chk(&argvars[5], NULL);
  	    if (lnum_stop < 0)
  		goto theend;
  	}
      }
      if (skip == NULL)
  	goto theend;	    /* type error */
  
      retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
! 							match_pos, lnum_stop);
  
  theend:
      p_ws = save_p_ws;
--- 14199,14219 ----
  	    lnum_stop = get_tv_number_chk(&argvars[5], NULL);
  	    if (lnum_stop < 0)
  		goto theend;
+ #ifdef FEAT_RELTIME
+ 	    if (argvars[6].v_type != VAR_UNKNOWN)
+ 	    {
+ 		time_limit = get_tv_number_chk(&argvars[6], NULL);
+ 		if (time_limit < 0)
+ 		    goto theend;
+ 	    }
+ #endif
  	}
      }
      if (skip == NULL)
  	goto theend;	    /* type error */
  
      retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
! 					    match_pos, lnum_stop, time_limit);
  
  theend:
      p_ws = save_p_ws;
***************
*** 14240,14246 ****
   * Returns 0 or -1 for no match,
   */
      long
! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos, lnum_stop)
      char_u	*spat;	    /* start pattern */
      char_u	*mpat;	    /* middle pattern */
      char_u	*epat;	    /* end pattern */
--- 14265,14272 ----
   * Returns 0 or -1 for no match,
   */
      long
! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos,
! 							lnum_stop, time_limit)
      char_u	*spat;	    /* start pattern */
      char_u	*mpat;	    /* middle pattern */
      char_u	*epat;	    /* end pattern */
***************
*** 14249,14254 ****
--- 14275,14281 ----
      int		flags;	    /* SP_SETPCMARK and other SP_ values */
      pos_T	*match_pos;
      linenr_T	lnum_stop;  /* stop at this line if not zero */
+     long	time_limit; /* stop after this many msec */
  {
      char_u	*save_cpo;
      char_u	*pat, *pat2 = NULL, *pat3 = NULL;
***************
*** 14263,14273 ****
--- 14290,14306 ----
      int		nest = 1;
      int		err;
      int		options = SEARCH_KEEP;
+     proftime_T	tm;
  
      /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
      save_cpo = p_cpo;
      p_cpo = (char_u *)"";
  
+ #ifdef FEAT_RELTIME
+     /* Set the time limit, if there is one. */
+     profile_setlimit(time_limit, &tm);
+ #endif
+ 
      /* Make two search patterns: start/end (pat2, for in nested pairs) and
       * start/middle/end (pat3, for the top pair). */
      pat2 = alloc((unsigned)(STRLEN(spat) + STRLEN(epat) + 15));
***************
*** 14291,14297 ****
      for (;;)
      {
  	n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! 					       options, RE_SEARCH, lnum_stop);
  	if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
  	    /* didn't find it or found the first match again: FAIL */
  	    break;
--- 14324,14330 ----
      for (;;)
      {
  	n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
! 					   options, RE_SEARCH, lnum_stop, &tm);
  	if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
  	    /* didn't find it or found the first match again: FAIL */
  	    break;
*** ../vim-7.1.210/src/ex_cmds2.c	Fri Jan  4 16:00:10 2008
--- src/ex_cmds2.c	Sun Jan  6 18:22:28 2008
***************
*** 895,913 ****
      sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
  # else
      sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
! #endif
      return buf;
  }
  
! # endif  /* FEAT_PROFILE || FEAT_RELTIME */
  
- # if defined(FEAT_PROFILE) || defined(PROTO)
  /*
!  * Functions for profiling.
   */
! static void script_do_profile __ARGS((scriptitem_T *si));
! static void script_dump_profile __ARGS((FILE *fd));
! static proftime_T prof_wait_time;
  
  /*
   * Set the time in "tm" to zero.
--- 895,955 ----
      sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
  # else
      sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
! # endif
      return buf;
  }
  
! /*
!  * Put the time "msec" past now in "tm".
!  */
!     void
! profile_setlimit(msec, tm)
!     long	msec;
!     proftime_T	*tm;
! {
!     if (msec <= 0)   /* no limit */
! 	profile_zero(tm);
!     else
!     {
! # ifdef WIN3264
! 	LARGE_INTEGER   fr;
! 
! 	QueryPerformanceCounter(tm);
! 	QueryPerformanceFrequency(&fr);
! 	tm->QuadPart +=  (double)msec / 1000.0 * (double)fr.QuadPart;
! # else
! 	long	    usec;
! 
! 	gettimeofday(tm, NULL);
! 	usec = (long)tm->tv_usec + (long)msec * 1000;
! 	tm->tv_usec = usec % 1000000L;
! 	tm->tv_sec += usec / 1000000L;
! # endif
!     }
! }
  
  /*
!  * Return TRUE if the current time is past "tm".
   */
!     int
! profile_passed_limit(tm)
!     proftime_T	*tm;
! {
!     proftime_T	now;
! 
! # ifdef WIN3264
!     if (tm->QuadPart == 0)  /* timer was not set */
! 	return FALSE;
!     QueryPerformanceCounter(&now);
!     return (now.QuadPart > tm->QuadPart);
! # else
!     if (tm->tv_sec == 0)    /* timer was not set */
! 	return FALSE;
!     gettimeofday(&now, NULL);
!     return (now.tv_sec > tm->tv_sec
! 	    || (now.tv_sec == tm->tv_sec && now.tv_usec > tm->tv_usec));
! # endif
! }
  
  /*
   * Set the time in "tm" to zero.
***************
*** 923,928 ****
--- 965,980 ----
      tm->tv_sec = 0;
  # endif
  }
+ 
+ # endif  /* FEAT_PROFILE || FEAT_RELTIME */
+ 
+ # if defined(FEAT_PROFILE) || defined(PROTO)
+ /*
+  * Functions for profiling.
+  */
+ static void script_do_profile __ARGS((scriptitem_T *si));
+ static void script_dump_profile __ARGS((FILE *fd));
+ static proftime_T prof_wait_time;
  
  /*
   * Add the time "tm2" to "tm".
*** ../vim-7.1.210/src/ex_docmd.c	Fri Jan  4 16:00:10 2008
--- src/ex_docmd.c	Sun Jan  6 16:08:29 2008
***************
*** 3979,3985 ****
  					*cmd == '?' ? BACKWARD : FORWARD,
  					(char_u *)"", 1L,
  					SEARCH_MSG + SEARCH_START,
! 						      i, (linenr_T)0) != FAIL)
  				lnum = pos.lnum;
  			    else
  			    {
--- 3980,3986 ----
  					*cmd == '?' ? BACKWARD : FORWARD,
  					(char_u *)"", 1L,
  					SEARCH_MSG + SEARCH_START,
! 						i, (linenr_T)0, NULL) != FAIL)
  				lnum = pos.lnum;
  			    else
  			    {
*** ../vim-7.1.210/src/normal.c	Sat Jan  5 13:34:01 2008
--- src/normal.c	Sun Jan  6 16:08:54 2008
***************
*** 4194,4200 ****
      for (;;)
      {
  	t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
! 				  pat, 1L, searchflags, RE_LAST, (linenr_T)0);
  	if (curwin->w_cursor.lnum >= old_pos.lnum)
  	    t = FAIL;	/* match after start is failure too */
  
--- 4194,4200 ----
      for (;;)
      {
  	t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
! 			    pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL);
  	if (curwin->w_cursor.lnum >= old_pos.lnum)
  	    t = FAIL;	/* match after start is failure too */
  
*** ../vim-7.1.210/src/proto/eval.pro	Sun May  6 15:18:09 2007
--- src/proto/eval.pro	Sun Jan  6 15:55:47 2008
***************
*** 54,60 ****
  long get_dict_number __ARGS((dict_T *d, char_u *key));
  char_u *get_function_name __ARGS((expand_T *xp, int idx));
  char_u *get_expr_name __ARGS((expand_T *xp, int idx));
! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop));
  void set_vim_var_nr __ARGS((int idx, long val));
  long get_vim_var_nr __ARGS((int idx));
  char_u *get_vim_var_str __ARGS((int idx));
--- 54,60 ----
  long get_dict_number __ARGS((dict_T *d, char_u *key));
  char_u *get_function_name __ARGS((expand_T *xp, int idx));
  char_u *get_expr_name __ARGS((expand_T *xp, int idx));
! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
  void set_vim_var_nr __ARGS((int idx, long val));
  long get_vim_var_nr __ARGS((int idx));
  char_u *get_vim_var_str __ARGS((int idx));
*** ../vim-7.1.210/src/proto/ex_cmds2.pro	Sat May  5 20:21:13 2007
--- src/proto/ex_cmds2.pro	Sun Jan  6 16:42:24 2008
***************
*** 14,19 ****
--- 14,21 ----
  void profile_end __ARGS((proftime_T *tm));
  void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2));
  char *profile_msg __ARGS((proftime_T *tm));
+ void profile_setlimit __ARGS((long msec, proftime_T *tm));
+ int profile_passed_limit __ARGS((proftime_T *tm));
  void profile_zero __ARGS((proftime_T *tm));
  void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
  void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
*** ../vim-7.1.210/src/proto/search.pro	Wed Aug  8 22:48:16 2007
--- src/proto/search.pro	Sun Jan  6 16:11:53 2008
***************
*** 10,16 ****
  void reset_search_dir __ARGS((void));
  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
  void last_pat_prog __ARGS((regmmatch_T *regmatch));
! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum));
  int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
--- 10,16 ----
  void reset_search_dir __ARGS((void));
  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
  void last_pat_prog __ARGS((regmmatch_T *regmatch));
! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm));
  int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
*** ../vim-7.1.210/src/search.c	Tue Jan  1 15:42:45 2008
--- src/search.c	Sun Jan  6 18:23:37 2008
***************
*** 494,501 ****
   * When FEAT_EVAL is defined, returns the index of the first matching
   * subpattern plus one; one if there was none.
   */
      int
! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum)
      win_T	*win;		/* window to search in; can be NULL for a
  				   buffer without a window! */
      buf_T	*buf;
--- 494,502 ----
   * When FEAT_EVAL is defined, returns the index of the first matching
   * subpattern plus one; one if there was none.
   */
+ /*ARGSUSED*/
      int
! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
      win_T	*win;		/* window to search in; can be NULL for a
  				   buffer without a window! */
      buf_T	*buf;
***************
*** 506,511 ****
--- 507,513 ----
      int		options;
      int		pat_use;	/* which pattern to use when "pat" is empty */
      linenr_T	stop_lnum;	/* stop after this line number when != 0 */
+     proftime_T	*tm;		/* timeout limit or NULL */
  {
      int		found;
      linenr_T	lnum;		/* no init to shut up Apollo cc */
***************
*** 594,599 ****
--- 596,606 ----
  		if (stop_lnum != 0 && (dir == FORWARD
  				       ? lnum > stop_lnum : lnum < stop_lnum))
  		    break;
+ #ifdef FEAT_RELTIME
+ 		/* Stop after passing the "tm" time limit. */
+ 		if (tm != NULL && profile_passed_limit(tm))
+ 		    break;
+ #endif
  
  		/*
  		 * Look for a match somewhere in line "lnum".
***************
*** 1249,1255 ****
  		       (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
  			+ SEARCH_MSG + SEARCH_START
  			+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
! 		RE_LAST, (linenr_T)0);
  
  	if (dircp != NULL)
  	    *dircp = dirc;	/* restore second '/' or '?' for normal_cmd() */
--- 1256,1262 ----
  		       (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
  			+ SEARCH_MSG + SEARCH_START
  			+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
! 		RE_LAST, (linenr_T)0, NULL);
  
  	if (dircp != NULL)
  	    *dircp = dirc;	/* restore second '/' or '?' for normal_cmd() */
***************
*** 3780,3786 ****
  	if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
  		    (char_u *)"",
  		    (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
! 						      NULL, (linenr_T)0) <= 0)
  	{
  	    curwin->w_cursor = old_pos;
  	    goto theend;
--- 3787,3793 ----
  	if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
  		    (char_u *)"",
  		    (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
! 						  NULL, (linenr_T)0, 0L) <= 0)
  	{
  	    curwin->w_cursor = old_pos;
  	    goto theend;
***************
*** 3814,3820 ****
      sprintf((char *)epat, "</%.*s>\\c", len, p);
  
      r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
! 						       0, NULL, (linenr_T)0);
  
      vim_free(spat);
      vim_free(epat);
--- 3821,3827 ----
      sprintf((char *)epat, "</%.*s>\\c", len, p);
  
      r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
! 						    0, NULL, (linenr_T)0, 0L);
  
      vim_free(spat);
      vim_free(epat);
*** ../vim-7.1.210/src/version.c	Sun Jan  6 17:18:16 2008
--- src/version.c	Sun Jan  6 20:00:03 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     211,
  /**/

-- 
No letters of the alphabet were harmed in the creation of this message.

 /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


Index: README.patches
===================================================================
RCS file: /cvs/extras/rpms/vim/F-7/README.patches,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -r1.78 -r1.79
--- README.patches	27 Jun 2007 08:36:06 -0000	1.78
+++ README.patches	9 Jan 2008 13:13:47 -0000	1.79
@@ -22,6 +22,12 @@
 
 Checksums for the patch files can be found in the file MD5.
 
+Collection of patches for Vim 7.1:
+  SIZE  NAME                  INCLUDES
+ 91424  7.1.001-100.gz	      patches 7.1.001 to 7.1.100, gzip'ed
+ 75402  7.1.101-200.gz	      patches 7.1.101 to 7.1.200, gzip'ed
+
+
 Individual patches for Vim 7.1:
 
   SIZE  NAME     FIXES
@@ -37,3 +43,202 @@
   2796  7.1.010  Gnome: tab pages are not included in the saved session
   1934  7.1.011  buffer overflow when $VIMRUNTIME is very long
   1904  7.1.012  ":let &tw = 'asdf'" does not give an error message
+  2139  7.1.013  ":syn include" only loads the first file
+  1479  7.1.014  crash in C-indenting
+  3743  7.1.015  MzScheme interface doesn't build on Mac; init problem
+  2368  7.1.016  (after 7.1.012) error message when using ":cwindow"
+  6729  7.1.017  ":confirm w" does not give a prompt when file is read-only
+  1771  7.1.018  "p" at end of line doesn't work right when 've' is set
+  1650  7.1.019  ":python" doesn't mention the command is not implemented
+  3229  7.1.020  reading uninitialized memory when using a dialog
+  2875  7.1.021  (after 7.1.015) MzScheme interface doesn't build on Win32
+  1842  7.1.022  when setting 'keymap' twice b:keymap_name variable isn't set
+  1718  7.1.023  "dw" in a line with one character deletes the line
+  1335  7.1.024  using a pointer that may have become invalid
+  2292  7.1.025  search('pat', 'bc) doesn't find word under cursor at BOL
+  1710  7.1.026  "[p" doesn't work in Visual mode
+  3345  7.1.027  on Sun OS reading from a process substitutions doesn't work
+  2239  7.1.028  ":sort" does nothing special with empty search pattern
+  2692  7.1.029  (after 7.1.019) can't compile when all interfaces are used
+  2364  7.1.030  vimtutor shell script checks for "vim6" but not for "vim7"
+  6533  7.1.031  virtcol([123, '$']) doesn't work
+  3006  7.1.032  possible crash when doing completion on the command line
+  1530  7.1.033  buffer marked modified after ":bdel" and ":next"
+  2956  7.1.034  Win64: compiler warnings for typecast, optimizer problem
+  1797  7.1.035  after ":s/./&/#" all listed lines have a line number
+ 12171  7.1.036  add "none" to completion of ":echohl" and ":match"
+  1817  7.1.037  using strcpy() for an overlapping string
+  5704  7.1.038  'preseveindent' doesn't always work when 'et' is set
+  1750  7.1.039  weird help-tags tag in docs file may make cause a crash
+ 53412  7.1.040  ":match" only supports three matches
+  4614  7.1.041  (extra, after 7.1.040) update test makefiles for new test
+  2366  7.1.042  (after 7.1.040) internal error when using matchadd()
+  2820  7.1.043  in Ex mode using CTRL-D twice may cause a crash
+  1632  7.1.044  in Insert mode 0 CTRL-T deletes all indent
+  3101  7.1.045  double screen redraw in some situations
+  1637  7.1.046  ":s/.*/&/" deletes composing characters
+  1552  7.1.047  wrong argument for vim_regcomp()
+  5010  7.1.048  paren highlighting is not updated after scrolling
+  1722  7.1.049  can't compile with GTK2 when using hangul input feature
+  4800  7.1.050  possible crash in C++ indenting
+  2295  7.1.051  accessing uninitialized memory when finding spell suggestions
+  2435  7.1.052  when creating a new match not all fields are initialized
+  1473  7.1.053  reading uninitialized memory when updating command line
+  4451  7.1.054  accessing uninitialized memory when displaying the fold column
+  5414  7.1.055  using strcpy() with arguments that overlap
+  3151  7.1.056  scrolling back at more prompt doesn't work properly
+  2514  7.1.057  CursorHold causes problems for Normal and Visual mode commands
+ 10612  7.1.058  completion menu doesn't work properly when 'righleft' is set
+  3350  7.1.059  in Ex mode "g/^/vi" and pressing CTRL-C: Vim hangs and beeps
+  5066  7.1.060  splitting quickfix window messes up window layout
+  6320  7.1.061  with latin1 'ignorecase' doesn't work for umlauts
+  1550  7.1.062  (after 7.0.038) C comment indent can be wrong
+  1391  7.1.063  compiler warning for uninitialized variable
+  1405  7.1.064  on interix some files appear not to exist
+  2983  7.1.065  Win32: MingW Compilation problem for newer version of w32api
+  4553  7.1.066  when 'bomb' is changed the file should be considered modified
+  7701  7.1.067  'infercase' doesn't work for thesaurus completion
+  6709  7.1.068  'equalalways' equalizes windows too often
+  2757  7.1.069  GTK GUI: confirm() dialog has a default button when not wanted
+  1560  7.1.070  (extra) Win32 GUI: same confirm() default button problem
+  5534  7.1.071  (after 7.1.040) add a basic test for regexp patterns
+  5705  7.1.072  (extra, after 7.1.041 and 7.1.071) extra part of 7.1.071
+  3595  7.1.073  (after 7.1.062) crash when 'preserveindent' is set
+  5259  7.1.074  crash when using string() on a recursively nested List
+  1686  7.1.075  ":let v:statusmsg" reads memory already freed
+  2376  7.1.076  a couple more strcpy() with overlapping arguments
+  2678  7.1.078  dropping file name on gvim containing CSI byte doesn't work
+  2922  7.1.079  "@" character in 'isfname' doesn't pick up umlauts for latin1
+  2960  7.1.080  (extra) Compiler warnings for gvimex.cpp
+  3253  7.1.081  completion doesn't work after ":!cat <foo"
+  3464  7.1.082  matchparen plugin doesn't update after window split
+  3448  7.1.083  (after 7.1.081) completion doesn't work with wildcards
+  1671  7.1.084  netbeans doesn't get fileOpened events when using -nb twice
+  2496  7.1.085  after ":split fold.c" folds in one window disappear
+  3561  7.1.086  crash when using specific Python syntax highlighting
+  4165  7.1.087  cscope: reading past command end; writing past buffer end
+  2276  7.1.088  (extra) window position wrong when using ":winpos"
+ 13841  7.1.089  when listing variables text of command is not cleared
+  2372  7.1.090  compiler warning on Mac OS X 10.5 for sigaltstack()
+ 10488  7.1.091  (extra) Win32: add --windowid argument
+  2901  7.1.092  (extra, after 7.1.088) wrong args for MoveWindowStructure()
+ 15955  7.1.093  read past end of screen line when checking for double width
+  1901  7.1.094  using wrong buffer to check if syntax HL is present
+  5809  7.1.095  autocmmand for focus events may cause problems
+  2287  7.1.096  reading past end of a string when resizing Vim
+  1620  7.1.097  "setlocal stl=%!expr" doesn't work
+  1780  7.1.098  ":call s:var()" doesn't work if "s:var" is a Funcref
+  4552  7.1.099  ":mkvimrc" doesn't work properly when 'paste' or 'keymap' set
+ 14551  7.1.100  Win32: Executing cscope doesn't always work properly
+  1614  7.1.101  Ruby: The Buffer.line= method does not work
+  3276  7.1.102  Perl interface doesn't compile with new version of Perl
+  1976  7.1.103  "dw" past end of last line deletes a character
+ 14346  7.1.104  (after 7.1.095) when 'lazyredraw' set redraw may be postponed
+  2426  7.1.105  internal error when using "0 ? {'a': 1} : {}"
+  1580  7.1.106  ":messages" doesn't quit listing on ":"
+  4081  7.1.107  Visual block mode "s" that auto-indents fails in other lines
+  2633  7.1.108  (after 7.1.100) Win32: compilation problems in Cscope code
+  2147  7.1.109  GTK GUI: click on arrow left of tab 
+  2234  7.1.110  (after 7.1.102) Win32: Still compilation problems with Perl
+  2946  7.1.111  after ":vimgrep /pat/j *" folds can be wrong
+  1766  7.1.112  using input() with a wrong argument may crash Vim
+  2765  7.1.113  map() on an empty list causes memory to be freed twice
+  1386  7.1.114  memory leak in getmatches()
+  1472  7.1.115  (after 7.1.105) compiler warning for uninitialized variable
+  3137  7.1.116  can't display characters above 0x10000
+  1414  7.1.117  can't check wether Vim was compiled with Gnome
+  1805  7.1.118  (after 7.1.107) compiler warning for Visual C compiler
+  1761  7.1.119  crash after setting 'cmdheight' to huge value
+ 17416  7.1.120  can't use valgrind with "make test" to test for memory leaks
+  2350  7.1.121  ":cd %:h" fails when editing file in current directory
+  3732  7.1.122  Mac: building with Aap doesn't work properly
+  8051  7.1.123  Win32: ":edit foo ~ foo" expands "~"
+  2599  7.1.124  (extra) Mac: may get empty buffer if dropping file on Vim.app
+ 12060  7.1.125  the TermResponse autocommand event is not always triggered
+ 13372  7.1.126  (extra) ":vimgrep */*" doesn't work if autocmd changes dir
+        12461  7.1.126ne  replacement for 7.1.126 without the (extra)
+  2319  7.1.127  memory leak when doing completing
+  2079  7.1.128  (extra) build problem with Cygwin
+  1740  7.1.129  (extra) Win32: Can't get long user name
+  9494  7.1.130  crash with some combination of undo and redo
+  1535  7.1.131  ":mksession" always adds ":setlocal autoread"
+  1781  7.1.132  getpos("'>") may return < 0 for a Linewise selection
+  1515  7.1.133  shorten_fname1() linked when it's not needed
+ 10379  7.1.134  (extra) Win32: Can't build with VC8
+  3337  7.1.135  Win32: ":e c:/tmp/foo" and ":e c:/tmp//foo" create two buffers
+  1522  7.1.136  memory leak when using Ruby syntax highlighting
+  1553  7.1.137  build failure when using EXITFREE
+  1836  7.1.138  Perl: Msg() doesn't stop when "q" is typed at the more prompt
+  1557  7.1.139  fold truncated when ending Insert mode with CTRL-C
+  1664  7.1.140  v:count can't be used in an expression mapping
+  2806  7.1.141  GTK: can't use negative offset with -geom argument
+  2161  7.1.142  ":redir @A>" doesn't work
+  1723  7.1.143  uninitialized memory read when diffing three files
+  1250  7.1.144  after ":diffup" cursor can be in the wrong position
+  6160  7.1.145  stay in Insert completion mode depending on the char typed
+  2838  7.1.146  VMS: writing fails for rare record organisation
+  2079  7.1.147  (after 7.1.127) freeing memory twice completing user name
+  2557  7.1.148  QNX and some other systems require testing for sys/types.h
+  4823  7.1.149  completion menu messed up when using the scroll bar
+  1759  7.1.150  Visual mode "p" doesn't work when 'clipboard' has "unnamed"
+  2108  7.1.151  lalloc(0) error for line completion with 'ic' and 'inf' set
+  3183  7.1.152  display problem when 'hls' and 'cursorcolumn' are set
+  4610  7.1.153  compiler warnings on SGI
+  1547  7.1.154  (after 7.1.152) compiler warning for signed/unsigned compare
+  1594  7.1.155  crash when 'undolevels' is 0 and repeating "udd"
+  4174  7.1.156  overlapping arguments for strcpy() during cmdline completion
+  1541  7.1.157  :" in Ex mode at end of file results in an error message
+  4629  7.1.158  (extra) Win32: with utf-8 and cp1250 Alt-y is the wrong char
+  1646  7.1.159  overlapping arguments for a strcpy()
+  1661  7.1.160  getting/losing focus may cause hit-enter prompt to be redrawn
+  4347  7.1.161  compilation errors with tiny features and EXITFREE
+  4691  7.1.162  crash when using a modifier before "while" or "for"
+  2367  7.1.163  warning for the unknown option 'bufsecret'
+  1576  7.1.164  reading past end of regexp pattern
+  5538  7.1.165  crash related to getting X window ID
+  2134  7.1.166  memory leak when using "gp" in Visual mode
+  2528  7.1.167  xxd crashes when using "xxd -b -c 110"
+  2989  7.1.168  (extra) Win32 GUI: when no focus click doesn't position cursor
+  1926  7.1.169  using uninitialized memory when system() fails
+  1722  7.1.170  overlapping arguments to strcpy()
+  2324  7.1.171  reading one byte before allocated memory.
+  1536  7.1.172  if 'buftype' is "acwrite" Vim still does overwrite check
+  1928  7.1.173  accessing freed memory when using "\%^" pattern
+  2197  7.1.174  writing NUL past end of a buffer
+  4722  7.1.175  <BS> doesn't work with some combination of option settings
+  2943  7.1.176  compiling with Aap fails if "compiledby" contains '<' or '>'
+  5450  7.1.177  freeing memory twice when in debug mode while reading a script
+  1567  7.1.178  "%" doesn't work on "/* comment *//* comment */"
+  6581  7.1.179  configure doesn't find TCL 8.5
+  7099  7.1.180  regexp patterns are not sufficiently tested
+  1878  7.1.181  accessing uninitialized memory in Farsi mode with ":s"
+  5457  7.1.182  with tab pages and an argument list session file may be wrong
+  2489  7.1.183  Internal error for ":echo matchstr('a', 'a\%[\&]')"
+  2132  7.1.184  crash when deleting backwards over a line break in Insert mode
+  3744  7.1.185  "gR" and then BS doesn't work properly with multi-byte chars
+  3294  7.1.186  "expand('<afile>')" returns a bogus value after ":cd dir"
+  2341  7.1.187  Win32 GUI: custom completion using system() doesn't work
+  1688  7.1.188  "W10" message could be displayed in the second column
+  1950  7.1.189  (after 7.1.104) need to call plain_vgetc() in ask_yesno()
+  1685  7.1.190  cursor after end-of-line: "iA sentence.<Esc>)"
+  2007  7.1.191  Win32 GUI: when not in focus click in scrollbar doesn't work 
+  2605  7.1.192  CTRL-C doesn't stop duplicating text for "s" in Visual block
+  2962  7.1.193  some of the Vim 5.x digraphs could be supported
+  1650  7.1.194  Unix: ":echo glob('~/{}')" results in "/home/user//"
+  2273  7.1.195  '0 mark doesn't work for "~/foo ~ foo"
+  2642  7.1.196  (extra) Win32 GUI: "\n" in a tooltip doesn't cause line break
+  2308  7.1.197  Mac: "make install" doesn't work when $prefix is set
+  1460  7.1.198  hang when using ":s/\n//gn"
+  3572  7.1.199  can't do command line completion for a file name extension
+  2310  7.1.200  (after 7.1.177 and 7.1.182) compiler warnings
+  2705  7.1.201  when reading stdin 'fenc' and 'ff' are not set
+  2383  7.1.202  incomplete utf-8 byte sequence is not checked for validity
+  2261  7.1.203  if 'virtualedit' is "onemore" then ":normal 99|" is not right
+  2891  7.1.204  (extra) Win32: 'balloonexpr' tooltip disappears after 4 sec
+  5481  7.1.205  can't get the operator in an ":omap"
+  1690  7.1.206  compiler warnings when using MODIFIED_BY
+  7708  7.1.207  netbeans: "remove" cannot delete one line
+  2051  7.1.208  on Alpha get an unaligned access error
+  2249  7.1.209  GTK GUI: when using the netrw plugin ":gui" causes a hang
+  1923  7.1.210  listing mapping for 0xdb fails when 'encoding' is utf-8
+ 25525  7.1.211  matchparen plugin may take so long it looks like Vim hangs


Index: gvim.desktop
===================================================================
RCS file: /cvs/extras/rpms/vim/F-7/gvim.desktop,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- gvim.desktop	9 Sep 2004 14:01:30 -0000	1.4
+++ gvim.desktop	9 Jan 2008 13:13:47 -0000	1.5
@@ -59,5 +59,5 @@
 Icon=gvim
 Type=Application
 Terminal=0
-XClassHintResName=VIM
+X-XClassHintResName=VIM
 MapNotify=false


Index: vim.spec
===================================================================
RCS file: /cvs/extras/rpms/vim/F-7/vim.spec,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -r1.168 -r1.169
--- vim.spec	27 Jun 2007 08:36:06 -0000	1.168
+++ vim.spec	9 Jan 2008 13:13:47 -0000	1.169
@@ -15,14 +15,14 @@
 #used for pre-releases:
 %define beta %{nil}
 %define vimdir vim71%{?beta}
-%define patchlevel 12
+%define patchlevel 211
 
 Summary: The VIM editor
 URL:     http://www.vim.org/
 Name: vim
 Version: %{baseversion}.%{beta}%{patchlevel}
 Release: 1%{?dist}
-License: GPL
+License: Vim
 Group: Applications/Editors
 Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}%{?beta}%{?CVSDATE}.tar.bz2
 Source1: ftp://ftp.vim.org/pub/vim/extra/vim-%{baseversion}%{?beta}-lang%{?CVSDATE}.tar.gz
@@ -53,16 +53,215 @@
 # for i in `seq 1 14`; do printf "Patch%03d: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.%03d\n" $i $i; done
 Patch001: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.001
 Patch002: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.002
-# Win32: Patch003: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.003
+Patch003: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.003
 Patch004: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.004
 Patch005: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.005
 Patch006: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.006
-#Mac: Patch007: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.007
+Patch007: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.007
 Patch008: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.008
 Patch009: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.009
 Patch010: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.010
 Patch011: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.011
 Patch012: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.012
+Patch013: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.013
+Patch014: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.014
+Patch015: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.015
+Patch016: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.016
+Patch017: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.017
+Patch018: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.018
+Patch019: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.019
+Patch020: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.020
+Patch021: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.021
+Patch022: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.022
+Patch023: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.023
+Patch024: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.024
+Patch025: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.025
+Patch026: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.026
+Patch027: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.027
+Patch028: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.028
+Patch029: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.029
+Patch030: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.030
+Patch031: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.031
+Patch032: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.032
+Patch033: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.033
+Patch034: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.034
+Patch035: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.035
+Patch036: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.036
+Patch037: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.037
+Patch038: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.038
+Patch039: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.039
+Patch040: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.040
+Patch041: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.041
+Patch042: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.042
+Patch043: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.043
+Patch044: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.044
+Patch045: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.045
+Patch046: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.046
+Patch047: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.047
+Patch048: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.048
+Patch049: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.049
+Patch050: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.050
+Patch051: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.051
+Patch052: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.052
+Patch053: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.053
+Patch054: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.054
+Patch055: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.055
+Patch056: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.056
+Patch057: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.057
+Patch058: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.058
+Patch059: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.059
+Patch060: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.060
+Patch061: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.061
+Patch062: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.062
+Patch063: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.063
+Patch064: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.064
+Patch065: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.065
+Patch066: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.066
+Patch067: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.067
+Patch068: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.068
+Patch069: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.069
+Patch070: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.070
+Patch071: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.071
+Patch072: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.072
+Patch073: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.073
+Patch074: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.074
+Patch075: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.075
+Patch076: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.076
+Patch077: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.077
+Patch078: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.078
+Patch079: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.079
+Patch080: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.080
+Patch081: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.081
+Patch082: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.082
+Patch083: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.083
+Patch084: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.084
+Patch085: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.085
+Patch086: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.086
+Patch087: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.087
+Patch088: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.088
+Patch089: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.089
+Patch090: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.090
+Patch091: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.091
+Patch092: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.092
+Patch093: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.093
+Patch094: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.094
+Patch095: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.095
+Patch096: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.096
+Patch097: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.097
+Patch098: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.098
+Patch099: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.099
+Patch100: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.100
+Patch101: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.101
+Patch102: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.102
+Patch103: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.103
+Patch104: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.104
+Patch105: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.105
+Patch106: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.106
+Patch107: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.107
+Patch108: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.108
+Patch109: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.109
+Patch110: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.110
+Patch111: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.111
+Patch112: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.112
+Patch113: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.113
+Patch114: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.114
+Patch115: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.115
+Patch116: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.116
+Patch117: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.117
+Patch118: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.118
+Patch119: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.119
+Patch120: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.120
+Patch121: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.121
+Patch122: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.122
+Patch123: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.123
+Patch124: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.124
+Patch125: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.125
+Patch126: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.126
+Patch127: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.127
+Patch128: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.128
+Patch129: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.129
+Patch130: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.130
+Patch131: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.131
+Patch132: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.132
+Patch133: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.133
+Patch134: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.134
+Patch135: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.135
+Patch136: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.136
+Patch137: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.137
+Patch138: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.138
+Patch139: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.139
+Patch140: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.140
+Patch141: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.141
+Patch142: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.142
+Patch143: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.143
+Patch144: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.144
+Patch145: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.145
+Patch146: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.146
+Patch147: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.147
+Patch148: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.148
+Patch149: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.149
+Patch150: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.150
+Patch151: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.151
+Patch152: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.152
+Patch153: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.153
+Patch154: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.154
+Patch155: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.155
+Patch156: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.156
+Patch157: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.157
+Patch158: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.158
+Patch159: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.159
+Patch160: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.160
+Patch161: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.161
+Patch162: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.162
+Patch163: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.163
+Patch164: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.164
+Patch165: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.165
+Patch166: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.166
+Patch167: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.167
+Patch168: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.168
+Patch169: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.169
+Patch170: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.170
+Patch171: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.171
+Patch172: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.172
+Patch173: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.173
+Patch174: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.174
+Patch175: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.175
+Patch176: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.176
+Patch177: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.177
+Patch178: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.178
+Patch179: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.179
+Patch180: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.180
+Patch181: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.181
+Patch182: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.182
+Patch183: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.183
+Patch184: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.184
+Patch185: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.185
+Patch186: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.186
+Patch187: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.187
+Patch188: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.188
+Patch189: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.189
+Patch190: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.190
+Patch191: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.191
+Patch192: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.192
+Patch193: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.193
+Patch194: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.194
+Patch195: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.195
+Patch196: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.196
+Patch197: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.197
+Patch198: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.198
+Patch199: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.199
+Patch200: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.200
+Patch201: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.201
+Patch202: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.202
+Patch203: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.203
+Patch204: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.204
+Patch205: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.205
+Patch206: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.206
+Patch207: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.207
+Patch208: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.208
+Patch209: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.209
+Patch210: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.210
+Patch211: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.211
 
 Patch3000: vim-7.0-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
@@ -80,7 +279,7 @@
 Patch3101: vim-selinux2.patch
 
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires: python-devel ncurses-devel gettext
+BuildRequires: python-devel ncurses-devel gettext perl-devel
 BuildRequires: libacl-devel gpm-devel autoconf
 %if %{WITH_SELINUX}
 BuildRequires: libselinux-devel
@@ -142,7 +341,7 @@
 %package enhanced
 Summary: A version of the VIM editor which includes recent enhancements
 Group: Applications/Editors
-Requires: vim-common = %{epoch}:%{version}-%{release}
+Requires: vim-common = %{epoch}:%{version}-%{release} which
 Provides: vim = %{version}-%{release}
 
 %description enhanced
@@ -179,9 +378,9 @@
 vim-common package.
 
 %prep
-%setup -q -b 1 -n %{vimdir}
-%{__tar} xzf %{SOURCE1}
-%{__tar} xzf %{SOURCE2}
+%setup -q -b 0 -n %{vimdir}
+%setup -q -D -b 1 -n %{vimdir}
+%setup -q -D -b 2 -n %{vimdir}
 # fix rogue dependencies from sample code
 chmod -x runtime/tools/mve.awk
 %patch2002 -p1
@@ -197,16 +396,216 @@
 # for i in `seq 1 14`; do printf "%%patch%03d -p0 \n" $i; done
 %patch001 -p0
 %patch002 -p0
-#Win 32: patch003 -p0
+%patch003 -p0
 %patch004 -p0
 %patch005 -p0
 %patch006 -p0
-#Mac: patch007 -p0
+%patch007 -p0
 %patch008 -p0
 %patch009 -p0
 %patch010 -p0
 %patch011 -p0
 %patch012 -p0
+%patch013 -p0 
+%patch014 -p0 
+%patch015 -p0 
+%patch016 -p0 
+%patch017 -p0 
+%patch018 -p0 
+%patch019 -p0 
+%patch020 -p0 
+%patch021 -p0 
+%patch022 -p0 
+%patch023 -p0 
+%patch024 -p0 
+%patch025 -p0 
+%patch026 -p0 
+%patch027 -p0 
+%patch028 -p0 
+%patch029 -p0
+%patch030 -p0
+%patch031 -p0
+%patch032 -p0
+%patch033 -p0
+%patch034 -p0
+%patch035 -p0
+%patch036 -p0
+%patch037 -p0
+%patch038 -p0
+%patch039 -p0
+%patch040 -p0
+%patch041 -p0
+%patch042 -p0
+%patch043 -p0
+%patch044 -p0
+%patch045 -p0
+%patch046 -p0
+%patch047 -p0
+%patch048 -p0
+%patch049 -p0
+%patch050 -p0
+%patch051 -p0
+%patch052 -p0
+%patch053 -p0
+%patch054 -p0
+%patch055 -p0
+%patch056 -p0
+%patch057 -p0
+%patch058 -p0
+%patch059 -p0
+%patch060 -p0
+%patch061 -p0
+%patch062 -p0
+%patch063 -p0
+%patch064 -p0
+%patch065 -p0
+%patch066 -p0
+%patch067 -p0
+%patch068 -p0
+%patch069 -p0 
+%patch070 -p0 
+%patch071 -p0 
+%patch072 -p0 
+%patch073 -p0 
+%patch074 -p0 
+%patch075 -p0 
+%patch076 -p0 
+%patch077 -p0 
+%patch078 -p0 
+%patch079 -p0 
+%patch080 -p0 
+%patch081 -p0 
+%patch082 -p0 
+%patch083 -p0 
+%patch084 -p0 
+%patch085 -p0 
+%patch086 -p0 
+%patch087 -p0 
+%patch088 -p0 
+%patch089 -p0 
+%patch090 -p0 
+%patch091 -p0 
+%patch092 -p0 
+%patch093 -p0 
+%patch094 -p0 
+%patch095 -p0 
+%patch096 -p0 
+%patch097 -p0 
+%patch098 -p0 
+%patch099 -p0 
+%patch100 -p0 
+%patch101 -p0 
+%patch102 -p0 
+%patch103 -p0 
+%patch104 -p0 
+%patch105 -p0 
+%patch106 -p0 
+%patch107 -p0 
+%patch108 -p0 
+%patch109 -p0 
+%patch110 -p0 
+%patch111 -p0 
+%patch112 -p0 
+%patch113 -p0 
+%patch114 -p0 
+%patch115 -p0 
+%patch116 -p0 
+%patch117 -p0 
+%patch118 -p0 
+%patch119 -p0 
+%patch120 -p0 
+%patch121 -p0 
+%patch122 -p0 
+%patch123 -p0
+%patch124 -p0
+%patch125 -p0
+%patch126 -p0
+%patch127 -p0
+%patch128 -p0
+%patch129 -p0
+%patch130 -p0
+%patch131 -p0
+%patch132 -p0
+%patch133 -p0
+%patch134 -p0
+%patch135 -p0
+%patch136 -p0
+%patch137 -p0
+%patch138 -p0
+%patch139 -p0
+%patch140 -p0
+%patch141 -p0
+%patch142 -p0
+%patch143 -p0
+%patch144 -p0
+%patch145 -p0
+%patch146 -p0
+%patch147 -p0
+%patch148 -p0
+%patch149 -p0
+%patch150 -p0
+%patch151 -p0
+%patch152 -p0
+%patch153 -p0
+%patch154 -p0
+%patch155 -p0
+%patch156 -p0
+%patch157 -p0
+%patch158 -p0
+%patch159 -p0
+%patch160 -p0
+%patch161 -p0
+%patch162 -p0
+%patch163 -p0
+%patch164 -p0
+%patch165 -p0
+%patch166 -p0
+%patch167 -p0
+%patch168 -p0
+%patch169 -p0
+%patch170 -p0
+%patch171 -p0
+%patch172 -p0
+%patch173 -p0
+%patch174 -p0
+%patch175 -p0
+%patch176 -p0 
+%patch177 -p0 
+%patch178 -p0 
+%patch179 -p0 
+%patch180 -p0 
+%patch181 -p0 
+%patch182 -p0 
+%patch183 -p0 
+%patch184 -p0 
+%patch185 -p0 
+%patch186 -p0 
+%patch187 -p0 
+%patch188 -p0 
+%patch189 -p0 
+%patch190 -p0 
+%patch191 -p0 
+%patch192 -p0 
+%patch193 -p0 
+%patch194 -p0 
+%patch195 -p0 
+%patch196 -p0 
+%patch197 -p0 
+%patch198 -p0 
+%patch199 -p0 
+%patch200 -p0 
+%patch201 -p0 
+%patch202 -p0 
+%patch203 -p0 
+%patch204 -p0 
+%patch205 -p0 
+%patch206 -p0 
+%patch207 -p0 
+%patch208 -p0 
+%patch209 -p0 
+%patch210 -p0 
+%patch211 -p0 
+
 
 # install spell files
 %if %{withvimspell}
@@ -592,6 +991,51 @@
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
+* Wed Jan 09 2008 Karsten Hopp <karsten at redhat.com> 7.1.211-1
+- rebuild for FC-7
+
+* Mon Jan 07 2008 Karsten Hopp <karsten at redhat.com> 7.1.211-1
+- patchlevel 211
+
+* Sat Dec 22 2007 Karsten Hopp <karsten at redhat.com> 7.1.175-1
+- patchlevel 175
+
+* Thu Nov 22 2007 Karsten Hopp <karsten at redhat.com> 7.1.159-1
+- patchlevel 159
+- vim-enhanced requires which for vimtutor (#395371)
+
+* Thu Oct 04 2007 Karsten Hopp <karsten at redhat.com> 7.1.135-1
+- patchlevel 135
+
+* Wed Sep 26 2007 Karsten Hopp <karsten at redhat.com> 7.1.122-1
+- patchlevel 122
+
+* Tue Sep 25 2007 Karsten Hopp <karsten at redhat.com> 7.1.119-1
+- patchlevel 119
+
+* Mon Sep 24 2007 Karsten Hopp <karsten at redhat.com> 7.1.116-1
+- patchlevel 116
+
+* Fri Sep 07 2007 Karsten Hopp <karsten at redhat.com> 7.1.100-1
+- patchlevel 100
+
+* Fri Aug 24 2007 Karsten Hopp <karsten at redhat.com> 7.1.87-1
+- add build requirement perl-devel
+- fix tarball unpacking
+- patchlevel 87
+
+* Wed Aug 15 2007 Karsten Hopp <karsten at redhat.com> 7.1.77-1
+- patchlevel 77
+
+* Mon Aug 13 2007 Karsten Hopp <karsten at redhat.com> 7.1.68-1
+- patchlevel 68
+
+* Thu Aug 02 2007 Karsten Hopp <karsten at redhat.com> 7.1.47-1
+- patchlevel 47
+
+* Wed Jul 11 2007 Karsten Hopp <karsten at redhat.com> 7.1.28-1
+- patchlevel 28
+
 * Wed Jun 27 2007 Karsten Hopp <karsten at redhat.com> 7.1.12-1
 - Patchlevel 12
 




More information about the fedora-extras-commits mailing list