--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.155
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.155
+Problem: Win32: Using ":tjump www" in a help file gives two results.
+ (Dave Roberts)
+Solution: Ignore differences between slashes and backslashes when checking
+ for identical tag matches.
+Files: src/tag.c
+
+
+*** ../vim-6.2.154/src/tag.c Sun Oct 12 16:52:45 2003
+--- src/tag.c Mon Dec 15 20:36:00 2003
+***************
+*** 1861,1866 ****
+--- 1861,1871 ----
+ {
+ p[0] = mtt;
+ STRCPY(p + 1, tag_fname);
++ #ifdef BACKSLASH_IN_FILENAME
++ /* Ignore differences in slashes, avoid adding
++ * both path/file and path\file. */
++ slash_adjust(p + 1);
++ #endif
+ s = p + 1 + STRLEN(tag_fname) + 1;
+ #ifdef FEAT_EMACS_TAGS
+ if (is_etag)
+*** ../vim-6.2.154/src/version.c Wed Nov 12 20:56:23 2003
+--- src/version.c Mon Dec 29 19:47:28 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 155,
+ /**/
+
+--
+I AM THANKFUL...
+...for the mess to clean after a party because it means I have
+been surrounded by friends.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.156
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.156 (after 6.2.125)
+Problem: Win32: Netbeans fails to build, EINTR is not defined.
+Solution: Redefine EINTR to WSAEINTR. (Mike Williams)
+Files: src/netbeans.c
+
+
+*** ../vim-6.2.155/src/netbeans.c Fri Oct 17 12:13:28 2003
+--- src/netbeans.c Wed Dec 24 12:42:27 2003
+***************
+*** 32,37 ****
+--- 32,41 ----
+ * errno... */
+ # define sock_errno WSAGetLastError()
+ # define ECONNREFUSED WSAECONNREFUSED
++ # ifdef EINTR
++ # undef EINTR
++ # endif
++ # define EINTR WSAEINTR
+ # define sock_write(sd, buf, len) send(sd, buf, len, 0)
+ # define sock_read(sd, buf, len) recv(sd, buf, len, 0)
+ # define sock_close(sd) closesocket(sd)
+*** ../vim-6.2.155/src/version.c Mon Dec 29 19:48:35 2003
+--- src/version.c Mon Dec 29 19:57:43 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 156,
+ /**/
+
+--
+The primary purpose of the DATA statement is to give names to constants;
+instead of referring to pi as 3.141592653589793 at every appearance, the
+variable PI can be given that value with a DATA statement and used instead
+of the longer form of the constant. This also simplifies modifying the
+program, should the value of pi change.
+ -- FORTRAN manual for Xerox Computers
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.157
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.157
+Problem: Using "%p" in 'errorformat' gives a column number that is too
+ high.
+Solution: Set the flag to use the number as a virtual column. (Lefteris
+ Koutsoloukas)
+Files: src/quickfix.c
+
+
+*** ../vim-6.2.156/src/quickfix.c Thu Sep 11 21:15:02 2003
+--- src/quickfix.c Wed Dec 24 13:39:46 2003
+***************
+*** 476,482 ****
+--- 476,486 ----
+ if ((i = (int)fmt_ptr->addr[6]) > 0) /* %r */
+ tail = regmatch.startp[i];
+ if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
++ {
+ col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
++ if (*((char_u *)regmatch.startp[i]) != TAB)
++ use_virt_col = TRUE;
++ }
+ if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
+ {
+ col = (int)atol((char *)regmatch.startp[i]);
+*** ../vim-6.2.156/src/version.c Mon Dec 29 20:14:44 2003
+--- src/version.c Mon Dec 29 20:20:46 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 157,
+ /**/
+
+--
+I AM THANKFUL...
+...for a lawn that needs mowing, windows that need cleaning
+and gutters that need fixing because it means I have a home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.158
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.158
+Problem: The sed command on Solaris and HPUX doesn't work for a line that
+ doesn't end in a newline.
+Solution: Add a newline when feeding text to sed. (Mark Waggoner)
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-6.2.157/src/auto/configure Sun Nov 2 15:37:11 2003
+--- src/auto/configure Wed Dec 24 14:10:23 2003
+***************
+*** 1572,1578 ****
+ vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
+
+ perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
+! -e 'ccflags;perl_inc' | sed -e 's/-fno[^ ]*//'`
+ if test "X$perlcppflags" != "X"; then
+ PERL_CFLAGS="$perlcppflags"
+ fi
+--- 1582,1588 ----
+ vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
+
+ perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
+! -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[^ ]*//'`
+ if test "X$perlcppflags" != "X"; then
+ PERL_CFLAGS="$perlcppflags"
+ fi
+*** ../vim-6.2.157/src/configure.in Sun Nov 2 15:37:11 2003
+--- src/configure.in Wed Dec 24 14:09:32 2003
+***************
+*** 313,319 ****
+ AC_SUBST(vi_cv_perllib)
+ dnl Remove "-fno-something", it breaks using cproto.
+ perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
+! -e 'ccflags;perl_inc' | sed -e 's/-fno[[^ ]]*//'`
+ if test "X$perlcppflags" != "X"; then
+ PERL_CFLAGS="$perlcppflags"
+ fi
+--- 314,320 ----
+ AC_SUBST(vi_cv_perllib)
+ dnl Remove "-fno-something", it breaks using cproto.
+ perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
+! -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//'`
+ if test "X$perlcppflags" != "X"; then
+ PERL_CFLAGS="$perlcppflags"
+ fi
+*** ../vim-6.2.157/src/version.c Mon Dec 29 20:21:49 2003
+--- src/version.c Mon Dec 29 20:25:14 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 158,
+ /**/
+
+--
+A fool learns from his mistakes, a wise man from someone elses.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.159
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.159
+Problem: When using expression folding and 'foldopen' is "undo" an undo
+ command doesn't always open the fold.
+Solution: Save and restore the KeyTyped variable when evaluating 'foldexpr'.
+ (Taro Muraoka)
+Files: src/fold.c
+
+
+*** ../vim-6.2.158/src/fold.c Tue Sep 2 22:25:25 2003
+--- src/fold.c Tue Dec 16 09:47:43 2003
+***************
+*** 2842,2847 ****
+--- 2842,2848 ----
+ int n;
+ int c;
+ linenr_T lnum = flp->lnum + flp->off;
++ int save_keytyped;
+
+ win = curwin;
+ curwin = flp->wp;
+***************
+*** 2854,2860 ****
+--- 2855,2866 ----
+ if (lnum <= 1)
+ flp->lvl = 0;
+
++ /* KeyTyped may be reset to 0 when calling a function which invokes
++ * do_cmdline(). To make 'foldopen' work correctly restore KeyTyped. */
++ save_keytyped = KeyTyped;
+ n = eval_foldexpr(flp->wp->w_p_fde, &c);
++ KeyTyped = save_keytyped;
++
+ switch (c)
+ {
+ /* "a1", "a2", .. : add to the fold level */
+*** ../vim-6.2.158/src/version.c Mon Dec 29 20:27:03 2003
+--- src/version.c Mon Dec 29 20:29:37 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 159,
+ /**/
+
+--
+I AM THANKFUL...
+...for all the complaining I hear about the government
+because it means we have freedom of speech.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.160
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.160
+Problem: When 'virtualedit' is "all" and 'selection is "exclusive",
+ selecting a double-width character below a single-width character
+ may cause a crash.
+Solution: Avoid overflow on unsigned integer decrement. (Taro Muraoka)
+Files: src/normal.c
+
+
+*** ../vim-6.2.159/src/normal.c Sun Nov 9 20:35:08 2003
+--- src/normal.c Tue Dec 16 10:06:16 2003
+***************
+*** 1510,1516 ****
+ oap->start_vcol = start;
+ if (end > oap->end_vcol)
+ {
+! if (*p_sel == 'e' && start - 1 >= oap->end_vcol)
+ oap->end_vcol = start - 1;
+ else
+ oap->end_vcol = end;
+--- 1510,1517 ----
+ oap->start_vcol = start;
+ if (end > oap->end_vcol)
+ {
+! if (*p_sel == 'e' && start >= 1
+! && start - 1 >= oap->end_vcol)
+ oap->end_vcol = start - 1;
+ else
+ oap->end_vcol = end;
+*** ../vim-6.2.159/src/version.c Mon Dec 29 20:30:12 2003
+--- src/version.c Mon Dec 29 20:32:24 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 160,
+ /**/
+
+--
+I AM THANKFUL...
+...for the piles of laundry and ironing because it means I
+have plenty of clothes to wear.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.161 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.161 (extra)
+Problem: VMS: Missing header file. Reading input busy loops.
+Solution: Include termdef.h. Avoid the use of a wait function in
+ vms_read(). (Frank Ries)
+Files: src/os_unix.h, src/os_vms.c
+
+
+*** ../vim-6.2.160/src/os_unix.h Mon Jan 20 21:14:13 2003
+--- src/os_unix.h Mon Nov 10 10:53:44 2003
+***************
+*** 218,223 ****
+--- 218,224 ----
+ #include <tt2def.h>
+ #include <jpidef.h>
+ #include <rms.h>
++ #include <trmdef.h>
+ #include <string.h>
+ #include <starlet.h>
+ #include <socket.h>
+*** ../vim-6.2.160/src/os_vms.c Wed Oct 29 14:40:27 2003
+--- src/os_vms.c Tue Dec 23 14:30:31 2003
+***************
+*** 53,62 ****
+ static short iochan; /* TTY I/O channel */
+ static short iosb[4]; /* IO status block */
+
+! int vms_match_num = 0;
+! int vms_match_alloced = 0;
+! int vms_match_free = 0;
+! char_u **vms_fmatch = NULL;
+ static char *Fspec_Rms; /* rms file spec, passed implicitly between routines */
+
+
+--- 53,61 ----
+ static short iochan; /* TTY I/O channel */
+ static short iosb[4]; /* IO status block */
+
+! static int vms_match_num = 0;
+! static int vms_match_free = 0;
+! static char_u **vms_fmatch = NULL;
+ static char *Fspec_Rms; /* rms file spec, passed implicitly between routines */
+
+
+***************
+*** 145,151 ****
+ return;
+ }
+
+! static TT_MODE
+ get_tty(void)
+ {
+
+--- 144,150 ----
+ return;
+ }
+
+! static TT_MODE
+ get_tty(void)
+ {
+
+***************
+*** 299,322 ****
+ int
+ vms_read(char *inbuf, size_t nbytes)
+ {
+! int status, function, len;
+! float wait = 0.05;
+! TT_MODE tt_mode;
+
+ /* whatever happened earlier we need an iochan here */
+ if (!iochan)
+! tt_mode = get_tty();
+
+! function = (IO$_READLBLK | IO$M_NOECHO | IO$M_TIMED | IO$M_ESCAPE);
+ memset(inbuf, 0, nbytes);
+
+ while (1)
+ {
+! status = sys$qiow(0,iochan,function,&iosb,0,0,inbuf,nbytes-1,0,0,0,0);
+ len = strlen(inbuf);
+ if (len > 0)
+ break;
+- lib$wait(&wait);
+ }
+ return len;
+ }
+--- 298,327 ----
+ int
+ vms_read(char *inbuf, size_t nbytes)
+ {
+! int status, function, len;
+! TT_MODE tt_mode;
+! ITEM itmlst[2];
+! static long trm_mask[8] = {-1, -1, -1, -1, -1, -1, -1, -1};
+
+ /* whatever happened earlier we need an iochan here */
+ if (!iochan)
+! tt_mode = get_tty();
+!
+! vul_item(&itmlst[0], 0, TRM$_MODIFIERS,
+! (char *)(TRM$M_TM_ESCAPE | TRM$M_TM_NOECHO | TRM$M_TM_NOEDIT |
+! TRM$M_TM_NOFILTR | TRM$M_TM_NORECALL | TRM$M_TM_TRMNOECHO), 0);
+! vul_item(&itmlst[1], sizeof(trm_mask), TRM$_TERM, (char *)&trm_mask, 0);
+
+! function = (IO$_READLBLK | IO$M_EXTEND);
+ memset(inbuf, 0, nbytes);
+
+ while (1)
+ {
+! status = sys$qiow(0, iochan, function, &iosb, 0, 0, inbuf, nbytes - 1,
+! 0, 0, &itmlst, sizeof(itmlst));
+ len = strlen(inbuf);
+ if (len > 0)
+ break;
+ }
+ return len;
+ }
+***************
+*** 328,338 ****
+ * Returns: 1 - continue finding matches
+ * 0 - stop trying to find any further mathces
+ */
+! static int
+ vms_wproc(char *name, int val)
+ {
+ int i;
+ int nlen;
+
+ if (val != DECC$K_FILE) /* Directories and foreing non VMS files are not counting */
+ return 1;
+--- 333,344 ----
+ * Returns: 1 - continue finding matches
+ * 0 - stop trying to find any further mathces
+ */
+! static int
+ vms_wproc(char *name, int val)
+ {
+ int i;
+ int nlen;
++ static int vms_match_alloced = 0;
+
+ if (val != DECC$K_FILE) /* Directories and foreing non VMS files are not counting */
+ return 1;
+*** ../vim-6.2.160/src/version.c Mon Dec 29 20:32:43 2003
+--- src/version.c Mon Dec 29 20:34:56 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 161,
+ /**/
+
+--
+From "know your smileys":
+ [:-) Frankenstein's monster
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.162
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.162
+Problem: ":redraw" doesn't always display the text that includes the cursor
+ position, e.g. after ":call cursor(1, 0)". (Eugene Minkovskii)
+Solution: Call update_topline() before redrawing.
+Files: src/ex_docmd.c
+
+
+*** ../vim-6.2.161/src/ex_docmd.c Wed Oct 29 14:37:09 2003
+--- src/ex_docmd.c Tue Dec 16 13:51:40 2003
+***************
+*** 7116,7121 ****
+--- 7116,7122 ----
+
+ RedrawingDisabled = 0;
+ p_lz = FALSE;
++ update_topline();
+ update_screen(eap->forceit ? CLEAR :
+ #ifdef FEAT_VISUAL
+ VIsual_active ? INVERTED :
+*** ../vim-6.2.161/src/version.c Mon Dec 29 20:36:56 2003
+--- src/version.c Mon Dec 29 20:38:47 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 162,
+ /**/
+
+--
+From "know your smileys":
+ :-E Has major dental problems
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.163
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.163
+Problem: "make install" may also copy AAPDIR directories.
+Solution: Delete AAPDIR directories, just like CVS directories.
+Files: src/Makefile
+
+
+*** ../vim-6.2.162/src/Makefile Sun Nov 2 15:37:11 2003
+--- src/Makefile Wed Dec 24 14:28:14 2003
+***************
+*** 1724,1730 ****
+ chmod $(FILEMOD) `find $(DEST_MACRO) -type f -print`
+ chmod $(SCRIPTMOD) $(DEST_MACRO)/less.sh
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_MACRO) -name CVS -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+--- 1727,1733 ----
+ chmod $(FILEMOD) `find $(DEST_MACRO) -type f -print`
+ chmod $(SCRIPTMOD) $(DEST_MACRO)/less.sh
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_MACRO) -name CVS -or -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+***************
+*** 1751,1757 ****
+ # install the runtime tools
+ $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS)
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_TOOLS) -name CVS -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+--- 1754,1760 ----
+ # install the runtime tools
+ $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS)
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_TOOLS) -name CVS -or -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+*** ../vim-6.2.162/src/version.c Mon Dec 29 20:39:18 2003
+--- src/version.c Mon Dec 29 20:41:33 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 163,
+ /**/
+
+--
+From "know your smileys":
+ :-| :-| Deja' vu!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.164
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.164 (after 6.2.144)
+Problem: When "g:html_use_css" is set the HTML header generated by the
+ 2html script is still wrong.
+Solution: Search for a string instead of jumping to a fixed line number.
+ Go to the start of the line before inserting the header.
+ (Jess Thrysoee)
+Files: runtime/syntax/2html.vim
+
+
+*** ../vim-6.2.163/runtime/syntax/2html.vim Sun Nov 2 17:50:31 2003
+--- runtime/syntax/2html.vim Thu Nov 13 17:01:05 2003
+***************
+*** 1,6 ****
+ " Vim syntax support file
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Nov 02
+ " (modified by David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>)
+
+ " Transform a file into HTML, using the current syntax highlighting.
+--- 1,6 ----
+ " Vim syntax support file
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Nov 13
+ " (modified by David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>)
+
+ " Transform a file into HTML, using the current syntax highlighting.
+***************
+*** 290,296 ****
+
+ " Now, when we finally know which, we define the colors and styles
+ if exists("html_use_css")
+! 8
+ endif
+
+ " Find out the background and foreground color.
+--- 290,296 ----
+
+ " Now, when we finally know which, we define the colors and styles
+ if exists("html_use_css")
+! 1;/<style type="text/+1
+ endif
+
+ " Find out the background and foreground color.
+***************
+*** 351,357 ****
+ endif
+ else
+ execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+g'
+! 8
+ endif
+ endwhile
+
+--- 351,359 ----
+ endif
+ else
+ execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+g'
+! if exists("html_use_css")
+! 1;/<style type="text/+1
+! endif
+ endif
+ endwhile
+
+***************
+*** 360,366 ****
+
+ " The DTD
+ if exists("html_use_css")
+! exe "normal! ggi<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n\e"
+ endif
+
+ " Cleanup
+--- 362,368 ----
+
+ " The DTD
+ if exists("html_use_css")
+! exe "normal! gg0i<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n\e"
+ endif
+
+ " Cleanup
+*** ../vim-6.2.163/src/version.c Mon Dec 29 20:42:51 2003
+--- src/version.c Mon Dec 29 20:46:55 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 164,
+ /**/
+
+--
+From "know your smileys":
+ :-| :-| Deja' vu!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.165
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.165
+Problem: The configure checks hang when using autoconf 2.57.
+Solution: Invoke AC_PROGRAM_EGREP to set $EGREP. (Aron Griffis)
+Files: src/auto/configure, src/configure.in
+
+
+*** ../vim-6.2.164/src/auto/configure Mon Dec 29 20:27:03 2003
+--- src/auto/configure Wed Dec 24 14:10:23 2003
+***************
+*** 943,950 ****
+ ac_cv_prog_CPP="$CPP"
+ fi
+ echo "$ac_t""$CPP" 1>&6
+! echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+! echo "configure:944: checking for POSIXized ISC" >&5
+ if test -d /etc/conf/kconfig.d &&
+ grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
+ then
+--- 943,960 ----
+ ac_cv_prog_CPP="$CPP"
+ fi
+ echo "$ac_t""$CPP" 1>&6
+! cat > conftest.$ac_ext <<EOF
+! #line 948 "configure"
+! #include "confdefs.h"
+!
+! EOF
+! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+! egrep "" >/dev/null 2>&1; then
+! :
+! fi
+! rm -f conftest*
+! echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+! echo "configure:958: checking for POSIXized ISC" >&5
+ if test -d /etc/conf/kconfig.d &&
+ grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
+ then
+*** ../vim-6.2.164/src/configure.in Mon Dec 29 20:27:03 2003
+--- src/configure.in Wed Dec 24 14:09:32 2003
+***************
+*** 13,18 ****
+--- 13,19 ----
+ dnl Checks for programs.
+ AC_PROG_CC dnl required by almost everything
+ AC_PROG_CPP dnl required by header file checks
++ AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
+ AC_ISC_POSIX dnl required by AC_C_CROSS
+ AC_PROG_AWK dnl required for "make html" in ../doc
+
+*** ../vim-6.2.164/src/version.c Mon Dec 29 20:49:00 2003
+--- src/version.c Mon Dec 29 20:51:56 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 165,
+ /**/
+
+--
+From "know your smileys":
+ :.-( Crying
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.166
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.166
+Problem: When $GZIP contains "-N" editing compressed files doesn't work
+ properly.
+Solution: Add "-n" to "gzip -d" to avoid restoring the file name. (Oyvind
+ Holm)
+Files: runtime/plugin/gzip.vim
+
+
+*** ../vim-6.2.165/runtime/plugin/gzip.vim Sun Apr 6 17:30:34 2003
+--- runtime/plugin/gzip.vim Mon Dec 22 16:14:42 2003
+***************
+*** 1,6 ****
+ " Vim plugin for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Apr 06
+
+ " Exit quickly when:
+ " - this plugin was already loaded
+--- 1,6 ----
+ " Vim plugin for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Dec 22
+
+ " Exit quickly when:
+ " - this plugin was already loaded
+***************
+*** 19,31 ****
+ " set binary mode before reading the file
+ " use "gzip -d", gunzip isn't always available
+ autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z setlocal bin
+! autocmd BufReadPost,FileReadPost *.gz call s:read("gzip -d")
+ autocmd BufReadPost,FileReadPost *.bz2 call s:read("bzip2 -d")
+ autocmd BufReadPost,FileReadPost *.Z call s:read("uncompress")
+ autocmd BufWritePost,FileWritePost *.gz call s:write("gzip")
+ autocmd BufWritePost,FileWritePost *.bz2 call s:write("bzip2")
+ autocmd BufWritePost,FileWritePost *.Z call s:write("compress -f")
+! autocmd FileAppendPre *.gz call s:appre("gzip -d")
+ autocmd FileAppendPre *.bz2 call s:appre("bzip2 -d")
+ autocmd FileAppendPre *.Z call s:appre("uncompress")
+ autocmd FileAppendPost *.gz call s:write("gzip")
+--- 19,31 ----
+ " set binary mode before reading the file
+ " use "gzip -d", gunzip isn't always available
+ autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z setlocal bin
+! autocmd BufReadPost,FileReadPost *.gz call s:read("gzip -dn")
+ autocmd BufReadPost,FileReadPost *.bz2 call s:read("bzip2 -d")
+ autocmd BufReadPost,FileReadPost *.Z call s:read("uncompress")
+ autocmd BufWritePost,FileWritePost *.gz call s:write("gzip")
+ autocmd BufWritePost,FileWritePost *.bz2 call s:write("bzip2")
+ autocmd BufWritePost,FileWritePost *.Z call s:write("compress -f")
+! autocmd FileAppendPre *.gz call s:appre("gzip -dn")
+ autocmd FileAppendPre *.bz2 call s:appre("bzip2 -d")
+ autocmd FileAppendPre *.Z call s:appre("uncompress")
+ autocmd FileAppendPost *.gz call s:write("gzip")
+***************
+*** 69,75 ****
+ let tmpe = tmp . "." . expand("<afile>:e")
+ " write the just read lines to a temp file "'[,']w tmp.gz"
+ execute "silent '[,']w " . tmpe
+! " uncompress the temp file: call system("gzip -d tmp.gz")
+ call system(a:cmd . " " . tmpe)
+ " delete the compressed lines; remember the line number
+ let l = line("'[") - 1
+--- 69,75 ----
+ let tmpe = tmp . "." . expand("<afile>:e")
+ " write the just read lines to a temp file "'[,']w tmp.gz"
+ execute "silent '[,']w " . tmpe
+! " uncompress the temp file: call system("gzip -dn tmp.gz")
+ call system(a:cmd . " " . tmpe)
+ " delete the compressed lines; remember the line number
+ let l = line("'[") - 1
+*** ../vim-6.2.165/src/version.c Mon Dec 29 21:00:25 2003
+--- src/version.c Mon Dec 29 21:04:18 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 166,
+ /**/
+
+--
+From "know your smileys":
+ C=}>;*{)) Drunk, devilish chef with a toupee in an updraft,
+ a mustache, and a double chin
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.167
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.167
+Problem: The Python interface leaks memory when assigning lines to a
+ buffer. (Sergey Khorev)
+Solution: Do not copy the line when calling ml_replace().
+Files: src/if_python.c
+
+
+*** ../vim-6.2.166/src/if_python.c Wed Nov 12 20:56:23 2003
+--- src/if_python.c Tue Dec 23 10:26:13 2003
+***************
+*** 2241,2256 ****
+ if (save == NULL)
+ return FAIL;
+
+! /* We do not need to free save, as we pass responsibility for
+! * it to vim, via the final parameter of ml_replace().
+! */
+ PyErr_Clear();
+ curbuf = buf;
+
+ if (u_savesub((linenr_T)n) == FAIL)
+ PyErr_SetVim(_("cannot save undo information"));
+! else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL)
+ PyErr_SetVim(_("cannot replace line"));
+ else
+ changed_bytes((linenr_T)n, 0);
+
+--- 2246,2265 ----
+ if (save == NULL)
+ return FAIL;
+
+! /* We do not need to free "save" if ml_replace() consumes it. */
+ PyErr_Clear();
+ curbuf = buf;
+
+ if (u_savesub((linenr_T)n) == FAIL)
++ {
+ PyErr_SetVim(_("cannot save undo information"));
+! vim_free(save);
+! }
+! else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
+! {
+ PyErr_SetVim(_("cannot replace line"));
++ vim_free(save);
++ }
+ else
+ changed_bytes((linenr_T)n, 0);
+
+***************
+*** 2390,2402 ****
+ if (!PyErr_Occurred())
+ {
+ for (i = 0; i < old_len && i < new_len; ++i)
+! if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE)
+ == FAIL)
+ {
+ PyErr_SetVim(_("cannot replace line"));
+ break;
+ }
+ }
+
+ /* Now we may need to insert the remaining new old_len. If we do, we
+ * must free the strings as we finish with them (we can't pass the
+--- 2399,2413 ----
+ if (!PyErr_Occurred())
+ {
+ for (i = 0; i < old_len && i < new_len; ++i)
+! if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
+ == FAIL)
+ {
+ PyErr_SetVim(_("cannot replace line"));
+ break;
+ }
+ }
++ else
++ i = 0;
+
+ /* Now we may need to insert the remaining new old_len. If we do, we
+ * must free the strings as we finish with them (we can't pass the
+*** ../vim-6.2.166/src/version.c Mon Dec 29 21:04:38 2003
+--- src/version.c Mon Dec 29 21:06:33 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 167,
+ /**/
+
+--
+From "know your smileys":
+ |-( Contact lenses, but has lost them
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.168
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.168
+Problem: Python interface: There is no way to get the indices from a range
+ object.
+Solution: Add the "start" and "end" attributes. (Maurice S. Barnum)
+Files: src/if_python.c, runtime/doc/if_pyth.txt
+
+
+*** ../vim-6.2.167/src/if_python.c Mon Dec 29 21:07:26 2003
+--- src/if_python.c Tue Dec 23 10:26:13 2003
+***************
+*** 1476,1482 ****
+ static PyObject *
+ RangeGetattr(PyObject *self, char *name)
+ {
+! return Py_FindMethod(RangeMethods, self, name);
+ }
+
+ static PyObject *
+--- 1476,1487 ----
+ static PyObject *
+ RangeGetattr(PyObject *self, char *name)
+ {
+! if (strcmp(name, "start") == 0)
+! return Py_BuildValue("i",((RangeObject *)(self))->start - 1);
+! else if (strcmp(name, "end") == 0)
+! return Py_BuildValue("i",((RangeObject *)(self))->end - 1);
+! else
+! return Py_FindMethod(RangeMethods, self, name);
+ }
+
+ static PyObject *
+*** ../vim-6.2.167/runtime/doc/if_pyth.txt Sun Jun 1 12:20:33 2003
+--- runtime/doc/if_pyth.txt Mon Dec 29 10:03:38 2003
+***************
+*** 1,4 ****
+! *if_pyth.txt* For Vim version 6.2. Last change: 2002 Mar 11
+
+
+ VIM REFERENCE MANUAL by Paul Moore
+--- 1,4 ----
+! *if_pyth.txt* For Vim version 6.2. Last change: 2003 Dec 29
+
+
+ VIM REFERENCE MANUAL by Paul Moore
+***************
+*** 242,250 ****
+ can, of course, change as a result of slice assignments, line deletions, or
+ the range.append() method).
+
+! Unlike buffers, ranges do not have a "name" attribute, nor do they have mark()
+! or range() methods. They do have an append() method, however, which adds
+! line(s) to the end of the range.
+
+ ==============================================================================
+ 5. Window objects *python-window*
+--- 252,271 ----
+ can, of course, change as a result of slice assignments, line deletions, or
+ the range.append() method).
+
+! The range object attributes are:
+! r.start Index of first line into the buffer
+! r.end Index of last line into the buffer
+!
+! The range object methods are:
+! r.append(str) Append a line to the range
+! r.append(list) Append a list of lines to the range
+! Note that the option of supplying a list of strings to
+! the append method differs from the equivalent method
+! for Python's built-in list objects.
+!
+! Example (assume r is the current range):
+! # Send all lines in a range to the default printer
+! vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
+
+ ==============================================================================
+ 5. Window objects *python-window*
+*** ../vim-6.2.167/src/version.c Mon Dec 29 21:07:26 2003
+--- src/version.c Mon Dec 29 21:10:20 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 168,
+ /**/
+
+--
+From "know your smileys":
+ <|-) Chinese
+ <|-( Chinese and doesn't like these kind of jokes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.169
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.169
+Problem: The prototype for _Xmblen() appears in a recent XFree86 header
+ file, causing a warning for our prototype. (Hisashi T Fujinaka)
+Solution: Move the prototype to an osdef file, so that it's filtered out.
+Files: src/mbyte.c, src/osdef2.h.in
+
+
+*** ../vim-6.2.168/src/mbyte.c Sun Nov 9 20:20:26 2003
+--- src/mbyte.c Tue Dec 23 16:03:30 2003
+***************
+*** 543,549 ****
+ # else
+ char buf[MB_MAXBYTES];
+ # ifdef X_LOCALE
+- extern int _Xmblen __ARGS((char *, size_t));
+ # ifndef mblen
+ # define mblen _Xmblen
+ # endif
+--- 547,552 ----
+*** ../vim-6.2.168/src/osdef2.h.in Sat Dec 15 22:24:12 2001
+--- src/osdef2.h.in Wed Dec 24 10:26:00 2003
+***************
+*** 79,81 ****
+--- 79,87 ----
+ #else
+ extern char *mktemp __ARGS((char *));
+ #endif
++
++ #ifdef ISC
++ extern int _Xmblen __ARGS((char const *, size_t));
++ #else
++ extern int _Xmblen __ARGS((char *, size_t));
++ #endif
+*** ../vim-6.2.168/src/version.c Mon Dec 29 21:14:00 2003
+--- src/version.c Mon Dec 29 21:16:30 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 169,
+ /**/
+
+--
+From "know your smileys":
+ :-* A big kiss!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.170
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.170
+Problem: When using Sun WorkShop the current directory isn't changed to
+ where the file is.
+Solution: Set the 'autochdir' option when using WorkShop. And avoid using
+ the basename when 'autochdir' is not set.
+Files: src/gui_x11.c, src/ex_cmds.c
+
+
+*** ../vim-6.2.169/src/gui_x11.c Sun Jul 27 14:16:53 2003
+--- src/gui_x11.c Wed Dec 24 14:25:10 2003
+***************
+*** 1223,1228 ****
+--- 1223,1229 ----
+ if (strcmp("-ws", argv[arg]) == 0)
+ {
+ usingSunWorkShop++;
++ p_acd = TRUE;
+ gui.dofork = FALSE; /* don't fork() when starting GUI */
+ mch_memmove(&argv[arg], &argv[arg + 1],
+ (--*argc - arg) * sizeof(char *));
+*** ../vim-6.2.169/src/ex_cmds.c Sun Nov 9 20:23:26 2003
+--- src/ex_cmds.c Wed Dec 24 14:31:16 2003
+***************
+*** 2615,2621 ****
+ ffname = free_fname;
+ other_file = otherfile(ffname);
+ #ifdef FEAT_SUN_WORKSHOP
+! if (usingSunWorkShop && (cp = vim_strrchr(sfname, '/')) != NULL)
+ sfname = ++cp;
+ #endif
+ }
+--- 2615,2622 ----
+ ffname = free_fname;
+ other_file = otherfile(ffname);
+ #ifdef FEAT_SUN_WORKSHOP
+! if (usingSunWorkShop && p_acd
+! && (cp = vim_strrchr(sfname, '/')) != NULL)
+ sfname = ++cp;
+ #endif
+ }
+***************
+*** 3122,3128 ****
+ && vim_chdirfile(curbuf->b_ffname) == OK)
+ shorten_fnames(TRUE);
+
+! if (gui.in_use && curbuf->b_fname != NULL)
+ {
+ # ifdef FEAT_SUN_WORKSHOP
+ if (usingSunWorkShop)
+--- 3123,3129 ----
+ && vim_chdirfile(curbuf->b_ffname) == OK)
+ shorten_fnames(TRUE);
+
+! if (gui.in_use && curbuf->b_ffname != NULL)
+ {
+ # ifdef FEAT_SUN_WORKSHOP
+ if (usingSunWorkShop)
+*** ../vim-6.2.169/src/version.c Mon Dec 29 21:17:44 2003
+--- src/version.c Mon Dec 29 21:20:47 2003
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 170,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+92. It takes you two hours to check all 14 of your mailboxes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.171
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.171 (after 6.2.163)
+Problem: The "-or" argument of "find" doesn't work for SysV systems.
+Solution: Use "-o" instead. (Gordon Prieur)
+Files: src/Makefile
+
+
+*** ../vim-6.2.170/src/Makefile Mon Dec 29 20:42:51 2003
+--- src/Makefile Tue Jan 6 16:18:26 2004
+***************
+*** 1724,1730 ****
+ chmod $(FILEMOD) `find $(DEST_MACRO) -type f -print`
+ chmod $(SCRIPTMOD) $(DEST_MACRO)/less.sh
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_MACRO) -name CVS -or -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+--- 1727,1733 ----
+ chmod $(FILEMOD) `find $(DEST_MACRO) -type f -print`
+ chmod $(SCRIPTMOD) $(DEST_MACRO)/less.sh
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_MACRO) -name CVS -o -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+***************
+*** 1751,1757 ****
+ # install the runtime tools
+ $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS)
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_TOOLS) -name CVS -or -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+--- 1754,1760 ----
+ # install the runtime tools
+ $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS)
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_TOOLS) -name CVS -o -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+*** ../vim-6.2.170/src/version.c Mon Dec 29 21:21:52 2003
+--- src/version.c Tue Jan 6 16:19:37 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 171,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+1 49. You find your computer sexier than your girlfriend
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.172
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.172 (after 6.2.169)
+Problem: The prototype for _Xmblen() still causes trouble.
+Solution: Include the X11 header file that defines the prototype.
+Files: src/osdef2.h.in, src/osdef.sh
+
+
+*** ../vim-6.2.171/src/osdef2.h.in Mon Dec 29 21:17:44 2003
+--- src/osdef2.h.in Mon Jan 5 10:03:41 2004
+***************
+*** 83,87 ****
+--- 83,88 ----
+ #ifdef ISC
+ extern int _Xmblen __ARGS((char const *, size_t));
+ #else
++ /* This is different from the header but matches mblen() */
+ extern int _Xmblen __ARGS((char *, size_t));
+ #endif
+*** ../vim-6.2.171/src/osdef.sh Thu Jul 24 22:09:03 2003
+--- src/osdef.sh Mon Jan 5 10:05:41 2004
+***************
+*** 41,46 ****
+--- 41,50 ----
+ # include <sys/types.h>
+ # include <sys/statfs.h> /* only for memfile.c */
+ #endif
++
++ #ifdef HAVE_X11
++ # include <X11/Intrinsic.h>
++ #endif
+ EOF
+
+ # Mac uses precompiled headers, but we need real headers here.
+*** ../vim-6.2.171/src/version.c Tue Jan 6 16:20:37 2004
+--- src/version.c Tue Jan 6 16:24:51 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 172,
+ /**/
+
+--
+You are not really successful until someone claims he sat
+beside you in school.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.173 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.173 (extra)
+Problem: Win32: Ruby interface doesn't work with Ruby 1.8.0 for other
+ compilers than MSVC.
+Solution: Fix the BC5, Cygwin and Mingw makefiles. (Dan Sharp)
+Files: src/Make_bc5.mak, src/Make_cyg.mak, src/Make_ming.mak
+
+
+*** ../vim-6.2.172/src/Make_bc5.mak Sun Oct 12 16:42:14 2003
+--- src/Make_bc5.mak Sun Jan 4 12:41:29 2004
+***************
+*** 45,50 ****
+--- 45,52 ----
+ # TCL_VER define to version of TCL being used (83)
+ # DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (no)
+ # RUBY define to path to Ruby dir to get Ruby support (not defined)
++ # NOTE: You may have to remove the defines for uid_t and gid_t
++ # from the Ruby config.h header file.
+ # RUBY_VER define to version of Ruby being used (16)
+ # NOTE: compilation on WinNT/2K/XP requires
+ # at least version 1.6.5 of Ruby. Earlier versions
+***************
+*** 320,334 ****
+ !ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.6
+ !endif
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i586-mswin32
+ !endif
+ INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_RUBY
+ INCLUDE = $(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM);$(INCLUDE)
+- RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+
+ !if "$(DYNAMIC_RUBY)" == "yes"
+ INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
+ RUBY_LIB_FLAG = /nodefaultlib:
+ !endif
+ !endif
+--- 322,350 ----
+ !ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.6
+ !endif
++
++ !if "$(RUBY_VER)" == "16"
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i586-mswin32
+ !endif
++ !ifndef RUBY_INSTALL_NAME
++ RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
++ !endif
++ !else
++ !ifndef RUBY_PLATFORM
++ RUBY_PLATFORM = i386-mswin32
++ !endif
++ !ifndef RUBY_INSTALL_NAME
++ RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
++ !endif
++ !endif
++
+ INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_RUBY
+ INCLUDE = $(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM);$(INCLUDE)
+
+ !if "$(DYNAMIC_RUBY)" == "yes"
+ INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
++ INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_RUBY_VER=$(RUBY_VER)
+ RUBY_LIB_FLAG = /nodefaultlib:
+ !endif
+ !endif
+*** ../vim-6.2.172/src/Make_cyg.mak Sun Oct 12 16:42:14 2003
+--- src/Make_cyg.mak Sun Jan 4 12:37:06 2004
+***************
+*** 1,11 ****
+ #
+ # Makefile for VIM on Win32, using Cygnus gcc
+ #
+ # This compiles Vim as a Windows application. If you want Vim to run as a
+ # Cygwin application use the Makefile (just like on Unix).
+ #
+- # Last updated by Dan Sharp. Last Change: 2003 Sep 12
+- #
+ # GUI no or yes: set to yes if you want the GUI version (yes)
+ # PERL define to path to Perl dir to get Perl support (not defined)
+ # PERL_VER define to version of Perl being used (56)
+--- 1,10 ----
+ #
+ # Makefile for VIM on Win32, using Cygnus gcc
++ # Last updated by Dan Sharp. Last Change: 2004 Jan 03
+ #
+ # This compiles Vim as a Windows application. If you want Vim to run as a
+ # Cygwin application use the Makefile (just like on Unix).
+ #
+ # GUI no or yes: set to yes if you want the GUI version (yes)
+ # PERL define to path to Perl dir to get Perl support (not defined)
+ # PERL_VER define to version of Perl being used (56)
+***************
+*** 152,176 ****
+ # DYNAMIC_RUBY=no does not (process exits).
+ ##############################
+ ifdef RUBY
+ ifndef RUBY_VER_LONG
+ RUBY_VER_LONG=1.6
+ endif
+- DEFINES += -DFEAT_RUBY
+- INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i586-mswin32
+- EXTRA_OBJS += $(OUTDIR)/if_ruby.o
+
+ ifndef DYNAMIC_RUBY
+ DYNAMIC_RUBY = yes
+ endif
+
+! ifndef RUBY_VER
+! RUBY_VER=16
+ endif
+
+ ifeq (yes, $(DYNAMIC_RUBY))
+! DEFINES += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"mswin32-ruby$(RUBY_VER).dll\"
+ else
+! EXTRA_LIBS += $(RUBY)/lib/mswin32-ruby$(RUBY_VER).lib
+ endif
+ endif
+
+--- 151,194 ----
+ # DYNAMIC_RUBY=no does not (process exits).
+ ##############################
+ ifdef RUBY
++
++ ifndef RUBY_VER
++ RUBY_VER=16
++ endif
++
+ ifndef RUBY_VER_LONG
+ RUBY_VER_LONG=1.6
+ endif
+
+ ifndef DYNAMIC_RUBY
+ DYNAMIC_RUBY = yes
+ endif
+
+! ifeq ($(RUBY_VER), 16)
+! ifndef RUBY_PLATFORM
+! RUBY_PLATFORM = i586-mswin32
+! endif
+! ifndef RUBY_INSTALL_NAME
+! RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+! endif
+! else
+! ifndef RUBY_PLATFORM
+! RUBY_PLATFORM = i386-mswin32
+! endif
+! ifndef RUBY_INSTALL_NAME
+! RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+! endif
+ endif
+
++ DEFINES += -DFEAT_RUBY
++ INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++ EXTRA_OBJS += $(OUTDIR)/if_ruby.o
++
+ ifeq (yes, $(DYNAMIC_RUBY))
+! DEFINES += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
+! DEFINES += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
+ else
+! EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME).lib
+ endif
+ endif
+
+***************
+*** 446,452 ****
+--- 464,472 ----
+ endif
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
++ ifeq (16, $(RUBY_VER))
+ $(CC) -c $(CFLAGS) -U_WIN32 if_ruby.c -o $(OUTDIR)/if_ruby.o
++ endif
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_DEP)
+ $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+*** ../vim-6.2.172/src/Make_ming.mak Sun Oct 12 16:42:14 2003
+--- src/Make_ming.mak Sun Jan 4 12:37:06 2004
+***************
+*** 177,186 ****
+--- 177,198 ----
+ ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.6
+ endif
++
++ ifeq ($(RUBY_VER), 16)
+ ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i586-mswin32
+ endif
++ ifndef RUBY_INSTALL_NAME
+ RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
++ endif
++ else
++ ifndef RUBY_PLATFORM
++ RUBY_PLATFORM = i386-mswin32
++ endif
++ ifndef RUBY_INSTALL_NAME
++ RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
++ endif
++ endif
+
+ RUBYINC =-I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ ifeq (no, $(DYNAMIC_RUBY))
+***************
+*** 244,249 ****
+--- 256,262 ----
+ CFLAGS += -DFEAT_RUBY $(RUBYINC)
+ ifeq (yes, $(DYNAMIC_RUBY))
+ CFLAGS += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
++ CFLAGS += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
+ endif
+ endif
+
+***************
+*** 507,513 ****
+--- 520,528 ----
+ $(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))
+ $(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
++ endif
+
+ if_perl.c: if_perl.xs typemap
+ perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
+*** ../vim-6.2.172/src/version.c Tue Jan 6 16:27:05 2004
+--- src/version.c Tue Jan 6 16:32:04 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 173,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+150. You find yourself counting emoticons to get to sleep.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.174
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.174
+Problem: After the ":intro" message only a mouse click in the last line
+ gets past the hit-return prompt.
+Solution: Accept a click at or below the hit-return prompt.
+Files: src/gui.c, src/message.c
+
+
+*** ../vim-6.2.173/src/gui.c Sun Oct 26 20:19:23 2003
+--- src/gui.c Tue Jan 6 18:00:47 2004
+***************
+*** 2751,2758 ****
+ case INSERT+LANGMAP: checkfor = MOUSE_INSERT; break;
+ case ASKMORE:
+ case HITRETURN: /* At the more- and hit-enter prompt pass the
+! mouse event for a click on the last line. */
+! if (Y_2_ROW(y) == Rows - 1)
+ checkfor = MOUSE_NORMAL;
+ else
+ checkfor = MOUSE_RETURN;
+--- 2751,2759 ----
+ case INSERT+LANGMAP: checkfor = MOUSE_INSERT; break;
+ case ASKMORE:
+ case HITRETURN: /* At the more- and hit-enter prompt pass the
+! mouse event for a click on or below the
+! message line. */
+! if (Y_2_ROW(y) >= msg_row)
+ checkfor = MOUSE_NORMAL;
+ else
+ checkfor = MOUSE_RETURN;
+***************
+*** 4117,4123 ****
+ # ifdef FEAT_MOUSESHAPE
+ if (State == HITRETURN || State == ASKMORE)
+ {
+! if (Y_2_ROW(y) == Rows - 1)
+ update_mouseshape(SHAPE_IDX_MOREL);
+ else
+ update_mouseshape(SHAPE_IDX_MORE);
+--- 4118,4124 ----
+ # ifdef FEAT_MOUSESHAPE
+ if (State == HITRETURN || State == ASKMORE)
+ {
+! if (Y_2_ROW(y) >= msg_row)
+ update_mouseshape(SHAPE_IDX_MOREL);
+ else
+ update_mouseshape(SHAPE_IDX_MORE);
+*** ../vim-6.2.173/src/message.c Sat Sep 27 19:36:47 2003
+--- src/message.c Tue Jan 6 18:02:31 2004
+***************
+*** 848,854 ****
+ || c == K_RIGHTDRAG || c == K_RIGHTRELEASE
+ || c == K_MOUSEDOWN || c == K_MOUSEUP
+ || (!mouse_has(MOUSE_RETURN)
+! && mouse_row != Rows - 1
+ && (c == K_LEFTMOUSE
+ || c == K_MIDDLEMOUSE
+ || c == K_RIGHTMOUSE
+--- 848,854 ----
+ || c == K_RIGHTDRAG || c == K_RIGHTRELEASE
+ || c == K_MOUSEDOWN || c == K_MOUSEUP
+ || (!mouse_has(MOUSE_RETURN)
+! && mouse_row < msg_row
+ && (c == K_LEFTMOUSE
+ || c == K_MIDDLEMOUSE
+ || c == K_RIGHTMOUSE
+*** ../vim-6.2.173/src/version.c Tue Jan 6 16:33:35 2004
+--- src/version.c Thu Jan 8 20:51:27 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 174,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+197. Your desk collapses under the weight of your computer peripherals.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.175
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.175
+Problem: Changing 'backupext' in a *WritePre autocommand doesn't work.
+ (William Natter)
+Solution: Move the use of p_bex to after executing the *WritePre
+ autocommands. Also avoids reading allocated memory after freeing.
+Files: src/fileio.c
+
+
+*** ../vim-6.2.174/src/fileio.c Wed Nov 12 20:41:45 2003
+--- src/fileio.c Thu Jan 8 20:22:41 2004
+***************
+*** 2502,2517 ****
+ fname = sfname;
+ #endif
+
+- /* make sure we have a valid backup extension to use */
+- if (*p_bex == NUL)
+- #ifdef RISCOS
+- backup_ext = (char_u *)"/bak";
+- #else
+- backup_ext = (char_u *)".bak";
+- #endif
+- else
+- backup_ext = p_bex;
+-
+ if (buf->b_ffname != NULL && fnamecmp(ffname, buf->b_ffname) == 0)
+ overwriting = TRUE;
+ else
+--- 2502,2507 ----
+***************
+*** 2896,2901 ****
+--- 2886,2903 ----
+ }
+ #endif
+
++ /* make sure we have a valid backup extension to use */
++ if (*p_bex == NUL)
++ {
++ #ifdef RISCOS
++ backup_ext = (char_u *)"/bak";
++ #else
++ backup_ext = (char_u *)".bak";
++ #endif
++ }
++ else
++ backup_ext = p_bex;
++
+ if (backup_copy
+ && (fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) >= 0)
+ {
+*** ../vim-6.2.174/src/version.c Thu Jan 8 20:54:45 2004
+--- src/version.c Fri Jan 9 14:32:03 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 175,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+203. You're an active member of more than 20 newsgroups.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.176
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.176
+Problem: Accented characters in translated help files are not handled
+ correctly. (Fabien Vayssiere)
+Solution: Include "192-255" in 'iskeyword' for the help window.
+Files: src/ex_cmds.c
+
+
+*** ../vim-6.2.175/src/ex_cmds.c Mon Dec 29 21:21:52 2003
+--- src/ex_cmds.c Fri Jan 9 14:30:45 2004
+***************
+*** 4634,4647 ****
+ /*
+ * Always set these options after jumping to a help tag, because the user
+ * may have an autocommand that gets in the way.
+! * accept all chars for keywords, except ' ', '*', '"', '|'.
+ * Only set it when needed, buf_init_chartab() is some work.
+ */
+ p =
+ #ifdef EBCDIC
+ (char_u *)"65-255,^*,^|,^\"";
+ #else
+! (char_u *)"!-~,^*,^|,^\"";
+ #endif
+ if (STRCMP(curbuf->b_p_isk, p) != 0)
+ {
+--- 4634,4648 ----
+ /*
+ * Always set these options after jumping to a help tag, because the user
+ * may have an autocommand that gets in the way.
+! * Accept all ASCII chars for keywords, except ' ', '*', '"', '|', and
+! * latin1 word characters (for translated help files).
+ * Only set it when needed, buf_init_chartab() is some work.
+ */
+ p =
+ #ifdef EBCDIC
+ (char_u *)"65-255,^*,^|,^\"";
+ #else
+! (char_u *)"!-~,^*,^|,^\",192-255";
+ #endif
+ if (STRCMP(curbuf->b_p_isk, p) != 0)
+ {
+*** ../vim-6.2.175/src/version.c Fri Jan 9 14:33:14 2004
+--- src/version.c Fri Jan 9 15:00:11 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 176,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+207. You're given one phone call in prison and you ask them for a laptop.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.177 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.177 (extra)
+Problem: VisVim: Opening a file with a space in the name doesn't work. (Rob
+ Retter) Arbitrary commands are being executed. (Neil Bird)
+Solution: Put a backslash in front of every space in the file name.
+ (Gerard Blais) Terminate the CTRL-\ CTRL-N command with a NUL.
+Files: src/VisVim/Commands.cpp, src/VisVim/VisVim.rc
+
+
+*** ../vim-6.2.176/src/VisVim/Commands.cpp Sat Sep 7 17:03:06 2002
+--- src/VisVim/Commands.cpp Fri Jan 9 11:04:58 2004
+***************
+*** 512,529 ****
+ goto OleError;
+
+ OLECHAR Buf[MAX_OLE_STR];
+ char VimCmd[MAX_OLE_STR];
+! char* VimCmdStart;
+! char* s;
+
+ // Prepend CTRL-\ CTRL-N to exit insert mode
+ VimCmd[0] = 0x1c;
+ VimCmd[1] = 0x0e;
+! VimCmdStart = VimCmd + 2;
+
+ #ifdef SINGLE_WINDOW
+! // Update the current file in Vim if it has been modified
+! sprintf (VimCmdStart, ":up\n");
+ #endif
+ if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+ goto OleError;
+--- 512,530 ----
+ goto OleError;
+
+ OLECHAR Buf[MAX_OLE_STR];
++ char FileNameTmp[MAX_OLE_STR];
+ char VimCmd[MAX_OLE_STR];
+! char *s, *p;
+
+ // Prepend CTRL-\ CTRL-N to exit insert mode
+ VimCmd[0] = 0x1c;
+ VimCmd[1] = 0x0e;
+! VimCmd[2] = 0;
+
+ #ifdef SINGLE_WINDOW
+! // Update the current file in Vim if it has been modified.
+! // Disabled, because it could write the file when you don't want to.
+! sprintf (VimCmd + 2, ":up\n");
+ #endif
+ if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+ goto OleError;
+***************
+*** 532,543 ****
+ if (g_ChangeDir != CD_NONE)
+ VimChangeDir (VimOle, DispatchId, FileName);
+
+! // Make Vim open the file
+! sprintf (VimCmd, ":drop %S\n", (char*) FileName);
+! // Convert all \ to /
+! for (s = VimCmd; *s; ++s)
+! if (*s == '\\')
+! *s = '/';
+ if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+ goto OleError;
+
+--- 533,556 ----
+ if (g_ChangeDir != CD_NONE)
+ VimChangeDir (VimOle, DispatchId, FileName);
+
+! // Make Vim open the file.
+! // In the filename convert all \ to /, put a \ before a space.
+! sprintf(VimCmd, ":drop ");
+! sprintf(FileNameTmp, "%S", (char *)FileName);
+! s = VimCmd + 6;
+! for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
+! ++p)
+! if (*p == '\\')
+! *s++ = '/';
+! else
+! {
+! if (*p == ' ')
+! *s++ = '\\';
+! *s++ = *p;
+! }
+! *s++ = '\n';
+! *s = '\0';
+!
+ if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+ goto OleError;
+
+***************
+*** 638,656 ****
+ CString StrFileName = FileName;
+ char Drive[_MAX_DRIVE];
+ char Dir[_MAX_DIR];
+ _splitpath (StrFileName, Drive, Dir, NULL, NULL);
+! // Convert to unix path name format
+! for (char* s = Dir; *s; ++s)
+ if (*s == '\\')
+! *s = '/';
+
+ // Construct the cd command; append /.. if cd to parent
+ // directory and not in root directory
+ OLECHAR Buf[MAX_OLE_STR];
+ char VimCmd[MAX_OLE_STR];
+
+! sprintf (VimCmd, ":cd %s%s%s\n", Drive, Dir,
+! g_ChangeDir == CD_SOURCE_PARENT && Dir[1] ? ".." : "");
+ VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf));
+ }
+
+--- 651,682 ----
+ CString StrFileName = FileName;
+ char Drive[_MAX_DRIVE];
+ char Dir[_MAX_DIR];
++ char DirUnix[_MAX_DIR * 2];
++ char *s, *t;
++
+ _splitpath (StrFileName, Drive, Dir, NULL, NULL);
+!
+! // Convert to Unix path name format, escape spaces.
+! t = DirUnix;
+! for (s = Dir; *s; ++s)
+ if (*s == '\\')
+! *t++ = '/';
+! else
+! {
+! if (*s == ' ')
+! *t++ = '\\';
+! *t++ = *s;
+! }
+! *t = '\0';
+!
+
+ // Construct the cd command; append /.. if cd to parent
+ // directory and not in root directory
+ OLECHAR Buf[MAX_OLE_STR];
+ char VimCmd[MAX_OLE_STR];
+
+! sprintf (VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
+! g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : "");
+ VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf));
+ }
+
+*** ../vim-6.2.176/src/VisVim/VisVim.rc Sat Mar 9 19:45:58 2002
+--- src/VisVim/VisVim.rc Thu Jan 8 21:40:29 2004
+***************
+*** 116,122 ****
+
+ IDD_ADDINMAIN DIALOG DISCARDABLE 0, 0, 178, 124
+ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+! CAPTION "Vim Add-In 1.3a"
+ FONT 8, "MS Sans Serif"
+ BEGIN
+ CONTROL "&Open file in DevStudio editor simultaneously",
+--- 116,122 ----
+
+ IDD_ADDINMAIN DIALOG DISCARDABLE 0, 0, 178, 124
+ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+! CAPTION "Vim Add-In 1.4"
+ FONT 8, "MS Sans Serif"
+ BEGIN
+ CONTROL "&Open file in DevStudio editor simultaneously",
+*** ../vim-6.2.176/src/version.c Fri Jan 9 15:02:40 2004
+--- src/version.c Fri Jan 9 15:06:32 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 177,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+208. Your goals for the future are obtaining an T1 connection and
+ a 130 gig hard drive.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.178
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.178
+Problem: People who don't know how to exit Vim try pressing CTRL-C.
+Solution: Give a message how to exit Vim when CTRL-C is pressed and it
+ doesn't cancel anything.
+Files: src/normal.c
+
+
+*** ../vim-6.2.177/src/normal.c Mon Dec 29 20:32:43 2003
+--- src/normal.c Thu Jan 8 21:19:53 2004
+***************
+*** 7760,7767 ****
+--- 7760,7785 ----
+ nv_esc(cap)
+ cmdarg_T *cap;
+ {
++ int no_reason;
++
++ no_reason = (cap->oap->op_type == OP_NOP
++ && cap->opcount == 0
++ && cap->count0 == 0
++ && cap->oap->regname == 0
++ && !p_im);
++
+ if (cap->arg) /* TRUE for CTRL-C */
+ {
++ if (restart_edit == 0
++ #ifdef FEAT_CMDWIN
++ && cmdwin_type == 0
++ #endif
++ #ifdef FEAT_VISUAL
++ && !VIsual_active
++ #endif
++ && no_reason)
++ msg(_("Type :quit<Enter> to exit Vim"));
++
+ restart_edit = 0;
+ #ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+***************
+*** 7783,7794 ****
+ }
+ else
+ #endif
+! if (cap->oap->op_type == OP_NOP
+! && cap->opcount == 0
+! && cap->count0 == 0
+! && cap->oap->regname == 0
+! && !p_im)
+! vim_beep();
+ clearop(cap->oap);
+
+ /* A CTRL-C is often used at the start of a menu. When 'insertmode' is
+--- 7801,7808 ----
+ }
+ else
+ #endif
+! if (no_reason)
+! vim_beep();
+ clearop(cap->oap);
+
+ /* A CTRL-C is often used at the start of a menu. When 'insertmode' is
+*** ../vim-6.2.177/src/version.c Fri Jan 9 15:10:05 2004
+--- src/version.c Fri Jan 9 19:16:24 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 178,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+214. Your MCI "Circle of Friends" are all Hayes-compatible.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.179 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.179 (extra)
+Problem: The en_gb messages file isn't found on case sensitive systems.
+Solution: Rename en_gb to en_GB. (Mike Williams)
+Files: src/po/en_gb.po, src/po/en_GB.po, src/po/Make_ming.mak,
+ src/po/Make_mvc.mak, src/po/Makefile, src/po/README_mvc.txt
+
+
+*** ../vim-6.2.178/src/po/en_gb.po Tue Feb 25 21:06:40 2003
+--- src/po/en_gb.po Sun Jan 11 12:14:46 2004
+***************
+*** 1,48 ****
+- # UK English Translation for Vim vim:set foldmethod=marker:
+- #
+- # Do ":help uganda" in Vim to read copying and usage conditions.
+- # Do ":help credits" in Vim to see a list of people who contributed.
+- #
+- # FIRST AUTHOR Mike Williams <mrw@eandem.co.uk>, 2003.
+- #
+- msgid ""
+- msgstr ""
+- "Project-Id-Version: Vim(UK English)\n"
+- "POT-Creation-Date: 2003-02-23 10:27+0000\n"
+- "PO-Revision-Date: 2003-02-25 11:05+0000\n"
+- "Last-Translator: Mike Williams <mrw@eandem.co.uk>\n"
+- "Language-Team: Mike Williams <mrw@eandem.co.uk>\n"
+- "MIME-Version: 1.0\n"
+- "Content-Type: text/plain; charset=ISO_8859-1\n"
+- "Content-Transfer-Encoding: 7bit\n"
+-
+- #, c-format
+- msgid "E185: Cannot find color scheme %s"
+- msgstr "E185: Cannot find colour scheme %s"
+-
+- #, c-format
+- msgid "E254: Cannot allocate color %s"
+- msgstr "E254: Cannot allocate colour %s"
+-
+- msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+- msgstr ""
+- "Vim E458: Cannot allocate colourmap entry, some colours may be incorrect"
+-
+- msgid "-background <color>\tUse <color> for the background (also: -bg)"
+- msgstr "-background <colour>\tUse <colour> for the background (also: -bg)"
+-
+- msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
+- msgstr "-foreground <colour>\tUse <colour> for normal text (also: -fg)"
+-
+- msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
+- msgstr "Messages maintainer: Mike Williams <mrw@eandem.co.uk>"
+-
+- msgid "E419: FG color unknown"
+- msgstr "E419: FG colour unknown"
+-
+- msgid "E420: BG color unknown"
+- msgstr "E420: BG colour unknown"
+-
+- #, c-format
+- msgid "E421: Color name or number not recognized: %s"
+- msgstr "E421: Colour name or number not recognised: %s"
+--- 0 ----
+*** ../vim-6.2.178/src/po/en_GB.po Sun Jan 11 12:14:37 2004
+--- src/po/en_GB.po Tue Feb 25 21:06:40 2003
+***************
+*** 0 ****
+--- 1,48 ----
++ # UK English Translation for Vim vim:set foldmethod=marker:
++ #
++ # Do ":help uganda" in Vim to read copying and usage conditions.
++ # Do ":help credits" in Vim to see a list of people who contributed.
++ #
++ # FIRST AUTHOR Mike Williams <mrw@eandem.co.uk>, 2003.
++ #
++ msgid ""
++ msgstr ""
++ "Project-Id-Version: Vim(UK English)\n"
++ "POT-Creation-Date: 2003-02-23 10:27+0000\n"
++ "PO-Revision-Date: 2003-02-25 11:05+0000\n"
++ "Last-Translator: Mike Williams <mrw@eandem.co.uk>\n"
++ "Language-Team: Mike Williams <mrw@eandem.co.uk>\n"
++ "MIME-Version: 1.0\n"
++ "Content-Type: text/plain; charset=ISO_8859-1\n"
++ "Content-Transfer-Encoding: 7bit\n"
++
++ #, c-format
++ msgid "E185: Cannot find color scheme %s"
++ msgstr "E185: Cannot find colour scheme %s"
++
++ #, c-format
++ msgid "E254: Cannot allocate color %s"
++ msgstr "E254: Cannot allocate colour %s"
++
++ msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
++ msgstr ""
++ "Vim E458: Cannot allocate colourmap entry, some colours may be incorrect"
++
++ msgid "-background <color>\tUse <color> for the background (also: -bg)"
++ msgstr "-background <colour>\tUse <colour> for the background (also: -bg)"
++
++ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
++ msgstr "-foreground <colour>\tUse <colour> for normal text (also: -fg)"
++
++ msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
++ msgstr "Messages maintainer: Mike Williams <mrw@eandem.co.uk>"
++
++ msgid "E419: FG color unknown"
++ msgstr "E419: FG colour unknown"
++
++ msgid "E420: BG color unknown"
++ msgstr "E420: BG colour unknown"
++
++ #, c-format
++ msgid "E421: Color name or number not recognized: %s"
++ msgstr "E421: Colour name or number not recognised: %s"
+*** ../vim-6.2.178/src/po/Make_ming.mak Sat May 31 22:29:00 2003
+--- src/po/Make_ming.mak Sun Jan 11 12:30:55 2004
+***************
+*** 10,18 ****
+ # language (xx) and add it to the next three lines.
+ #
+
+! LANGUAGES = af cs de en_gb es fr it ja ko no pl sk uk zh_TW \
+ zh_TW.UTF-8 zh_CN zh_CN.UTF-8
+! MOFILES = af.mo cs.mo de.mo en_gb.mo es.mo fr.mo it.mo ja.mo \
+ ko.mo no.mo pl.mo sk.mo uk.mo zh_TW.mo zh_TW.UTF-8.mo \
+ zh_CN.mo zh_CN.UTF-8.mo
+
+--- 10,18 ----
+ # language (xx) and add it to the next three lines.
+ #
+
+! LANGUAGES = af cs de en_GB es fr it ja ko no pl sk uk zh_TW \
+ zh_TW.UTF-8 zh_CN zh_CN.UTF-8
+! MOFILES = af.mo cs.mo de.mo en_GB.mo es.mo fr.mo it.mo ja.mo \
+ ko.mo no.mo pl.mo sk.mo uk.mo zh_TW.mo zh_TW.UTF-8.mo \
+ zh_CN.mo zh_CN.UTF-8.mo
+
+*** ../vim-6.2.178/src/po/Make_mvc.mak Sat May 31 22:29:05 2003
+--- src/po/Make_mvc.mak Sun Jan 11 12:31:26 2004
+***************
+*** 6,14 ****
+ # Please read README_mvc.txt before using this file.
+ #
+
+! LANGUAGES = af cs de en_gb es fr it ja ko no pl sk uk zh_TW \
+ zh_TW.UTF-8 zh_CN zh_CN.UTF-8
+! MOFILES = af.mo cs.mo de.mo en_gb.mo es.mo fr.mo it.mo ja.mo \
+ ko.mo no.mo pl.mo sk.mo uk.mo zh_TW.mo zh_TW.UTF-8.mo \
+ zh_CN.mo zh_CN.UTF-8.mo
+
+--- 6,14 ----
+ # Please read README_mvc.txt before using this file.
+ #
+
+! LANGUAGES = af cs de en_GB es fr it ja ko no pl sk uk zh_TW \
+ zh_TW.UTF-8 zh_CN zh_CN.UTF-8
+! MOFILES = af.mo cs.mo de.mo en_GB.mo es.mo fr.mo it.mo ja.mo \
+ ko.mo no.mo pl.mo sk.mo uk.mo zh_TW.mo zh_TW.UTF-8.mo \
+ zh_CN.mo zh_CN.UTF-8.mo
+
+*** ../vim-6.2.178/src/po/Makefile Sat May 31 22:28:56 2003
+--- src/po/Makefile Sun Jan 11 12:30:21 2004
+***************
+*** 4,12 ****
+ # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are
+ # not installed on Unix
+
+! LANGUAGES = af cs de en_gb es fr it ja ko no pl sk uk zh_TW \
+ zh_TW.UTF-8 zh_CN zh_CN.UTF-8
+! MOFILES = af.mo cs.mo de.mo en_gb.mo es.mo fr.mo it.mo ja.mo \
+ ko.mo no.mo pl.mo sk.mo uk.mo zh_TW.mo zh_TW.UTF-8.mo \
+ zh_CN.mo zh_CN.UTF-8.mo
+
+--- 4,12 ----
+ # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are
+ # not installed on Unix
+
+! LANGUAGES = af cs de en_GB es fr it ja ko no pl sk uk zh_TW \
+ zh_TW.UTF-8 zh_CN zh_CN.UTF-8
+! MOFILES = af.mo cs.mo de.mo en_GB.mo es.mo fr.mo it.mo ja.mo \
+ ko.mo no.mo pl.mo sk.mo uk.mo zh_TW.mo zh_TW.UTF-8.mo \
+ zh_CN.mo zh_CN.UTF-8.mo
+
+*** ../vim-6.2.178/src/po/README_mvc.txt Fri Apr 25 22:30:02 2003
+--- src/po/README_mvc.txt Sun Jan 11 12:32:18 2004
+***************
+*** 55,61 ****
+ first thing to do is merge them into the existing translations. This is done
+ with the following command:
+
+! make xx.po
+
+ where xx is the langauge code for the language needing translations. The
+ original .po file is copied to xx.po.orig.
+--- 55,61 ----
+ first thing to do is merge them into the existing translations. This is done
+ with the following command:
+
+! nmake -f Make_mvc.mak xx.po
+
+ where xx is the langauge code for the language needing translations. The
+ original .po file is copied to xx.po.orig.
+*** ../vim-6.2.178/src/version.c Fri Jan 9 19:18:01 2004
+--- src/version.c Sun Jan 11 12:13:53 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 179,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+226. You sit down at the computer right after dinner and your spouse
+ says "See you in the morning."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.180
+Problem: Compiling with GTK2 on Win32 doesn't work.
+Solution: Include gdkwin32.h instead of gdkx.h. (Srinath Avadhanula)
+Files: src/gui_gtk.c, src/gui_gtk_f.c, src/gui_gtk_x11.c, src/mbyte.c
+
+
+*** ../vim-6.2.179/src/gui_gtk.c Mon Jun 2 22:22:50 2003
+--- src/gui_gtk.c Tue Dec 23 11:41:29 2003
+***************
+*** 109,115 ****
+ #ifdef FEAT_GUI_GTK
+ # include <gdk/gdkkeysyms.h>
+ # include <gdk/gdk.h>
+! # include <gdk/gdkx.h>
+
+ # include <gtk/gtk.h>
+ #else
+--- 109,119 ----
+ #ifdef FEAT_GUI_GTK
+ # include <gdk/gdkkeysyms.h>
+ # include <gdk/gdk.h>
+! # ifdef WIN3264
+! # include <gdk/gdkwin32.h>
+! # else
+! # include <gdk/gdkx.h>
+! # endif
+
+ # include <gtk/gtk.h>
+ #else
+*** ../vim-6.2.179/src/gui_gtk_f.c Fri Apr 25 19:49:56 2003
+--- src/gui_gtk_f.c Tue Dec 23 11:41:48 2003
+***************
+*** 32,38 ****
+ runtime! */
+ #include "gui_gtk_f.h"
+ #include <gtk/gtksignal.h>
+! #include <gdk/gdkx.h>
+
+ typedef struct _GtkFormChild GtkFormChild;
+
+--- 32,42 ----
+ runtime! */
+ #include "gui_gtk_f.h"
+ #include <gtk/gtksignal.h>
+! #ifdef WIN3264
+! # include <gdk/gdkwin32.h>
+! #else
+! # include <gdk/gdkx.h>
+! #endif
+
+ typedef struct _GtkFormChild GtkFormChild;
+
+*** ../vim-6.2.179/src/gui_gtk_x11.c Sat Sep 27 19:36:47 2003
+--- src/gui_gtk_x11.c Tue Dec 23 11:41:57 2003
+***************
+*** 68,74 ****
+ #else
+ # include <gdk/gdkkeysyms.h>
+ # include <gdk/gdk.h>
+! # include <gdk/gdkx.h>
+
+ # include <gtk/gtk.h>
+ # include "gui_gtk_f.h"
+--- 68,78 ----
+ #else
+ # include <gdk/gdkkeysyms.h>
+ # include <gdk/gdk.h>
+! # ifdef WIN3264
+! # include <gdk/gdkwin32.h>
+! # else
+! # include <gdk/gdkx.h>
+! # endif
+
+ # include <gtk/gtk.h>
+ # include "gui_gtk_f.h"
+*** ../vim-6.2.179/src/mbyte.c Mon Dec 29 21:17:44 2003
+--- src/mbyte.c Tue Dec 23 16:03:30 2003
+***************
+*** 102,108 ****
+
+ #if defined(FEAT_XIM) && defined(HAVE_GTK2)
+ # include <gdk/gdkkeysyms.h>
+! # include <gdk/gdkx.h>
+ #endif
+
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+--- 102,112 ----
+
+ #if defined(FEAT_XIM) && defined(HAVE_GTK2)
+ # include <gdk/gdkkeysyms.h>
+! # ifdef WIN3264
+! # include <gdk/gdkwin32.h>
+! # else
+! # include <gdk/gdkx.h>
+! # endif
+ #endif
+
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+***************
+*** 3620,3626 ****
+ #endif
+
+ #ifdef FEAT_GUI_GTK
+! # include <gdk/gdkx.h>
+ #else
+ # ifdef PROTO
+ /* Define a few things to be able to generate prototypes while not configured
+--- 3624,3634 ----
+ #endif
+
+ #ifdef FEAT_GUI_GTK
+! # ifdef WIN3264
+! # include <gdk/gdkwin32.h>
+! # else
+! # include <gdk/gdkx.h>
+! # endif
+ #else
+ # ifdef PROTO
+ /* Define a few things to be able to generate prototypes while not configured
+*** ../vim-6.2.179/src/version.c Sun Jan 11 12:32:47 2004
+--- src/version.c Sun Jan 11 12:43:44 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 180,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+227. You sleep next to your monitor. Or on top of it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.181
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.181 (after 6.2.171)
+Problem: The "-o" argument of "find" has lower priority than the implied
+ "and" with "-print".
+Solution: Add parenthesis around the "-o" expression. (Gordon Prieur)
+Files: src/Makefile
+
+
+*** ../vim-6.2.180/src/Makefile Tue Jan 6 16:20:37 2004
+--- src/Makefile Mon Jan 12 19:55:19 2004
+***************
+*** 1724,1730 ****
+ chmod $(FILEMOD) `find $(DEST_MACRO) -type f -print`
+ chmod $(SCRIPTMOD) $(DEST_MACRO)/less.sh
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_MACRO) -name CVS -o -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+--- 1730,1736 ----
+ chmod $(FILEMOD) `find $(DEST_MACRO) -type f -print`
+ chmod $(SCRIPTMOD) $(DEST_MACRO)/less.sh
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_MACRO) \( -name CVS -o -name AAPDIR \) -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+***************
+*** 1751,1757 ****
+ # install the runtime tools
+ $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS)
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_TOOLS) -name CVS -o -name AAPDIR -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+--- 1757,1763 ----
+ # install the runtime tools
+ $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS)
+ # When using CVS some CVS directories might have been copied.
+! cvs=`find $(DEST_TOOLS) \( -name CVS -o -name AAPDIR \) -print`; \
+ if test -n "$$cvs"; then \
+ rm -rf $$cvs; \
+ fi
+*** ../vim-6.2.180/src/version.c Sun Jan 11 12:45:02 2004
+--- src/version.c Mon Jan 12 19:52:07 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 181,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+251. You've never seen your closest friends who usually live WAY too far away.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.182
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.182 (after 6.2.094)
+Problem: Compilation with tiny features fails because of missing
+ get_past_head() function.
+Solution: Adjust the #ifdef for get_past_head().
+Files: src/misc1.c
+
+
+*** ../vim-6.2.181/src/misc1.c Fri Oct 17 12:18:17 2003
+--- src/misc1.c Sun Jan 18 16:07:34 2004
+***************
+*** 3874,3881 ****
+
+ #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+ || defined(FEAT_SESSION) || defined(MSWIN) \
+! || (defined(FEAT_GUI_GTK) && defined(FEAT_WINDOWS)) \
+! || defined(FEAT_SUN_WORKSHOP) || defined(PROTO)
+ /*
+ * Get a pointer to one character past the head of a path name.
+ * Unix: after "/"; DOS: after "c:\"; Amiga: after "disk:/"; Mac: no head.
+--- 3875,3884 ----
+
+ #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+ || defined(FEAT_SESSION) || defined(MSWIN) \
+! || (defined(FEAT_GUI_GTK) \
+! && (defined(FEAT_WINDOWS) || defined(FEAT_DND))) \
+! || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \
+! || defined(PROTO)
+ /*
+ * Get a pointer to one character past the head of a path name.
+ * Unix: after "/"; DOS: after "c:\"; Amiga: after "disk:/"; Mac: no head.
+*** ../vim-6.2.181/src/version.c Mon Jan 12 19:56:01 2004
+--- src/version.c Sun Jan 18 20:14:02 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 182,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.183
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.183 (after 6.2.178)
+Problem: Warning for char/unsigned char mixup.
+Solution: Use MSG() instead of msg(). (Tony Leneis)
+Files: src/normal.c
+
+
+*** ../vim-6.2.182/src/normal.c Fri Jan 9 19:18:01 2004
+--- src/normal.c Sun Jan 18 18:49:04 2004
+***************
+*** 7778,7784 ****
+ && !VIsual_active
+ #endif
+ && no_reason)
+! msg(_("Type :quit<Enter> to exit Vim"));
+
+ restart_edit = 0;
+ #ifdef FEAT_CMDWIN
+--- 7790,7796 ----
+ && !VIsual_active
+ #endif
+ && no_reason)
+! MSG(_("Type :quit<Enter> to exit Vim"));
+
+ restart_edit = 0;
+ #ifdef FEAT_CMDWIN
+*** ../vim-6.2.182/src/version.c Sun Jan 18 20:15:02 2004
+--- src/version.c Sun Jan 18 20:16:41 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 183,
+ /**/
+
+--
+CUSTOMER: You're not fooling anyone y'know. Look, isn't there something
+ you can do?
+DEAD PERSON: I feel happy... I feel happy.
+ [whop]
+CUSTOMER: Ah, thanks very much.
+MORTICIAN: Not at all. See you on Thursday.
+CUSTOMER: Right.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.184
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.184
+Problem: With 'formatoptions' set to "1aw" inserting text may cause the
+ paragraph to be ended. (Alan Schmitt)
+Solution: Temporarily add an extra space to make the paragraph continue
+ after moving the word after the cursor to the next line.
+ Also format when pressing Esc.
+Files: src/edit.c, src/normal.c, src/proto/edit.pro
+
+
+*** ../vim-6.2.183/src/edit.c Sun Nov 9 20:26:53 2003
+--- src/edit.c Sun Jan 18 20:23:49 2004
+***************
+*** 121,132 ****
+ static void ins_ctrl_v __ARGS((void));
+ static void undisplay_dollar __ARGS((void));
+ static void insert_special __ARGS((int, int, int));
+ #ifdef FEAT_COMMENTS
+ static int cmplen __ARGS((char_u *s1, char_u *s2));
+ #endif
+ static void redo_literal __ARGS((int c));
+ static void start_arrow __ARGS((pos_T *end_insert_pos));
+! static void stop_insert __ARGS((pos_T *end_insert_pos));
+ static int echeck_abbr __ARGS((int));
+ static void replace_push_off __ARGS((int c));
+ static int replace_pop __ARGS((void));
+--- 121,133 ----
+ static void ins_ctrl_v __ARGS((void));
+ static void undisplay_dollar __ARGS((void));
+ static void insert_special __ARGS((int, int, int));
++ static void check_auto_format __ARGS((int));
+ #ifdef FEAT_COMMENTS
+ static int cmplen __ARGS((char_u *s1, char_u *s2));
+ #endif
+ static void redo_literal __ARGS((int c));
+ static void start_arrow __ARGS((pos_T *end_insert_pos));
+! static void stop_insert __ARGS((pos_T *end_insert_pos, int esc));
+ static int echeck_abbr __ARGS((int));
+ static void replace_push_off __ARGS((int c));
+ static int replace_pop __ARGS((void));
+***************
+*** 195,204 ****
+ static int old_indent = 0; /* for ^^D command in insert mode */
+
+ #ifdef FEAT_RIGHTLEFT
+! int revins_on; /* reverse insert mode on */
+! int revins_chars; /* how much to skip after edit */
+! int revins_legal; /* was the last char 'legal'? */
+! int revins_scol; /* start column of revins session */
+ #endif
+
+ #if defined(FEAT_MBYTE) && defined(MACOS_CLASSIC)
+--- 196,205 ----
+ static int old_indent = 0; /* for ^^D command in insert mode */
+
+ #ifdef FEAT_RIGHTLEFT
+! int revins_on; /* reverse insert mode on */
+! int revins_chars; /* how much to skip after edit */
+! int revins_legal; /* was the last char 'legal'? */
+! int revins_scol; /* start column of revins session */
+ #endif
+
+ #if defined(FEAT_MBYTE) && defined(MACOS_CLASSIC)
+***************
+*** 209,214 ****
+--- 210,218 ----
+ char. Set when edit() is called.
+ after that arrow_used is used. */
+
++ static int did_add_space = FALSE; /* auto_format() added an extra space
++ under the cursor */
++
+ /*
+ * edit(): Start inserting text.
+ *
+***************
+*** 866,872 ****
+ /* insert the contents of a register */
+ case Ctrl_R:
+ ins_reg();
+! auto_format();
+ inserted_space = FALSE;
+ break;
+
+--- 870,876 ----
+ /* insert the contents of a register */
+ case Ctrl_R:
+ ins_reg();
+! auto_format(FALSE);
+ inserted_space = FALSE;
+ break;
+
+***************
+*** 961,967 ****
+ }
+ # endif
+ ins_shift(c, lastc);
+! auto_format();
+ inserted_space = FALSE;
+ break;
+
+--- 965,971 ----
+ }
+ # endif
+ ins_shift(c, lastc);
+! auto_format(FALSE);
+ inserted_space = FALSE;
+ break;
+
+***************
+*** 969,994 ****
+ case K_DEL:
+ case K_KDEL:
+ ins_del();
+! auto_format();
+ break;
+
+ /* delete character before the cursor */
+ case K_BS:
+ case Ctrl_H:
+ did_backspace = ins_bs(c, BACKSPACE_CHAR, &inserted_space);
+! auto_format();
+ break;
+
+ /* delete word before the cursor */
+ case Ctrl_W:
+ did_backspace = ins_bs(c, BACKSPACE_WORD, &inserted_space);
+! auto_format();
+ break;
+
+ /* delete all inserted text in current line */
+ case Ctrl_U:
+ did_backspace = ins_bs(c, BACKSPACE_LINE, &inserted_space);
+! auto_format();
+ inserted_space = FALSE;
+ break;
+
+--- 973,998 ----
+ case K_DEL:
+ case K_KDEL:
+ ins_del();
+! auto_format(FALSE);
+ break;
+
+ /* delete character before the cursor */
+ case K_BS:
+ case Ctrl_H:
+ did_backspace = ins_bs(c, BACKSPACE_CHAR, &inserted_space);
+! auto_format(FALSE);
+ break;
+
+ /* delete word before the cursor */
+ case Ctrl_W:
+ did_backspace = ins_bs(c, BACKSPACE_WORD, &inserted_space);
+! auto_format(FALSE);
+ break;
+
+ /* delete all inserted text in current line */
+ case Ctrl_U:
+ did_backspace = ins_bs(c, BACKSPACE_LINE, &inserted_space);
+! auto_format(FALSE);
+ inserted_space = FALSE;
+ break;
+
+***************
+*** 1111,1117 ****
+ inserted_space = FALSE;
+ if (ins_tab())
+ goto normalchar; /* insert TAB as a normal char */
+! auto_format();
+ break;
+
+ case K_KENTER:
+--- 1115,1121 ----
+ inserted_space = FALSE;
+ if (ins_tab())
+ goto normalchar; /* insert TAB as a normal char */
+! auto_format(FALSE);
+ break;
+
+ case K_KENTER:
+***************
+*** 1138,1144 ****
+ #endif
+ if (ins_eol(c) && !p_im)
+ goto doESCkey; /* out of memory */
+! auto_format();
+ inserted_space = FALSE;
+ break;
+
+--- 1142,1148 ----
+ #endif
+ if (ins_eol(c) && !p_im)
+ goto doESCkey; /* out of memory */
+! auto_format(FALSE);
+ inserted_space = FALSE;
+ break;
+
+***************
+*** 1252,1258 ****
+ revins_legal++;
+ #endif
+ c = Ctrl_V; /* pretend CTRL-V is last character */
+! auto_format();
+ }
+ }
+ break;
+--- 1256,1262 ----
+ revins_legal++;
+ #endif
+ c = Ctrl_V; /* pretend CTRL-V is last character */
+! auto_format(FALSE);
+ }
+ }
+ break;
+***************
+*** 1299,1305 ****
+ #endif
+ }
+
+! auto_format();
+
+ #ifdef FEAT_FOLDING
+ /* When inserting a character the cursor line must never be in a
+--- 1303,1309 ----
+ #endif
+ }
+
+! auto_format(FALSE);
+
+ #ifdef FEAT_FOLDING
+ /* When inserting a character the cursor line must never be in a
+***************
+*** 2489,2495 ****
+ curwin->w_cursor.col++;
+ }
+
+! auto_format();
+
+ ins_compl_free();
+ started_completion = FALSE;
+--- 2504,2510 ----
+ curwin->w_cursor.col++;
+ }
+
+! auto_format(FALSE);
+
+ ins_compl_free();
+ started_completion = FALSE;
+***************
+*** 4346,4357 ****
+ * saved here.
+ */
+ void
+! auto_format()
+ {
+ pos_T pos;
+ colnr_T len;
+ char_u *old, *pold;
+ char_u *new, *pnew;
+
+ if (!has_format_option(FO_AUTO))
+ return;
+--- 4361,4374 ----
+ * saved here.
+ */
+ void
+! auto_format(trailblank)
+! int trailblank; /* when TRUE also format with trailing blank */
+ {
+ pos_T pos;
+ colnr_T len;
+ char_u *old, *pold;
+ char_u *new, *pnew;
++ int wasatend;
+
+ if (!has_format_option(FO_AUTO))
+ return;
+***************
+*** 4359,4370 ****
+ pos = curwin->w_cursor;
+ old = ml_get_curline();
+
+ /* Don't format in Insert mode when the cursor is on a trailing blank, the
+ * user might insert normal text next. Also skip formatting when "1" is
+ * in 'formatoptions' and there is a single character before the cursor.
+ * Otherwise the line would be broken and when typing another non-white
+ * next they are not joined back together. */
+! if (*old != NUL && pos.col == STRLEN(old))
+ {
+ dec_cursor();
+ if (!WHITECHAR(gchar_cursor())
+--- 4376,4391 ----
+ pos = curwin->w_cursor;
+ old = ml_get_curline();
+
++ /* may remove added space */
++ check_auto_format(FALSE);
++
+ /* Don't format in Insert mode when the cursor is on a trailing blank, the
+ * user might insert normal text next. Also skip formatting when "1" is
+ * in 'formatoptions' and there is a single character before the cursor.
+ * Otherwise the line would be broken and when typing another non-white
+ * next they are not joined back together. */
+! wasatend = (pos.col == STRLEN(old));
+! if (*old != NUL && !trailblank && wasatend)
+ {
+ dec_cursor();
+ if (!WHITECHAR(gchar_cursor())
+***************
+*** 4426,4432 ****
+ len = (colnr_T)STRLEN(pnew);
+ if ((pold - old) + len >= pos.col)
+ {
+! curwin->w_cursor.col = pos.col - (pold - old) + (pnew - new);
+ break;
+ }
+ /* Cursor wraps to next line */
+--- 4447,4477 ----
+ len = (colnr_T)STRLEN(pnew);
+ if ((pold - old) + len >= pos.col)
+ {
+! if (pos.col <= (colnr_T)(pold - old))
+! curwin->w_cursor.col = (pnew - new);
+! else
+! curwin->w_cursor.col = pos.col - (pold - old) + (pnew - new);
+!
+! /* Insert mode: If the cursor is now after the end of the line
+! * while it previously wasn't, the line was broken. Because of
+! * the rule above we need to add a space when 'w' is in
+! * 'formatoptions' to keep a paragraph formatted. */
+! if (!wasatend && has_format_option(FO_WHITE_PAR))
+! {
+! len = STRLEN(new);
+! if (curwin->w_cursor.col == len)
+! {
+! pnew = vim_strnsave(new, len + 2);
+! pnew[len] = ' ';
+! pnew[len + 1] = NUL;
+! ml_replace(curwin->w_cursor.lnum, pnew, FALSE);
+! /* remove the space later */
+! did_add_space = TRUE;
+! }
+! else
+! /* may remove added space */
+! check_auto_format(FALSE);
+! }
+ break;
+ }
+ /* Cursor wraps to next line */
+***************
+*** 4437,4442 ****
+--- 4482,4521 ----
+ vim_free(old);
+ }
+
++ /*
++ * When an extra space was added to continue a paragraph for auto-formatting,
++ * delete it now. The space must be under the cursor, just after the insert
++ * position.
++ */
++ static void
++ check_auto_format(end_insert)
++ int end_insert; /* TRUE when ending Insert mode */
++ {
++ int c = ' ';
++
++ if (did_add_space)
++ {
++ if (!WHITECHAR(gchar_cursor()))
++ /* Somehow the space was removed already. */
++ did_add_space = FALSE;
++ else
++ {
++ if (!end_insert)
++ {
++ inc_cursor();
++ c = gchar_cursor();
++ dec_cursor();
++ }
++ if (c != NUL)
++ {
++ /* The space is no longer at the end of the line, delete it. */
++ del_char(FALSE);
++ did_add_space = FALSE;
++ }
++ }
++ }
++ }
++
+ #ifdef FEAT_COMMENTS
+ /*
+ * Return the number of bytes for which strings "s1" and "s2" are equal.
+***************
+*** 4536,4543 ****
+ if (!arrow_used) /* something has been inserted */
+ {
+ AppendToRedobuff(ESC_STR);
+ arrow_used = TRUE; /* this means we stopped the current insert */
+- stop_insert(end_insert_pos);
+ }
+ }
+
+--- 4615,4622 ----
+ if (!arrow_used) /* something has been inserted */
+ {
+ AppendToRedobuff(ESC_STR);
++ stop_insert(end_insert_pos, FALSE);
+ arrow_used = TRUE; /* this means we stopped the current insert */
+ }
+ }
+
+***************
+*** 4587,4594 ****
+ * do a few things to stop inserting
+ */
+ static void
+! stop_insert(end_insert_pos)
+ pos_T *end_insert_pos; /* where insert ended */
+ {
+ int cc;
+
+--- 4666,4674 ----
+ * do a few things to stop inserting
+ */
+ static void
+! stop_insert(end_insert_pos, esc)
+ pos_T *end_insert_pos; /* where insert ended */
++ int esc; /* called by ins_esc() */
+ {
+ int cc;
+
+***************
+*** 4602,4635 ****
+ last_insert = get_inserted();
+ last_insert_skip = new_insert_skip;
+
+! /*
+! * If we just did an auto-indent, remove the white space from the end of
+! * the line, and put the cursor back.
+! */
+! if (did_ai && !arrow_used)
+ {
+! if (gchar_cursor() == NUL && curwin->w_cursor.col > 0)
+! --curwin->w_cursor.col;
+! while (cc = gchar_cursor(), vim_iswhite(cc))
+! (void)del_char(TRUE);
+! if (cc != NUL)
+! ++curwin->w_cursor.col; /* put cursor back on the NUL */
+
+ #ifdef FEAT_VISUAL
+! /* <C-S-Right> may have started Visual mode, adjust the position for
+! * deleted characters. */
+! if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum)
+! {
+! cc = STRLEN(ml_get_curline());
+! if (VIsual.col > (colnr_T)cc)
+ {
+! VIsual.col = cc;
+ # ifdef FEAT_VIRTUALEDIT
+! VIsual.coladd = 0;
+ # endif
+ }
+- }
+ #endif
+ }
+ did_ai = FALSE;
+ #ifdef FEAT_SMARTINDENT
+--- 4682,4726 ----
+ last_insert = get_inserted();
+ last_insert_skip = new_insert_skip;
+
+! if (!arrow_used)
+ {
+! /* Auto-format now. It may seem strange to do this when stopping an
+! * insertion (or moving the cursor), but it's required when appending
+! * a line and having it end in a space. But only do it when something
+! * was actually inserted, otherwise undo won't work. */
+! if (!ins_need_undo)
+! auto_format(TRUE);
+!
+! /* If a space was inserted for auto-formatting, remove it now. */
+! check_auto_format(TRUE);
+!
+! /* If we just did an auto-indent, remove the white space from the end
+! * of the line, and put the cursor back. */
+! if (did_ai && esc)
+! {
+! if (gchar_cursor() == NUL && curwin->w_cursor.col > 0)
+! --curwin->w_cursor.col;
+! while (cc = gchar_cursor(), vim_iswhite(cc))
+! (void)del_char(TRUE);
+! if (cc != NUL)
+! ++curwin->w_cursor.col; /* put cursor back on the NUL */
+
+ #ifdef FEAT_VISUAL
+! /* <C-S-Right> may have started Visual mode, adjust the position for
+! * deleted characters. */
+! if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum)
+ {
+! cc = STRLEN(ml_get_curline());
+! if (VIsual.col > (colnr_T)cc)
+! {
+! VIsual.col = cc;
+ # ifdef FEAT_VIRTUALEDIT
+! VIsual.coladd = 0;
+ # endif
++ }
+ }
+ #endif
++ }
+ }
+ did_ai = FALSE;
+ #ifdef FEAT_SMARTINDENT
+***************
+*** 5988,5994 ****
+ disabled_redraw = TRUE;
+ return FALSE; /* repeat the insert */
+ }
+! stop_insert(&curwin->w_cursor);
+ undisplay_dollar();
+ }
+
+--- 6079,6085 ----
+ disabled_redraw = TRUE;
+ return FALSE; /* repeat the insert */
+ }
+! stop_insert(&curwin->w_cursor, TRUE);
+ undisplay_dollar();
+ }
+
+*** ../vim-6.2.183/src/normal.c Sun Jan 18 20:17:41 2004
+--- src/normal.c Sun Jan 18 18:49:04 2004
+***************
+*** 1753,1759 ****
+ oap->is_VIsual ? (int)cap->count1 :
+ #endif
+ 1);
+! auto_format();
+ break;
+
+ case OP_JOIN_NS:
+--- 1753,1759 ----
+ oap->is_VIsual ? (int)cap->count1 :
+ #endif
+ 1);
+! auto_format(FALSE);
+ break;
+
+ case OP_JOIN_NS:
+***************
+*** 1766,1772 ****
+ else
+ {
+ do_do_join(oap->line_count, oap->op_type == OP_JOIN);
+! auto_format();
+ }
+ break;
+
+--- 1766,1772 ----
+ else
+ {
+ do_do_join(oap->line_count, oap->op_type == OP_JOIN);
+! auto_format(FALSE);
+ }
+ break;
+
+***************
+*** 1781,1787 ****
+ (void)op_delete(oap);
+ if (oap->motion_type == MLINE && has_format_option(FO_AUTO))
+ u_save_cursor(); /* cursor line wasn't saved yet */
+! auto_format();
+ }
+ break;
+
+--- 1781,1787 ----
+ (void)op_delete(oap);
+ if (oap->motion_type == MLINE && has_format_option(FO_AUTO))
+ u_save_cursor(); /* cursor line wasn't saved yet */
+! auto_format(FALSE);
+ }
+ break;
+
+***************
+*** 1896,1902 ****
+
+ /* TODO: when inserting in several lines, should format all
+ * the lines. */
+! auto_format();
+
+ if (restart_edit == 0)
+ restart_edit = restart_edit_save;
+--- 1896,1902 ----
+
+ /* TODO: when inserting in several lines, should format all
+ * the lines. */
+! auto_format(FALSE);
+
+ if (restart_edit == 0)
+ restart_edit = restart_edit_save;
+***************
+*** 8193,8199 ****
+ if (reg2 != NULL)
+ put_register(regname, reg2);
+ #endif
+! auto_format();
+ }
+ }
+
+--- 8205,8211 ----
+ if (reg2 != NULL)
+ put_register(regname, reg2);
+ #endif
+! auto_format(FALSE);
+ }
+ }
+
+*** ../vim-6.2.183/src/proto/edit.pro Sun Jun 1 12:26:07 2003
+--- src/proto/edit.pro Thu Jan 15 20:57:54 2004
+***************
+*** 13,19 ****
+ void ins_compl_check_keys __ARGS((void));
+ int get_literal __ARGS((void));
+ void insertchar __ARGS((int c, int flags, int second_indent));
+! void auto_format __ARGS((void));
+ int comp_textwidth __ARGS((int ff));
+ int stop_arrow __ARGS((void));
+ void set_last_insert __ARGS((int c));
+--- 13,19 ----
+ void ins_compl_check_keys __ARGS((void));
+ int get_literal __ARGS((void));
+ void insertchar __ARGS((int c, int flags, int second_indent));
+! void auto_format __ARGS((int trailblank));
+ int comp_textwidth __ARGS((int ff));
+ int stop_arrow __ARGS((void));
+ void set_last_insert __ARGS((int c));
+*** ../vim-6.2.183/src/version.c Sun Jan 18 20:17:41 2004
+--- src/version.c Sun Jan 18 20:19:10 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 184,
+ /**/
+
+--
+ [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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.185
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.185
+Problem: Restoring a session with zero-height windows does not work
+ properly. (Charles Campbell)
+Solution: Accept a zero argument to ":resize" as intended. Add a window
+ number argument to ":resize" to be able to set the size of other
+ windows, because the current window cannot be zero-height.
+ Fix the explorer plugin to avoid changing the window sizes. Add
+ the winrestcmd() function for this.
+Files: runtime/doc/eval.txt, runtime/plugin/explorer.vim, src/eval.c,
+ src/ex_cmds.h, src/ex_docmd.c, src/proto/window.pro, src/window.c
+
+
+*** ../vim-6.2.184/runtime/doc/eval.txt Sun Aug 10 22:31:29 2003
+--- runtime/doc/eval.txt Sun Jan 18 20:38:41 2004
+***************
+*** 1,4 ****
+! *eval.txt* For Vim version 6.2. Last change: 2003 Aug 07
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt* For Vim version 6.2. Last change: 2004 Jan 18
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+***************
+*** 912,917 ****
+--- 919,925 ----
+ winheight( {nr}) Number height of window {nr}
+ winline() Number window line of the cursor
+ winnr() Number number of current window
++ winrestcmd() String returns command to restore window sizes
+ winwidth( {nr}) Number width of window {nr}
+
+ append({lnum}, {string}) *append()*
+***************
+*** 2594,2600 ****
+
+ *winnr()*
+ winnr() The result is a Number, which is the number of the current
+! window. The top window has number 1.
+
+ winwidth({nr}) *winwidth()*
+ The result is a Number, which is the width of window {nr}.
+--- 2618,2634 ----
+
+ *winnr()*
+ winnr() The result is a Number, which is the number of the current
+! window. The top window has number 1. The number can be used
+! with |CTRL-W_w| and ":wincmd w" |:wincmd|.
+!
+! *winrestcmd()*
+! winrestcmd() Returns a sequence of |resize| commands that should restore
+! the current window sizes. Only works properly when no windows
+! are opened or closed and the current window is unchanged.
+! Example: >
+! cmd = winrestcmd()
+! call MessWithWindowSizes()
+! exe cmd
+
+ winwidth({nr}) *winwidth()*
+ The result is a Number, which is the width of window {nr}.
+*** ../vim-6.2.184/runtime/plugin/explorer.vim Fri May 16 19:25:21 2003
+--- runtime/plugin/explorer.vim Fri Jan 16 20:23:31 2004
+***************
+*** 1,14 ****
+ "=============================================================================
+ " File: explorer.vim
+! " Author: M A Aziz Ahmed (aziz@acorn-networks.com)
+! " Last Change: 2003 May 16
+ " Version: 2.5 + changes
+ " Additions by Mark Waggoner (waggoner@aracnet.com) et al.
+ "-----------------------------------------------------------------------------
+! " This file implements a file explorer. Latest version available at:
+! " http://www.freespeech.org/aziz/vim/
+! " Updated version available at:
+! " http://www.aracnet.com/~waggoner
+ "-----------------------------------------------------------------------------
+ " Normally, this file will reside in the plugins directory and be
+ " automatically sourced. If not, you must manually source this file
+--- 1,11 ----
+ "=============================================================================
+ " File: explorer.vim
+! " Author: M A Aziz Ahmed (aziz@acorn-networks.com - doesn't work)
+! " Last Change: 2004 Jan 16
+ " Version: 2.5 + changes
+ " Additions by Mark Waggoner (waggoner@aracnet.com) et al.
+ "-----------------------------------------------------------------------------
+! " This file implements a file explorer.
+ "-----------------------------------------------------------------------------
+ " Normally, this file will reside in the plugins directory and be
+ " automatically sourced. If not, you must manually source this file
+***************
+*** 1302,1315 ****
+ if winbufnr(2) == -1
+ return
+ endif
+! let t = winnr()
+ while 1
+ wincmd w
+! if winnr() == t
+ break
+ endif
+ call s:EditDir()
+ endwhile
+ endfunction
+
+ "---
+--- 1299,1314 ----
+ if winbufnr(2) == -1
+ return
+ endif
+! let cmd = winrestcmd()
+! let curwin = winnr()
+ while 1
+ wincmd w
+! if winnr() == curwin
+ break
+ endif
+ call s:EditDir()
+ endwhile
++ exe cmd
+ endfunction
+
+ "---
+*** ../vim-6.2.184/src/eval.c Wed Nov 12 20:47:29 2003
+--- src/eval.c Sun Jan 18 16:51:58 2004
+***************
+*** 373,378 ****
+--- 373,379 ----
+ static void f_winheight __ARGS((VAR argvars, VAR retvar));
+ static void f_winline __ARGS((VAR argvars, VAR retvar));
+ static void f_winnr __ARGS((VAR argvars, VAR retvar));
++ static void f_winrestcmd __ARGS((VAR argvars, VAR retvar));
+ static void f_winwidth __ARGS((VAR argvars, VAR retvar));
+ static win_T *find_win_by_nr __ARGS((VAR vp));
+ static pos_T *var2fpos __ARGS((VAR varp, int lnum));
+***************
+*** 2869,2874 ****
+--- 2870,2876 ----
+ {"winheight", 1, 1, f_winheight},
+ {"winline", 0, 0, f_winline},
+ {"winnr", 0, 0, f_winnr},
++ {"winrestcmd", 0, 0, f_winrestcmd},
+ {"winwidth", 1, 1, f_winwidth},
+ };
+
+***************
+*** 7418,7423 ****
+--- 7420,7459 ----
+ ++nr;
+ #endif
+ retvar->var_val.var_number = nr;
++ }
++
++ /*
++ * "winrestcmd()" function
++ */
++ /* ARGSUSED */
++ static void
++ f_winrestcmd(argvars, retvar)
++ VAR argvars;
++ VAR retvar;
++ {
++ #ifdef FEAT_WINDOWS
++ win_T *wp;
++ int winnr = 1;
++ garray_T ga;
++ char_u buf[50];
++
++ ga_init2(&ga, (int)sizeof(char), 70);
++ for (wp = firstwin; wp != NULL; wp = wp->w_next)
++ {
++ sprintf((char *)buf, "%dresize %d|", winnr, wp->w_height);
++ ga_concat(&ga, buf);
++ # ifdef FEAT_VERTSPLIT
++ sprintf((char *)buf, "vert %dresize %d|", winnr, wp->w_width);
++ ga_concat(&ga, buf);
++ # endif
++ ++winnr;
++ }
++
++ retvar->var_val.var_string = ga.ga_data;
++ #else
++ retvar->var_val.var_string = NULL;
++ #endif
++ retvar->var_type = VAR_STRING;
+ }
+
+ /*
+*** ../vim-6.2.184/src/ex_cmds.h Fri May 23 19:13:14 2003
+--- src/ex_cmds.h Fri Jan 16 16:52:25 2004
+***************
+*** 621,627 ****
+ EX(CMD_registers, "registers", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|CMDWIN),
+ EX(CMD_resize, "resize", ex_resize,
+! TRLBAR|WORD1),
+ EX(CMD_retab, "retab", ex_retab,
+ TRLBAR|RANGE|WHOLEFOLD|DFLALL|BANG|WORD1|CMDWIN|MODIFY),
+ EX(CMD_return, "return", ex_return,
+--- 621,627 ----
+ EX(CMD_registers, "registers", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|CMDWIN),
+ EX(CMD_resize, "resize", ex_resize,
+! RANGE|NOTADR|TRLBAR|WORD1),
+ EX(CMD_retab, "retab", ex_retab,
+ TRLBAR|RANGE|WHOLEFOLD|DFLALL|BANG|WORD1|CMDWIN|MODIFY),
+ EX(CMD_return, "return", ex_return,
+*** ../vim-6.2.184/src/ex_docmd.c Mon Dec 29 20:39:18 2003
+--- src/ex_docmd.c Fri Jan 16 17:20:17 2004
+***************
+*** 6143,6148 ****
+--- 6188,6201 ----
+ exarg_T *eap;
+ {
+ int n;
++ win_T *wp = curwin;
++
++ if (eap->addr_count > 0)
++ {
++ n = eap->line2;
++ for (wp = firstwin; wp->w_next != NULL && --n > 0; wp = wp->w_next)
++ ;
++ }
+
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+***************
+*** 6153,6170 ****
+ {
+ if (*eap->arg == '-' || *eap->arg == '+')
+ n += W_WIDTH(curwin);
+! else if (n == 0) /* default is very wide */
+ n = 9999;
+! win_setwidth((int)n);
+ }
+ else
+ #endif
+ {
+ if (*eap->arg == '-' || *eap->arg == '+')
+ n += curwin->w_height;
+! else if (n == 0) /* default is very high */
+ n = 9999;
+! win_setheight((int)n);
+ }
+ }
+ #endif
+--- 6206,6223 ----
+ {
+ if (*eap->arg == '-' || *eap->arg == '+')
+ n += W_WIDTH(curwin);
+! else if (n == 0 && eap->arg[0] == NUL) /* default is very wide */
+ n = 9999;
+! win_setwidth_win((int)n, wp);
+ }
+ else
+ #endif
+ {
+ if (*eap->arg == '-' || *eap->arg == '+')
+ n += curwin->w_height;
+! else if (n == 0 && eap->arg[0] == NUL) /* default is very wide */
+ n = 9999;
+! win_setheight_win((int)n, wp);
+ }
+ }
+ #endif
+***************
+*** 8340,8371 ****
+ */
+ if (put_line(fd, "set winheight=1 winwidth=1") == FAIL)
+ return FAIL;
+ if (nr > 1)
+ {
+ if (restore_size && (ssop_flags & SSOP_WINSIZE))
+ {
+ for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (!ses_do_win(wp))
+ continue;
+
+ /* restore height when not full height */
+ if (wp->w_height + wp->w_status_height < topframe->fr_height
+ && (fprintf(fd,
+! "exe 'resize ' . ((&lines * %ld + %ld) / %ld)",
+! (long)wp->w_height, Rows / 2, Rows) < 0
+ || put_eol(fd) == FAIL))
+ return FAIL;
+
+ /* restore width when not full width */
+ if (wp->w_width < Columns && (fprintf(fd,
+! "exe 'vert resize ' . ((&columns * %ld + %ld) / %ld)",
+! (long)wp->w_width, Columns / 2, Columns) < 0
+ || put_eol(fd) == FAIL))
+ return FAIL;
+- if (put_line(fd, "wincmd w") == FAIL)
+- return FAIL;
+-
+ }
+ }
+ else
+--- 8393,8448 ----
+ */
+ if (put_line(fd, "set winheight=1 winwidth=1") == FAIL)
+ return FAIL;
++
++ /*
++ * Restore the view of the window (options, file, cursor, etc.).
++ */
++ for (wp = firstwin; wp != NULL; wp = wp->w_next)
++ {
++ if (!ses_do_win(wp))
++ continue;
++ if (put_view(fd, wp, TRUE, &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.
++ */
++ if (cnr > 1 && (fprintf(fd, "%dwincmd w", cnr) < 0 || put_eol(fd) == FAIL))
++ return FAIL;
++
++ /*
++ * Restore window sizes. Do this after jumping around in windows, because
++ * the current window has a minimum size while others may not.
++ */
+ if (nr > 1)
+ {
+ if (restore_size && (ssop_flags & SSOP_WINSIZE))
+ {
++ int n = 0;
++
+ for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (!ses_do_win(wp))
+ continue;
++ ++n;
+
+ /* restore height when not full height */
+ if (wp->w_height + wp->w_status_height < topframe->fr_height
+ && (fprintf(fd,
+! "exe '%dresize ' . ((&lines * %ld + %ld) / %ld)",
+! n, (long)wp->w_height, Rows / 2, Rows) < 0
+ || put_eol(fd) == FAIL))
+ return FAIL;
+
+ /* restore width when not full width */
+ if (wp->w_width < Columns && (fprintf(fd,
+! "exe 'vert %dresize ' . ((&columns * %ld + %ld) / %ld)",
+! n, (long)wp->w_width, Columns / 2, Columns) < 0
+ || put_eol(fd) == FAIL))
+ return FAIL;
+ }
+ }
+ else
+***************
+*** 8375,8400 ****
+ return FAIL;
+ }
+ }
+-
+- /*
+- * Restore the view of the window (options, file, cursor, etc.).
+- */
+- for (wp = firstwin; wp != NULL; wp = wp->w_next)
+- {
+- if (!ses_do_win(wp))
+- continue;
+- if (put_view(fd, wp, TRUE, &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.
+- */
+- if (cnr > 1 && (fprintf(fd, "%dwincmd w", cnr) < 0
+- || put_eol(fd) == FAIL))
+- return FAIL;
+
+ /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */
+ if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
+--- 8452,8457 ----
+*** ../vim-6.2.184/src/proto/window.pro Sun Jun 1 12:26:22 2003
+--- src/proto/window.pro Fri Jan 16 17:06:35 2004
+***************
+*** 22,28 ****
+--- 22,30 ----
+ void win_size_save __ARGS((garray_T *gap));
+ void win_size_restore __ARGS((garray_T *gap));
+ void win_setheight __ARGS((int height));
++ void win_setheight_win __ARGS((int height, win_T *win));
+ void win_setwidth __ARGS((int width));
++ void win_setwidth_win __ARGS((int width, win_T *wp));
+ void win_setminheight __ARGS((void));
+ void win_drag_status_line __ARGS((win_T *dragwin, int offset));
+ void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
+*** ../vim-6.2.184/src/window.c Sat May 31 21:08:43 2003
+--- src/window.c Fri Jan 16 17:06:31 2004
+***************
+*** 66,72 ****
+ static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
+
+ #endif /* FEAT_WINDOWS */
+- static void win_setheight_win __ARGS((int height, win_T *win));
+ static win_T *win_alloc __ARGS((win_T *after));
+ static void win_new_height __ARGS((win_T *, int));
+
+--- 66,71 ----
+***************
+*** 2875,2881 ****
+ /* Change directories when the acd option is set on and after
+ * switching windows. */
+ if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+ shorten_fnames(TRUE);
+ #endif
+ }
+--- 2874,2880 ----
+ /* Change directories when the acd option is set on and after
+ * switching windows. */
+ if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+ shorten_fnames(TRUE);
+ #endif
+ }
+***************
+*** 3454,3467 ****
+ win_setheight(height)
+ int height;
+ {
+- /* Always keep current window at least one line high, even when
+- * 'winminheight' is zero. */
+- #ifdef FEAT_WINDOWS
+- if (height < p_wmh)
+- height = p_wmh;
+- #endif
+- if (height == 0)
+- height = 1;
+ win_setheight_win(height, curwin);
+ }
+
+--- 3453,3458 ----
+***************
+*** 3469,3481 ****
+ * Set the window height of window "win" and take care of repositioning other
+ * windows to fit around it.
+ */
+! static void
+ win_setheight_win(height, win)
+ int height;
+ win_T *win;
+ {
+ int row;
+
+ #ifdef FEAT_WINDOWS
+ frame_setheight(win->w_frame, height + win->w_status_height);
+
+--- 3460,3484 ----
+ * Set the window height of window "win" and take care of repositioning other
+ * windows to fit around it.
+ */
+! void
+ win_setheight_win(height, win)
+ int height;
+ win_T *win;
+ {
+ int row;
+
++ if (win == curwin)
++ {
++ /* Always keep current window at least one line high, even when
++ * 'winminheight' is zero. */
++ #ifdef FEAT_WINDOWS
++ if (height < p_wmh)
++ height = p_wmh;
++ #endif
++ if (height == 0)
++ height = 1;
++ }
++
+ #ifdef FEAT_WINDOWS
+ frame_setheight(win->w_frame, height + win->w_status_height);
+
+***************
+*** 3700,3713 ****
+ win_setwidth(width)
+ int width;
+ {
+ /* Always keep current window at least one column wide, even when
+ * 'winminwidth' is zero. */
+! if (width < p_wmw)
+! width = p_wmw;
+! if (width == 0)
+! width = 1;
+
+! frame_setwidth(curwin->w_frame, width + curwin->w_vsep_width);
+
+ /* recompute the window positions */
+ (void)win_comp_pos();
+--- 3703,3727 ----
+ win_setwidth(width)
+ int width;
+ {
++ win_setwidth_win(width, curwin);
++ }
++
++ void
++ win_setwidth_win(width, wp)
++ int width;
++ win_T *wp;
++ {
+ /* Always keep current window at least one column wide, even when
+ * 'winminwidth' is zero. */
+! if (wp == curwin)
+! {
+! if (width < p_wmw)
+! width = p_wmw;
+! if (width == 0)
+! width = 1;
+! }
+
+! frame_setwidth(wp->w_frame, width + wp->w_vsep_width);
+
+ /* recompute the window positions */
+ (void)win_comp_pos();
+*** ../vim-6.2.184/src/version.c Sun Jan 18 20:28:27 2004
+--- src/version.c Sun Jan 18 20:33:05 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 185,
+ /**/
+
+--
+ [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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.186
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.186 (after 6.2.185)
+Problem: Documentation file eval.txt contains examples without indent.
+Solution: Insert the indent. Also fix other mistakes.
+Files: runtime/doc/eval.txt
+
+
+*** ../vim-6.2.185/runtime/doc/eval.txt Sun Jan 18 20:46:13 2004
+--- runtime/doc/eval.txt Sun Jan 18 20:38:41 2004
+***************
+*** 50,55 ****
+--- 50,57 ----
+ String "foo" --> Number 0
+ String "0xf1" --> Number 241
+ String "0100" --> Number 64
++ String "-8" --> Number -8
++ String "+8" --> Number 0
+
+ To force conversion from String to Number, add zero to it: >
+ :echo "0100" + 0
+***************
+*** 135,141 ****
+
+ ".." indicates that the operations in this level can be concatenated.
+ Example: >
+! &nu || &list && &shell == "csh"
+
+ All expressions within one level are parsed from left to right.
+
+--- 137,143 ----
+
+ ".." indicates that the operations in this level can be concatenated.
+ Example: >
+! &nu || &list && &shell == "csh"
+
+ All expressions within one level are parsed from left to right.
+
+***************
+*** 149,167 ****
+ non-zero, the result is the value of the expression between the '?' and ':',
+ otherwise the result is the value of the expression after the ':'.
+ Example: >
+! :echo lnum == 1 ? "top" : lnum
+
+ Since the first expression is an "expr2", it cannot contain another ?:. The
+ other two expressions can, thus allow for recursive use of ?:.
+ Example: >
+! :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
+
+ To keep this readable, using |line-continuation| is suggested: >
+! :echo lnum == 1
+! :\ ? "top"
+! :\ : lnum == 1000
+! :\ ? "last"
+! :\ : lnum
+
+
+ expr2 and expr3 *expr2* *expr3*
+--- 151,169 ----
+ non-zero, the result is the value of the expression between the '?' and ':',
+ otherwise the result is the value of the expression after the ':'.
+ Example: >
+! :echo lnum == 1 ? "top" : lnum
+
+ Since the first expression is an "expr2", it cannot contain another ?:. The
+ other two expressions can, thus allow for recursive use of ?:.
+ Example: >
+! :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
+
+ To keep this readable, using |line-continuation| is suggested: >
+! :echo lnum == 1
+! :\ ? "top"
+! :\ : lnum == 1000
+! :\ ? "last"
+! :\ : lnum
+
+
+ expr2 and expr3 *expr2* *expr3*
+***************
+*** 180,201 ****
+
+ The operators can be concatenated, for example: >
+
+! &nu || &list && &shell == "csh"
+
+ Note that "&&" takes precedence over "||", so this has the meaning of: >
+
+! &nu || (&list && &shell == "csh")
+
+ Once the result is known, the expression "short-circuits", that is, further
+ arguments are not evaluated. This is like what happens in C. For example: >
+
+! let a = 1
+! echo a || b
+
+ This is valid even if there is no variable called "b" because "a" is non-zero,
+ so the result must be non-zero. Similarly below: >
+
+! echo exists("b") && b == "yes"
+
+ This is valid whether "b" has been defined or not. The second clause will
+ only be evaluated if "b" has been defined.
+--- 182,203 ----
+
+ The operators can be concatenated, for example: >
+
+! &nu || &list && &shell == "csh"
+
+ Note that "&&" takes precedence over "||", so this has the meaning of: >
+
+! &nu || (&list && &shell == "csh")
+
+ Once the result is known, the expression "short-circuits", that is, further
+ arguments are not evaluated. This is like what happens in C. For example: >
+
+! let a = 1
+! echo a || b
+
+ This is valid even if there is no variable called "b" because "a" is non-zero,
+ so the result must be non-zero. Similarly below: >
+
+! echo exists("b") && b == "yes"
+
+ This is valid whether "b" has been defined or not. The second clause will
+ only be evaluated if "b" has been defined.
+***************
+*** 299,311 ****
+ -----
+ expr9[expr1] index in String *expr-[]* *E111*
+
+! This results in a String that contains the expr1'th single character from
+! expr9. expr9 is used as a String, expr1 as a Number.
+
+ Note that index zero gives the first character. This is like it works in C.
+ Careful: text column numbers start with one! Example, to get the character
+ under the cursor: >
+! :let c = getline(line("."))[col(".") - 1]
+
+ If the length of the String is less than the index, the result is an empty
+ String.
+--- 301,314 ----
+ -----
+ expr9[expr1] index in String *expr-[]* *E111*
+
+! This results in a String that contains the expr1'th single byte from expr9.
+! expr9 is used as a String, expr1 as a Number. Note that this doesn't work for
+! multi-byte encodings.
+
+ Note that index zero gives the first character. This is like it works in C.
+ Careful: text column numbers start with one! Example, to get the character
+ under the cursor: >
+! :let c = getline(line("."))[col(".") - 1]
+
+ If the length of the String is less than the index, the result is an empty
+ String.
+***************
+*** 380,387 ****
+
+ The result is the contents of the named register, as a single string.
+ Newlines are inserted where required. To get the contents of the unnamed
+! register use @@. The '=' register can not be used here. See |registers| for
+! an explanation of the available registers.
+
+
+ nesting *expr-nesting* *E110*
+--- 383,390 ----
+
+ The result is the contents of the named register, as a single string.
+ Newlines are inserted where required. To get the contents of the unnamed
+! register use @" or @@. The '=' register can not be used here. See
+! |registers| for an explanation of the available registers.
+
+
+ nesting *expr-nesting* *E110*
+***************
+*** 402,409 ****
+ the environment variables known inside the current Vim session. If that
+ fails, a shell will be used to expand the variable. This can be slow, but it
+ does expand all variables that the shell knows about. Example: >
+! :echo $version
+! :echo expand("$version")
+ The first one probably doesn't echo anything, the second echoes the $version
+ variable (if your shell supports it).
+
+--- 405,412 ----
+ the environment variables known inside the current Vim session. If that
+ fails, a shell will be used to expand the variable. This can be slow, but it
+ does expand all variables that the shell knows about. Example: >
+! :echo $version
+! :echo expand("$version")
+ The first one probably doesn't echo anything, the second echoes the $version
+ variable (if your shell supports it).
+
+***************
+*** 492,498 ****
+ - etc.
+
+ script variables can be used to avoid conflicts with global variable names.
+! An example that works: >
+
+ let s:counter = 0
+ function MyCounter()
+--- 495,501 ----
+ - etc.
+
+ script variables can be used to avoid conflicts with global variable names.
+! Take this example:
+
+ let s:counter = 0
+ function MyCounter()
+***************
+*** 501,515 ****
+ endfunction
+ command Tick call MyCounter()
+
+! And an example that does NOT work: >
+
+ let s:counter = 0
+ command Tick let s:counter = s:counter + 1 | echo s:counter
+
+! When the ":Tick" command is executed outside the script, the s:counter
+! variable will not be available. In the previous example, calling the
+! MyCounter() function sets the context for script variables to where the
+! function was defined, then s:counter can be used.
+ The script variables are also available when a function is defined inside a
+ function that is defined in a script. Example: >
+
+--- 504,522 ----
+ endfunction
+ command Tick call MyCounter()
+
+! You can now invoke "Tick" from any script, and the "s:counter" variable in
+! that script will not be changed, only the "s:counter" in the script where
+! "Tick" was defined is used.
+!
+! Another example that does the same: >
+
+ let s:counter = 0
+ command Tick let s:counter = s:counter + 1 | echo s:counter
+
+! When calling a function and invoking a user-defined command, the context for
+! script varialbes is set to the script where the function or command was
+! defined.
+!
+ The script variables are also available when a function is defined inside a
+ function that is defined in a script. Example: >
+
+***************
+*** 619,625 ****
+ :catch /.*/
+ : echo "caught" v:exception
+ :endtry
+! < Output: "caught oops"
+
+ *v:fname_in* *fname_in-variable*
+ v:fname_in The name of the input file. Only valid while evaluating:
+--- 626,632 ----
+ :catch /.*/
+ : echo "caught" v:exception
+ :endtry
+! < Output: "caught oops".
+
+ *v:fname_in* *fname_in-variable*
+ v:fname_in The name of the input file. Only valid while evaluating:
+***************
+*** 806,812 ****
+ escape( {string}, {chars}) String escape {chars} in {string} with '\'
+ eventhandler( ) Number TRUE if inside an event handler
+ executable( {expr}) Number 1 if executable {expr} exists
+! exists( {var}) Number TRUE if {var} exists
+ expand( {expr}) String expand special keywords in {expr}
+ filereadable( {file}) Number TRUE if {file} is a readable file
+ filewritable( {file}) Number TRUE if {file} is a writable file
+--- 813,819 ----
+ escape( {string}, {chars}) String escape {chars} in {string} with '\'
+ eventhandler( ) Number TRUE if inside an event handler
+ executable( {expr}) Number 1 if executable {expr} exists
+! exists( {expr}) Number TRUE if {expr} exists
+ expand( {expr}) String expand special keywords in {expr}
+ filereadable( {file}) Number TRUE if {file} is a readable file
+ filewritable( {file}) Number TRUE if {file} is a writable file
+***************
+*** 982,988 ****
+ ":ls" command.
+ If {expr} is a Number, that buffer number's name is given.
+ Number zero is the alternate buffer for the current window.
+! If {expr} is a String, it is used as a regexp pattern to match
+ with the buffer names. This is always done like 'magic' is
+ set and 'cpoptions' is empty. When there is more than one
+ match an empty string is returned.
+--- 989,995 ----
+ ":ls" command.
+ If {expr} is a Number, that buffer number's name is given.
+ Number zero is the alternate buffer for the current window.
+! If {expr} is a String, it is used as a |file-pattern| to match
+ with the buffer names. This is always done like 'magic' is
+ set and 'cpoptions' is empty. When there is more than one
+ match an empty string is returned.
+***************
+*** 1025,1032 ****
+ window associated with buffer {expr}. For the use of {expr},
+ see |bufname()| above. If buffer {expr} doesn't exist or
+ there is no such window, -1 is returned. Example: >
+ echo "A window containing buffer 1 is " . (bufwinnr(1))
+! <
+ byte2line({byte}) *byte2line()*
+ Return the line number that contains the character at byte
+ count {byte} in the current buffer. This includes the
+--- 1032,1044 ----
+ window associated with buffer {expr}. For the use of {expr},
+ see |bufname()| above. If buffer {expr} doesn't exist or
+ there is no such window, -1 is returned. Example: >
++
+ echo "A window containing buffer 1 is " . (bufwinnr(1))
+!
+! < The number can be used with |CTRL-W_w| and ":wincmd w"
+! |:wincmd|.
+!
+!
+ byte2line({byte}) *byte2line()*
+ Return the line number that contains the character at byte
+ count {byte} in the current buffer. This includes the
+***************
+*** 1061,1066 ****
+--- 1073,1079 ----
+ number of characters in the cursor line plus one)
+ 'x position of mark x (if the mark is not set, 0 is
+ returned)
++ For the screen column position use |virtcol()|.
+ Note that only marks in the current file can be used.
+ Examples: >
+ col(".") column of cursor
+***************
+*** 1092,1098 ****
+ by '\n', e.g. >
+ confirm("Save changes?", "&Yes\n&No\n&Cancel")
+ < The letter after the '&' is the shortcut key for that choice.
+! Thus you can type 'c' to select "Cancel". The shorcut does
+ not need to be the first letter: >
+ confirm("file has been modified", "&Save\nSave &All")
+ < For the console, the first letter of each choice is used as
+--- 1105,1111 ----
+ by '\n', e.g. >
+ confirm("Save changes?", "&Yes\n&No\n&Cancel")
+ < The letter after the '&' is the shortcut key for that choice.
+! Thus you can type 'c' to select "Cancel". The shortcut does
+ not need to be the first letter: >
+ confirm("file has been modified", "&Save\nSave &All")
+ < For the console, the first letter of each choice is used as
+***************
+*** 1155,1161 ****
+ # pid database name prepend path
+ 0 27664 cscope.out /usr/local
+ <
+! Invokation Return Val ~
+ ---------- ---------- >
+ cscope_connection() 1
+ cscope_connection(1, "out") 1
+--- 1168,1174 ----
+ # pid database name prepend path
+ 0 27664 cscope.out /usr/local
+ <
+! Invocation Return Val ~
+ ---------- ---------- >
+ cscope_connection() 1
+ cscope_connection(1, "out") 1
+***************
+*** 1190,1196 ****
+ When editing another file, the counter is reset, thus this
+ really checks if the FileType event has been triggered for the
+ current buffer. This allows an autocommand that starts
+! editing another buffer to set 'filetype' and load a sytnax
+ file.
+
+ escape({string}, {chars}) *escape()*
+--- 1203,1209 ----
+ When editing another file, the counter is reset, thus this
+ really checks if the FileType event has been triggered for the
+ current buffer. This allows an autocommand that starts
+! editing another buffer to set 'filetype' and load a syntax
+ file.
+
+ escape({string}, {chars}) *escape()*
+***************
+*** 1215,1223 ****
+ -1 not implemented on this system
+
+ *exists()*
+! exists({expr}) The result is a Number, which is non-zero if {var} is defined,
+! zero otherwise. The {expr} argument is a string, which
+! contains one of these:
+ &option-name Vim option (only checks if it exists,
+ not if it really works)
+ +option-name Vim option that works.
+--- 1228,1236 ----
+ -1 not implemented on this system
+
+ *exists()*
+! exists({expr}) The result is a Number, which is non-zero if {expr} is
+! defined, zero otherwise. The {expr} argument is a string,
+! which contains one of these:
+ &option-name Vim option (only checks if it exists,
+ not if it really works)
+ +option-name Vim option that works.
+***************
+*** 1230,1238 ****
+ varname internal variable (see
+ |internal-variables|). Does not work
+ for |curly-braces-names|.
+! :cmdname Ex command, both built-in and user
+! commands |:command|
+! returns:
+ 1 for match with start of a command
+ 2 full match with a command
+ 3 matches several user commands
+--- 1243,1251 ----
+ varname internal variable (see
+ |internal-variables|). Does not work
+ for |curly-braces-names|.
+! :cmdname Ex command: built-in command, user
+! command or command modifier |:command|.
+! Returns:
+ 1 for match with start of a command
+ 2 full match with a command
+ 3 matches several user commands
+***************
+*** 1242,1247 ****
+--- 1255,1261 ----
+ literally and compared to the
+ autocommand patterns character by
+ character)
++ For checking for a supported feature use |has()|.
+
+ Examples: >
+ exists("&shortname")
+***************
+*** 1327,1333 ****
+ variables that are only known in a shell. But this can be
+ slow, because a shell must be started. See |expr-env-expand|.
+ The expanded variable is still handled like a list of file
+! names.
+
+ See |glob()| for finding existing files. See |system()| for
+ getting the raw output of an external command.
+--- 1341,1349 ----
+ variables that are only known in a shell. But this can be
+ slow, because a shell must be started. See |expr-env-expand|.
+ The expanded variable is still handled like a list of file
+! names. When an environment variable cannot be expanded, it is
+! left unchanged. Thus ":echo expand('$FOOBAR')" results in
+! "$FOOBAR".
+
+ See |glob()| for finding existing files. See |system()| for
+ getting the raw output of an external command.
+***************
+*** 1374,1380 ****
+ returned. It doesn't matter if the folds are open or closed.
+ When used while updating folds (from 'foldexpr') -1 is
+ returned for lines where folds are still to be updated and the
+! foldlevel is unknown.
+
+ *foldtext()*
+ foldtext() Returns a String, to be displayed for a closed fold. This is
+--- 1390,1397 ----
+ returned. It doesn't matter if the folds are open or closed.
+ When used while updating folds (from 'foldexpr') -1 is
+ returned for lines where folds are still to be updated and the
+! foldlevel is unknown. As a special case the level of the
+! previous line is usually available.
+
+ *foldtext()*
+ foldtext() Returns a String, to be displayed for a closed fold. This is
+***************
+*** 1567,1572 ****
+--- 1584,1590 ----
+ has({feature}) The result is a Number, which is 1 if the feature {feature} is
+ supported, zero otherwise. The {feature} argument is a
+ string. See |feature-list| below.
++ Also see |exists()|.
+
+ hasmapto({what} [, {mode}]) *hasmapto()*
+ The result is a Number, which is 1 if there is a mapping that
+***************
+*** 1833,1839 ****
+ without the ".DLL" suffix. A full path is only required if
+ the DLL is not in the usual places.
+ For Unix: When compiling your own plugins, remember that the
+! object code must be compiled as position-independant ('PIC').
+ {only in Win32 on some Unix versions, when the |+libcall|
+ feature is present}
+ Examples: >
+--- 1851,1857 ----
+ without the ".DLL" suffix. A full path is only required if
+ the DLL is not in the usual places.
+ For Unix: When compiling your own plugins, remember that the
+! object code must be compiled as position-independent ('PIC').
+ {only in Win32 on some Unix versions, when the |+libcall|
+ feature is present}
+ Examples: >
+***************
+*** 2016,2021 ****
+--- 2034,2043 ----
+ nr2char(32) returns " "
+ < The current 'encoding' is used. Example for "utf-8": >
+ nr2char(300) returns I with bow character
++ < Note that a NUL character in the file is specified with
++ nr2char(10), because NULs are represented with newline
++ characters. nr2char(0) is a real NUL and terminates the
++ string, thus isn't very useful.
+
+ prevnonblank({lnum}) *prevnonblank()*
+ Return the line number of the first line at or above {lnum}
+***************
+*** 2400,2406 ****
+ Example: >
+ :s/\d\+/\=submatch(0) + 1/
+ < This finds the first number in the line and adds one to it.
+! Line breaks are included as a newline character.
+
+ substitute({expr}, {pat}, {sub}, {flags}) *substitute()*
+ The result is a String, which is a copy of {expr}, in which
+--- 2422,2428 ----
+ Example: >
+ :s/\d\+/\=submatch(0) + 1/
+ < This finds the first number in the line and adds one to it.
+! A line break is included as a newline character.
+
+ substitute({expr}, {pat}, {sub}, {flags}) *substitute()*
+ The result is a String, which is a copy of {expr}, in which
+***************
+*** 2534,2539 ****
+--- 2556,2562 ----
+ 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()|.
+ 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:
+***************
+*** 2906,2912 ****
+ : echohl None
+ : let idx = 1
+ : while idx <= a:0
+! : exe "echo a:" . idx
+ : let idx = idx + 1
+ : endwhile
+ : return idx
+--- 2929,2935 ----
+ : echohl None
+ : let idx = 1
+ : while idx <= a:0
+! : echo a:{idx} . ' '
+ : let idx = idx + 1
+ : endwhile
+ : return idx
+***************
+*** 2921,2927 ****
+ : if a:n2 == 0
+ : return "fail"
+ : endif
+! : exe "let g:" . a:divname . " = ". a:n1 / a:n2
+ : return "ok"
+ :endfunction
+
+--- 2944,2950 ----
+ : if a:n2 == 0
+ : return "fail"
+ : endif
+! : let g:{a:divname} = a:n1 / a:n2
+ : return "ok"
+ :endfunction
+
+***************
+*** 2986,2992 ****
+
+ *autoload-functions*
+ When using many or large functions, it's possible to automatically define them
+! only when they are used. Example: >
+
+ :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
+
+--- 3009,3016 ----
+
+ *autoload-functions*
+ When using many or large functions, it's possible to automatically define them
+! only when they are used. Use the FuncUndefined autocommand event with a
+! pattern that matches the function(s) to be defined. Example: >
+
+ :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
+
+***************
+*** 3248,3255 ****
+ <
+
+ *:ec* *:echo*
+! :ec[ho] {expr1} .. Echoes each {expr1}, with a space in between and a
+! terminating <EOL>. Also see |:comment|.
+ Use "\n" to start a new line. Use "\r" to move the
+ cursor to the first column.
+ Uses the highlighting set by the |:echohl| command.
+--- 3272,3280 ----
+ <
+
+ *:ec* *:echo*
+! :ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The
+! first {expr1} starts on a new line.
+! Also see |:comment|.
+ Use "\n" to start a new line. Use "\r" to move the
+ cursor to the first column.
+ Uses the highlighting set by the |:echohl| command.
+***************
+*** 3372,3378 ****
+ Exceptions can be caught or can cause cleanup code to be executed. You can
+ use a try conditional to specify catch clauses (that catch exceptions) and/or
+ a finally clause (to be executed for cleanup).
+! A try conditional begins with a |:try| command and ends at the matching
+ |:endtry| command. In between, you can use a |:catch| command to start
+ a catch clause, or a |:finally| command to start a finally clause. There may
+ be none or multiple catch clauses, but there is at most one finally clause,
+--- 3397,3403 ----
+ Exceptions can be caught or can cause cleanup code to be executed. You can
+ use a try conditional to specify catch clauses (that catch exceptions) and/or
+ a finally clause (to be executed for cleanup).
+! A try conditional begins with a |:try| command and ends at the matching
+ |:endtry| command. In between, you can use a |:catch| command to start
+ a catch clause, or a |:finally| command to start a finally clause. There may
+ be none or multiple catch clauses, but there is at most one finally clause,
+***************
+*** 3475,3481 ****
+ For examples see |throw-catch|.
+
+
+! EXAMINIG EXCEPTION HANDLING CODE *except-examine*
+
+ Exception handling code can get tricky. If you are in doubt what happens, set
+ 'verbose' to 13 or use the ":13verbose" command modifier when sourcing your
+--- 3500,3506 ----
+ For examples see |throw-catch|.
+
+
+! EXAMINING EXCEPTION HANDLING CODE *except-examine*
+
+ Exception handling code can get tricky. If you are in doubt what happens, set
+ 'verbose' to 13 or use the ":13verbose" command modifier when sourcing your
+***************
+*** 3698,3706 ****
+ : echo v:exception
+ :endtry
+
+! This code displays >
+
+! Vim(echoerr):Vim:E492: Not an editor command: asdf
+
+
+ CLEANUP CODE *try-finally*
+--- 3723,3731 ----
+ : echo v:exception
+ :endtry
+
+! This code displays
+
+! Vim(echoerr):Vim:E492: Not an editor command: asdf ~
+
+
+ CLEANUP CODE *try-finally*
+***************
+*** 4244,4250 ****
+ failed, if known. See |catch-errors|.
+
+
+! PECULARITIES
+ *except-compat*
+ The exception handling concept requires that the command sequence causing the
+ exception is aborted immediately and control is transferred to finally clauses
+--- 4269,4275 ----
+ failed, if known. See |catch-errors|.
+
+
+! PECULIARITIES
+ *except-compat*
+ The exception handling concept requires that the command sequence causing the
+ exception is aborted immediately and control is transferred to finally clauses
+***************
+*** 4489,4495 ****
+ :else
+ : echo "You will _never_ see this message"
+ :endif
+! <
+ ==============================================================================
+ 11. The sandbox *eval-sandbox* *sandbox* *E48*
+
+--- 4514,4520 ----
+ :else
+ : echo "You will _never_ see this message"
+ :endif
+!
+ ==============================================================================
+ 11. The sandbox *eval-sandbox* *sandbox* *E48*
+
+*** ../vim-6.2.185/src/version.c Sun Jan 18 20:46:13 2004
+--- src/version.c Sun Jan 18 20:47:55 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 186,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.187
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.187
+Problem: Using Insure++ reveals a number of bugs. (Dominuque Pelle)
+Solution: Initialize variables where needed. Free allocated memory to avoid
+ leaks. Fix comparing tags to avoid reading past allocated memory.
+Files: src/buffer.c, src/diff.c, src/fileio.c, src/mark.c, src/misc1.c,
+ src/misc2.c, src/ops.c, src/option.c, src/tag.c, src/ui.c
+
+
+*** ../vim-6.2.186/src/buffer.c Sun Nov 9 20:35:08 2003
+--- src/buffer.c Thu Jan 15 22:10:02 2004
+***************
+*** 4085,4090 ****
+--- 4085,4091 ----
+ #ifdef FEAT_AUTOCMD
+ --autocmd_no_leave;
+ #endif
++ vim_free(opened);
+ }
+
+ # if defined(FEAT_LISTCMDS) || defined(PROTO)
+*** ../vim-6.2.186/src/diff.c Sun Oct 27 19:28:04 2002
+--- src/diff.c Fri Jan 16 11:52:11 2004
+***************
+*** 952,958 ****
+ curwin = wp;
+ curbuf = curwin->w_buffer;
+ set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff",
+! OPT_LOCAL);
+ curwin = old_curwin;
+ curbuf = curwin->w_buffer;
+ wp->w_p_fdc = 2;
+--- 952,958 ----
+ curwin = wp;
+ curbuf = curwin->w_buffer;
+ set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff",
+! OPT_LOCAL|OPT_FREE);
+ curwin = old_curwin;
+ curbuf = curwin->w_buffer;
+ wp->w_p_fdc = 2;
+*** ../vim-6.2.186/src/fileio.c Fri Jan 9 14:33:14 2004
+--- src/fileio.c Thu Jan 15 22:07:40 2004
+***************
+*** 3233,3239 ****
+
+ #if defined(UNIX) && !defined(ARCHIE)
+ /* When using ":w!" and the file was read-only: make it writable */
+! if (forceit && st_old.st_uid == getuid() && perm >= 0 && !(perm & 0200)
+ && vim_strchr(p_cpo, CPO_FWRITE) == NULL)
+ {
+ perm |= 0200;
+--- 3262,3268 ----
+
+ #if defined(UNIX) && !defined(ARCHIE)
+ /* When using ":w!" and the file was read-only: make it writable */
+! if (forceit && perm >= 0 && !(perm & 0200) && st_old.st_uid == getuid()
+ && vim_strchr(p_cpo, CPO_FWRITE) == NULL)
+ {
+ perm |= 0200;
+*** ../vim-6.2.186/src/mark.c Sat Sep 27 19:36:47 2003
+--- src/mark.c Fri Jan 16 11:56:14 2004
+***************
+*** 1140,1151 ****
+ name = buflist_nr2name(fm->fmark.fnum, TRUE, FALSE);
+ else
+ name = fm->fname; /* use name from .viminfo */
+! if (name == NULL || *name == NUL)
+! return;
+!
+! fprintf(fp, "%c%c %ld %ld ", c1, c2, (long)fm->fmark.mark.lnum,
+ (long)fm->fmark.mark.col);
+! viminfo_writestring(fp, name);
+ if (fm->fmark.fnum != 0)
+ vim_free(name);
+ }
+--- 1145,1157 ----
+ name = buflist_nr2name(fm->fmark.fnum, TRUE, FALSE);
+ else
+ name = fm->fname; /* use name from .viminfo */
+! if (name != NULL && *name != NUL)
+! {
+! fprintf(fp, "%c%c %ld %ld ", c1, c2, (long)fm->fmark.mark.lnum,
+ (long)fm->fmark.mark.col);
+! viminfo_writestring(fp, name);
+! }
+!
+ if (fm->fmark.fnum != 0)
+ vim_free(name);
+ }
+*** ../vim-6.2.186/src/misc1.c Sun Jan 18 20:15:02 2004
+--- src/misc1.c Sun Jan 18 16:07:34 2004
+***************
+*** 1368,1373 ****
+--- 1368,1374 ----
+ curwin->w_cursor.coladd = 0;
+ #endif
+ ins_bytes(p_extra); /* will call changed_bytes() */
++ vim_free(p_extra);
+ next_line = NULL;
+ }
+ #endif
+*** ../vim-6.2.186/src/misc2.c Sat Sep 27 19:36:47 2003
+--- src/misc2.c Fri Jan 16 15:19:08 2004
+***************
+*** 2129,2135 ****
+ char_u *dst;
+ int keycode; /* prefer key code, e.g. K_DEL instead of DEL */
+ {
+! int modifiers;
+ int key;
+ int dlen = 0;
+
+--- 2129,2135 ----
+ char_u *dst;
+ int keycode; /* prefer key code, e.g. K_DEL instead of DEL */
+ {
+! int modifiers = 0;
+ int key;
+ int dlen = 0;
+
+***************
+*** 4368,4373 ****
+--- 4368,4376 ----
+ while (vl != NULL)
+ {
+ vp = vl->ffv_next;
++ #ifdef FEAT_PATH_EXTRA
++ vim_free(vl->ffv_wc_path);
++ #endif
+ vim_free(vl);
+ vl = vp;
+ }
+*** ../vim-6.2.186/src/ops.c Sun Oct 12 16:56:43 2003
+--- src/ops.c Thu Jan 15 22:30:37 2004
+***************
+*** 5610,5619 ****
+ if (s == NULL)
+ break;
+ if (extra)
+- {
+ mch_memmove(s, y_ptr->y_array[lnum], (size_t)extra);
+ vim_free(y_ptr->y_array[lnum]);
+- }
+ if (i)
+ mch_memmove(s + extra, str + start, (size_t)i);
+ extra += i;
+--- 5610,5618 ----
+ if (s == NULL)
+ break;
+ if (extra)
+ mch_memmove(s, y_ptr->y_array[lnum], (size_t)extra);
++ if (append)
+ vim_free(y_ptr->y_array[lnum]);
+ if (i)
+ mch_memmove(s + extra, str + start, (size_t)i);
+ extra += i;
+*** ../vim-6.2.186/src/option.c Sun Oct 26 20:19:23 2003
+--- src/option.c Thu Jan 15 22:03:06 2004
+***************
+*** 7008,7013 ****
+--- 7008,7014 ----
+ else
+ {
+ --arg; /* put arg at the '<' */
++ modifiers = 0;
+ key = find_special_key(&arg, &modifiers, TRUE);
+ if (modifiers) /* can't handle modifiers here */
+ key = 0;
+*** ../vim-6.2.186/src/tag.c Mon Dec 29 19:48:35 2003
+--- src/tag.c Sun Jan 18 13:05:42 2004
+***************
+*** 1066,1071 ****
+--- 1066,1076 ----
+ int is_etag; /* current file is emaces style */
+ #endif
+
++ struct match_found
++ {
++ int len; /* nr of chars of match[] to be compared */
++ char_u match[1]; /* actually longer */
++ } *mfp, *mfp2;
+ garray_T ga_match[MT_COUNT];
+ int match_count = 0; /* number of matches found */
+ char_u **matches;
+***************
+*** 1110,1116 ****
+ ebuf = alloc(LSIZE);
+ #endif
+ for (mtt = 0; mtt < MT_COUNT; ++mtt)
+! ga_init2(&ga_match[mtt], (int)sizeof(char_u *), 100);
+
+ /* check for out of memory situation */
+ if (lbuf == NULL || tag_fname == NULL
+--- 1115,1121 ----
+ ebuf = alloc(LSIZE);
+ #endif
+ for (mtt = 0; mtt < MT_COUNT; ++mtt)
+! ga_init2(&ga_match[mtt], (int)sizeof(struct match_found *), 100);
+
+ /* check for out of memory situation */
+ if (lbuf == NULL || tag_fname == NULL
+***************
+*** 1726,1738 ****
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+ match = vim_regexec(®match, tagp.tagname, (colnr_T)0);
+! matchoff = (int)(regmatch.startp[0] - tagp.tagname);
+! if (match && regmatch.rm_ic)
+ {
+! regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(®match, tagp.tagname,
+ (colnr_T)0);
+! regmatch.rm_ic = TRUE;
+ }
+ *tagp.tagname_end = cc;
+ match_re = TRUE;
+--- 1731,1746 ----
+ cc = *tagp.tagname_end;
+ *tagp.tagname_end = NUL;
+ match = vim_regexec(®match, tagp.tagname, (colnr_T)0);
+! if (match)
+ {
+! matchoff = (int)(regmatch.startp[0] - tagp.tagname);
+! if (regmatch.rm_ic)
+! {
+! regmatch.rm_ic = FALSE;
+! match_no_ic = vim_regexec(®match, tagp.tagname,
+ (colnr_T)0);
+! regmatch.rm_ic = TRUE;
+! }
+ }
+ *tagp.tagname_end = cc;
+ match_re = TRUE;
+***************
+*** 1793,1798 ****
+--- 1801,1811 ----
+ mtt += MT_RE_OFF;
+ }
+
++ /*
++ * Add the found match in ga_match[mtt], avoiding duplicates.
++ * Store the info we need later, which depends on the kind of
++ * tags we are dealing with.
++ */
+ if (ga_grow(&ga_match[mtt], 1) == OK)
+ {
+ if (help_only)
+***************
+*** 1803,1846 ****
+ */
+ *tagp.tagname_end = NUL;
+ len = (int)(tagp.tagname_end - tagp.tagname);
+! p = vim_strnsave(tagp.tagname, len + 10);
+! if (p != NULL)
+ sprintf((char *)p + len + 1, "%06d",
+ help_heuristic(tagp.tagname,
+ match_re ? matchoff : 0, !match_no_ic));
+ *tagp.tagname_end = TAB;
+- ++len; /* compare one more char */
+ }
+ else if (name_only)
+ {
+- p = NULL;
+- len = 0;
+ if (get_it_again)
+ {
+ char_u *temp_end = tagp.command;
+
+! if ((*temp_end) == '/')
+! while ( *temp_end && (*temp_end != '\r')
+! && (*temp_end != '\n')
+! && (*temp_end != '$'))
+ temp_end++;
+
+! if ((tagp.command + 2) < temp_end)
+ {
+ len = (int)(temp_end - tagp.command - 2);
+! p = vim_strnsave(tagp.command + 2, len);
+ }
+ get_it_again = FALSE;
+ }
+ else
+ {
+ len = (int)(tagp.tagname_end - tagp.tagname);
+! p = vim_strnsave(tagp.tagname, len);
+! /* if wanted, re-read line to get long form too*/
+ if (State & INSERT)
+ get_it_again = p_sft;
+ }
+- ++len; /* compare one more char */
+ }
+ else
+ {
+--- 1816,1880 ----
+ */
+ *tagp.tagname_end = NUL;
+ len = (int)(tagp.tagname_end - tagp.tagname);
+! mfp = (struct match_found *)
+! alloc(sizeof(struct match_found) + len + 10);
+! if (mfp != NULL)
+! {
+! mfp->len = len + 1; /* also compare the NUL */
+! p = mfp->match;
+! STRCPY(p, tagp.tagname);
+ sprintf((char *)p + len + 1, "%06d",
+ help_heuristic(tagp.tagname,
+ match_re ? matchoff : 0, !match_no_ic));
++ }
+ *tagp.tagname_end = TAB;
+ }
+ else if (name_only)
+ {
+ if (get_it_again)
+ {
+ char_u *temp_end = tagp.command;
+
+! if (*temp_end == '/')
+! while (*temp_end && *temp_end != '\r'
+! && *temp_end != '\n'
+! && *temp_end != '$')
+ temp_end++;
+
+! if (tagp.command + 2 < temp_end)
+ {
+ len = (int)(temp_end - tagp.command - 2);
+! mfp = (struct match_found *)
+! alloc(sizeof(struct match_found) + len);
+! if (mfp != NULL)
+! {
+! mfp->len = len + 1; /* include the NUL */
+! p = mfp->match;
+! STRNCPY(p, tagp.command + 2, len);
+! p[len] = NUL;
+! }
+ }
++ else
++ mfp = NULL;
+ get_it_again = FALSE;
+ }
+ else
+ {
+ len = (int)(tagp.tagname_end - tagp.tagname);
+! mfp = (struct match_found *)
+! alloc(sizeof(struct match_found) + len);
+! if (mfp != NULL)
+! {
+! mfp->len = len + 1; /* include the NUL */
+! p = mfp->match;
+! STRNCPY(p, tagp.tagname, len);
+! p[len] = NUL;
+! }
+!
+! /* if wanted, re-read line to get long form too */
+ if (State & INSERT)
+ get_it_again = p_sft;
+ }
+ }
+ else
+ {
+***************
+*** 1856,1864 ****
+ else
+ ++len;
+ #endif
+! p = alloc(len);
+! if (p != NULL)
+ {
+ p[0] = mtt;
+ STRCPY(p + 1, tag_fname);
+ #ifdef BACKSLASH_IN_FILENAME
+--- 1890,1901 ----
+ else
+ ++len;
+ #endif
+! mfp = (struct match_found *)
+! alloc(sizeof(struct match_found) + len);
+! if (mfp != NULL)
+ {
++ mfp->len = len;
++ p = mfp->match;
+ p[0] = mtt;
+ STRCPY(p + 1, tag_fname);
+ #ifdef BACKSLASH_IN_FILENAME
+***************
+*** 1880,1886 ****
+ }
+ }
+
+! if (p != NULL)
+ {
+ /*
+ * Don't add identical matches.
+--- 1917,1923 ----
+ }
+ }
+
+! if (mfp != NULL)
+ {
+ /*
+ * Don't add identical matches.
+***************
+*** 1895,1915 ****
+ #endif
+ for (i = ga_match[mtt].ga_len; --i >= 0 && !got_int; )
+ {
+! if (vim_memcmp(
+! ((char_u **)(ga_match[mtt].ga_data))[i],
+! p, (size_t)len) == 0)
+! break;
+! line_breakcheck();
+ }
+ if (i < 0)
+ {
+! ((char_u **)(ga_match[mtt].ga_data))
+! [ga_match[mtt].ga_len++] = p;
+ ga_match[mtt].ga_room--;
+ ++match_count;
+ }
+ else
+! vim_free(p);
+ }
+ }
+ else /* Out of memory! Just forget about the rest. */
+--- 1932,1954 ----
+ #endif
+ for (i = ga_match[mtt].ga_len; --i >= 0 && !got_int; )
+ {
+! mfp2 = ((struct match_found **)
+! (ga_match[mtt].ga_data))[i];
+! if (mfp2->len == mfp->len
+! && vim_memcmp(mfp2->match, mfp->match,
+! (size_t)mfp->len) == 0)
+! break;
+! line_breakcheck();
+ }
+ if (i < 0)
+ {
+! ((struct match_found **)(ga_match[mtt].ga_data))
+! [ga_match[mtt].ga_len++] = mfp;
+ ga_match[mtt].ga_room--;
+ ++match_count;
+ }
+ else
+! vim_free(mfp);
+ }
+ }
+ else /* Out of memory! Just forget about the rest. */
+***************
+*** 2021,2031 ****
+ {
+ for (i = 0; i < ga_match[mtt].ga_len; ++i)
+ {
+! p = ((char_u **)(ga_match[mtt].ga_data))[i];
+ if (matches == NULL)
+! vim_free(p);
+ else
+! matches[match_count++] = p;
+ }
+ ga_clear(&ga_match[mtt]);
+ }
+--- 2060,2077 ----
+ {
+ for (i = 0; i < ga_match[mtt].ga_len; ++i)
+ {
+! mfp = ((struct match_found **)(ga_match[mtt].ga_data))[i];
+ if (matches == NULL)
+! vim_free(mfp);
+ else
+! {
+! /* To avoid allocating memory again we turn the struct
+! * match_found into a string. For help the priority was not
+! * included in the length. */
+! mch_memmove(mfp, mfp->match,
+! (size_t)(mfp->len + (help_only ? 9 : 0)));
+! matches[match_count++] = (char_u *)mfp;
+! }
+ }
+ ga_clear(&ga_match[mtt]);
+ }
+*** ../vim-6.2.186/src/ui.c Sat Sep 27 19:36:47 2003
+--- src/ui.c Thu Jan 15 22:16:00 2004
+***************
+*** 1539,1544 ****
+--- 1539,1545 ----
+
+ /*
+ * Restore the input buffer with a pointer returned from get_input_buf().
++ * The allocated memory is freed, this only works once!
+ */
+ void
+ set_input_buf(p)
+***************
+*** 1546,1555 ****
+ {
+ garray_T *gap = (garray_T *)p;
+
+! if (gap != NULL && gap->ga_data != NULL)
+ {
+! mch_memmove(inbuf, gap->ga_data, gap->ga_len);
+! inbufcount = gap->ga_len;
+ }
+ }
+ #endif
+--- 1547,1561 ----
+ {
+ garray_T *gap = (garray_T *)p;
+
+! if (gap != NULL)
+ {
+! if (gap->ga_data != NULL)
+! {
+! mch_memmove(inbuf, gap->ga_data, gap->ga_len);
+! inbufcount = gap->ga_len;
+! vim_free(gap->ga_data);
+! }
+! vim_free(gap);
+ }
+ }
+ #endif
+*** ../vim-6.2.186/src/version.c Sun Jan 18 20:50:42 2004
+--- src/version.c Sun Jan 18 20:52:09 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 187,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.188 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.188 (extra)
+Problem: MS-Windows: Multi-byte characters in a filename cause trouble for
+ the window title.
+Solution: Return when the wide function for setting the title did its work.
+Files: src/gui_w48.c
+
+
+*** ../vim-6.2.187/src/gui_w48.c Sun Oct 26 21:00:14 2003
+--- src/gui_w48.c Tue Jan 13 11:50:17 2004
+***************
+*** 2633,2638 ****
+--- 2633,2639 ----
+ {
+ SetWindowTextW(s_hwnd, wbuf);
+ vim_free(wbuf);
++ return;
+ }
+ }
+ #endif
+*** ../vim-6.2.187/src/version.c Sun Jan 18 20:58:01 2004
+--- src/version.c Sun Jan 18 21:00:23 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 188,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.189
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.189
+Problem: When setting 'viminfo' after editing a new buffer its marks are
+ not stored. (Keith Roberts)
+Solution: Set the "b_marks_read" flag when skipping to read marks from the
+ viminfo file.
+Files: src/fileio.c
+
+
+*** ../vim-6.2.188/src/fileio.c Sun Jan 18 20:58:01 2004
+--- src/fileio.c Thu Jan 15 22:07:40 2004
+***************
+*** 2251,2260 ****
+ check_marks_read()
+ {
+ if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0)
+- {
+ read_viminfo(NULL, FALSE, TRUE, FALSE);
+! curbuf->b_marks_read = TRUE;
+! }
+ }
+ #endif
+
+--- 2251,2261 ----
+ check_marks_read()
+ {
+ if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0)
+ read_viminfo(NULL, FALSE, TRUE, FALSE);
+!
+! /* Always set b_marks_read; needed when 'viminfo' is changed to include
+! * the ' parameter after opening a buffer. */
+! curbuf->b_marks_read = TRUE;
+ }
+ #endif
+
+*** ../vim-6.2.188/src/version.c Sun Jan 18 21:01:53 2004
+--- src/version.c Sun Jan 18 21:04:06 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 189,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.190
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.190
+Problem: When editing a compressed files, marks are lost.
+Solution: Add the ":lockmarks" modifier and use it in the gzip plugin.
+ Make exists() also check for command modifiers, so that the
+ existence of ":lockmarks" can be checked for.
+ Also add ":keepmarks" to avoid that marks are deleted when
+ filtering text.
+ When deleting lines put marks 'A - 'Z and '0 - '9 at the first
+ deleted line instead of clearing the mark. They were kept in the
+ viminfo file anyway.
+ Avoid that the gzip plugin puts deleted text in registers.
+Files: runtime/doc/motion.txt, runtime/plugin/gzip.vim, src/ex_cmds.c,
+ src/ex_docmd.c, src/mark.c, src/structs.h
+
+
+*** ../vim-6.2.189/runtime/doc/motion.txt Sun Jun 1 12:20:33 2003
+--- runtime/doc/motion.txt Sat Jan 17 16:37:22 2004
+***************
+*** 1,4 ****
+! *motion.txt* For Vim version 6.2. Last change: 2003 May 27
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+--- 1,4 ----
+! *motion.txt* For Vim version 6.2. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+***************
+*** 700,705 ****
+--- 706,716 ----
+ Lowercase marks 'a to 'z are remembered as long as the file remains in the
+ buffer list. If you remove the file from the buffer list, all its marks are
+ lost. If you delete a line that contains a mark, that mark is erased.
++
++ To delete a mark: Create a new line, position the mark there, delete the line.
++ E.g.: "o<Esc>mxdd". This does change the file though. Using "u" won't work,
++ it also restores marks.
++
+ Lowercase marks can be used in combination with operators. For example: "d't"
+ deletes the lines from the cursor position to mark 't'. Hint: Use mark 't' for
+ Top, 'b' for Bottom, etc.. Lowercase marks are restored when using undo and
+***************
+*** 811,816 ****
+--- 822,868 ----
+ [` [count] times to lowercase mark before the cursor.
+ {not in Vi}
+
++
++ :loc[kmarks] {command} *:loc* *:lockmarks*
++ Execute {command} without adjusting marks. This is
++ useful when changing text in a way that the line count
++ will be the same when the change has completed.
++ WARNING: When the line count does change, marks below
++ the change will keep their line number, thus move to
++ another text line.
++ These items will not be adjusted for deleted/inserted
++ lines:
++ - lower case letter marks 'a - 'z
++ - upper case letter marks 'A - 'Z
++ - numbered marks '0 - '9
++ - last insert position '^
++ - last change position '.
++ - the Visual area '< and '>
++ - line numbers in placed signs
++ - line numbers in quickfix positions
++ - positions in the |jumplist|
++ - positions in the |tagstack|
++ These items will still be adjusted:
++ - previous context mark ''
++ - the cursor position
++ - the view of a window on a buffer
++ - folds
++ - diffs
++
++ :kee[pmarks] {command} *:kee* *:keepmarks*
++ Currently only has effect for the filter command
++ |:range!|:
++ - When the number of lines after filtering is equal to
++ or larger than before, all marks are kept at the
++ same line number.
++ - When the number of lines decreases, the marks in the
++ ilnes that disappeared are deleted.
++ In any case the marks below the filtered text have
++ their line numbers adjusted, thus stick to the text,
++ as usual.
++ When the 'R' flag is missing from 'cpoptions' this has
++ the same effect as using ":keepmarks".
++
+ ==============================================================================
+ 8. Jumps *jump-motions*
+
+*** ../vim-6.2.189/runtime/plugin/gzip.vim Mon Dec 29 21:04:38 2003
+--- runtime/plugin/gzip.vim Mon Jan 12 17:39:39 2004
+***************
+*** 1,6 ****
+ " Vim plugin for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Dec 22
+
+ " Exit quickly when:
+ " - this plugin was already loaded
+--- 1,6 ----
+ " Vim plugin for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2004 Jan 12
+
+ " Exit quickly when:
+ " - this plugin was already loaded
+***************
+*** 73,85 ****
+ call system(a:cmd . " " . tmpe)
+ " delete the compressed lines; remember the line number
+ let l = line("'[") - 1
+! '[,']d
+ " read in the uncompressed lines "'[-1r tmp"
+ setlocal nobin
+! execute "silent " . l . "r " . tmp
+ " if buffer became empty, delete trailing blank line
+ if empty
+! silent $delete
+ 1
+ endif
+ " delete the temp file and the used buffers
+--- 73,94 ----
+ call system(a:cmd . " " . tmpe)
+ " delete the compressed lines; remember the line number
+ let l = line("'[") - 1
+! if exists(":lockmarks")
+! lockmarks '[,']d _
+! else
+! '[,']d _
+! endif
+ " read in the uncompressed lines "'[-1r tmp"
+ setlocal nobin
+! if exists(":lockmarks")
+! execute "silent lockmarks " . l . "r " . tmp
+! else
+! execute "silent " . l . "r " . tmp
+! endif
+!
+ " if buffer became empty, delete trailing blank line
+ if empty
+! silent $delete _
+ 1
+ endif
+ " delete the temp file and the used buffers
+*** ../vim-6.2.189/src/ex_cmds.c Fri Jan 9 15:02:40 2004
+--- src/ex_cmds.c Sun Jan 18 16:18:17 2004
+***************
+*** 746,751 ****
+--- 746,752 ----
+ char_u *itmp = NULL;
+ char_u *otmp = NULL;
+ linenr_T linecount;
++ linenr_T read_linecount;
+ pos_T cursor_save;
+ char_u *cmd_buf;
+ #ifdef FEAT_AUTOCMD
+***************
+*** 858,863 ****
+--- 859,865 ----
+ if (u_save((linenr_T)(line2), (linenr_T)(line2 + 1)) == FAIL)
+ goto error;
+ redraw_curbuf_later(VALID);
++ read_linecount = curbuf->b_ml.ml_line_count;
+ if (readfile(otmp, NULL, line2, (linenr_T)0, (linenr_T)MAXLNUM, eap,
+ READ_FILTER) == FAIL)
+ {
+***************
+*** 877,882 ****
+--- 879,900 ----
+
+ if (do_in)
+ {
++ if (cmdmod.keepmarks || vim_strchr(p_cpo, CPO_REMMARK) == NULL)
++ {
++ read_linecount = curbuf->b_ml.ml_line_count - read_linecount;
++ if (read_linecount >= linecount)
++ /* move all marks from old lines to new lines */
++ mark_adjust(line1, line2, linecount, 0L);
++ else
++ {
++ /* move marks from old lines to new lines, delete marks
++ * that are in deleted lines */
++ mark_adjust(line1, line1 + read_linecount - 1,
++ linecount, 0L);
++ mark_adjust(line1 + read_linecount, line2, MAXLNUM, 0L);
++ }
++ }
++
+ /*
+ * Put cursor on first filtered line for ":range!cmd".
+ * Adjust '[ and '] (set by buf_write()).
+*** ../vim-6.2.189/src/ex_docmd.c Sun Jan 18 20:46:13 2004
+--- src/ex_docmd.c Fri Jan 16 17:20:17 2004
+***************
+*** 1432,1437 ****
+--- 1432,1438 ----
+ p = skipwhite(skipdigits(ea.cmd));
+ switch (*p)
+ {
++ /* When adding an entry, also modify cmd_exists(). */
+ case 'a': if (!checkforcmd(&ea.cmd, "aboveleft", 3))
+ break;
+ #ifdef FEAT_WINDOWS
+***************
+*** 1467,1472 ****
+--- 1468,1478 ----
+ #endif
+ continue;
+
++ case 'k': if (!checkforcmd(&ea.cmd, "keepmarks", 3))
++ break;
++ cmdmod.keepmarks = TRUE;
++ continue;
++
+ /* ":hide" and ":hide | cmd" are not modifiers */
+ case 'h': if (p != ea.cmd || !checkforcmd(&p, "hide", 3)
+ || *p == NUL || ends_excmd(*p))
+***************
+*** 1475,1481 ****
+ cmdmod.hide = TRUE;
+ continue;
+
+! case 'l': if (!checkforcmd(&ea.cmd, "leftabove", 5))
+ break;
+ #ifdef FEAT_WINDOWS
+ cmdmod.split |= WSP_ABOVE;
+--- 1481,1493 ----
+ cmdmod.hide = TRUE;
+ continue;
+
+! case 'l': if (checkforcmd(&ea.cmd, "lockmarks", 3))
+! {
+! cmdmod.lockmarks = TRUE;
+! continue;
+! }
+!
+! if (!checkforcmd(&ea.cmd, "leftabove", 5))
+ break;
+ #ifdef FEAT_WINDOWS
+ cmdmod.split |= WSP_ABOVE;
+***************
+*** 2530,2536 ****
+--- 2542,2581 ----
+ {
+ exarg_T ea;
+ int full = FALSE;
++ int i;
++ int j;
++ static struct cmdmod
++ {
++ char *name;
++ int minlen;
++ } cmdmods[] = {
++ {"aboveleft", 3},
++ {"belowright", 3},
++ {"botright", 2},
++ {"browse", 3},
++ {"confirm", 4},
++ {"hide", 3},
++ {"keepmarks", 3},
++ {"leftabove", 5},
++ {"lockmarks", 3},
++ {"rightbelow", 6},
++ {"silent", 3},
++ {"topleft", 2},
++ {"verbose", 4},
++ {"vertical", 4},
++ };
++
++ /* Check command modifiers. */
++ for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
++ {
++ for (j = 0; name[j] != NUL; ++j)
++ if (name[j] != cmdmods[i].name[j])
++ break;
++ if (name[j] == NUL && j >= cmdmods[i].minlen)
++ return (cmdmods[i].name[j] == NUL ? 2 : 1);
++ }
+
++ /* Check built-in commands and user defined commands. */
+ ea.cmd = name;
+ ea.cmdidx = (cmdidx_T)0;
+ if (find_command(&ea, &full) == NULL)
+*** ../vim-6.2.189/src/mark.c Sun Jan 18 20:58:01 2004
+--- src/mark.c Fri Jan 16 11:56:14 2004
+***************
+*** 800,859 ****
+ return;
+
+ /* named marks, lower case and upper case */
+! for (i = 0; i < NMARKS; i++)
+ {
+! one_adjust(&(curbuf->b_namedm[i].lnum));
+! if (namedfm[i].fmark.fnum == fnum)
+! one_adjust(&(namedfm[i].fmark.mark.lnum));
+! }
+! for (i = NMARKS; i < NMARKS + EXTRA_MARKS; i++)
+! {
+! if (namedfm[i].fmark.fnum == fnum)
+! one_adjust(&(namedfm[i].fmark.mark.lnum));
+! }
+!
+! /* previous context mark */
+! one_adjust(&(curwin->w_pcmark.lnum));
+!
+! /* previous pcmark */
+! one_adjust(&(curwin->w_prev_pcmark.lnum));
+
+! /* last Insert position */
+! one_adjust(&(curbuf->b_last_insert.lnum));
+
+! /* last change position */
+! one_adjust(&(curbuf->b_last_change.lnum));
+
+ #ifdef FEAT_VISUAL
+! /* Visual area */
+! one_adjust_nodel(&(curbuf->b_visual_start.lnum));
+! one_adjust_nodel(&(curbuf->b_visual_end.lnum));
+ #endif
+
+ #ifdef FEAT_QUICKFIX
+! /* quickfix marks */
+! qf_mark_adjust(line1, line2, amount, amount_after);
+ #endif
+
+ /*
+ * Adjust items in all windows related to the current buffer.
+ */
+ FOR_ALL_WINDOWS(win)
+ {
+ #ifdef FEAT_JUMPLIST
+! /* Marks in the jumplist. When deleting lines, this may create
+! * duplicate marks in the jumplist, they will be removed later. */
+! for (i = 0; i < win->w_jumplistlen; ++i)
+! if (win->w_jumplist[i].fmark.fnum == fnum)
+! one_adjust_nodel(&(win->w_jumplist[i].fmark.mark.lnum));
+ #endif
+
+ if (win->w_buffer == curbuf)
+ {
+! /* marks in the tag stack */
+! for (i = 0; i < win->w_tagstacklen; i++)
+! if (win->w_tagstack[i].fmark.fnum == fnum)
+! one_adjust_nodel(&(win->w_tagstack[i].fmark.mark.lnum));
+
+ #ifdef FEAT_VISUAL
+ /* the displayed Visual area */
+--- 800,868 ----
+ return;
+
+ /* named marks, lower case and upper case */
+! if (!cmdmod.lockmarks)
+ {
+! for (i = 0; i < NMARKS; i++)
+! {
+! one_adjust(&(curbuf->b_namedm[i].lnum));
+! if (namedfm[i].fmark.fnum == fnum)
+! one_adjust_nodel(&(namedfm[i].fmark.mark.lnum));
+! }
+! for (i = NMARKS; i < NMARKS + EXTRA_MARKS; i++)
+! {
+! if (namedfm[i].fmark.fnum == fnum)
+! one_adjust_nodel(&(namedfm[i].fmark.mark.lnum));
+! }
+
+! /* last Insert position */
+! one_adjust(&(curbuf->b_last_insert.lnum));
+
+! /* last change position */
+! one_adjust(&(curbuf->b_last_change.lnum));
+
+ #ifdef FEAT_VISUAL
+! /* Visual area */
+! one_adjust_nodel(&(curbuf->b_visual_start.lnum));
+! one_adjust_nodel(&(curbuf->b_visual_end.lnum));
+ #endif
+
+ #ifdef FEAT_QUICKFIX
+! /* quickfix marks */
+! qf_mark_adjust(line1, line2, amount, amount_after);
+ #endif
+
++ #ifdef FEAT_SIGNS
++ sign_mark_adjust(line1, line2, amount, amount_after);
++ #endif
++ }
++
++ /* previous context mark */
++ one_adjust(&(curwin->w_pcmark.lnum));
++
++ /* previous pcmark */
++ one_adjust(&(curwin->w_prev_pcmark.lnum));
++
+ /*
+ * Adjust items in all windows related to the current buffer.
+ */
+ FOR_ALL_WINDOWS(win)
+ {
+ #ifdef FEAT_JUMPLIST
+! if (!cmdmod.lockmarks)
+! /* Marks in the jumplist. When deleting lines, this may create
+! * duplicate marks in the jumplist, they will be removed later. */
+! for (i = 0; i < win->w_jumplistlen; ++i)
+! if (win->w_jumplist[i].fmark.fnum == fnum)
+! one_adjust_nodel(&(win->w_jumplist[i].fmark.mark.lnum));
+ #endif
+
+ if (win->w_buffer == curbuf)
+ {
+! if (!cmdmod.lockmarks)
+! /* marks in the tag stack */
+! for (i = 0; i < win->w_tagstacklen; i++)
+! if (win->w_tagstack[i].fmark.fnum == fnum)
+! one_adjust_nodel(&(win->w_tagstack[i].fmark.mark.lnum));
+
+ #ifdef FEAT_VISUAL
+ /* the displayed Visual area */
+***************
+*** 917,926 ****
+ #ifdef FEAT_DIFF
+ /* adjust diffs */
+ diff_mark_adjust(line1, line2, amount, amount_after);
+- #endif
+-
+- #ifdef FEAT_SIGNS
+- sign_mark_adjust(line1, line2, amount, amount_after);
+ #endif
+ }
+
+--- 926,931 ----
+*** ../vim-6.2.189/src/structs.h Sun Nov 2 15:27:38 2003
+--- src/structs.h Tue Jan 13 12:57:23 2004
+***************
+*** 403,408 ****
+--- 403,410 ----
+ # if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ int confirm; /* TRUE to invoke yes/no dialog */
+ # endif
++ int keepmarks; /* TRUE when ":keepmarks" was used */
++ int lockmarks; /* TRUE when ":lockmarks" was used */
+ } cmdmod_T;
+
+ /*
+*** ../vim-6.2.189/src/version.c Sun Jan 18 21:04:53 2004
+--- src/version.c Sun Jan 18 21:07:07 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 190,
+ /**/
+
+--
+ARTHUR: Well, I AM king...
+DENNIS: Oh king, eh, very nice. An' how'd you get that, eh? By exploitin'
+ the workers -- by 'angin' on to outdated imperialist dogma which
+ perpetuates the economic an' social differences in our society! If
+ there's ever going to be any progress--
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.191
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.191
+Problem: The intro message is outdated. Information about sponsoring and
+ registering is missing.
+Solution: Show info about sponsoring and registering Vim in the intro
+ message now and then. Add help file about sponsoring.
+Files: runtime/doc/help.txt, runtime/doc/sponsor.txt, runtime/doc/tags,
+ runtime/menu.vim, src/version.c
+
+
+*** ../vim-6.2.190/runtime/doc/help.txt Sun Jun 1 12:20:32 2003
+--- runtime/doc/help.txt Sun Jan 18 21:16:07 2004
+***************
+*** 1,4 ****
+! *help.txt* For Vim version 6.2. Last change: 2003 May 11
+
+ VIM - main help file
+ k
+--- 1,4 ----
+! *help.txt* For Vim version 6.2. Last change: 2004 Jan 08
+
+ VIM - main help file
+ k
+***************
+*** 36,41 ****
+--- 36,42 ----
+ |tutor| 30 minutes training course for beginners
+ |copying| About copyrights
+ |iccf| Helping poor children in Uganda
++ |sponsor| Sponsor Vim development, become a registered Vim user
+ |www| Vim on the World Wide Web
+ |bugs| Where to send bug reports
+
+*** ../vim-6.2.190/runtime/doc/sponsor.txt Sun Jan 18 21:14:50 2004
+--- runtime/doc/sponsor.txt Thu Jan 15 10:03:22 2004
+***************
+*** 0 ****
+--- 1,228 ----
++ *sponsor.txt* For Vim version 6.2. Last change: 2004 Jan 15
++
++
++ VIM REFERENCE MANUAL by Bram Moolenaar
++
++
++
++ SPONSOR VIM DEVELOPMENT *sponsor*
++
++ Fixing bugs and adding new features takes a lot of effort. For a few years
++ Bram has attempted to do this next to a full-time job. During that time the
++ todo list kept getting longer and longer.
++
++ In order for Bram to support Vim properly he needs your support. Through your
++ donations Bram will be able to have a part-time job and spend more time on
++ fixing bugs and adding new features.
++
++ For the most recent information about sponsoring look on the Vim web site:
++
++ http://www.vim.org/sponsor/
++
++ More explanations can be found in the |sponsor-faq|.
++
++
++ REGISTERED VIM USER *register*
++
++ You can become a registered Vim user by sending at least 10 euro. This works
++ similar to sponsoring Vim, see |sponsor| above. Registration was made
++ possible for the situation where your boss or bookkeeper may be willing to
++ register software, but does not like the terms "sponsoring" and "donation".
++
++ More explanations can be found in the |register-faq|.
++
++
++ VOTE FOR FEATURES *vote-for-features*
++
++ To give registered Vim users and sponsors an advantage over lurkers they can
++ vote for the items Bram should work on. How does this voting work?
++
++ 1. You send at least 10 euro. See below for ways to transfer money
++ |send-money|.
++
++ 2. You will be e-mailed a registration key. Enter this key on your account
++ page on the Vim website. You can easily create an account if you don't
++ have one yet.
++
++ 3. You can enter your votes on the voting page. There is a link to that page
++ on your account page after entering a registration key. Your votes will
++ be counted for two years.
++
++ 4. The voting results appear on the results page, which is visible for
++ everybody: http://www.vim.org/sponsor/vote_results.php
++
++ Additionally, once you have send 100 euro or more in total, your name appears
++ in the "Vim hall of honour": http://www.vim.org/sponsor/hall_of_honour.php
++ But only if you enable this on your account page.
++
++
++ HOW TO SEND MONEY *send-money*
++
++ Creditcard Through PayPal, see the PayPal site for information:
++ https://www.paypal.com
++ The e-mail address for sending sponsorship money is:
++ donate@vim.org
++ The e-mail address for Vim registration is:
++ register@vim.org
++ Using Euro is preferred, other currencies are also accepted.
++ In Europe a bank transfer is preferred, this has lower costs.
++
++ Bank transfer Transfer to Bram's account at the Postbank: 1644503. For
++ international transfers you can use these numbers:
++ IBAN: NL79 PSTB 0001 6445 03
++ SWIFT/BIC: PSTBNL21
++ This is the address of the bank:
++ ING Bank Amsterdam, Foreign Operations
++ PO Box 1800
++ 1000 BV Amsterdam
++ The Netherlands
++ Include your e-mail address in the comment of your money
++ transfer if you want to vote for features and show others you
++ are a registered Vim user or sponsor.
++
++ Cash Small amounts can be send with ordinary mail. Put something
++ around the money, so that it's not noticable from the outside.
++ Mention your e-mail address if you want to vote for features
++ and show others you are a registered Vim user or sponsor.
++
++ This is Bram's address:
++ Bram Moolenaar
++ Clematisstraat 30
++ 5925 BE Venlo
++ The Netherlands
++
++
++ ALTERNATIVE
++
++ If you don't care about sponsoring Vim Development or becoming a registered
++ Vim user, but do care about helping needy children, consider giving to the
++ ICCF Holland foundation. This is the charity recommended by Vim's author.
++ The money is used for a children centre in the south of Uganda, where AIDS has
++ caused many victims. See |uganda|.
++
++
++ QUESTIONS AND ANSWERS *sponsor-faq* *register-faq*
++
++ Why should I give money?
++
++ Bram has tried to work on Vim next to a full-time job. The list of known bugs
++ and ideas for new features has constantly been growing during this time. Bram
++ simply can't spend enough time on Vim development when he has a full-time job.
++ Your contribution will make it possible for Bram to have a part-time job and
++ spend much more time on Vim development. Bugs will be fixed quicker and new
++ Vim releases will become available more often.
++
++
++ How much money should I send?
++
++ That is up to you. The more you give, the more time Bram can work on Vim. An
++ indication for individuals that use Vim at home: 10 Euro per year. For
++ professional use: 30 Euro per year per person. Send at least 10 euro to be
++ able to vote for features.
++
++
++ What do I get in return?
++
++ Each registered Vim user and sponsor who donates at least 10 euro will be able
++ to vote for new features. These votes will give priority to the work on Vim.
++ The votes are valid for two years. The more money you send the more your
++ votes count |votes-counted|.
++
++ If you send 100 Euro or more in total you will be mentioned on the "Vim hall
++ of honour" page on the Vim web site. But only if you enable this on your
++ account page. You can also select whether the amount will be visible.
++
++
++ How do I become a Vim sponsor or registered Vim user?
++
++ Send money, as explained above |send-money| and include your e-mail address.
++ When the money has been received you will receive a unique registration key.
++ This key can be used on the Vim website to activate voting on your Vim
++ account. You will then get an extra page where you can vote for features and
++ choose whether others will be able to see that you donated. There is a link
++ to this page on your "My Account" page.
++
++
++ What is the difference between sponsoring and registering?
++
++ It has a different name. Use the term "registration" if your boss doesn't
++ like "sponsoring" or "donation". The benefits are the same.
++
++
++ How can I send money?
++
++ See |send-money|. Check the web site for the most recent information:
++ http://www.vim.org/sponsor/
++
++
++ Why don't you use the SourceForge donation system?
++
++ SourceForge takes 5% of the donations for themselves. If you want to support
++ SourceForge you can send money to them directly.
++
++
++ I cannot afford to send money, may I still use Vim?
++
++ Yes.
++
++
++ I did not register Vim, can I use all available features?
++
++ Yes.
++
++
++ I noticed a bug, do I need to register before I can report it?
++
++ No, suggestions for improving Vim can always be given. For improvements use
++ the developer |maillist|, for reporting bugs see |bugs|.
++
++
++ How are my votes counted? *votes-counted*
++
++ You may vote when you send 10 euro or more. You can enter up to ten votes.
++ You can select the same item several times to give it more points. You can
++ also enter three counter votes, these count as negative points.
++
++ When you send 30 euro or more the points are doubled. Above 100 euro they
++ count four times, above 300 euro they count six times, above 1000 euro ten
++ times.
++
++
++ Can I change my votes?
++
++ You can change your votes any time you like, up to two years after you
++ sent money. The points will be counted right away.
++
++
++ How about Charityware?
++
++ You have to decide yourself whether you want to sponsor Vim development, help
++ the poor children in Uganda (see |uganda|) or both. Bram will certainly keep
++ on supporting the project in Uganda. In the (unlikely) situation that Bram
++ gets more donations for Vim development than he needs, he will send the money
++ to Uganda.
++
++
++ I donated $$$, now please add feature XYZ!
++
++ There is no direct relation between your donation and the work Bram does.
++ Otherwise you would be paying for work and Bram has to pay income tax over the
++ donation. If you want to hire Bram for specific work, contact him directly,
++ don't use the donation system.
++
++
++ Are the donations tax deductable?
++
++ No. Setting up a system for this is complex and imposes too many restrictions.
++ The donations to help the children in |Uganda| are tax deductable in Holland,
++ Germany, Canada and probably also in the USA.
++
++
++ Can you send me a bill?
++
++ Sending a bill would mean Bram does something in return for your contribution.
++ That is work and would mean Bram has to pay income tax over the amount. It is
++ possible, but the net amount will be lower.
++
++
++ vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-6.2.190/runtime/doc/tags Mon Jun 2 21:31:14 2003
+--- runtime/doc/tags Fri Jan 16 15:26:10 2004
+***************
+*** 1924,1929 ****
+--- 1949,1956 ----
+ :ju motion.txt /*:ju*
+ :jumps motion.txt /*:jumps*
+ :k motion.txt /*:k*
++ :kee motion.txt /*:kee*
++ :keepmarks motion.txt /*:keepmarks*
+ :l various.txt /*:l*
+ :la editing.txt /*:la*
+ :lan mlang.txt /*:lan*
+***************
+*** 1956,1961 ****
+--- 1984,1991 ----
+ :loadk mbyte.txt /*:loadk*
+ :loadkeymap mbyte.txt /*:loadkeymap*
+ :loadview starting.txt /*:loadview*
++ :loc motion.txt /*:loc*
++ :lockmarks motion.txt /*:lockmarks*
+ :ls windows.txt /*:ls*
+ :lu map.txt /*:lu*
+ :lunmap map.txt /*:lunmap*
+***************
+*** 5508,5513 ****
+--- 5559,5566 ----
+ reference intro.txt /*reference*
+ regexp pattern.txt /*regexp*
+ regexp-changes-5.4 version5.txt /*regexp-changes-5.4*
++ register sponsor.txt /*register*
++ register-faq sponsor.txt /*register-faq*
+ register-variable eval.txt /*register-variable*
+ registers change.txt /*registers*
+ regular-expression pattern.txt /*regular-expression*
+***************
+*** 5619,5624 ****
+--- 5673,5679 ----
+ section motion.txt /*section*
+ sed-syntax syntax.txt /*sed-syntax*
+ sed.vim syntax.txt /*sed.vim*
++ send-money sponsor.txt /*send-money*
+ send-to-menu gui_w32.txt /*send-to-menu*
+ sendto gui_w32.txt /*sendto*
+ sentence motion.txt /*sentence*
+***************
+*** 5667,5672 ****
+--- 5723,5731 ----
+ speed-up tips.txt /*speed-up*
+ splitfind windows.txt /*splitfind*
+ splitview windows.txt /*splitview*
++ sponsor sponsor.txt /*sponsor*
++ sponsor-faq sponsor.txt /*sponsor-faq*
++ sponsor.txt sponsor.txt /*sponsor.txt*
+ spoon os_unix.txt /*spoon*
+ spup-syntax syntax.txt /*spup-syntax*
+ spup.vim syntax.txt /*spup.vim*
+***************
+*** 6271,6276 ****
+--- 6331,6338 ----
+ vms-problems os_vms.txt /*vms-problems*
+ vms-started os_vms.txt /*vms-started*
+ vms-usage os_vms.txt /*vms-usage*
++ vote-for-features sponsor.txt /*vote-for-features*
++ votes-counted sponsor.txt /*votes-counted*
+ votes-for-changes todo.txt /*votes-for-changes*
+ vreplace-mode insert.txt /*vreplace-mode*
+ vt100-cursor-keys term.txt /*vt100-cursor-keys*
+***************
+*** 6460,6465 ****
+--- 6522,6528 ----
+ {motion} intro.txt /*{motion}*
+ {move-around} visual.txt /*{move-around}*
+ {offset} pattern.txt /*{offset}*
++ {pat} autocmd.txt /*{pat}*
+ {rhs} map.txt /*{rhs}*
+ {subject} various.txt /*{subject}*
+ {} intro.txt /*{}*
+*** ../vim-6.2.190/runtime/menu.vim Sun Oct 12 17:00:32 2003
+--- runtime/menu.vim Thu Jan 8 21:38:19 2004
+***************
+*** 2,8 ****
+ " You can also use this as a start for your own set of menus.
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Set 20
+
+ " 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@vim.org>
+! " Last Change: 2004 Jan 08
+
+ " 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.
+***************
+*** 66,71 ****
+--- 66,72 ----
+ an 9999.45 &Help.-sep1- <Nop>
+ an 9999.50 &Help.&Credits :help credits<CR>
+ an 9999.60 &Help.Co&pying :help copying<CR>
++ an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
+ an 9999.70 &Help.O&rphans :help kcc<CR>
+ an 9999.75 &Help.-sep2- <Nop>
+ an 9999.80 &Help.&Version :version<CR>
+*** ../vim-6.2.190/src/version.c Sun Jan 18 21:12:26 2004
+--- src/version.c Sun Jan 18 21:13:45 2004
+***************
+*** 1377,1382 ****
+--- 1379,1385 ----
+ int i;
+ int row;
+ int blanklines;
++ int sponsor;
+ char *p;
+ static char *(lines[]) =
+ {
+***************
+*** 1444,1449 ****
+--- 1447,1457 ----
+ if (blanklines < 0)
+ blanklines = 0;
+
++ /* Show the sponsor and register message one out of four times, the Uganda
++ * message two out of four times. */
++ sponsor = time(NULL);
++ sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
++
+ /* start displaying the message lines after half of the blank lines */
+ row = blanklines / 2;
+ if ((row >= 2 && Columns >= 50) || colon)
+***************
+*** 1460,1465 ****
+--- 1468,1486 ----
+ if (!p_cp)
+ break;
+ continue;
++ }
++ if (sponsor != 0)
++ {
++ if (strstr(p, "children") != NULL)
++ p = sponsor < 0
++ ? N_("Sponsor Vim development!")
++ : N_("Become a registered Vim user!");
++ else if (strstr(p, "iccf") != NULL)
++ p = sponsor < 0
++ ? N_("type :help sponsor<Enter> for information ")
++ : N_("type :help register<Enter> for information ");
++ else if (strstr(p, "Orphans") != NULL)
++ p = N_("menu Help->Sponsor/Register for information ");
+ }
+ if (*p != NUL)
+ do_intro_line(row, (char_u *)_(p), i == 2, 0);
+*** ../vim-6.2.190/src/version.c Sun Jan 18 21:12:26 2004
+--- src/version.c Sun Jan 18 21:13:45 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 191,
+ /**/
+
+--
+Vim is like Emacs without all the typing. (John "Johann" Spetz)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.192
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.192
+Problem: Using CTRL-T and CTRL-D with "gR" messes up the text. (Jonahtan
+ Hankins)
+Solution: Avoid calling change_indent() recursively.
+Files: src/edit.c
+
+
+*** ../vim-6.2.191/src/edit.c Sun Jan 18 20:28:26 2004
+--- src/edit.c Sun Jan 18 20:23:49 2004
+***************
+*** 1611,1617 ****
+--- 1611,1629 ----
+ if (type == INDENT_SET)
+ (void)set_indent(amount, SIN_CHANGED);
+ else
++ {
++ #ifdef FEAT_VREPLACE
++ int save_State = State;
++
++ /* Avoid being called recursively. */
++ if (State & VREPLACE_FLAG)
++ State = INSERT;
++ #endif
+ shift_line(type == INDENT_DEC, round, 1);
++ #ifdef FEAT_VREPLACE
++ State = save_State;
++ #endif
++ }
+ insstart_less -= curwin->w_cursor.col;
+
+ /*
+*** ../vim-6.2.191/src/version.c Sun Jan 18 21:19:56 2004
+--- src/version.c Sun Jan 18 21:21:12 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 192,
+ /**/
+
+--
+Q: Is selling software the same as selling hardware?
+A: No, good hardware is sold new, good software has already been used by many.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.193
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.193
+Problem: When recalling a search pattern from the history from a ":s,a/c,"
+ command the '/' ends the search string. (JC van Winkel)
+Solution: Store the separator character with the history entries. Escape
+ characters when needed, replace the old separator with the new one.
+ Also fixes that recalling a "/" search for a "?" command messes up
+ trailing flags.
+Files: src/eval.c, src/ex_getln.c, src/normal.c, src/proto/ex_getln.pro,
+ src/search.c, src/tag.c
+
+
+*** ../vim-6.2.192/src/eval.c Sun Jan 18 20:46:13 2004
+--- src/eval.c Sun Jan 18 16:51:58 2004
+***************
+*** 5140,5146 ****
+ str = get_var_string_buf(&argvars[1], buf);
+ if (*str != NUL)
+ {
+! add_to_history(histype, str, FALSE);
+ retvar->var_val.var_number = TRUE;
+ return;
+ }
+--- 5140,5146 ----
+ str = get_var_string_buf(&argvars[1], buf);
+ if (*str != NUL)
+ {
+! add_to_history(histype, str, FALSE, NUL);
+ retvar->var_val.var_number = TRUE;
+ return;
+ }
+*** ../vim-6.2.192/src/ex_getln.c Sat Sep 27 19:36:46 2003
+--- src/ex_getln.c Sun Jan 18 14:43:53 2004
+***************
+*** 42,48 ****
+ typedef struct hist_entry
+ {
+ int hisnum; /* identifying number */
+! char_u *hisstr; /* actual entry */
+ } histentry_T;
+
+ static histentry_T *(history[HIST_COUNT]) = {NULL, NULL, NULL, NULL, NULL};
+--- 42,48 ----
+ typedef struct hist_entry
+ {
+ int hisnum; /* identifying number */
+! char_u *hisstr; /* actual entry, separator char after the NUL */
+ } histentry_T;
+
+ static histentry_T *(history[HIST_COUNT]) = {NULL, NULL, NULL, NULL, NULL};
+***************
+*** 1286,1291 ****
+--- 1286,1293 ----
+ if (hiscnt != i) /* jumped to other entry */
+ {
+ char_u *p;
++ int len;
++ int old_firstc;
+
+ vim_free(ccline.cmdbuff);
+ if (hiscnt == hislen)
+***************
+*** 1293,1302 ****
+ else
+ p = history[histype][hiscnt].hisstr;
+
+! alloc_cmdbuff((int)STRLEN(p));
+! if (ccline.cmdbuff == NULL)
+! goto returncmd;
+! STRCPY(ccline.cmdbuff, p);
+
+ ccline.cmdpos = ccline.cmdlen = (int)STRLEN(ccline.cmdbuff);
+ redrawcmd();
+--- 1295,1353 ----
+ else
+ p = history[histype][hiscnt].hisstr;
+
+! if (histype == HIST_SEARCH
+! && p != lookfor
+! && (old_firstc = p[STRLEN(p) + 1]) != firstc)
+! {
+! /* Correct for the separator character used when
+! * adding the history entry vs the one used now.
+! * First loop: count length.
+! * Second loop: copy the characters. */
+! for (i = 0; i <= 1; ++i)
+! {
+! len = 0;
+! for (j = 0; p[j] != NUL; ++j)
+! {
+! /* Replace old sep with new sep, unless it is
+! * escaped. */
+! if (p[j] == old_firstc
+! && (j == 0 || p[j - 1] != '\\'))
+! {
+! if (i > 0)
+! ccline.cmdbuff[len] = firstc;
+! }
+! else
+! {
+! /* Escape new sep, unless it is already
+! * escaped. */
+! if (p[j] == firstc
+! && (j == 0 || p[j - 1] != '\\'))
+! {
+! if (i > 0)
+! ccline.cmdbuff[len] = '\\';
+! ++len;
+! }
+! if (i > 0)
+! ccline.cmdbuff[len] = p[j];
+! }
+! ++len;
+! }
+! if (i == 0)
+! {
+! alloc_cmdbuff(len);
+! if (ccline.cmdbuff == NULL)
+! goto returncmd;
+! }
+! }
+! ccline.cmdbuff[len] = NUL;
+! }
+! else
+! {
+! alloc_cmdbuff((int)STRLEN(p));
+! if (ccline.cmdbuff == NULL)
+! goto returncmd;
+! STRCPY(ccline.cmdbuff, p);
+! }
+
+ ccline.cmdpos = ccline.cmdlen = (int)STRLEN(ccline.cmdbuff);
+ redrawcmd();
+***************
+*** 1556,1562 ****
+ if (ccline.cmdlen && firstc != NUL
+ && (some_key_typed || histype == HIST_SEARCH))
+ {
+! add_to_history(histype, ccline.cmdbuff, TRUE);
+ if (firstc == ':')
+ {
+ vim_free(new_last_cmdline);
+--- 1607,1614 ----
+ if (ccline.cmdlen && firstc != NUL
+ && (some_key_typed || histype == HIST_SEARCH))
+ {
+! add_to_history(histype, ccline.cmdbuff, TRUE,
+! histype == HIST_SEARCH ? firstc : NUL);
+ if (firstc == ':')
+ {
+ vim_free(new_last_cmdline);
+***************
+*** 4185,4196 ****
+ * values.
+ */
+ void
+! add_to_history(histype, new_entry, in_map)
+ int histype;
+ char_u *new_entry;
+ int in_map; /* consider maptick when inside a mapping */
+ {
+ histentry_T *hisptr;
+
+ if (hislen == 0) /* no history */
+ return;
+--- 4239,4252 ----
+ * values.
+ */
+ void
+! add_to_history(histype, new_entry, in_map, sep)
+ int histype;
+ char_u *new_entry;
+ int in_map; /* consider maptick when inside a mapping */
++ int sep; /* separator character used (search hist) */
+ {
+ histentry_T *hisptr;
++ int len;
+
+ if (hislen == 0) /* no history */
+ return;
+***************
+*** 4221,4227 ****
+ hisidx[histype] = 0;
+ hisptr = &history[histype][hisidx[histype]];
+ vim_free(hisptr->hisstr);
+! hisptr->hisstr = vim_strsave(new_entry);
+ hisptr->hisnum = ++hisnum[histype];
+ if (histype == HIST_SEARCH && in_map)
+ last_maptick = maptick;
+--- 4277,4289 ----
+ hisidx[histype] = 0;
+ hisptr = &history[histype][hisidx[histype]];
+ vim_free(hisptr->hisstr);
+!
+! /* Store the separator after the NUL of the string. */
+! len = STRLEN(new_entry);
+! hisptr->hisstr = vim_strnsave(new_entry, len + 2);
+! if (hisptr->hisstr != NULL)
+! hisptr->hisstr[len + 1] = sep;
+!
+ hisptr->hisnum = ++hisnum[histype];
+ if (histype == HIST_SEARCH && in_map)
+ last_maptick = maptick;
+***************
+*** 4586,4592 ****
+ if (i == hislen)
+ i = 0;
+ if (hist[i].hisstr != NULL
+! && hist[i].hisnum >= j && hist[i].hisnum <= k)
+ {
+ msg_putchar('\n');
+ sprintf((char *)IObuff, "%c%6d %s", i == idx ? '>' : ' ',
+--- 4648,4654 ----
+ if (i == hislen)
+ i = 0;
+ if (hist[i].hisstr != NULL
+! && hist[i].hisnum >= j && hist[i].hisnum <= k)
+ {
+ msg_putchar('\n');
+ sprintf((char *)IObuff, "%c%6d %s", i == idx ? '>' : ' ',
+***************
+*** 4682,4697 ****
+ vir_T *virp;
+ {
+ int type;
+ char_u *val;
+
+ type = hist_char2type(virp->vir_line[0]);
+ if (viminfo_hisidx[type] < viminfo_hislen[type])
+ {
+! val = viminfo_readstring(virp, 1, TRUE);
+ if (val != NULL)
+ {
+ if (!in_history(type, val, viminfo_add_at_front))
+ viminfo_history[type][viminfo_hisidx[type]++] = val;
+ else
+ vim_free(val);
+ }
+--- 4744,4782 ----
+ vir_T *virp;
+ {
+ int type;
++ int sep;
++ int len;
+ char_u *val;
+
+ type = hist_char2type(virp->vir_line[0]);
+ if (viminfo_hisidx[type] < viminfo_hislen[type])
+ {
+! /* Use a zero offset, so that we have some extra space in the
+! * allocated memory for the separator. */
+! val = viminfo_readstring(virp, 0, TRUE);
+ if (val != NULL)
+ {
+ if (!in_history(type, val, viminfo_add_at_front))
++ {
++ len = STRLEN(val);
++ if (type == HIST_SEARCH)
++ {
++ /* Search entry: Move the separator from the second column
++ * to after the NUL. */
++ sep = val[1];
++ --len;
++ mch_memmove(val, val + 2, (size_t)len);
++ val[len + 1] = (sep == ' ' ? NUL : sep);
++ }
++ else
++ {
++ /* Not a search entry: No separator in the viminfo file,
++ * add a NUL separator. */
++ mch_memmove(val, val + 1, (size_t)len);
++ val[len + 1] = NUL;
++ }
+ viminfo_history[type][viminfo_hisidx[type]++] = val;
++ }
+ else
+ vim_free(val);
+ }
+***************
+*** 4757,4762 ****
+--- 4842,4849 ----
+ int i;
+ int type;
+ int num_saved;
++ char_u *p;
++ int c;
+
+ init_history();
+ if (hislen == 0)
+***************
+*** 4779,4788 ****
+ if (i >= 0)
+ while (num_saved--)
+ {
+! if (history[type][i].hisstr != NULL)
+ {
+ putc(hist_type2char(type, TRUE), fp);
+! viminfo_writestring(fp, history[type][i].hisstr);
+ }
+ if (--i < 0)
+ i = hislen - 1;
+--- 4866,4883 ----
+ if (i >= 0)
+ while (num_saved--)
+ {
+! p = history[type][i].hisstr;
+! if (p != NULL)
+ {
+ putc(hist_type2char(type, TRUE), fp);
+! /* For the search history: put the separator in the second
+! * column; use a space if there isn't one. */
+! if (type == HIST_SEARCH)
+! {
+! c = p[STRLEN(p) + 1];
+! putc(c == NUL ? ' ' : c, fp);
+! }
+! viminfo_writestring(fp, p);
+ }
+ if (--i < 0)
+ i = hislen - 1;
+*** ../vim-6.2.192/src/normal.c Sun Jan 18 20:28:26 2004
+--- src/normal.c Sun Jan 18 18:49:04 2004
+***************
+*** 4920,4926 ****
+ STRCAT(buf, "\\>");
+ #ifdef FEAT_CMDHIST
+ /* put pattern in search history */
+! add_to_history(HIST_SEARCH, buf, TRUE);
+ #endif
+ normal_search(cap, cmdchar == '*' ? '/' : '?', buf, 0);
+ }
+--- 4932,4938 ----
+ STRCAT(buf, "\\>");
+ #ifdef FEAT_CMDHIST
+ /* put pattern in search history */
+! add_to_history(HIST_SEARCH, buf, TRUE, NUL);
+ #endif
+ normal_search(cap, cmdchar == '*' ? '/' : '?', buf, 0);
+ }
+*** ../vim-6.2.192/src/proto/ex_getln.pro Sun Aug 10 22:24:37 2003
+--- src/proto/ex_getln.pro Sun Jan 18 13:36:26 2004
+***************
+*** 25,31 ****
+ int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+ char_u *globpath __ARGS((char_u *path, char_u *file));
+ int get_histtype __ARGS((char_u *name));
+! void add_to_history __ARGS((int histype, char_u *new_entry, int in_map));
+ int get_history_idx __ARGS((int histype));
+ char_u *get_history_entry __ARGS((int histype, int idx));
+ int clr_history __ARGS((int histype));
+--- 25,31 ----
+ int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+ char_u *globpath __ARGS((char_u *path, char_u *file));
+ int get_histtype __ARGS((char_u *name));
+! void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
+ int get_history_idx __ARGS((int histype));
+ char_u *get_history_entry __ARGS((int histype, int idx));
+ int clr_history __ARGS((int histype));
+*** ../vim-6.2.192/src/search.c Sat Sep 27 19:36:47 2003
+--- src/search.c Sun Jan 18 13:05:15 2004
+***************
+*** 172,178 ****
+ }
+ #ifdef FEAT_CMDHIST
+ else if (options & SEARCH_HIS) /* put new pattern in history */
+! add_to_history(HIST_SEARCH, pat, TRUE);
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+--- 172,178 ----
+ }
+ #ifdef FEAT_CMDHIST
+ else if (options & SEARCH_HIS) /* put new pattern in history */
+! add_to_history(HIST_SEARCH, pat, TRUE, NUL);
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+*** ../vim-6.2.192/src/tag.c Sun Jan 18 20:58:01 2004
+--- src/tag.c Sun Jan 18 13:05:42 2004
+***************
+*** 2699,2705 ****
+ #if 0 /* disabled for now */
+ #ifdef FEAT_CMDHIST
+ /* put pattern in search history */
+! add_to_history(HIST_SEARCH, pbuf + 1, TRUE);
+ #endif
+ #endif
+ save_lnum = curwin->w_cursor.lnum;
+--- 2699,2705 ----
+ #if 0 /* disabled for now */
+ #ifdef FEAT_CMDHIST
+ /* put pattern in search history */
+! add_to_history(HIST_SEARCH, pbuf + 1, TRUE, pbuf[0]);
+ #endif
+ #endif
+ save_lnum = curwin->w_cursor.lnum;
+*** ../vim-6.2.192/src/version.c Sun Jan 18 21:22:26 2004
+--- src/version.c Sun Jan 18 21:24:10 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 193,
+ /**/
+
+--
+WOMAN: Dennis, there's some lovely filth down here. Oh -- how d'you do?
+ARTHUR: How do you do, good lady. I am Arthur, King of the Britons.
+ Who's castle is that?
+WOMAN: King of the who?
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.194
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.194 (after 6.2.068)
+Problem: For NetBeans, instead of writing the file and sending an event
+ about it, tell NetBeans to write the file.
+Solution: Add the "save" command, "netbeansBuffer" command and
+ "buttonRelease" event to the netbeans protocol. Updated the
+ interface to version 2.2. (Gordon Prieur)
+ Also: open a fold when the cursor has been positioned.
+ Also: fix memory leak, free result of nb_quote().
+Files: runtime/doc/netbeans.txt, src/fileio.c, src/netbeans.c,
+ src/normal.c, src/proto/netbeans.pro, src/structs.h
+
+
+*** ../vim-6.2.193/runtime/doc/netbeans.txt Sun Oct 12 16:42:14 2003
+--- runtime/doc/netbeans.txt Sat Jan 17 16:38:31 2004
+***************
+*** 1,4 ****
+! *netbeans.txt* For Vim version 6.2. Last change: 2003 Sep 12
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur
+--- 1,4 ----
+! *netbeans.txt* For Vim version 6.2. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur
+***************
+*** 14,21 ****
+ 6. Obtaining the External Editor Module |obtaining-exted|
+ 7. Setting up NetBeans to run with Vim |netbeans-setup|
+ 8. Messages |netbeans-messages|
+! 9. Running Vim from Netbeans |netbeans-run|
+! 10. Netbeans protocol |netbeans-protocol|
+ 11. Known problems |netbeans-problems|
+
+ {Vi does not have any of these features}
+--- 14,21 ----
+ 6. Obtaining the External Editor Module |obtaining-exted|
+ 7. Setting up NetBeans to run with Vim |netbeans-setup|
+ 8. Messages |netbeans-messages|
+! 9. Running Vim from NetBeans |netbeans-run|
+! 10. NetBeans protocol |netbeans-protocol|
+ 11. Known problems |netbeans-problems|
+
+ {Vi does not have any of these features}
+***************
+*** 26,32 ****
+
+ NetBeans is an open source Integrated Development Environment developed
+ jointly by Sun Microsystems, Inc. and the netbeans.org developer community.
+! Initialy just a Java IDE, NetBeans has had C, C++, and Fortran support added
+ in recent releases.
+
+ For more information visit the main NetBeans web site http://www.netbeans.org
+--- 26,32 ----
+
+ NetBeans is an open source Integrated Development Environment developed
+ jointly by Sun Microsystems, Inc. and the netbeans.org developer community.
+! Initially just a Java IDE, NetBeans has had C, C++, and Fortran support added
+ in recent releases.
+
+ For more information visit the main NetBeans web site http://www.netbeans.org
+***************
+*** 91,97 ****
+
+ The Win32 support is now in beta stage.
+
+! To use XPM signs on Win32 (e.g. when using with Netbeans) you can compile
+ XPM by yourself or use precompiled libraries from http://iamphet.nm.ru/xpm
+ (for MS Visual C++) or http://gnuwin32.sourceforge.net (for MinGW).
+
+--- 91,97 ----
+
+ The Win32 support is now in beta stage.
+
+! To use XPM signs on Win32 (e.g. when using with NetBeans) you can compile
+ XPM by yourself or use precompiled libraries from http://iamphet.nm.ru/xpm
+ (for MS Visual C++) or http://gnuwin32.sourceforge.net (for MinGW).
+
+***************
+*** 137,143 ****
+ Unfortunately, some versions do not have this module in their update
+ center. If you cannot download via the update center you will need to
+ download sources and build the module. I will try and get the module
+! available from the NetBeans Update Center so building will be unnecesary.
+ Also check http://externaleditor.netbeans.org for other availability options.
+
+ To download the External Editor sources via CVS and build your own module,
+--- 137,143 ----
+ Unfortunately, some versions do not have this module in their update
+ center. If you cannot download via the update center you will need to
+ download sources and build the module. I will try and get the module
+! available from the NetBeans Update Center so building will be unnecessary.
+ Also check http://externaleditor.netbeans.org for other availability options.
+
+ To download the External Editor sources via CVS and build your own module,
+***************
+*** 156,162 ****
+ an Expert tab. In the Properties tab make sure the "Editor Type" is set
+ to "Vim". In the Expert tab make sure the "Vim Command" is correct.
+
+! You should be carefull if you change the "Vim Command". There are command
+ line options there which must be there for the connection to be properly
+ set up. You can change the command name but thats about it. If your gvim
+ can be found by your $PATH then the VIM Command can start with "gvim". If
+--- 156,162 ----
+ an Expert tab. In the Properties tab make sure the "Editor Type" is set
+ to "Vim". In the Expert tab make sure the "Vim Command" is correct.
+
+! You should be careful if you change the "Vim Command". There are command
+ line options there which must be there for the connection to be properly
+ set up. You can change the command name but thats about it. If your gvim
+ can be found by your $PATH then the VIM Command can start with "gvim". If
+***************
+*** 172,208 ****
+ ==============================================================================
+ 8. Messages *netbeans-messages*
+
+! These messages are specific for Netbeans:
+
+ *E463*
+ Region is guarded, cannot modify
+! Netbeans defines guarded areas in the text, which you cannot
+ change.
+
+ ==============================================================================
+! 9. Running Vim from Netbeans *netbeans-run*
+
+! Netbeans starts Vim with the |-nb| argument. The full form is: >
+ -nb:{hostname}:{addr}:{password}
+
+! {hostname} is the name of the machine where Netbeans is running. When omitted
+ the environment variable "__NETBEANS_HOST" is used or the default "localhost".
+
+! {addr} is the port number for Netbeans. When omitted the environment variable
+ "__NETBEANS_SOCKET" is used or the default 3219.
+
+! {password} is the password for connecting to Netbeans. When omitted the
+ environment variable "__NETBEANS_VIM_PASSWORD" is used or "changeme".
+
+ ==============================================================================
+! 10. Netbeans protocol *netbeans-protocol*
+
+! The communication between Netbeans and Vim uses plain text messages. This
+ protocol was first designed to work with the external editor module of
+! Netbeans (see http://externaleditor.netbeans.org). Later it was extended to
+ work with Agide (A-A-P GUI IDE, see http://www.a-a-p.org). The extensions are
+ marked with "version 2.1".
+
+ The messages are currently sent over a socket. Since the messages are in
+ plain UTF-8 text this protocol could also be used with any other communication
+ mechanism.
+--- 172,228 ----
+ ==============================================================================
+ 8. Messages *netbeans-messages*
+
+! These messages are specific for NetBeans:
+
+ *E463*
+ Region is guarded, cannot modify
+! NetBeans defines guarded areas in the text, which you cannot
+ change.
+
++ *E656*
++ NetBeans dissallows writes of unmodified buffers
++ NetBeans does not support writes of unmodified buffers that
++ were opened from NetBeans.
++
++ *E657*
++ Partial writes disallowed for NetBeans buffers
++ NetBeans does not support partial writes for buffers that were
++ opened from NetBeans.
++
+ ==============================================================================
+! 9. Running Vim from NetBeans *netbeans-run*
+
+! NetBeans starts Vim with the |-nb| argument. The full form is: >
+ -nb:{hostname}:{addr}:{password}
+
+! {hostname} is the name of the machine where NetBeans is running. When omitted
+ the environment variable "__NETBEANS_HOST" is used or the default "localhost".
+
+! {addr} is the port number for NetBeans. When omitted the environment variable
+ "__NETBEANS_SOCKET" is used or the default 3219.
+
+! {password} is the password for connecting to NetBeans. When omitted the
+ environment variable "__NETBEANS_VIM_PASSWORD" is used or "changeme".
+
+ ==============================================================================
+! 10. NetBeans protocol *netbeans-protocol*
+
+! The communication between NetBeans and Vim uses plain text messages. This
+ protocol was first designed to work with the external editor module of
+! NetBeans (see http://externaleditor.netbeans.org). Later it was extended to
+ work with Agide (A-A-P GUI IDE, see http://www.a-a-p.org). The extensions are
+ marked with "version 2.1".
+
++ Version 2.2 of the protocol has several minor changes which should only
++ affect NetBeans users (ie, not Agide users). However, a bug was fixed which
++ could cause confusion. The netbeans_saved() function sent a "save" protocol
++ command. In protocol version 2.1 and earlier this was incorrectly interpreted
++ as a notification that a write had taken place. In reality, it told NetBeans
++ to save the file so multiple writes were being done. This caused various
++ problems and has been fixed in 2.2. To decrease the likelyhood of this
++ confusion happening again, netbeans_saved() has been renamed to
++ netbeans_save_buffer().
++
+ The messages are currently sent over a socket. Since the messages are in
+ plain UTF-8 text this protocol could also be used with any other communication
+ mechanism.
+***************
+*** 304,310 ****
+ typeNum number sequence number of the annotation
+ defined with defineAnnoType for this
+ buffer
+! off number offset where annotion is to be placed
+ len number not used
+ In version 2.1 "lnum/col" can be used instead of "off".
+
+--- 324,330 ----
+ typeNum number sequence number of the annotation
+ defined with defineAnnoType for this
+ buffer
+! off number offset where annotation is to be placed
+ len number not used
+ In version 2.1 "lnum/col" can be used instead of "off".
+
+***************
+*** 316,322 ****
+
+ create Creates a buffer without a name. Replaces the current buffer
+ (it's hidden when it was changed).
+! Netbeans uses this as the first command for a file that is
+ being opened. The sequence of commands could be:
+ create
+ setCaretListener (ignored)
+--- 336,342 ----
+
+ create Creates a buffer without a name. Replaces the current buffer
+ (it's hidden when it was changed).
+! NetBeans uses this as the first command for a file that is
+ being opened. The sequence of commands could be:
+ create
+ setCaretListener (ignored)
+***************
+*** 374,383 ****
+ moveAnnoToFront serNum
+ Not implemented.
+
+ putBufferNumber pathname
+ Associate a buffer number with the Vim buffer by the name
+ "pathname", a string argument. To be used when the editor
+! repored editing another file to the IDE and the IDE needs to
+ tell the editor what buffer number it will use for this file.
+ Also marks the buffer as initialized.
+ New in version 2.1.
+--- 394,408 ----
+ moveAnnoToFront serNum
+ Not implemented.
+
++ netbeansBuffer isNetbeansBuffer
++ If "isNetbeansBuffer" is "T" then this buffer is ``owned'' by
++ NetBeans.
++ New in version 2.2.
++
+ putBufferNumber pathname
+ Associate a buffer number with the Vim buffer by the name
+ "pathname", a string argument. To be used when the editor
+! reported editing another file to the IDE and the IDE needs to
+ tell the editor what buffer number it will use for this file.
+ Also marks the buffer as initialized.
+ New in version 2.1.
+***************
+*** 389,394 ****
+--- 414,429 ----
+ Remove a previously place annotation for this buffer.
+ "serNum" is the same number used in addAnno.
+
++ save Save the buffer when it was modified. The other side of the
++ interface is expected to write the buffer and invoke
++ "setModified" to reset the "changed" flag of the buffer.
++ The writing is skipped when one of these conditions is true:
++ - 'write' is not set
++ - the buffer is read-only
++ - the buffer does not have a file name
++ - 'buftype' disallows writing
++ New in version 2.2.
++
+ setAsUser Not implemented.
+
+ setBufferNumber pathname
+***************
+*** 435,441 ****
+
+ setTitle name
+ Set the title for the buffer to "name", a string argument.
+! The title is only used for Netbeans functions, not by Vim.
+
+ setVisible visible
+ When the boolean argument "visible" is "T", goto the buffer.
+--- 470,476 ----
+
+ setTitle name
+ Set the title for the buffer to "name", a string argument.
+! The title is only used for NetBeans functions, not by Vim.
+
+ setVisible visible
+ When the boolean argument "visible" is "T", goto the buffer.
+***************
+*** 550,555 ****
+--- 585,599 ----
+ the mouse pointer.
+ New in version 2.1.
+
++ buttonRelease button lnum col
++ Report which button was pressed and the location of the cursor
++ at the time of the release. Only for buffers that are owned
++ by NetBeans. This event is not sent if the button was
++ released while the mouse was in the status line or in a
++ separator line. If col is less than 1 the button release was
++ in the sign area.
++ New in version 2.2.
++
+ fileClosed Not implemented.
+
+ fileModified Not implemented.
+***************
+*** 558,564 ****
+ A file was opened by the user.
+ Arguments:
+ pathname string name of the file
+! open boolean always "F"
+ modified boolean always "F"
+
+ geometry cols rows x y
+--- 602,608 ----
+ A file was opened by the user.
+ Arguments:
+ pathname string name of the file
+! open boolean always "T"
+ modified boolean always "F"
+
+ geometry cols rows x y
+***************
+*** 630,636 ****
+ Only fired when enabled, see "startDocumentListen".
+
+ version vers Report the version of the interface implementation. Vim
+! reports "2.1" (including the quotes).
+
+
+ 10.6 Special messages *nb-special*
+--- 674,680 ----
+ Only fired when enabled, see "startDocumentListen".
+
+ version vers Report the version of the interface implementation. Vim
+! reports "2.2" (including the quotes).
+
+
+ 10.6 Special messages *nb-special*
+*** ../vim-6.2.193/src/fileio.c Sun Jan 18 21:04:53 2004
+--- src/fileio.c Thu Jan 15 22:07:40 2004
+***************
+*** 2658,2663 ****
+--- 2658,2691 ----
+ }
+ #endif
+
++ #ifdef FEAT_NETBEANS_INTG
++ if (usingNetbeans && isNetbeansBuffer(buf))
++ {
++ if (whole)
++ {
++ if (buf->b_changed)
++ {
++ netbeans_save_buffer(buf);
++ return retval;
++ }
++ else
++ {
++ errnum = (char_u *)"E656: ";
++ errmsg = (char_u *)_("NetBeans dissallows writes of unmodified buffers");
++ buffer = NULL;
++ goto fail;
++ }
++ }
++ else
++ {
++ errnum = (char_u *)"E657: ";
++ errmsg = (char_u *)_("Partial writes disallowed for NetBeans buffers");
++ buffer = NULL;
++ goto fail;
++ }
++ }
++ #endif
++
+ if (shortmess(SHM_OVER) && !exiting)
+ msg_scroll = FALSE; /* overwrite previous file message */
+ else
+***************
+*** 3900,3908 ****
+ {
+ unchanged(buf, TRUE);
+ u_unchanged(buf);
+- #ifdef FEAT_NETBEANS_INTG
+- netbeans_saved(buf);
+- #endif
+ }
+
+ /*
+--- 3928,3933 ----
+*** ../vim-6.2.193/src/netbeans.c Mon Dec 29 20:14:44 2003
+--- src/netbeans.c Tue Jan 13 13:55:27 2004
+***************
+*** 62,68 ****
+
+ /* The first implementation (working only with Netbeans) returned "1.1". The
+ * protocol implemented here also supports A-A-P. */
+! static char *ExtEdProtocolVersion = "2.1";
+
+ static long pos2off __ARGS((buf_T *, pos_T *));
+ static pos_T *off2pos __ARGS((buf_T *, long));
+--- 62,68 ----
+
+ /* The first implementation (working only with Netbeans) returned "1.1". The
+ * protocol implemented here also supports A-A-P. */
+! static char *ExtEdProtocolVersion = "2.2";
+
+ static long pos2off __ARGS((buf_T *, pos_T *));
+ static pos_T *off2pos __ARGS((buf_T *, long));
+***************
+*** 719,724 ****
+--- 719,726 ----
+
+ cmdno = strtol((char *)q, (char **)&q, 10);
+
++ q = skipwhite(q);
++
+ if (nb_do_cmd(bufno, verb, isfunc, cmdno, q) == FAIL)
+ {
+ nbdebug(("nb_parse_cmd: Command error for \"%s\"\n", cmd));
+***************
+*** 774,779 ****
+--- 776,790 ----
+ }
+
+ /*
++ * Is this a NetBeans-owned buffer?
++ */
++ int
++ isNetbeansBuffer(buf_T *bufp)
++ {
++ return bufp->b_netbeans_file;
++ }
++
++ /*
+ * Given a Netbeans buffer number, return the netbeans buffer.
+ * Returns NULL for 0 or a negative number. A 0 bufno means a
+ * non-buffer related command has been sent.
+***************
+*** 1010,1016 ****
+
+ if (*p++ != '"')
+ {
+! nbdebug(("nb_unquote called with string that doesn't start with a quote!: %s", p));
+ result[0] = NUL;
+ return result;
+ }
+--- 1021,1028 ----
+
+ if (*p++ != '"')
+ {
+! nbdebug(("nb_unquote called with string that doesn't start with a quote!: %s\n",
+! p));
+ result[0] = NUL;
+ return result;
+ }
+***************
+*** 1311,1317 ****
+ off = strtol((char *)args, (char **)&args, 10);
+
+ /* get text to be inserted */
+! ++args; /* skip space */
+ args = to_free = (char_u *)nb_unquote(args, NULL);
+
+ if (buf == NULL || buf->bufp == NULL)
+--- 1323,1329 ----
+ off = strtol((char *)args, (char **)&args, 10);
+
+ /* get text to be inserted */
+! args = skipwhite(args);
+ args = to_free = (char_u *)nb_unquote(args, NULL);
+
+ if (buf == NULL || buf->bufp == NULL)
+***************
+*** 1494,1500 ****
+ return FAIL;
+ }
+ vim_free(buf->displayname);
+! buf->displayname = nb_unquote(++args, NULL);
+ nbdebug((" SETTITLE %d %s\n", bufno, buf->displayname));
+ /* =====================================================================*/
+ }
+--- 1506,1512 ----
+ return FAIL;
+ }
+ vim_free(buf->displayname);
+! buf->displayname = nb_unquote(args, NULL);
+ nbdebug((" SETTITLE %d %s\n", bufno, buf->displayname));
+ /* =====================================================================*/
+ }
+***************
+*** 1528,1534 ****
+ EMSG("E641: null buf in setBufferNumber");
+ return FAIL;
+ }
+! to_free = (char_u *)nb_unquote(++args, NULL);
+ if (to_free == NULL)
+ return FAIL;
+ bufp = buflist_findname(to_free);
+--- 1540,1546 ----
+ EMSG("E641: null buf in setBufferNumber");
+ return FAIL;
+ }
+! to_free = (char_u *)nb_unquote(args, NULL);
+ if (to_free == NULL)
+ return FAIL;
+ bufp = buflist_findname(to_free);
+***************
+*** 1567,1573 ****
+ return FAIL;
+ }
+ vim_free(buf->displayname);
+! buf->displayname = nb_unquote(++args, NULL);
+ nbdebug((" SETFULLNAME %d %s\n", bufno, buf->displayname));
+
+ netbeansReadFile = 0; /* don't try to open disk file */
+--- 1579,1585 ----
+ return FAIL;
+ }
+ vim_free(buf->displayname);
+! buf->displayname = nb_unquote(args, NULL);
+ nbdebug((" SETFULLNAME %d %s\n", bufno, buf->displayname));
+
+ netbeansReadFile = 0; /* don't try to open disk file */
+***************
+*** 1588,1594 ****
+ }
+ /* Edit a file: like create + setFullName + read the file. */
+ vim_free(buf->displayname);
+! buf->displayname = nb_unquote(++args, NULL);
+ nbdebug((" EDITFILE %d %s\n", bufno, buf->displayname));
+ do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
+ ECMD_HIDE + ECMD_OLDBUF);
+--- 1600,1606 ----
+ }
+ /* Edit a file: like create + setFullName + read the file. */
+ vim_free(buf->displayname);
+! buf->displayname = nb_unquote(args, NULL);
+ nbdebug((" EDITFILE %d %s\n", bufno, buf->displayname));
+ do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
+ ECMD_HIDE + ECMD_OLDBUF);
+***************
+*** 1603,1609 ****
+ }
+ else if (streq((char *)cmd, "setVisible"))
+ {
+- ++args;
+ if (buf == NULL || buf->bufp == NULL)
+ {
+ /* EMSG("E645: null bufp in setVisible"); */
+--- 1615,1620 ----
+***************
+*** 1636,1642 ****
+ }
+ else if (streq((char *)cmd, "setModified"))
+ {
+- ++args;
+ if (buf == NULL || buf->bufp == NULL)
+ {
+ /* EMSG("E646: null bufp in setModified"); */
+--- 1647,1652 ----
+***************
+*** 1667,1673 ****
+ if (balloonEval != NULL)
+ {
+ vim_free(text);
+! text = nb_unquote(++args, NULL);
+ if (text != NULL)
+ gui_mch_post_balloon(balloonEval, (char_u *)text);
+ }
+--- 1677,1683 ----
+ if (balloonEval != NULL)
+ {
+ vim_free(text);
+! text = nb_unquote(args, NULL);
+ if (text != NULL)
+ gui_mch_post_balloon(balloonEval, (char_u *)text);
+ }
+***************
+*** 1681,1687 ****
+ char_u *s;
+ #endif
+
+- ++args;
+ if (buf == NULL || buf->bufp == NULL)
+ {
+ EMSG("E647: null bufp in setDot");
+--- 1691,1696 ----
+***************
+*** 1997,2002 ****
+--- 2006,2051 ----
+ }
+ /* =====================================================================*/
+ }
++ else if (streq((char *)cmd, "save"))
++ {
++ if (buf == NULL || buf->bufp == NULL)
++ {
++ nbdebug((" null bufp in %s command", cmd));
++ return FAIL;
++ }
++
++ /* the following is taken from ex_cmds.c (do_wqall function) */
++ if (bufIsChanged(buf->bufp))
++ {
++ /* Only write if the buffer can be written. */
++ if (p_write
++ && !buf->bufp->b_p_ro
++ && buf->bufp->b_ffname != NULL
++ #ifdef FEAT_QUICKFIX
++ && !bt_dontwrite(buf->bufp)
++ #endif
++ )
++ {
++ buf_write_all(buf->bufp, FALSE);
++ #ifdef FEAT_AUTOCMD
++ /* an autocommand may have deleted the buffer */
++ if (!buf_valid(buf->bufp))
++ buf->bufp = NULL;
++ #endif
++ }
++ }
++ /* =====================================================================*/
++ }
++ else if (streq((char *)cmd, "netbeansBuffer"))
++ {
++ if (buf == NULL || buf->bufp == NULL)
++ {
++ nbdebug((" null bufp in %s command", cmd));
++ return FAIL;
++ }
++ buf->bufp->b_netbeans_file = *args == 'T' ? TRUE : FALSE;
++ /* =====================================================================*/
++ }
+ else if (streq((char *)cmd, "version"))
+ {
+ nbdebug((" Version = %s\n", (char *) args));
+***************
+*** 2266,2272 ****
+ sprintf(buffer, "0:fileOpened=%d \"%s\" %s %s\n",
+ 0,
+ (char *)q,
+! "F", /* open in NetBeans */
+ "F"); /* modified */
+
+ vim_free(q);
+--- 2315,2321 ----
+ sprintf(buffer, "0:fileOpened=%d \"%s\" %s %s\n",
+ 0,
+ (char *)q,
+! "T", /* open in NetBeans */
+ "F"); /* modified */
+
+ vim_free(q);
+***************
+*** 2464,2469 ****
+--- 2513,2542 ----
+ }
+
+ /*
++ * Send a button release event back to netbeans. Its up to netbeans
++ * to decide what to do (if anything) with this event.
++ */
++ void
++ netbeans_button_release(int button)
++ {
++ char buf[128];
++ int bufno;
++
++ bufno = nb_getbufno(curbuf);
++
++ if (bufno >= 0 && curwin != NULL && curwin->w_buffer == curbuf)
++ {
++ int lnum = curwin->w_cursor.lnum;
++ int col = mouse_col - curwin->w_wincol - (curwin->w_p_nu ? 9 : 1);
++
++ sprintf(buf, "%d:buttonRelease=%d %d %d %d\n", bufno, cmdno, button, lnum, col);
++ nbdebug(("EVT: %s", buf));
++ nb_send(buf, "netbeans_button_release");
++ }
++ }
++
++
++ /*
+ * Send a keypress event back to netbeans. This usualy simulates some
+ * kind of function key press.
+ */
+***************
+*** 2532,2538 ****
+ * Send a save event to netbeans.
+ */
+ void
+! netbeans_saved(buf_T *bufp)
+ {
+ char_u buf[64];
+ int bufno;
+--- 2605,2611 ----
+ * Send a save event to netbeans.
+ */
+ void
+! netbeans_save_buffer(buf_T *bufp)
+ {
+ char_u buf[64];
+ int bufno;
+***************
+*** 2546,2552 ****
+
+ sprintf((char *)buf, "%d:save=%d\n", bufno, cmdno);
+ nbdebug(("EVT: %s", buf));
+! nb_send((char *)buf, "netbeans_saved");
+ }
+
+
+--- 2619,2625 ----
+
+ sprintf((char *)buf, "%d:save=%d\n", bufno, cmdno);
+ nbdebug(("EVT: %s", buf));
+! nb_send((char *)buf, "netbeans_save_buffer");
+ }
+
+
+*** ../vim-6.2.193/src/normal.c Sun Jan 18 21:27:18 2004
+--- src/normal.c Sun Jan 18 18:49:04 2004
+***************
+*** 2473,2478 ****
+--- 2473,2490 ----
+ in_sep_line = (jump_flags & IN_SEP_LINE);
+ #endif
+
++ #ifdef FEAT_NETBEANS_INTG
++ if (usingNetbeans && isNetbeansBuffer(curbuf)
++ && !(jump_flags & (IN_STATUS_LINE | IN_SEP_LINE)))
++ {
++ int key = KEY2TERMCAP1(c);
++
++ if (key == (int)KE_LEFTRELEASE || key == (int)KE_MIDDLERELEASE
++ || key == (int)KE_RIGHTRELEASE)
++ netbeans_button_release(which_button);
++ }
++ #endif
++
+ /* When jumping to another window, clear a pending operator. That's a bit
+ * friendlier than beeping and not jumping to that window. */
+ if (curwin != old_curwin && oap != NULL && oap->op_type != OP_NOP)
+*** ../vim-6.2.193/src/proto/netbeans.pro Sun Oct 12 16:42:14 2003
+--- src/proto/netbeans.pro Tue Jan 13 13:48:34 2004
+***************
+*** 3,8 ****
+--- 3,9 ----
+ void netbeans_gtk_connect __ARGS((void));
+ void netbeans_w32_connect __ARGS((void));
+ void messageFromNetbeansW32 __ARGS((void));
++ int isNetbeansBuffer __ARGS((buf_T *bufp));
+ void netbeans_end __ARGS((void));
+ void netbeans_startup_done __ARGS((void));
+ void netbeans_frame_moved __ARGS((int new_x, int new_y));
+***************
+*** 11,18 ****
+ void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, int oldlen, char_u *txt, int newlen));
+ void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len));
+ void netbeans_unmodified __ARGS((buf_T *bufp));
+ void netbeans_keycommand __ARGS((int key));
+! void netbeans_saved __ARGS((buf_T *bufp));
+ void netbeans_deleted_all_lines __ARGS((buf_T *bufp));
+ int netbeans_is_guarded __ARGS((linenr_T top, linenr_T bot));
+ void netbeans_draw_multisign_indicator __ARGS((int row));
+--- 12,20 ----
+ void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, int oldlen, char_u *txt, int newlen));
+ void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len));
+ void netbeans_unmodified __ARGS((buf_T *bufp));
++ void netbeans_button_release __ARGS((int button));
+ void netbeans_keycommand __ARGS((int key));
+! void netbeans_save_buffer __ARGS((buf_T *bufp));
+ void netbeans_deleted_all_lines __ARGS((buf_T *bufp));
+ int netbeans_is_guarded __ARGS((linenr_T top, linenr_T bot));
+ void netbeans_draw_multisign_indicator __ARGS((int row));
+*** ../vim-6.2.193/src/structs.h Sun Jan 18 21:12:26 2004
+--- src/structs.h Tue Jan 13 12:57:23 2004
+***************
+*** 1233,1238 ****
+--- 1233,1242 ----
+ signlist_T *b_signlist; /* list of signs to draw */
+ #endif
+
++ #ifdef FEAT_NETBEANS_INTG
++ int b_netbeans_file; /* TRUE when buffer is owned by NetBeans */
++ #endif
++
+ };
+
+ /*
+*** ../vim-6.2.193/src/version.c Sun Jan 18 21:27:18 2004
+--- src/version.c Sun Jan 18 21:29:39 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 194,
+ /**/
+
+--
+`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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.195
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.195 (after 6.2.190)
+Problem: Compiling fails for missing CPO_REMMARK symbol.
+Solution: Add the patch I forgot to include...
+Files: src/option.h
+
+
+*** ../vim-6.2.194/src/option.h Sat May 17 21:02:23 2003
+--- src/option.h Mon Jan 12 20:21:42 2004
+***************
+*** 142,147 ****
+--- 142,148 ----
+ #define CPO_OVERNEW 'O' /* silently overwrite new file */
+ #define CPO_LISP 'p' /* 'lisp' indenting */
+ #define CPO_REDO 'r'
++ #define CPO_REMMARK 'R' /* remove marks when filtering */
+ #define CPO_BUFOPT 's'
+ #define CPO_BUFOPTGLOB 'S'
+ #define CPO_TAGPAT 't'
+***************
+*** 157,163 ****
+ #define CPO_STAR '*' /* ":*" means ":@" */
+ #define CPO_SPECI '<' /* don't recognize <> in mappings */
+ #define CPO_DEFAULT "aABceFs"
+! #define CPO_ALL "aAbBcCdDeEfFgijJkKlLmMnoOprsStuvwWxy$!%*<"
+
+ /* characters for p_ww option: */
+ #define WW_ALL "bshl<>[],~"
+--- 158,164 ----
+ #define CPO_STAR '*' /* ":*" means ":@" */
+ #define CPO_SPECI '<' /* don't recognize <> in mappings */
+ #define CPO_DEFAULT "aABceFs"
+! #define CPO_ALL "aAbBcCdDeEfFgijJkKlLmMnoOprRsStuvwWxy$!%*<"
+
+ /* characters for p_ww option: */
+ #define WW_ALL "bshl<>[],~"
+*** ../vim-6.2.194/src/version.c Sun Jan 18 21:31:56 2004
+--- src/version.c Sun Jan 18 23:21:27 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 195,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.196
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.196 (after 6.2.191)
+Problem: Rebuilding the documentation doesn't use the sponsor.txt file.
+Solution: Add sponsor.txt to the Makefile. (Christian J. Robinson)
+Files: runtime/doc/Makefile
+
+
+*** ../vim-6.2.195/runtime/doc/Makefile Sun Jun 1 16:10:00 2003
+--- runtime/doc/Makefile Tue Jan 20 11:59:49 2004
+***************
+*** 77,82 ****
+--- 77,83 ----
+ rileft.txt \
+ scroll.txt \
+ sign.txt \
++ sponsor.txt \
+ starting.txt \
+ syntax.txt \
+ tagsrch.txt \
+***************
+*** 193,198 ****
+--- 194,200 ----
+ rileft.html \
+ scroll.html \
+ sign.html \
++ sponsor.html \
+ starting.html \
+ syntax.html \
+ tagsrch.html \
+*** ../vim-6.2.195/src/version.c Sun Jan 18 23:21:49 2004
+--- src/version.c Sun Jan 25 19:27:58 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 196,
+ /**/
+
+--
+A law to reduce crime states: "It is mandatory for a motorist with criminal
+intentions to stop at the city limits and telephone the chief of police as he
+is entering the town.
+ [real standing law in Washington, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.197
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.197
+Problem: It is not possible to force a redraw of status lines. (Gary
+ Johnson)
+Solution: Add the ":redrawstatus" command.
+Files: runtime/doc/various.txt, src/ex_cmds.h, src/ex_docmd.c,
+ src/screen.c
+
+
+*** ../vim-6.2.196/runtime/doc/various.txt Sun Jun 1 12:20:37 2003
+--- runtime/doc/various.txt Wed Jan 21 13:57:43 2004
+***************
+*** 1,4 ****
+! *various.txt* For Vim version 6.2. Last change: 2003 May 11
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+--- 1,4 ----
+! *various.txt* For Vim version 6.2. Last change: 2004 Jan 21
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+***************
+*** 24,35 ****
+ or function. Also when halfway a mapping and
+ 'lazyredraw' is set.
+
+ *N<Del>*
+ <Del> When entering a number: Remove the last digit.
+ Note: if you like to use <BS> for this, add this
+! mapping to your .vimrc:
+ :map CTRL-V <BS> CTRL-V <Del>
+! See |:fixdel| if your <Del> key does not do what you
+ want.
+
+ :as[cii] or *ga* *:as* *:ascii*
+--- 24,42 ----
+ or function. Also when halfway a mapping and
+ 'lazyredraw' is set.
+
++ *:redraws* *:redrawstatus*
++ :redraws[tatus][!] Redraw the status line of the current window. When !
++ is included all status lines are redrawn.
++ Useful to update the status line(s) when 'statusline'
++ includes an item that doesn't cause automatic
++ updating.
++
+ *N<Del>*
+ <Del> When entering a number: Remove the last digit.
+ Note: if you like to use <BS> for this, add this
+! mapping to your .vimrc: >
+ :map CTRL-V <BS> CTRL-V <Del>
+! < See |:fixdel| if your <Del> key does not do what you
+ want.
+
+ :as[cii] or *ga* *:as* *:ascii*
+*** ../vim-6.2.196/src/ex_cmds.h Sun Jan 18 20:46:13 2004
+--- src/ex_cmds.h Mon Jan 19 12:13:22 2004
+***************
+*** 618,623 ****
+--- 618,625 ----
+ BANG|FILES|TRLBAR|CMDWIN),
+ EX(CMD_redraw, "redraw", ex_redraw,
+ BANG|TRLBAR|CMDWIN),
++ EX(CMD_redrawstatus, "redrawstatus", ex_redrawstatus,
++ BANG|TRLBAR|CMDWIN),
+ EX(CMD_registers, "registers", ex_display,
+ EXTRA|NOTRLCOM|TRLBAR|CMDWIN),
+ EX(CMD_resize, "resize", ex_resize,
+*** ../vim-6.2.196/src/ex_docmd.c Sun Jan 18 21:12:26 2004
+--- src/ex_docmd.c Thu Jan 22 17:22:52 2004
+***************
+*** 269,274 ****
+--- 269,275 ----
+ static void ex_redo __ARGS((exarg_T *eap));
+ static void ex_redir __ARGS((exarg_T *eap));
+ static void ex_redraw __ARGS((exarg_T *eap));
++ static void ex_redrawstatus __ARGS((exarg_T *eap));
+ static void close_redir __ARGS((void));
+ static void ex_mkrc __ARGS((exarg_T *eap));
+ static void ex_mark __ARGS((exarg_T *eap));
+***************
+*** 7178,7183 ****
+--- 7179,7213 ----
+ RedrawingDisabled = r;
+ p_lz = p;
+ out_flush();
++ }
++
++ /*
++ * ":redrawstatus": force redraw of status line(s)
++ */
++ /*ARGSUSED*/
++ static void
++ ex_redrawstatus(eap)
++ exarg_T *eap;
++ {
++ #if defined(FEAT_WINDOWS)
++ int r = RedrawingDisabled;
++ int p = p_lz;
++
++ RedrawingDisabled = 0;
++ p_lz = FALSE;
++ if (eap->forceit)
++ status_redraw_all();
++ else
++ status_redraw_curbuf();
++ update_screen(
++ # ifdef FEAT_VISUAL
++ VIsual_active ? INVERTED :
++ # endif
++ 0);
++ RedrawingDisabled = r;
++ p_lz = p;
++ out_flush();
++ #endif
+ }
+
+ static void
+*** ../vim-6.2.196/src/screen.c Mon Aug 4 20:55:46 2003
+--- src/screen.c Thu Jan 22 17:22:13 2004
+***************
+*** 4584,4590 ****
+ }
+ }
+
+- # if defined(FEAT_KEYMAP) || defined(PROTO)
+ /*
+ * mark all status lines of the current buffer for redraw
+ */
+--- 4584,4589 ----
+***************
+*** 4600,4606 ****
+ redraw_later(VALID);
+ }
+ }
+- # endif
+
+ /*
+ * Redraw all status lines that need to be redrawn.
+--- 4599,4604 ----
+*** ../vim-6.2.196/src/version.c Sun Jan 25 19:28:46 2004
+--- src/version.c Sun Jan 25 19:30:35 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 197,
+ /**/
+
+--
+No children may attend school with their breath smelling of "wild onions."
+ [real standing law in West Virginia, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.198
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.198
+Problem: A few messages are not translated. (Ernest Adrogue)
+Solution: Mark the messages to be translated.
+Files: src/ex_cmds.c
+
+
+*** ../vim-6.2.197/src/ex_cmds.c Sun Jan 18 21:12:26 2004
+--- src/ex_cmds.c Mon Jan 19 14:31:14 2004
+***************
+*** 5712,5720 ****
+ msg_outtrans(sp->sn_icon);
+ #ifdef FEAT_SIGN_ICONS
+ if (sp->sn_image == NULL)
+! MSG_PUTS(" (NOT FOUND)");
+ #else
+! MSG_PUTS(" (not supported)");
+ #endif
+ }
+ if (sp->sn_text != NULL)
+--- 5711,5719 ----
+ msg_outtrans(sp->sn_icon);
+ #ifdef FEAT_SIGN_ICONS
+ if (sp->sn_image == NULL)
+! MSG_PUTS(_(" (NOT FOUND)"));
+ #else
+! MSG_PUTS(_(" (not supported)"));
+ #endif
+ }
+ if (sp->sn_text != NULL)
+*** ../vim-6.2.197/src/version.c Sun Jan 25 19:32:46 2004
+--- src/version.c Sun Jan 25 19:33:59 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 198,
+ /**/
+
+--
+Living on Earth includes an annual free trip around the Sun.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.199
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.199 (after 6.2.194)
+Problem: Vim doesn't work perfectly well with NetBeans.
+Solution: When NetBeans saves the file, reset the timestamp to avoid "file
+ changed" warnings. Close a buffer in a proper way. Don't try
+ giving a debug message with an invalid pointer. Send a
+ newDotAndMark message when needed. Report a change by the "r"
+ command to NetBeans. (Gordon Prieur)
+Files: src/netbeans.c, src/normal.c
+
+
+*** ../vim-6.2.198/src/netbeans.c Sun Jan 18 21:31:56 2004
+--- src/netbeans.c Wed Jan 21 10:58:28 2004
+***************
+*** 1655,1661 ****
+--- 1655,1670 ----
+ if (streq((char *)args, "T"))
+ buf->bufp->b_changed = 1;
+ else
++ {
++ struct stat st;
++
++ /* Assume NetBeans stored the file. Reset the timestamp to
++ * avoid "file changed" warnings. */
++ if (buf->bufp->b_ffname != NULL
++ && mch_stat((char *)buf->bufp->b_ffname, &st) >= 0)
++ buf_store_time(buf->bufp, &st, buf->bufp->b_ffname);
+ buf->bufp->b_changed = 0;
++ }
+ buf->modified = buf->bufp->b_changed;
+ /* =====================================================================*/
+ }
+***************
+*** 1759,1765 ****
+ nbdebug((" CLOSE %d: %s\n", bufno, name));
+ need_mouse_correct = TRUE;
+ if (buf->bufp != NULL)
+! close_buffer(NULL, buf->bufp, 0);
+ doupdate = 1;
+ /* =====================================================================*/
+ }
+--- 1768,1775 ----
+ nbdebug((" CLOSE %d: %s\n", bufno, name));
+ need_mouse_correct = TRUE;
+ if (buf->bufp != NULL)
+! do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD,
+! buf->bufp->b_fnum, TRUE);
+ doupdate = 1;
+ /* =====================================================================*/
+ }
+***************
+*** 2336,2342 ****
+ nbbuf_T *nbbuf = nb_get_buf(bufno);
+ char buffer[2*MAXPATHL];
+
+! if (!haveConnection)
+ return;
+
+ if (!netbeansCloseFile)
+--- 2346,2352 ----
+ nbbuf_T *nbbuf = nb_get_buf(bufno);
+ char buffer[2*MAXPATHL];
+
+! if (!haveConnection || bufno < 0)
+ return;
+
+ if (!netbeansCloseFile)
+***************
+*** 2526,2535 ****
+
+ if (bufno >= 0 && curwin != NULL && curwin->w_buffer == curbuf)
+ {
+- int lnum = curwin->w_cursor.lnum;
+ int col = mouse_col - curwin->w_wincol - (curwin->w_p_nu ? 9 : 1);
+
+! sprintf(buf, "%d:buttonRelease=%d %d %d %d\n", bufno, cmdno, button, lnum, col);
+ nbdebug(("EVT: %s", buf));
+ nb_send(buf, "netbeans_button_release");
+ }
+--- 2536,2551 ----
+
+ if (bufno >= 0 && curwin != NULL && curwin->w_buffer == curbuf)
+ {
+ int col = mouse_col - curwin->w_wincol - (curwin->w_p_nu ? 9 : 1);
++ long off = pos2off(curbuf, &curwin->w_cursor);
++
++ /* sync the cursor position */
++ sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
++ nbdebug(("EVT: %s", buf));
++ nb_send(buf, "netbeans_button_release[newDotAndMark]");
+
+! sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, cmdno,
+! button, (long)curwin->w_cursor.lnum, col);
+ nbdebug(("EVT: %s", buf));
+ nb_send(buf, "netbeans_button_release");
+ }
+*** ../vim-6.2.198/src/normal.c Sun Jan 18 21:31:56 2004
+--- src/normal.c Thu Jan 22 16:50:57 2004
+***************
+*** 6134,6139 ****
+--- 6134,6148 ----
+ || cap->nchar == ']'))
+ showmatch();
+ ++curwin->w_cursor.col;
++ #ifdef FEAT_NETBEANS_INTG
++ if (usingNetbeans)
++ {
++ colnr_T start = (colnr_T)(curwin->w_cursor.col
++ - cap->count1);
++ netbeans_inserted(curbuf, curwin->w_cursor.lnum, start,
++ (int)cap->count1, &ptr[start], (int)cap->count1);
++ }
++ #endif
+ }
+
+ /* mark the buffer as changed and prepare for displaying */
+*** ../vim-6.2.198/src/version.c Sun Jan 25 19:35:19 2004
+--- src/version.c Sun Jan 25 19:37:44 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 199,
+ /**/
+
+--
+FROG: How you English say: I one more time, mac, I unclog my nose towards
+ you, sons of a window-dresser, so, you think you could out-clever us
+ French fellows with your silly knees-bent creeping about advancing
+ behaviour. (blows a raspberry) I wave my private parts at your aunties,
+ you brightly-coloured, mealy-templed, cranberry-smelling, electric
+ donkey-bottom biters.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.200
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.200
+Problem: When recovering a file, 'fileformat' is always the default, thus
+ writing the file may result in differences. (Penelope Fudd)
+Solution: Before recovering the file try reading the original file to obtain
+ the values of 'fileformat', 'fileencoding', etc.
+Files: src/memline.c
+
+
+*** ../vim-6.2.199/src/memline.c Sun May 25 17:26:29 2003
+--- src/memline.c Wed Jan 21 10:31:41 2004
+***************
+*** 932,937 ****
+--- 932,949 ----
+ while (!(curbuf->b_ml.ml_flags & ML_EMPTY))
+ ml_delete((linenr_T)1, FALSE);
+
++ /*
++ * Try reading the original file to obtain the values of 'fileformat',
++ * 'fileencoding', etc. Ignore errors. The text itself is not used.
++ */
++ if (curbuf->b_ffname != NULL)
++ {
++ (void)readfile(curbuf->b_ffname, NULL, (linenr_T)0,
++ (linenr_T)0, (linenr_T)MAXLNUM, NULL, READ_NEW);
++ while (!(curbuf->b_ml.ml_flags & ML_EMPTY))
++ ml_delete((linenr_T)1, FALSE);
++ }
++
+ bnum = 1; /* start with block 1 */
+ page_count = 1; /* which is 1 page */
+ lnum = 0; /* append after line 0 in curbuf */
+*** ../vim-6.2.199/src/version.c Sun Jan 25 19:40:26 2004
+--- src/version.c Sun Jan 25 19:44:09 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 200,
+ /**/
+
+--
+SIGIRO -- irony detected (iron core dumped)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.201
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.201
+Problem: When 'autowriteall' is set ":qall" still refuses to exit if there
+ is a modified buffer. (Antoine Mechelynck)
+Solution: Attempt writing modified buffers as intended.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-6.2.200/src/ex_cmds2.c Wed Nov 12 20:50:01 2003
+--- src/ex_cmds2.c Wed Jan 21 16:57:12 2004
+***************
+*** 876,885 ****
+ win_T *wp;
+ #endif
+
+- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ for (;;)
+ {
+- #endif
+ /* check curbuf first: if it was changed we can't abandon it */
+ if (!hidden && curbufIsChanged())
+ buf = curbuf;
+--- 876,883 ----
+***************
+*** 892,907 ****
+ if (buf == NULL) /* No buffers changed */
+ return FALSE;
+
+! #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+! if (p_confirm || cmdmod.confirm)
+! {
+! if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+! break; /* didn't save - still changes */
+! }
+! else
+! break; /* confirm not active - has changes */
+ }
+- #endif
+
+ exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+--- 890,898 ----
+ if (buf == NULL) /* No buffers changed */
+ return FALSE;
+
+! if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+! break; /* didn't save - still changes */
+ }
+
+ exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+*** ../vim-6.2.200/src/version.c Sun Jan 25 19:45:13 2004
+--- src/version.c Sun Jan 25 19:54:00 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 201,
+ /**/
+
+--
+ Another bucket of what can only be described as human ordure hits ARTHUR.
+ARTHUR: ... Right! (to the KNIGHTS) That settles it!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.202
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.202
+Problem: Filetype names of CHILL and ch script are confusing.
+Solution: Rename "ch" to "chill" and "chscript" to "ch".
+Files: runtime/filetype.vim, runtime/makemenu.vim, runtime/synmenu.vim,
+ runtime/syntax/ch.vim, runtime/syntax/chill.vim
+
+
+*** ../vim-6.2.201/runtime/filetype.vim Tue Sep 9 22:18:18 2003
+--- runtime/filetype.vim Sat Jan 24 20:54:12 2004
+***************
+*** 1,7 ****
+ " Vim support file to detect file types
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Aug 17
+
+ " Listen very carefully, I will say this only once
+ if exists("did_load_filetypes")
+--- 1,7 ----
+ " Vim support file to detect file types
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2004 Jan 24
+
+ " Listen very carefully, I will say this only once
+ if exists("did_load_filetypes")
+***************
+*** 260,268 ****
+ au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
+ endif
+
+! " .h files can be C or C++, set c_syntax_for_h if you want C
+ au BufNewFile,BufRead *.h
+! \ if exists("c_syntax_for_h") | setf c | else | setf cpp | endif
+
+ " TLH files are C++ headers generated by Visual C++'s #import from typelibs
+ au BufNewFile,BufRead *.tlh setf cpp
+--- 263,277 ----
+ au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
+ endif
+
+! " .h files can be C, Ch or C++, set c_syntax_for_h if you want C,
+! " ch_syntax_for_h if you want Ch.
+ au BufNewFile,BufRead *.h
+! \ if exists("c_syntax_for_h") | setf c |
+! \ elseif exists("ch_syntax_for_h") | setf ch |
+! \ else | setf cpp | endif
+!
+! " Ch (CHscript)
+! au BufNewFile,BufRead *.chf setf ch
+
+ " TLH files are C++ headers generated by Visual C++'s #import from typelibs
+ au BufNewFile,BufRead *.tlh setf cpp
+***************
+*** 279,291 ****
+ \| setf debchangelog | else | setf changelog | endif
+
+ " CHILL
+! au BufNewFile,BufRead *..ch setf ch
+
+ " Changes for WEB and CWEB or CHILL
+ au BufNewFile,BufRead *.ch call <SID>FTchange()
+
+ " This function checks if one of the first ten lines start with a '@'. In
+! " that case it is probably a change file, otherwise CHILL is assumed.
+ fun! <SID>FTchange()
+ let lnum = 1
+ while lnum <= 10
+--- 288,303 ----
+ \| setf debchangelog | else | setf changelog | endif
+
+ " CHILL
+! au BufNewFile,BufRead *..ch setf chill
+
+ " Changes for WEB and CWEB or CHILL
+ au BufNewFile,BufRead *.ch call <SID>FTchange()
+
+ " This function checks if one of the first ten lines start with a '@'. In
+! " that case it is probably a change file.
+! " If the first line starts with # or ! it's probably a ch file.
+! " If a line has "main", "include", "//" ir "/*" it's probably ch.
+! " Otherwise CHILL is assumed.
+ fun! <SID>FTchange()
+ let lnum = 1
+ while lnum <= 10
+***************
+*** 293,301 ****
+ setf change
+ return
+ endif
+ let lnum = lnum + 1
+ endwhile
+! setf ch
+ endfun
+
+ " Clean
+--- 305,325 ----
+ setf change
+ return
+ endif
++ if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!'
++ setf ch
++ return
++ endif
++ if getline(lnum) =~ "MODULE"
++ setf chill
++ return
++ endif
++ if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
++ setf ch
++ return
++ endif
+ let lnum = lnum + 1
+ endwhile
+! setf chill
+ endfun
+
+ " Clean
+*** ../vim-6.2.201/runtime/makemenu.vim Wed May 14 19:49:47 2003
+--- runtime/makemenu.vim Sun Jan 25 20:03:46 2004
+***************
+*** 1,6 ****
+ " Script to define the syntax menu in synmenu.vim
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 May 14
+
+ " This is used by "make menu" in the src directory.
+ edit <sfile>:p:h/synmenu.vim
+--- 1,6 ----
+ " Script to define the syntax menu in synmenu.vim
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2004 Jan 25
+
+ " This is used by "make menu" in the src directory.
+ edit <sfile>:p:h/synmenu.vim
+***************
+*** 99,107 ****
+ SynMenu CD.Cynlib:cynlib
+ SynMenu CD.Cascading\ Style\ Sheets:css
+ SynMenu CD.Century\ Term:cterm
+! SynMenu CD.CHILL:ch
+ SynMenu CD.ChangeLog:changelog
+ SynMenu CD.Cheetah\ template:cheetah
+ SynMenu CD.Clean:clean
+ SynMenu CD.Clever:cl
+ SynMenu CD.Clipper:clipper
+--- 100,109 ----
+ SynMenu CD.Cynlib:cynlib
+ SynMenu CD.Cascading\ Style\ Sheets:css
+ SynMenu CD.Century\ Term:cterm
+! SynMenu CD.CH\ script:ch
+ SynMenu CD.ChangeLog:changelog
+ SynMenu CD.Cheetah\ template:cheetah
++ SynMenu CD.CHILL:chill
+ SynMenu CD.Clean:clean
+ SynMenu CD.Clever:cl
+ SynMenu CD.Clipper:clipper
+*** ../vim-6.2.201/runtime/synmenu.vim Sat Jul 5 19:14:04 2003
+--- runtime/synmenu.vim Sun Jan 25 20:03:50 2004
+***************
+*** 81,117 ****
+ an 50.20.160 &Syntax.CD.Cynlib :cal SetSyn("cynlib")<CR>
+ an 50.20.170 &Syntax.CD.Cascading\ Style\ Sheets :cal SetSyn("css")<CR>
+ an 50.20.180 &Syntax.CD.Century\ Term :cal SetSyn("cterm")<CR>
+! an 50.20.190 &Syntax.CD.CHILL :cal SetSyn("ch")<CR>
+ an 50.20.200 &Syntax.CD.ChangeLog :cal SetSyn("changelog")<CR>
+ an 50.20.210 &Syntax.CD.Cheetah\ template :cal SetSyn("cheetah")<CR>
+! an 50.20.220 &Syntax.CD.Clean :cal SetSyn("clean")<CR>
+! an 50.20.230 &Syntax.CD.Clever :cal SetSyn("cl")<CR>
+! an 50.20.240 &Syntax.CD.Clipper :cal SetSyn("clipper")<CR>
+! an 50.20.250 &Syntax.CD.Cold\ Fusion :cal SetSyn("cf")<CR>
+! an 50.20.260 &Syntax.CD.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
+! an 50.20.270 &Syntax.CD.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+! an 50.20.280 &Syntax.CD.Config.Configure\.in :cal SetSyn("config")<CR>
+! an 50.20.290 &Syntax.CD.Ctrl-H :cal SetSyn("ctrlh")<CR>
+! an 50.20.300 &Syntax.CD.Cobol :cal SetSyn("cobol")<CR>
+! an 50.20.310 &Syntax.CD.CSP :cal SetSyn("csp")<CR>
+! an 50.20.320 &Syntax.CD.CUPL.CUPL :cal SetSyn("cupl")<CR>
+! an 50.20.330 &Syntax.CD.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+! an 50.20.340 &Syntax.CD.CVS.commit\ file :cal SetSyn("cvs")<CR>
+! an 50.20.350 &Syntax.CD.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+! an 50.20.370 &Syntax.CD.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
+! an 50.20.380 &Syntax.CD.Debian.Debian\ Control :cal SetSyn("debcontrol")<CR>
+! an 50.20.390 &Syntax.CD.Diff :cal SetSyn("diff")<CR>
+! an 50.20.400 &Syntax.CD.Digital\ Command\ Lang :cal SetSyn("dcl")<CR>
+! an 50.20.410 &Syntax.CD.DNS/BIND\ zone :cal SetSyn("dns")<CR>
+! an 50.20.420 &Syntax.CD.DocBook :cal SetSyn("docbk")<CR>
+! an 50.20.430 &Syntax.CD.Dot :cal SetSyn("dot")<CR>
+! an 50.20.440 &Syntax.CD.Dracula :cal SetSyn("dracula")<CR>
+! an 50.20.450 &Syntax.CD.DSSSL :cal SetSyn("dsl")<CR>
+! an 50.20.460 &Syntax.CD.DTD :cal SetSyn("dtd")<CR>
+! an 50.20.470 &Syntax.CD.DTML\ (Zope) :cal SetSyn("dtml")<CR>
+! an 50.20.480 &Syntax.CD.Dylan.Dylan :cal SetSyn("dylan")<CR>
+! an 50.20.490 &Syntax.CD.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
+! an 50.20.500 &Syntax.CD.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
+ an 50.30.100 &Syntax.EFG.EDIF :cal SetSyn("edif")<CR>
+ an 50.30.110 &Syntax.EFG.Eiffel :cal SetSyn("eiffel")<CR>
+ an 50.30.120 &Syntax.EFG.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
+--- 82,120 ----
+ an 50.20.160 &Syntax.CD.Cynlib :cal SetSyn("cynlib")<CR>
+ an 50.20.170 &Syntax.CD.Cascading\ Style\ Sheets :cal SetSyn("css")<CR>
+ an 50.20.180 &Syntax.CD.Century\ Term :cal SetSyn("cterm")<CR>
+! an 50.20.190 &Syntax.CD.CH\ script :cal SetSyn("ch")<CR>
+ an 50.20.200 &Syntax.CD.ChangeLog :cal SetSyn("changelog")<CR>
+ an 50.20.210 &Syntax.CD.Cheetah\ template :cal SetSyn("cheetah")<CR>
+! an 50.20.220 &Syntax.CD.CHILL :cal SetSyn("chill")<CR>
+! an 50.20.230 &Syntax.CD.Clean :cal SetSyn("clean")<CR>
+! an 50.20.240 &Syntax.CD.Clever :cal SetSyn("cl")<CR>
+! an 50.20.250 &Syntax.CD.Clipper :cal SetSyn("clipper")<CR>
+! an 50.20.260 &Syntax.CD.Cold\ Fusion :cal SetSyn("cf")<CR>
+! an 50.20.270 &Syntax.CD.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
+! an 50.20.280 &Syntax.CD.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+! an 50.20.290 &Syntax.CD.Config.Configure\.in :cal SetSyn("config")<CR>
+! an 50.20.300 &Syntax.CD.Ctrl-H :cal SetSyn("ctrlh")<CR>
+! an 50.20.310 &Syntax.CD.Cobol :cal SetSyn("cobol")<CR>
+! an 50.20.320 &Syntax.CD.CSP :cal SetSyn("csp")<CR>
+! an 50.20.330 &Syntax.CD.CUPL.CUPL :cal SetSyn("cupl")<CR>
+! an 50.20.340 &Syntax.CD.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+! an 50.20.350 &Syntax.CD.CVS.commit\ file :cal SetSyn("cvs")<CR>
+! an 50.20.360 &Syntax.CD.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+! an 50.20.380 &Syntax.CD.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
+! an 50.20.390 &Syntax.CD.Debian.Debian\ Control :cal SetSyn("debcontrol")<CR>
+! an 50.20.400 &Syntax.CD.Diff :cal SetSyn("diff")<CR>
+! an 50.20.410 &Syntax.CD.Digital\ Command\ Lang :cal SetSyn("dcl")<CR>
+! an 50.20.420 &Syntax.CD.Dircolors :cal SetSyn("dircolors")<CR>
+! an 50.20.430 &Syntax.CD.DNS/BIND\ zone :cal SetSyn("dns")<CR>
+! an 50.20.440 &Syntax.CD.DocBook :cal SetSyn("docbk")<CR>
+! an 50.20.450 &Syntax.CD.Dot :cal SetSyn("dot")<CR>
+! an 50.20.460 &Syntax.CD.Dracula :cal SetSyn("dracula")<CR>
+! an 50.20.470 &Syntax.CD.DSSSL :cal SetSyn("dsl")<CR>
+! an 50.20.480 &Syntax.CD.DTD :cal SetSyn("dtd")<CR>
+! an 50.20.490 &Syntax.CD.DTML\ (Zope) :cal SetSyn("dtml")<CR>
+! an 50.20.500 &Syntax.CD.Dylan.Dylan :cal SetSyn("dylan")<CR>
+! an 50.20.510 &Syntax.CD.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
+! an 50.20.520 &Syntax.CD.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
+ an 50.30.100 &Syntax.EFG.EDIF :cal SetSyn("edif")<CR>
+ an 50.30.110 &Syntax.EFG.Eiffel :cal SetSyn("eiffel")<CR>
+ an 50.30.120 &Syntax.EFG.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
+*** ../vim-6.2.201/runtime/syntax/ch.vim Thu May 10 21:49:39 2001
+--- runtime/syntax/ch.vim Tue Aug 12 22:56:32 2003
+***************
+*** 1,16 ****
+ " Vim syntax file
+! " Language: CHILL
+! " Maintainer: YoungSang Yoon <image@lgic.co.kr>
+! " Last change: 2001 May 10
+ "
+
+- " first created by image@lgic.co.kr & modified by paris@lgic.co.kr
+-
+- " CHILL (CCITT High Level Programming Language) is used for
+- " developing software of ATM switch at LGIC (LG Information
+- " & Communications LTd.)
+-
+-
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+ if version < 600
+--- 1,13 ----
+ " Vim syntax file
+! " Language: Ch
+! " Maintainer: SoftIntegration, Inc. <info@softintegration.com>
+! " URL: http://www.softintegration.com/download/vim/syntax/ch.vim
+! " Last change: 2003 Aug 05
+! " Created based on cpp.vim
+! "
+! " Ch is a C/C++ interpreter with many high level extensions
+ "
+
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+ if version < 600
+***************
+*** 19,131 ****
+ finish
+ endif
+
+! " A bunch of useful CHILL keywords
+! syn keyword chStatement goto GOTO return RETURN returns RETURNS
+! syn keyword chLabel CASE case ESAC esac
+! syn keyword chConditional if IF else ELSE elsif ELSIF switch SWITCH THEN then FI fi
+! syn keyword chLogical NOT not
+! syn keyword chRepeat while WHILE for FOR do DO od OD TO to
+! syn keyword chProcess START start STACKSIZE stacksize PRIORITY priority THIS this STOP stop
+! syn keyword chBlock PROC proc PROCESS process
+! syn keyword chSignal RECEIVE receive SEND send NONPERSISTENT nonpersistent PERSISTENT peristent SET set EVER ever
+!
+! syn keyword chTodo contained TODO FIXME XXX
+!
+! " String and Character constants
+! " Highlight special characters (those which have a backslash) differently
+! syn match chSpecial contained "\\x\x\+\|\\\o\{1,3\}\|\\.\|\\$"
+! syn region chString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=chSpecial
+! syn match chCharacter "'[^\\]'"
+! syn match chSpecialCharacter "'\\.'"
+! syn match chSpecialCharacter "'\\\o\{1,3\}'"
+!
+! "when wanted, highlight trailing white space
+! if exists("ch_space_errors")
+! syn match chSpaceError "\s*$"
+! syn match chSpaceError " \+\t"me=e-1
+! endif
+!
+! "catch errors caused by wrong parenthesis
+! syn cluster chParenGroup contains=chParenError,chIncluded,chSpecial,chTodo,chUserCont,chUserLabel,chBitField
+! syn region chParen transparent start='(' end=')' contains=ALLBUT,@chParenGroup
+! syn match chParenError ")"
+! syn match chInParen contained "[{}]"
+!
+! "integer number, or floating point number without a dot and with "f".
+! syn case ignore
+! syn match chNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+! "floating point number, with dot, optional exponent
+! syn match chFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+! "floating point number, starting with a dot, optional exponent
+! syn match chFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+! "floating point number, without dot, with exponent
+! syn match chFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
+! "hex number
+! syn match chNumber "\<0x\x\+\(u\=l\=\|lu\)\>"
+! "syn match chIdentifier "\<[a-z_][a-z0-9_]*\>"
+! syn case match
+! " flag an octal number with wrong digits
+! syn match chOctalError "\<0\o*[89]"
+!
+! if exists("ch_comment_strings")
+! " A comment can contain chString, chCharacter and chNumber.
+! " But a "*/" inside a chString in a chComment DOES end the comment! So we
+! " need to use a special type of chString: chCommentString, which also ends on
+! " "*/", and sees a "*" at the start of the line as comment again.
+! " Unfortunately this doesn't very well work for // type of comments :-(
+! syntax match chCommentSkip contained "^\s*\*\($\|\s\+\)"
+! syntax region chCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=chSpecial,chCommentSkip
+! syntax region chComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=chSpecial
+! syntax region chComment start="/\*" end="\*/" contains=chTodo,chCommentString,chCharacter,chNumber,chFloat,chSpaceError
+! syntax match chComment "//.*" contains=chTodo,chComment2String,chCharacter,chNumber,chSpaceError
+ else
+! syn region chComment start="/\*" end="\*/" contains=chTodo,chSpaceError
+! syn match chComment "//.*" contains=chTodo,chSpaceError
+ endif
+- syntax match chCommentError "\*/"
+-
+- syn keyword chOperator SIZE size
+- syn keyword chType dcl DCL int INT char CHAR bool BOOL REF ref LOC loc INSTANCE instance
+- syn keyword chStructure struct STRUCT enum ENUM newmode NEWMODE synmode SYNMODE
+- "syn keyword chStorageClass
+- syn keyword chBlock PROC proc END end
+- syn keyword chScope GRANT grant SEIZE seize
+- syn keyword chEDML select SELECT delete DELETE update UPDATE in IN seq SEQ WHERE where INSERT insert include INCLUDE exclude EXCLUDE
+- syn keyword chBoolConst true TRUE false FALSE
+-
+- syn region chPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=chComment,chString,chCharacter,chNumber,chCommentError,chSpaceError
+- syn region chIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+- syn match chIncluded contained "<[^>]*>"
+- syn match chInclude "^\s*#\s*include\>\s*["<]" contains=chIncluded
+- "syn match chLineSkip "\\$"
+- syn cluster chPreProcGroup contains=chPreCondit,chIncluded,chInclude,chDefine,chInParen,chUserLabel
+- syn region chDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@chPreProcGroup
+- syn region chPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,@chPreProcGroup
+
+! " Highlight User Labels
+! syn cluster chMultiGroup contains=chIncluded,chSpecial,chTodo,chUserCont,chUserLabel,chBitField
+! syn region chMulti transparent start='?' end=':' contains=ALLBUT,@chMultiGroup
+! " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+! syn match chUserCont "^\s*\I\i*\s*:$" contains=chUserLabel
+! syn match chUserCont ";\s*\I\i*\s*:$" contains=chUserLabel
+! syn match chUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=chUserLabel
+! syn match chUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=chUserLabel
+
+! syn match chUserLabel "\I\i*" contained
+
+! " Avoid recognizing most bitfields as labels
+! syn match chBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+! syn match chBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+!
+! syn match chBracket contained "[<>]"
+! if !exists("ch_minlines")
+! let ch_minlines = 15
+! endif
+! exec "syn sync ccomment chComment minlines=" . ch_minlines
+!
+! " Define the default highlighting.
+! " For version 5.7 and earlier: only when not done already
+! " For version 5.8 and later: only when an item doesn't have highlighting yet
+ if version >= 508 || !exists("did_ch_syntax_inits")
+ if version < 508
+ let did_ch_syntax_inits = 1
+--- 16,38 ----
+ finish
+ endif
+
+! " Read the C syntax to start with
+! if version < 600
+! so <sfile>:p:h/c.vim
+ else
+! runtime! syntax/c.vim
+! unlet b:current_syntax
+ endif
+
+! " Ch extentions
+
+! syn keyword chStatement new delete this
+! syn keyword chAccess public private
+! syn keyword chStorageClass __declspec(global) __declspec(local)
+! syn keyword chStructure class
+! syn keyword chType string_t array
+
+! " Default highlighting
+ if version >= 508 || !exists("did_ch_syntax_inits")
+ if version < 508
+ let did_ch_syntax_inits = 1
+***************
+*** 133,188 ****
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+!
+! HiLink chLabel Label
+! HiLink chUserLabel Label
+! HiLink chConditional Conditional
+! " hi chConditional term=bold ctermfg=red guifg=red gui=bold
+!
+! HiLink chRepeat Repeat
+! HiLink chProcess Repeat
+! HiLink chSignal Repeat
+! HiLink chCharacter Character
+! HiLink chSpecialCharacter chSpecial
+! HiLink chNumber Number
+! HiLink chFloat Float
+! HiLink chOctalError chError
+! HiLink chParenError chError
+! HiLink chInParen chError
+! HiLink chCommentError chError
+! HiLink chSpaceError chError
+! HiLink chOperator Operator
+! HiLink chStructure Structure
+! HiLink chBlock Operator
+! HiLink chScope Operator
+! "hi chEDML term=underline ctermfg=DarkRed guifg=Red
+! HiLink chEDML PreProc
+! "hi chBoolConst term=bold ctermfg=brown guifg=brown
+! HiLink chBoolConst Constant
+! "hi chLogical term=bold ctermfg=brown guifg=brown
+! HiLink chLogical Constant
+! HiLink chStorageClass StorageClass
+! HiLink chInclude Include
+! HiLink chPreProc PreProc
+! HiLink chDefine Macro
+! HiLink chIncluded chString
+! HiLink chError Error
+! HiLink chStatement Statement
+! HiLink chPreCondit PreCondit
+! HiLink chType Type
+! HiLink chCommentError chError
+! HiLink chCommentString chString
+! HiLink chComment2String chString
+! HiLink chCommentSkip chComment
+! HiLink chString String
+! HiLink chComment Comment
+! " hi chComment term=None ctermfg=lightblue guifg=lightblue
+! HiLink chSpecial SpecialChar
+! HiLink chTodo Todo
+! HiLink chBlock Statement
+! "HiLink chIdentifier Identifier
+! HiLink chBracket Delimiter
+!
+ delcommand HiLink
+ endif
+
+--- 40,50 ----
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+! HiLink chAccess chStatement
+! HiLink chExceptions Exception
+! HiLink chStatement Statement
+! HiLink chType Type
+! HiLink chStructure Structure
+ delcommand HiLink
+ endif
+
+*** ../vim-6.2.201/runtime/syntax/chill.vim Sun Jan 25 20:08:47 2004
+--- runtime/syntax/chill.vim Wed Jan 21 17:52:15 2004
+***************
+*** 0 ****
+--- 1,191 ----
++ " Vim syntax file
++ " Language: CHILL
++ " Maintainer: YoungSang Yoon <image@lgic.co.kr>
++ " Last change: 2004 Jan 21
++ "
++
++ " first created by image@lgic.co.kr & modified by paris@lgic.co.kr
++
++ " CHILL (CCITT High Level Programming Language) is used for
++ " developing software of ATM switch at LGIC (LG Information
++ " & Communications LTd.)
++
++
++ " For version 5.x: Clear all syntax items
++ " For version 6.x: Quit when a syntax file was already loaded
++ if version < 600
++ syntax clear
++ elseif exists("b:current_syntax")
++ finish
++ endif
++
++ " A bunch of useful CHILL keywords
++ syn keyword chillStatement goto GOTO return RETURN returns RETURNS
++ syn keyword chillLabel CASE case ESAC esac
++ syn keyword chillConditional if IF else ELSE elsif ELSIF switch SWITCH THEN then FI fi
++ syn keyword chillLogical NOT not
++ syn keyword chillRepeat while WHILE for FOR do DO od OD TO to
++ syn keyword chillProcess START start STACKSIZE stacksize PRIORITY priority THIS this STOP stop
++ syn keyword chillBlock PROC proc PROCESS process
++ syn keyword chillSignal RECEIVE receive SEND send NONPERSISTENT nonpersistent PERSISTENT peristent SET set EVER ever
++
++ syn keyword chillTodo contained TODO FIXME XXX
++
++ " String and Character constants
++ " Highlight special characters (those which have a backslash) differently
++ syn match chillSpecial contained "\\x\x\+\|\\\o\{1,3\}\|\\.\|\\$"
++ syn region chillString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=chillSpecial
++ syn match chillCharacter "'[^\\]'"
++ syn match chillSpecialCharacter "'\\.'"
++ syn match chillSpecialCharacter "'\\\o\{1,3\}'"
++
++ "when wanted, highlight trailing white space
++ if exists("chill_space_errors")
++ syn match chillSpaceError "\s*$"
++ syn match chillSpaceError " \+\t"me=e-1
++ endif
++
++ "catch errors caused by wrong parenthesis
++ syn cluster chillParenGroup contains=chillParenError,chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField
++ syn region chillParen transparent start='(' end=')' contains=ALLBUT,@chillParenGroup
++ syn match chillParenError ")"
++ syn match chillInParen contained "[{}]"
++
++ "integer number, or floating point number without a dot and with "f".
++ syn case ignore
++ syn match chillNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
++ "floating point number, with dot, optional exponent
++ syn match chillFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
++ "floating point number, starting with a dot, optional exponent
++ syn match chillFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
++ "floating point number, without dot, with exponent
++ syn match chillFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
++ "hex number
++ syn match chillNumber "\<0x\x\+\(u\=l\=\|lu\)\>"
++ "syn match chillIdentifier "\<[a-z_][a-z0-9_]*\>"
++ syn case match
++ " flag an octal number with wrong digits
++ syn match chillOctalError "\<0\o*[89]"
++
++ if exists("chill_comment_strings")
++ " A comment can contain chillString, chillCharacter and chillNumber.
++ " But a "*/" inside a chillString in a chillComment DOES end the comment! So we
++ " need to use a special type of chillString: chillCommentString, which also ends on
++ " "*/", and sees a "*" at the start of the line as comment again.
++ " Unfortunately this doesn't very well work for // type of comments :-(
++ syntax match chillCommentSkip contained "^\s*\*\($\|\s\+\)"
++ syntax region chillCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=chillSpecial,chillCommentSkip
++ syntax region chillComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=chillSpecial
++ syntax region chillComment start="/\*" end="\*/" contains=chillTodo,chillCommentString,chillCharacter,chillNumber,chillFloat,chillSpaceError
++ syntax match chillComment "//.*" contains=chillTodo,chillComment2String,chillCharacter,chillNumber,chillSpaceError
++ else
++ syn region chillComment start="/\*" end="\*/" contains=chillTodo,chillSpaceError
++ syn match chillComment "//.*" contains=chillTodo,chillSpaceError
++ endif
++ syntax match chillCommentError "\*/"
++
++ syn keyword chillOperator SIZE size
++ syn keyword chillType dcl DCL int INT char CHAR bool BOOL REF ref LOC loc INSTANCE instance
++ syn keyword chillStructure struct STRUCT enum ENUM newmode NEWMODE synmode SYNMODE
++ "syn keyword chillStorageClass
++ syn keyword chillBlock PROC proc END end
++ syn keyword chillScope GRANT grant SEIZE seize
++ syn keyword chillEDML select SELECT delete DELETE update UPDATE in IN seq SEQ WHERE where INSERT insert include INCLUDE exclude EXCLUDE
++ syn keyword chillBoolConst true TRUE false FALSE
++
++ syn region chillPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=chillComment,chillString,chillCharacter,chillNumber,chillCommentError,chillSpaceError
++ syn region chillIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
++ syn match chillIncluded contained "<[^>]*>"
++ syn match chillInclude "^\s*#\s*include\>\s*["<]" contains=chillIncluded
++ "syn match chillLineSkip "\\$"
++ syn cluster chillPreProcGroup contains=chillPreCondit,chillIncluded,chillInclude,chillDefine,chillInParen,chillUserLabel
++ syn region chillDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup
++ syn region chillPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup
++
++ " Highlight User Labels
++ syn cluster chillMultiGroup contains=chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField
++ syn region chillMulti transparent start='?' end=':' contains=ALLBUT,@chillMultiGroup
++ " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
++ syn match chillUserCont "^\s*\I\i*\s*:$" contains=chillUserLabel
++ syn match chillUserCont ";\s*\I\i*\s*:$" contains=chillUserLabel
++ syn match chillUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel
++ syn match chillUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel
++
++ syn match chillUserLabel "\I\i*" contained
++
++ " Avoid recognizing most bitfields as labels
++ syn match chillBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1
++ syn match chillBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1
++
++ syn match chillBracket contained "[<>]"
++ if !exists("chill_minlines")
++ let chill_minlines = 15
++ endif
++ exec "syn sync ccomment chillComment minlines=" . chill_minlines
++
++ " Define the default highlighting.
++ " For version 5.7 and earlier: only when not done already
++ " For version 5.8 and later: only when an item doesn't have highlighting yet
++ if version >= 508 || !exists("did_ch_syntax_inits")
++ if version < 508
++ let did_ch_syntax_inits = 1
++ command -nargs=+ HiLink hi link <args>
++ else
++ command -nargs=+ HiLink hi def link <args>
++ endif
++
++ HiLink chillLabel Label
++ HiLink chillUserLabel Label
++ HiLink chillConditional Conditional
++ " hi chillConditional term=bold ctermfg=red guifg=red gui=bold
++
++ HiLink chillRepeat Repeat
++ HiLink chillProcess Repeat
++ HiLink chillSignal Repeat
++ HiLink chillCharacter Character
++ HiLink chillSpecialCharacter chillSpecial
++ HiLink chillNumber Number
++ HiLink chillFloat Float
++ HiLink chillOctalError chillError
++ HiLink chillParenError chillError
++ HiLink chillInParen chillError
++ HiLink chillCommentError chillError
++ HiLink chillSpaceError chillError
++ HiLink chillOperator Operator
++ HiLink chillStructure Structure
++ HiLink chillBlock Operator
++ HiLink chillScope Operator
++ "hi chillEDML term=underline ctermfg=DarkRed guifg=Red
++ HiLink chillEDML PreProc
++ "hi chillBoolConst term=bold ctermfg=brown guifg=brown
++ HiLink chillBoolConst Constant
++ "hi chillLogical term=bold ctermfg=brown guifg=brown
++ HiLink chillLogical Constant
++ HiLink chillStorageClass StorageClass
++ HiLink chillInclude Include
++ HiLink chillPreProc PreProc
++ HiLink chillDefine Macro
++ HiLink chillIncluded chillString
++ HiLink chillError Error
++ HiLink chillStatement Statement
++ HiLink chillPreCondit PreCondit
++ HiLink chillType Type
++ HiLink chillCommentError chillError
++ HiLink chillCommentString chillString
++ HiLink chillComment2String chillString
++ HiLink chillCommentSkip chillComment
++ HiLink chillString String
++ HiLink chillComment Comment
++ " hi chillComment term=None ctermfg=lightblue guifg=lightblue
++ HiLink chillSpecial SpecialChar
++ HiLink chillTodo Todo
++ HiLink chillBlock Statement
++ "HiLink chillIdentifier Identifier
++ HiLink chillBracket Delimiter
++
++ delcommand HiLink
++ endif
++
++ let b:current_syntax = "chill"
++
++ " vim: ts=8
+*** ../vim-6.2.201/src/version.c Sun Jan 25 19:56:12 2004
+--- src/version.c Sun Jan 25 19:57:47 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 202,
+ /**/
+
+--
+BEDEVERE: Stand by for attack!!
+ [CUT TO enormous army forming up. Trebuchets, rows of PIKEMEN, siege
+ towers, pennants flying, shouts of "Stand by for attack!" Traditional
+ army build-up shots. The shouts echo across the ranks of the army.
+ We see various groups reacting, and stirring themselves in readiness.]
+ARTHUR: Who are they?
+BEDEVERE: Oh, just some friends!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.203
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.203
+Problem: With characterwise text that has more than one line, "3P" works
+ wrong. "3p" has the same problem. There also is a display
+ problem. (Daniel Goujot)
+Solution: Perform characterwise puts with a count in the right position.
+Files: src/ops.c
+
+
+*** ../vim-6.2.202/src/ops.c Sun Jan 18 20:58:01 2004
+--- src/ops.c Sat Jan 24 14:17:22 2004
+***************
+*** 3142,3147 ****
+--- 3142,3148 ----
+ curwin->w_cursor.lnum = lnum - 1;
+ else
+ curwin->w_cursor.lnum = lnum;
++ curbuf->b_op_start = curwin->w_cursor; /* for mark_adjust() */
+ #endif
+ }
+ else if (u_save_cursor() == FAIL)
+***************
+*** 3434,3439 ****
+--- 3435,3441 ----
+ * First insert y_array[size - 1] in front of second line.
+ * Then append y_array[0] to first line.
+ */
++ lnum = new_cursor.lnum;
+ ptr = ml_get(lnum) + col;
+ totlen = (int)STRLEN(y_array[y_size - 1]);
+ newp = alloc_check((unsigned)(STRLEN(ptr) + totlen + 1));
+*** ../vim-6.2.202/src/version.c Sun Jan 25 20:16:26 2004
+--- src/version.c Sun Jan 25 20:18:05 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 203,
+ /**/
+
+--
+Why is "abbreviation" such a long word?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.204
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.204 (after 6.2.086)
+Problem: "]]" in a file with closed folds moves to the end of the file.
+ (Nam SungHyun)
+Solution: Find one position in each closed fold, then move to after the fold.
+Files: src/search.c
+
+
+*** ../vim-6.2.203/src/search.c Sun Jan 18 21:27:18 2004
+--- src/search.c Mon Jan 19 12:37:55 2004
+***************
+*** 2375,2381 ****
+ #ifdef FEAT_FOLDING
+ /* skip folded lines */
+ fold_skipped = FALSE;
+! while (hasFolding(curr, &fold_first, &fold_last))
+ {
+ curr = ((dir > 0) ? fold_last : fold_first) + dir;
+ fold_skipped = TRUE;
+--- 2375,2381 ----
+ #ifdef FEAT_FOLDING
+ /* skip folded lines */
+ fold_skipped = FALSE;
+! if (first && hasFolding(curr, &fold_first, &fold_last))
+ {
+ curr = ((dir > 0) ? fold_last : fold_first) + dir;
+ fold_skipped = TRUE;
+*** ../vim-6.2.203/src/version.c Sun Jan 25 20:19:00 2004
+--- src/version.c Sun Jan 25 20:20:41 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 204,
+ /**/
+
+--
+ARTHUR: CHARGE!
+ [The mighty ARMY charges. Thundering noise of feet. Clatter of coconuts.
+ Shouts etc. Suddenly there is a wail of a siren and a couple of police
+ cars roar round in front of the charging ARMY and the POLICE leap out and
+ stop them. TWO POLICEMAN and the HISTORIAN'S WIFE. Black Marias skid up
+ behind them.]
+HISTORIAN'S WIFE: They're the ones, I'm sure.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.205
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.205 (extra)
+Problem: MS-Windows: When the taskbar is at the left or top of the screen,
+ the Vim window placement is wrong.
+Solution: Compute the size and position of the window correctly. (Taro
+ Muraoka)
+Files: src/gui_w32.c, src/gui_w48.c
+
+
+*** ../vim-6.2.204/src/gui_w32.c Sun Oct 12 16:42:14 2003
+--- src/gui_w32.c Tue Jan 13 12:05:08 2004
+***************
+*** 1197,1202 ****
+--- 1197,1211 ----
+ if (win_ypos < workarea_rect.top)
+ win_ypos = workarea_rect.top;
+
++ /* When the taskbar is placed on the left or top of the screen,
++ * SetWindowPlacement() adds its width or height automatically, compensate
++ * for that. When the offset is over 400 it's probably something else,
++ * skip it then (just in case). */
++ if (workarea_rect.left > 0 && workarea_rect.left < 400)
++ win_xpos -= workarea_rect.left;
++ if (workarea_rect.top > 0 && workarea_rect.top < 400)
++ win_ypos -= workarea_rect.top;
++
+ wndpl.rcNormalPosition.left = win_xpos;
+ wndpl.rcNormalPosition.right = win_xpos + win_width;
+ wndpl.rcNormalPosition.top = win_ypos;
+*** ../vim-6.2.204/src/gui_w48.c Sun Jan 18 21:01:53 2004
+--- src/gui_w48.c Wed Jan 21 16:11:49 2004
+***************
+*** 2348,2354 ****
+ gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+ {
+
+! *screen_w = GetSystemMetrics(SM_CXSCREEN)
+ - GetSystemMetrics(SM_CXFRAME) * 2;
+ /* FIXME: dirty trick: Because the gui_get_base_height() doesn't include
+ * the menubar for MSwin, we subtract it from the screen height, so that
+--- 2348,2354 ----
+ gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+ {
+
+! *screen_w = GetSystemMetrics(SM_CXFULLSCREEN)
+ - GetSystemMetrics(SM_CXFRAME) * 2;
+ /* FIXME: dirty trick: Because the gui_get_base_height() doesn't include
+ * the menubar for MSwin, we subtract it from the screen height, so that
+*** ../vim-6.2.204/src/version.c Sun Jan 25 20:21:35 2004
+--- src/version.c Sun Jan 25 20:22:48 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 205,
+ /**/
+
+--
+ [The rest of the ARMY stand around looking at a loss.]
+INSPECTOR END OF FILM: (picks up megaphone) All right! Clear off! Go on!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.206
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.206
+Problem: Multi-byte characters cannot be used as hotkeys in a console
+ dialog. (Mattias Erkisson)
+Solution: Handle multi-byte characters properly. Also put () or [] around
+ default hotkeys.
+Files: src/message.c, src/macros.h
+
+
+*** ../vim-6.2.205/src/message.c Thu Jan 8 20:54:45 2004
+--- src/message.c Thu Jan 22 14:35:02 2004
+***************
+*** 2536,2541 ****
+--- 2536,2542 ----
+ int retval = 0;
+ char_u *hotkeys;
+ int c;
++ int i;
+
+ #ifndef NO_CONSOLE
+ /* Don't output anything in silent mode ("ex -s") */
+***************
+*** 2579,2601 ****
+ case NL:
+ retval = dfltbutton;
+ break;
+! case Ctrl_C: /* User aborts/cancels */
+ case ESC:
+ retval = 0;
+ break;
+ default: /* Could be a hotkey? */
+! if (c > 255) /* special keys are ignored here */
+ continue;
+! for (retval = 0; hotkeys[retval]; retval++)
+ {
+! if (hotkeys[retval] == TOLOWER_LOC(c))
+! break;
+ }
+! if (hotkeys[retval])
+! {
+! retval++;
+ break;
+- }
+ /* No hotkey match, so keep waiting */
+ continue;
+ }
+--- 2580,2612 ----
+ case NL:
+ retval = dfltbutton;
+ break;
+! case Ctrl_C: /* User aborts/cancels */
+ case ESC:
+ retval = 0;
+ break;
+ default: /* Could be a hotkey? */
+! if (c < 0) /* special keys are ignored here */
+ continue;
+! /* Make the character lowercase, as chars in "hotkeys" are. */
+! c = MB_TOLOWER(c);
+! retval = 1;
+! for (i = 0; hotkeys[i]; ++i)
+ {
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! {
+! if ((*mb_ptr2char)(hotkeys + i) == c)
+! break;
+! i += (*mb_ptr2len_check)(hotkeys + i) - 1;
+! }
+! else
+! #endif
+! if (hotkeys[i] == c)
+! break;
+! ++retval;
+ }
+! if (hotkeys[i])
+ break;
+ /* No hotkey match, so keep waiting */
+ continue;
+ }
+***************
+*** 2615,2628 ****
+ return retval;
+ }
+
+ /*
+ * Format the dialog string, and display it at the bottom of
+ * the screen. Return a string of hotkey chars (if defined) for
+! * each 'button'. If a button has no hotkey defined, the string
+! * has the buttons first letter.
+! *
+! * Returns allocated array, or NULL for error.
+ *
+ */
+ static char_u *
+ msg_show_console_dialog(message, buttons, dfltbutton)
+--- 2626,2680 ----
+ return retval;
+ }
+
++ static int copy_char __ARGS((char_u *from, char_u *to, int lowercase));
++
++ /*
++ * Copy one character from "*from" to "*to", taking care of multi-byte
++ * characters. Return the length of the character in bytes.
++ */
++ static int
++ copy_char(from, to, lowercase)
++ char_u *from;
++ char_u *to;
++ int lowercase; /* make character lower case */
++ {
++ #ifdef FEAT_MBYTE
++ int len;
++ int c;
++
++ if (has_mbyte)
++ {
++ if (lowercase)
++ {
++ c = MB_TOLOWER((*mb_ptr2char)(from));
++ return (*mb_char2bytes)(c, to);
++ }
++ else
++ {
++ len = (*mb_ptr2len_check)(from);
++ mch_memmove(to, from, (size_t)len);
++ return len;
++ }
++ }
++ else
++ #endif
++ {
++ if (lowercase)
++ *to = (char_u)TOLOWER_LOC(*from);
++ else
++ *to = *from;
++ return 1;
++ }
++ }
++
+ /*
+ * Format the dialog string, and display it at the bottom of
+ * the screen. Return a string of hotkey chars (if defined) for
+! * each 'button'. If a button has no hotkey defined, the first character of
+! * the button is used.
+! * The hotkeys can be multi-byte characters, but without combining chars.
+ *
++ * Returns an allocated string with hotkeys, or NULL for error.
+ */
+ static char_u *
+ msg_show_console_dialog(message, buttons, dfltbutton)
+***************
+*** 2631,2726 ****
+ int dfltbutton;
+ {
+ int len = 0;
+! int lenhotkey = 1; /*first button*/
+! char_u *hotk;
+! char_u *p;
+! char_u *q;
+ char_u *r;
+
+ /*
+! * First compute how long a string we need to allocate for the message.
+ */
+! r = buttons;
+! while (*r)
+ {
+! if (*r == DLG_BUTTON_SEP)
+ {
+! len++; /* '\n' -> ', ' */
+! lenhotkey++; /* each button needs a hotkey */
+! }
+! else if (*r == DLG_HOTKEY_CHAR)
+! {
+! len++; /* '&a' -> '[a]' */
+! }
+! r++;
+! }
+!
+! len += STRLEN(message)
+! + 2 /* for the NL's */
+! + STRLEN(buttons)
+! + 3; /* for the ": " and NUL */
+
+! lenhotkey++; /* for the NUL */
+
+! /*
+! * Now allocate and load the strings
+! */
+! vim_free(confirm_msg);
+! confirm_msg = alloc(len);
+! if (confirm_msg == NULL)
+! return NULL;
+! *confirm_msg = NUL;
+! hotk = alloc(lenhotkey);
+! if (hotk == NULL)
+! return NULL;
+!
+! *confirm_msg = '\n';
+! STRCPY(confirm_msg + 1, message);
+!
+! p = confirm_msg + 1 + STRLEN(message);
+! q = hotk;
+! r = buttons;
+! *q = (char_u)TOLOWER_LOC(*r); /* define lowercase hotkey */
+!
+! /* Remember where the choices start, displaying starts here when "q" typed
+! * at the more prompt. */
+! confirm_msg_tail = p;
+! *p++ = '\n';
+
+! while (*r)
+! {
+! if (*r == DLG_BUTTON_SEP)
+ {
+! *p++ = ',';
+! *p++ = ' '; /* '\n' -> ', ' */
+! *(++q) = (char_u)TOLOWER_LOC(*(r + 1)); /* next hotkey */
+! if (dfltbutton)
+! --dfltbutton;
+! }
+! else if (*r == DLG_HOTKEY_CHAR)
+! {
+! r++;
+! if (*r == DLG_HOTKEY_CHAR) /* '&&a' -> '&a' */
+! *p++ = *r;
+ else
+! {
+! /* '&a' -> '[a]' */
+! *p++ = (dfltbutton == 1) ? '[' : '(';
+! *p++ = *r;
+! *p++ = (dfltbutton == 1) ? ']' : ')';
+! *q = (char_u)TOLOWER_LOC(*r); /* define lowercase hotkey */
+! }
+ }
+ else
+ {
+! *p++ = *r; /* everything else copy literally */
+ }
+- r++;
+ }
+- *p++ = ':';
+- *p++ = ' ';
+- *p = NUL;
+- *(++q) = NUL;
+
+ display_confirm_msg();
+ return hotk;
+--- 2683,2841 ----
+ int dfltbutton;
+ {
+ int len = 0;
+! #ifdef FEAT_MBYTE
+! # define HOTK_LEN (has_mbyte ? MB_MAXBYTES : 1)
+! #else
+! # define HOTK_LEN 1
+! #endif
+! int lenhotkey = HOTK_LEN; /* count first button */
+! char_u *hotk = NULL;
+! char_u *msgp = NULL;
+! char_u *hotkp = NULL;
+ char_u *r;
++ int copy;
++ #define HAS_HOTKEY_LEN 30
++ char_u has_hotkey[HAS_HOTKEY_LEN];
++ int first_hotkey = FALSE; /* first char of button is hotkey */
++ int idx;
++
++ has_hotkey[0] = FALSE;
+
+ /*
+! * First loop: compute the size of memory to allocate.
+! * Second loop: copy to the allocated memory.
+ */
+! for (copy = 0; copy <= 1; ++copy)
+ {
+! r = buttons;
+! idx = 0;
+! while (*r)
+ {
+! if (*r == DLG_BUTTON_SEP)
+! {
+! if (copy)
+! {
+! *msgp++ = ',';
+! *msgp++ = ' '; /* '\n' -> ', ' */
+
+! /* advance to next hotkey and set default hotkey */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! hotkp += (*mb_ptr2len_check)(hotkp);
+! else
+! #endif
+! ++hotkp;
+! (void)copy_char(r + 1, hotkp, TRUE);
+! if (dfltbutton)
+! --dfltbutton;
+!
+! /* If no hotkey is specified first char is used. */
+! if (idx < HAS_HOTKEY_LEN - 1 && !has_hotkey[++idx])
+! first_hotkey = TRUE;
+! }
+! else
+! {
+! len += 3; /* '\n' -> ', '; 'x' -> '(x)' */
+! lenhotkey += HOTK_LEN; /* each button needs a hotkey */
+! if (idx < HAS_HOTKEY_LEN - 1)
+! has_hotkey[++idx] = FALSE;
+! }
+! }
+! else if (*r == DLG_HOTKEY_CHAR || first_hotkey)
+! {
+! if (*r == DLG_HOTKEY_CHAR)
+! ++r;
+! first_hotkey = FALSE;
+! if (copy)
+! {
+! if (*r == DLG_HOTKEY_CHAR) /* '&&a' -> '&a' */
+! *msgp++ = *r;
+! else
+! {
+! /* '&a' -> '[a]' */
+! *msgp++ = (dfltbutton == 1) ? '[' : '(';
+! msgp += copy_char(r, msgp, FALSE);
+! *msgp++ = (dfltbutton == 1) ? ']' : ')';
+!
+! /* redefine hotkey */
+! (void)copy_char(r, hotkp, TRUE);
+! }
+! }
+! else
+! {
+! ++len; /* '&a' -> '[a]' */
+! if (idx < HAS_HOTKEY_LEN - 1)
+! has_hotkey[idx] = TRUE;
+! }
+! }
+! else
+! {
+! /* everything else copy literally */
+! if (copy)
+! msgp += copy_char(r, msgp, FALSE);
+! }
+
+! /* advance to the next character */
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! r += (*mb_ptr2len_check)(r);
+! else
+! #endif
+! ++r;
+! }
+
+! if (copy)
+ {
+! *msgp++ = ':';
+! *msgp++ = ' ';
+! *msgp = NUL;
+! #ifdef FEAT_MBYTE
+! if (has_mbyte)
+! hotkp += (*mb_ptr2len_check)(hotkp);
+ else
+! #endif
+! ++hotkp;
+! *hotkp = NUL;
+ }
+ else
+ {
+! len += STRLEN(message)
+! + 2 /* for the NL's */
+! + STRLEN(buttons)
+! + 3; /* for the ": " and NUL */
+! lenhotkey++; /* for the NUL */
+!
+! /*
+! * Now allocate and load the strings
+! */
+! vim_free(confirm_msg);
+! confirm_msg = alloc(len);
+! if (confirm_msg == NULL)
+! return NULL;
+! *confirm_msg = NUL;
+! hotk = alloc(lenhotkey);
+! if (hotk == NULL)
+! return NULL;
+!
+! *confirm_msg = '\n';
+! STRCPY(confirm_msg + 1, message);
+!
+! msgp = confirm_msg + 1 + STRLEN(message);
+! hotkp = hotk;
+!
+! /* define first default hotkey */
+! (void)copy_char(buttons, hotkp, TRUE);
+!
+! /* If no hotkey is specified first char is used. */
+! if (!has_hotkey[0])
+! first_hotkey = TRUE;
+!
+! /* Remember where the choices start, displaying starts here when
+! * "hotkp" typed at the more prompt. */
+! confirm_msg_tail = msgp;
+! *msgp++ = '\n';
+ }
+ }
+
+ display_confirm_msg();
+ return hotk;
+*** ../vim-6.2.205/src/macros.h Sat Sep 27 19:36:47 2003
+--- src/macros.h Thu Jan 22 14:33:13 2004
+***************
+*** 81,93 ****
+
+ /*
+ * MB_ISLOWER() and MB_ISUPPER() are to be used on multi-byte characters. But
+! * don't use them for negative values or values above 0x100 for DBCS.
+ */
+ #ifdef FEAT_MBYTE
+! # define MB_ISLOWER(c) (enc_utf8 && (c) > 0x80 ? utf_islower(c) : islower(c))
+! # define MB_ISUPPER(c) (enc_utf8 && (c) > 0x80 ? utf_isupper(c) : isupper(c))
+! # define MB_TOLOWER(c) (enc_utf8 && (c) > 0x80 ? utf_tolower(c) : TOLOWER_LOC(c))
+! # define MB_TOUPPER(c) (enc_utf8 && (c) > 0x80 ? utf_toupper(c) : TOUPPER_LOC(c))
+ #else
+ # define MB_ISLOWER(c) islower(c)
+ # define MB_ISUPPER(c) isupper(c)
+--- 81,93 ----
+
+ /*
+ * MB_ISLOWER() and MB_ISUPPER() are to be used on multi-byte characters. But
+! * don't use them for negative values.
+ */
+ #ifdef FEAT_MBYTE
+! # define MB_ISLOWER(c) (enc_utf8 && (c) > 0x80 ? utf_islower(c) : (has_mbyte && c > 255 ? FALSE : islower(c)))
+! # define MB_ISUPPER(c) (enc_utf8 && (c) > 0x80 ? utf_isupper(c) : (has_mbyte && c > 255 ? FALSE : isupper(c)))
+! # define MB_TOLOWER(c) (enc_utf8 && (c) > 0x80 ? utf_tolower(c) : (has_mbyte && c > 255 ? c : TOLOWER_LOC(c)))
+! # define MB_TOUPPER(c) (enc_utf8 && (c) > 0x80 ? utf_toupper(c) : (has_mbyte && c > 255 ? c : TOUPPER_LOC(c)))
+ #else
+ # define MB_ISLOWER(c) islower(c)
+ # define MB_ISUPPER(c) isupper(c)
+*** ../vim-6.2.205/src/version.c Sun Jan 25 20:24:03 2004
+--- src/version.c Sun Jan 25 20:26:14 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 206,
+ /**/
+
+--
+"I love deadlines. I especially like the whooshing sound they
+make as they go flying by."
+ -- Douglas Adams
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.207
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.207
+Problem: When 'encoding' is a multi-byte encoding, expanding an
+ abbreviation that starts where insertion started results in
+ characters before the insertion to be deleted. (Xiangjiang Ma)
+Solution: Stop searching leftwards for the start of the word at the position
+ where insertion started.
+Files: src/getchar.c
+
+
+*** ../vim-6.2.206/src/getchar.c Sat Sep 27 19:36:46 2003
+--- src/getchar.c Thu Jan 22 18:11:38 2004
+***************
+*** 1234,1239 ****
+--- 1234,1240 ----
+
+ /*
+ * Restore the typeahead to what it was before calling save_typeahead().
++ * The allocated memory is freed, can only be called once!
+ */
+ void
+ restore_typeahead(tp)
+***************
+*** 3879,3885 ****
+ is_id = vim_iswordp(mb_prevptr(ptr, p));
+ }
+ clen = 1;
+! while (p > ptr)
+ {
+ p = mb_prevptr(ptr, p);
+ if (vim_isspace(*p) || (!vim_abbr && is_id != vim_iswordp(p)))
+--- 3880,3886 ----
+ is_id = vim_iswordp(mb_prevptr(ptr, p));
+ }
+ clen = 1;
+! while (p > ptr + mincol)
+ {
+ p = mb_prevptr(ptr, p);
+ if (vim_isspace(*p) || (!vim_abbr && is_id != vim_iswordp(p)))
+*** ../vim-6.2.206/src/version.c Sun Jan 25 20:28:03 2004
+--- src/version.c Sun Jan 25 20:29:20 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 207,
+ /**/
+
+--
+INSPECTOR END OF FILM: Move along. There's nothing to see! Keep moving!
+ [Suddenly he notices the cameras.]
+INSPECTOR END OF FILM: (to Camera) All right, put that away sonny.
+ [He walks over to it and puts his hand over the lens.]
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.208
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.208
+Problem: When using fold markers, three lines in a row have the start
+ marker and deleting the first one with "dd", a nested fold is not
+ deleted. (Kamil Burzynski)
+ Using marker folding, a level 1 fold doesn't stop when it is
+ followed by "{{{2", starting a level 2 fold.
+Solution: Don't stop updating folds at the end of a change when the nesting
+ level of folds is larger than the fold level.
+ Correctly compute the number of folds that start at "{{{2".
+ Also avoid a crash for a NULL pointer.
+Files: src/fold.c
+
+
+*** ../vim-6.2.207/src/fold.c Mon Dec 29 20:30:12 2003
+--- src/fold.c Sat Jan 24 17:01:17 2004
+***************
+*** 2262,2270 ****
+ && getlevel != foldlevelExpr
+ && getlevel != foldlevelSyntax)
+ break;
+! if (lvl == level
+! && foldFind(&fp->fd_nested, flp->lnum - fp->fd_top, &fp2))
+! bot = fp2->fd_top + fp2->fd_len - 1 + fp->fd_top;
+ else if (fp->fd_top + fp->fd_len <= flp->lnum && lvl >= level)
+ finish = TRUE;
+ else
+--- 2262,2287 ----
+ && getlevel != foldlevelExpr
+ && getlevel != foldlevelSyntax)
+ break;
+! i = 0;
+! fp2 = fp;
+! if (lvl >= level)
+! {
+! /* Compute how deep the folds currently are, if it's deeper
+! * than "lvl" then some must be deleted, need to update
+! * at least one nested fold. */
+! ll = flp->lnum - fp->fd_top;
+! while (foldFind(&fp2->fd_nested, ll, &fp2))
+! {
+! ++i;
+! ll -= fp2->fd_top;
+! }
+! }
+! if (lvl < level + i)
+! {
+! foldFind(&fp->fd_nested, flp->lnum - fp->fd_top, &fp2);
+! if (fp2 != NULL)
+! bot = fp2->fd_top + fp2->fd_len - 1 + fp->fd_top;
+! }
+ else if (fp->fd_top + fp->fd_len <= flp->lnum && lvl >= level)
+ finish = TRUE;
+ else
+***************
+*** 2959,2964 ****
+--- 2976,2982 ----
+ char_u *startmarker;
+ int cstart;
+ int cend;
++ int start_lvl = flp->lvl;
+ char_u *s;
+ int n;
+
+***************
+*** 2987,2993 ****
+ {
+ flp->lvl = n;
+ flp->lvl_next = n;
+! ++flp->start;
+ }
+ }
+ else
+--- 3005,3014 ----
+ {
+ flp->lvl = n;
+ flp->lvl_next = n;
+! if (n < start_lvl)
+! flp->start = 0;
+! else
+! flp->start = n - start_lvl;
+ }
+ }
+ else
+***************
+*** 3036,3042 ****
+ fline_T *flp;
+ {
+ #ifndef FEAT_SYN_HL
+! flp->start = FALSE;
+ flp->lvl = 0;
+ #else
+ linenr_T lnum = flp->lnum + flp->off;
+--- 3057,3063 ----
+ fline_T *flp;
+ {
+ #ifndef FEAT_SYN_HL
+! flp->start = 0;
+ flp->lvl = 0;
+ #else
+ linenr_T lnum = flp->lnum + flp->off;
+***************
+*** 3044,3050 ****
+
+ /* Use the maximum fold level at the start of this line and the next. */
+ flp->lvl = syn_get_foldlevel(flp->wp, lnum);
+! flp->start = FALSE;
+ if (lnum < flp->wp->w_buffer->b_ml.ml_line_count)
+ {
+ n = syn_get_foldlevel(flp->wp, lnum + 1);
+--- 3065,3071 ----
+
+ /* Use the maximum fold level at the start of this line and the next. */
+ flp->lvl = syn_get_foldlevel(flp->wp, lnum);
+! flp->start = 0;
+ if (lnum < flp->wp->w_buffer->b_ml.ml_line_count)
+ {
+ n = syn_get_foldlevel(flp->wp, lnum + 1);
+*** ../vim-6.2.207/src/version.c Sun Jan 25 20:30:03 2004
+--- src/version.c Sun Jan 25 20:32:00 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 208,
+ /**/
+
+--
+JOHN CLEESE PLAYED: SECOND SOLDIER WITH A KEEN INTEREST IN BIRDS, LARGE MAN
+ WITH DEAD BODY, BLACK KNIGHT, MR NEWT (A VILLAGE
+ BLACKSMITH INTERESTED IN BURNING WITCHES), A QUITE
+ EXTRAORDINARILY RUDE FRENCHMAN, TIM THE WIZARD, SIR
+ LAUNCELOT
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.209
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.209
+Problem: A bogus fold is created when using "P" while the cursor is in the
+ middle of a closed fold. (Kamil Burzynski)
+Solution: Correct the line number where marks are modified for closed folds.
+Files: src/ops.c
+
+
+*** ../vim-6.2.208/src/ops.c Sun Jan 25 20:19:00 2004
+--- src/ops.c Sat Jan 24 14:17:22 2004
+***************
+*** 3506,3520 ****
+ {
+ curbuf->b_op_start.col = 0;
+ if (dir == FORWARD)
+- {
+- #ifdef FEAT_FOLDING
+- /* a "p" inside a closed fold is like a "p" in the last
+- * line of the fold */
+- (void)hasFolding(curbuf->b_op_start.lnum, NULL,
+- &curbuf->b_op_start.lnum);
+- #endif
+ curbuf->b_op_start.lnum++;
+- }
+ }
+ mark_adjust(curbuf->b_op_start.lnum + (y_type == MCHAR),
+ (linenr_T)MAXLNUM, nr_lines, 0L);
+--- 3506,3512 ----
+*** ../vim-6.2.208/src/version.c Sun Jan 25 20:33:47 2004
+--- src/version.c Sun Jan 25 20:36:05 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 209,
+ /**/
+
+--
+TERRY GILLIAM PLAYED: PATSY (ARTHUR'S TRUSTY STEED), THE GREEN KNIGHT
+ SOOTHSAYER, BRIDGEKEEPER, SIR GAWAIN (THE FIRST TO BE
+ KILLED BY THE RABBIT)
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.210 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.210 (extra)
+Problem: Mac OSX: antialiased fonts are not supported.
+Solution: Add the 'antialias' option to switch on antialiasing on Mac OSX
+ 10.2 and later. (Peter Cucka)
+Files: runtime/doc/options.txt, src/gui_mac.c, src/option.h, src/option.c
+
+
+*** ../vim-6.2.209/runtime/doc/options.txt Tue Aug 12 20:01:59 2003
+--- runtime/doc/options.txt Thu Jan 22 10:47:26 2004
+***************
+*** 1,4 ****
+! *options.txt* For Vim version 6.2. Last change: 2003 Aug 12
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+--- 1,4 ----
+! *options.txt* For Vim version 6.2. Last change: 2004 Jan 22
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+***************
+*** 619,644 ****
+ Registered sign, Greek/Cyrillic letters are represented by two octets,
+ therefore those fonts have "wide" glyphs for them. This is also
+ true of some line drawing characters used to make tables in text
+! file. Therefore, when a CJK font is used for GUI vim or
+! vim is running inside a terminal (emulators) that uses a CJK font
+! (or vim is run inside an xterm invoked with "-cjkwidth" option.),
+ this option should be set to "double" to match the width perceived
+ by Vim with the width of glyphs in the font. Perhaps it also has
+ to be set to "double" under CJK Windows 9x/ME or Windows 2k/XP
+ when the system locale is set to one of CJK locales. See Unicode
+ Standard Annex #11 (http://www.unicode.org/reports/tr11).
+
+! *'autochdir'* *'acd'* *'noatuochdir'* *'noacd'*
+ 'autochdir' 'acd' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the
+ |+netbeans_intg| or |+sun_workshop| feature}
+! When on, vim will change its value for the current working directory
+ whenever you open a file, switch buffers, delete a buffer or
+ open/close a window. It will change to the directory containing the
+ file which was opened or selected. This option is provided for
+! backward compatibility with the vim released with Sun ONE Studio 4
+ Enterprise Edition.
+
+ *'arabic'* *'arab'* *'noarabic'* *'noarab'*
+--- 621,658 ----
+ Registered sign, Greek/Cyrillic letters are represented by two octets,
+ therefore those fonts have "wide" glyphs for them. This is also
+ true of some line drawing characters used to make tables in text
+! file. Therefore, when a CJK font is used for GUI Vim or
+! Vim is running inside a terminal (emulators) that uses a CJK font
+! (or Vim is run inside an xterm invoked with "-cjkwidth" option.),
+ this option should be set to "double" to match the width perceived
+ by Vim with the width of glyphs in the font. Perhaps it also has
+ to be set to "double" under CJK Windows 9x/ME or Windows 2k/XP
+ when the system locale is set to one of CJK locales. See Unicode
+ Standard Annex #11 (http://www.unicode.org/reports/tr11).
+
+! *'antialias'* *'anti'* *'noantialias'* *'noanti'*
+! 'antialias' 'anti' boolean (default: off)
+! global
+! {not in Vi}
+! {only available when compiled with GUI enabled
+! on Mac OS X}
+! This option only has an effect in the GUI version of Vim on Mac OS X
+! v10.2 or later. When on, Vim will use smooth ("antialiased") fonts,
+! which can be easier to read at certain sizes on certain displays.
+! Setting this option can sometimes cause problems if |guifont| is set
+! to its default (empty string).
+!
+! *'autochdir'* *'acd'* *'noautochdir'* *'noacd'*
+ 'autochdir' 'acd' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the
+ |+netbeans_intg| or |+sun_workshop| feature}
+! When on, Vim will change its value for the current working directory
+ whenever you open a file, switch buffers, delete a buffer or
+ open/close a window. It will change to the directory containing the
+ file which was opened or selected. This option is provided for
+! backward compatibility with the Vim released with Sun ONE Studio 4
+ Enterprise Edition.
+
+ *'arabic'* *'arab'* *'noarabic'* *'noarab'*
+*** ../vim-6.2.209/src/gui_mac.c Sun Nov 2 15:27:37 2003
+--- src/gui_mac.c Thu Jan 22 10:44:31 2004
+***************
+*** 2794,2799 ****
+--- 2850,2861 ----
+ gui.scrollbar_height = gui.scrollbar_width = 15; /* cheat 1 overlap */
+ gui.border_offset = gui.border_width = 2;
+
++ #if defined(FEAT_GUI) && defined(MACOS_X)
++ /* If Quartz-style text antialiasing is available (see
++ gui_mch_draw_string() below), enable it for all font sizes. */
++ vim_setenv((char_u *)"QDTEXT_MINSIZE", (char_u *)"1");
++ #endif
++
+ /* TODO: Load bitmap if using TOOLBAR */
+ return OK;
+ }
+***************
+*** 3265,3295 ****
+ int len;
+ int flags;
+ {
+- TextMode (srcCopy);
+- TextFace (normal);
+
+! /* SelectFont(hdc, gui.currFont); */
+
+! if (flags & DRAW_TRANSP)
+ {
+! TextMode (srcOr);
+ }
+
+! MoveTo (TEXT_X(col), TEXT_Y(row));
+! DrawText ((char *)s, 0, len);
+
+
+! if (flags & DRAW_BOLD)
+! {
+! TextMode (srcOr);
+! MoveTo (TEXT_X(col) + 1, TEXT_Y(row));
+ DrawText ((char *)s, 0, len);
+- }
+
+! if (flags & DRAW_UNDERL)
+! {
+! MoveTo (FILL_X(col), FILL_Y(row + 1) - 1);
+! LineTo (FILL_X(col + len) - 1, FILL_Y(row + 1) - 1);
+ }
+ }
+
+--- 3327,3411 ----
+ int len;
+ int flags;
+ {
+
+! #if defined(FEAT_GUI) && defined(MACOS_X)
+! /*
+! * On OS X, try using Quartz-style text antialiasing.
+! */
+! SInt32 sys_version = 0;
+
+! Gestalt(gestaltSystemVersion, &sys_version);
+! if (sys_version >= 0x1020)
+ {
+! /* Quartz antialiasing is available only in OS 10.2 and later. */
+! UInt32 qd_flags = (p_antialias ?
+! kQDUseCGTextRendering | kQDUseCGTextMetrics : 0);
+! (void)SwapQDTextFlags(qd_flags);
+! }
+!
+! if (sys_version >= 0x1020 && p_antialias)
+! {
+! StyleParameter face;
+!
+! face = normal;
+! if (flags & DRAW_BOLD)
+! face |= bold;
+! if (flags & DRAW_UNDERL)
+! face |= underline;
+! TextFace(face);
+!
+! /* Quartz antialiasing works only in srcOr transfer mode. */
+! TextMode(srcOr);
+!
+! if (!(flags & DRAW_TRANSP))
+! {
+! /*
+! * Since we're using srcOr mode, we have to clear the block
+! * before drawing the text. The following is like calling
+! * gui_mch_clear_block(row, col, row, col + len - 1),
+! * but without setting the bg color to gui.back_pixel.
+! */
+! Rect rc;
+! rc.left = FILL_X(col);
+! rc.top = FILL_Y(row);
+! rc.right = FILL_X(col + len) + (col + len == Columns);
+! rc.bottom = FILL_Y(row + 1);
+! EraseRect(&rc);
+! }
+!
+! MoveTo(TEXT_X(col), TEXT_Y(row));
+! DrawText((char*)s, 0, len);
+ }
++ else
++ #endif
++ {
++ /* Use old-style, non-antialiased QuickDraw text rendering. */
++ TextMode (srcCopy);
++ TextFace (normal);
+
+! /* SelectFont(hdc, gui.currFont); */
+
++ if (flags & DRAW_TRANSP)
++ {
++ TextMode (srcOr);
++ }
+
+! MoveTo (TEXT_X(col), TEXT_Y(row));
+ DrawText ((char *)s, 0, len);
+
+!
+! if (flags & DRAW_BOLD)
+! {
+! TextMode (srcOr);
+! MoveTo (TEXT_X(col) + 1, TEXT_Y(row));
+! DrawText ((char *)s, 0, len);
+! }
+!
+! if (flags & DRAW_UNDERL)
+! {
+! MoveTo (FILL_X(col), FILL_Y(row + 1) - 1);
+! LineTo (FILL_X(col + len) - 1, FILL_Y(row + 1) - 1);
+! }
+ }
+ }
+
+***************
+*** 4045,4050 ****
+--- 4161,4167 ----
+ int key = 0;
+ int modifiers = 0;
+ char_u *p_actext;
++
+ p_actext = menu->actext;
+ key = find_special_key(&p_actext, &modifiers, /*keycode=*/0);
+ if (*p_actext != 0)
+***************
+*** 5110,5116 ****
+ #if defined(FEAT_CW_EDITOR) || defined(PROTO)
+ /* TODO: Is it need for MACOS_X? (Dany) */
+ void
+! mch_post_buffer_write (buf_T *buf)
+ {
+ # ifdef USE_SIOUX
+ printf ("Writing Buf...\n");
+--- 5227,5233 ----
+ #if defined(FEAT_CW_EDITOR) || defined(PROTO)
+ /* TODO: Is it need for MACOS_X? (Dany) */
+ void
+! mch_post_buffer_write(buf_T *buf)
+ {
+ # ifdef USE_SIOUX
+ printf ("Writing Buf...\n");
+*** ../vim-6.2.209/src/option.h Sun Jan 18 23:21:49 2004
+--- src/option.h Thu Jan 22 10:37:55 2004
+***************
+*** 290,295 ****
+--- 290,298 ----
+ #ifdef FEAT_MBYTE
+ EXTERN char_u *p_ambw; /* 'ambiwidth' */
+ #endif
++ #if defined(FEAT_GUI) && defined(MACOS_X)
++ EXTERN int *p_antialias; /* 'antialias' */
++ #endif
+ EXTERN int p_ar; /* 'autoread' */
+ EXTERN int p_aw; /* 'autowrite' */
+ EXTERN int p_awa; /* 'autowriteall' */
+*** ../vim-6.2.209/src/option.c Sun Jan 18 20:58:01 2004
+--- src/option.c Thu Jan 22 10:39:02 2004
+***************
+*** 320,325 ****
+--- 320,334 ----
+ (char_u *)224L,
+ #endif
+ (char_u *)0L}},
++ {"antialias", "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
++ #if defined(FEAT_GUI) && defined(MACOS_X)
++ (char_u *)&p_antialias, PV_NONE,
++ {(char_u *)FALSE, (char_u *)FALSE}
++ #else
++ (char_u *)NULL, PV_NONE,
++ {(char_u *)FALSE, (char_u *)FALSE}
++ #endif
++ },
+ {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+*** ../vim-6.2.209/src/version.c Sun Jan 25 20:37:29 2004
+--- src/version.c Sun Jan 25 20:39:47 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 210,
+ /**/
+
+--
+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@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.2.211 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.2.211 (extra)
+Problem: Code for handling file dropped on Vim is duplicated.
+Solution: Move the common code to gui_handle_drop().
+ Add code to drop the files in the window under the cursor.
+ Support drag&drop on the Macintosh. (Taro Muraoka)
+ When dropping a directory name edit that directory (using the
+ explorer plugin)
+ Fix that changing directory with Shift pressed didn't work for
+ relative path names.
+Files: src/fileio.c, src/gui.c, src/gui_gtk_x11.c, src/gui_mac.c,
+ src/gui_w48.c, src/proto/fileio.pro, src/proto/gui.pro
+
+
+*** ../vim-6.2.210/src/fileio.c Sun Jan 18 21:31:56 2004
+--- src/fileio.c Wed Jan 21 14:49:33 2004
+***************
+*** 4834,4839 ****
+--- 4834,4840 ----
+ }
+
+ /*
++ * Shorten filenames for all buffers.
+ * When "force" is TRUE: Use full path from now on for files currently being
+ * edited, both for file name and swap file name. Try to shorten the file
+ * names a bit, if safe to do so.
+***************
+*** 4879,4884 ****
+--- 4880,4919 ----
+ #endif
+ }
+
++ #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
++ || defined(FEAT_GUI_MSWIN) \
++ || defined(FEAT_GUI_MAC) \
++ || defined(PROTO)
++ /*
++ * Shorten all filenames in "fnames[count]" by current directory.
++ */
++ void
++ shorten_filenames(fnames, count)
++ char_u **fnames;
++ int count;
++ {
++ int i;
++ char_u dirname[MAXPATHL];
++ char_u *p;
++
++ if (fnames == NULL || count < 1)
++ return;
++ mch_dirname(dirname, sizeof(dirname));
++ for (i = 0; i < count; ++i)
++ {
++ if ((p = shorten_fname(fnames[i], dirname)) != NULL)
++ {
++ /* shorten_fname() returns pointer in given "fnames[i]". If free
++ * "fnames[i]" first, "p" becomes invalid. So we need to copy
++ * "p" first then free fnames[i]. */
++ p = vim_strsave(p);
++ vim_free(fnames[i]);
++ fnames[i] = p;
++ }
++ }
++ }
++ #endif
++
+ /*
+ * add extention to file name - change path/fo.o.h to path/fo.o.h.ext or
+ * fo_o_h.ext for MSDOS or when shortname option set.
+*** ../vim-6.2.210/src/gui.c Thu Jan 8 20:54:45 2004
+--- src/gui.c Thu Jan 22 16:53:48 2004
+***************
+*** 4481,4483 ****
+--- 4481,4615 ----
+ }
+
+ #endif
++
++ #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
++ || defined(FEAT_GUI_MSWIN) \
++ || defined(FEAT_GUI_MAC) \
++ || defined(PROTO)
++
++ #ifdef FEAT_WINDOWS
++ static void gui_wingoto_xy __ARGS((int x, int y));
++
++ /*
++ * Jump to the window at specified point (x, y).
++ */
++ static void
++ gui_wingoto_xy(x, y)
++ int x;
++ int y;
++ {
++ int row = Y_2_ROW(y);
++ int col = X_2_COL(x);
++ win_T *wp;
++
++ if (row >= 0 && col >= 0)
++ {
++ wp = mouse_find_win(&row, &col);
++ if (wp != NULL && wp != curwin)
++ win_goto(wp);
++ }
++ }
++ #endif
++
++ /*
++ * Process file drop. Mouse cursor position, key modifiers, name of files
++ * and count of files are given. Argument "fnames[count]" has full pathnames
++ * of dropped files, they will be freed in this function, and caller can't use
++ * fnames after call this function.
++ */
++ /*ARGSUSED*/
++ void
++ gui_handle_drop(x, y, modifiers, fnames, count)
++ int x;
++ int y;
++ int_u modifiers;
++ char_u **fnames;
++ int count;
++ {
++ int i;
++ char_u *p;
++
++ /*
++ * When the cursor is at the command line, add the file names to the
++ * command line, don't edit the files.
++ */
++ if (State & CMDLINE)
++ {
++ shorten_filenames(fnames, count);
++ for (i = 0; i < count; ++i)
++ {
++ if (fnames[i] != NULL)
++ {
++ if (i > 0)
++ add_to_input_buf((char_u*)" ", 1);
++
++ /* We don't know what command is used thus we can't be sure
++ * about which characters need to be escaped. Only escape the
++ * most common ones. */
++ # ifdef BACKSLASH_IN_FILENAME
++ p = vim_strsave_escaped(fnames[i], (char_u *)" \t\"|");
++ # else
++ 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]);
++ }
++ }
++ vim_free(fnames);
++ }
++ else
++ {
++ /* Go to the window under mouse cursor, then shorten given "fnames" by
++ * current window, because a window can have local current dir. */
++ # ifdef FEAT_WINDOWS
++ gui_wingoto_xy(x, y);
++ # endif
++ shorten_filenames(fnames, count);
++
++ /* If Shift held down, remember the first item. */
++ if ((modifiers & MOUSE_SHIFT) != 0)
++ p = vim_strsave(fnames[0]);
++ else
++ p = NULL;
++
++ /* Handle the drop, :edit or :split to get to the file. This also
++ * frees fnames[]. Skip this if there is only one item it's a
++ * directory and Shift is held down. */
++ if (count == 1 && (modifiers & MOUSE_SHIFT) != 0
++ && mch_isdir(fnames[0]))
++ {
++ vim_free(fnames[0]);
++ vim_free(fnames);
++ }
++ else
++ handle_drop(count, fnames, (modifiers & MOUSE_CTRL) != 0);
++
++ /* If Shift held down, change to first file's directory. If the first
++ * item is a directory, change to that directory (and let the explorer
++ * plugin show the contents). */
++ if (p != NULL)
++ {
++ if (mch_isdir(p))
++ {
++ if (mch_chdir((char *)p) == 0)
++ shorten_fnames(TRUE);
++ }
++ else if (vim_chdirfile(p) == OK)
++ shorten_fnames(TRUE);
++ vim_free(p);
++ }
++
++ /* Update the screen display */
++ update_screen(NOT_VALID);
++ # ifdef FEAT_MENU
++ gui_update_menus(0);
++ # endif
++ setcursor();
++ out_flush();
++ gui_update_cursor(FALSE, FALSE);
++ gui_mch_flush();
++ }
++ }
++ #endif
+*** ../vim-6.2.210/src/gui_gtk_x11.c Sun Jan 11 12:45:02 2004
+--- src/gui_gtk_x11.c Wed Jan 21 16:07:00 2004
+***************
+*** 1823,1981 ****
+ * Drag aNd Drop support handlers.
+ */
+
+! static void
+! drag_handle_uri_list(GdkDragContext *context,
+! GtkSelectionData *data,
+! guint time_,
+! GdkModifierType state)
+ {
+! char_u **fnames;
+! int redo_dirs = FALSE;
+! int i;
+! int n;
+! char_u *start;
+! char_u *copy;
+! char_u *names;
+! int nfiles = 0;
+! int url = FALSE;
+
+! names = data->data;
+! copy = alloc((unsigned)(data->length + 1));
+! if (copy == NULL)
+! return;
+! /*
+! * Count how many items there may be and separate them with a NUL.
+! * Apparently the items are separated with \r\n. This is not documented,
+! * thus be careful not to go past the end. Also allow separation with NUL
+! * characters.
+! */
+! start = copy;
+! for (i = 0; i < data->length; ++i)
+ {
+! if (names[i] == NUL || names[i] == '\n' || names[i] == '\r')
+ {
+! if (start > copy && start[-1] != NUL)
+ {
+! ++nfiles;
+! *start++ = NUL;
+ }
+ }
+! else if (names[i] == '%' && i + 2 < data->length
+! && hexhex2nr(names + i + 1) > 0)
+ {
+! *start++ = hexhex2nr(names + i + 1);
+ i += 2;
+ }
+ else
+! *start++ = names[i];
+ }
+! if (start > copy && start[-1] != NUL)
+ {
+! *start = NUL; /* last item didn't have \r or \n */
+! ++nfiles;
+ }
+
+! fnames = (char_u **)alloc((unsigned)(nfiles * sizeof(char_u *)));
+! if (fnames == NULL)
+! {
+! vim_free(copy);
+! return;
+! }
+! url = FALSE; /* Set when a non-file URL was found. */
+! start = copy;
+! for (n = 0; n < nfiles; ++n)
+ {
+! if (STRNCMP(start, "file://localhost", 16) == 0)
+! start += 16;
+! else
+ {
+! if (STRNCMP(start, "file:", 5) != 0)
+! url = TRUE;
+! else
+! {
+! start += 5;
+! while (start[0] == '/' && start[1] == '/')
+! ++start;
+! }
+ }
+! fnames[n] = vim_strsave(start);
+! start += STRLEN(start) + 1;
+ }
+
+! /* accept */
+! gtk_drag_finish(context, TRUE, FALSE, time_);
+
+! /* Special handling when all items are real files. */
+! if (url == FALSE)
+! {
+! if (nfiles == 1)
+! {
+! if (fnames[0] != NULL && mch_isdir(fnames[0]))
+! {
+! /* Handle dropping a directory on Vim. */
+! if (mch_chdir((char *)fnames[0]) == 0)
+! {
+! vim_free(fnames[0]);
+! fnames[0] = NULL;
+! redo_dirs = TRUE;
+! }
+! }
+! }
+! else
+! {
+! /* Ignore any directories */
+! for (i = 0; i < nfiles; ++i)
+! {
+! if (fnames[i] != NULL && mch_isdir(fnames[i]))
+! {
+! vim_free(fnames[i]);
+! fnames[i] = NULL;
+! }
+! }
+! }
+
+! if (state & GDK_SHIFT_MASK)
+! {
+! /* Shift held down, change to first file's directory */
+! if (fnames[0] != NULL && vim_chdirfile(fnames[0]) == OK)
+! redo_dirs = TRUE;
+! }
+! else
+! {
+! char_u dirname[MAXPATHL];
+! char_u *s;
+
+! /* Shorten dropped file names. */
+! if (mch_dirname(dirname, MAXPATHL) == OK)
+! for (i = 0; i < nfiles; ++i)
+! if (fnames[i] != NULL)
+! {
+! s = shorten_fname(fnames[i], dirname);
+! if (s != NULL && (s = vim_strsave(s)) != NULL)
+! {
+! vim_free(fnames[i]);
+! fnames[i] = s;
+! }
+! }
+! }
+! }
+! vim_free(copy);
+
+! /* Handle the drop, :edit or :split to get to the file */
+! handle_drop(nfiles, fnames, (state & GDK_CONTROL_MASK) != 0);
+
+! if (redo_dirs)
+! shorten_fnames(TRUE);
+
+! /* Update the screen display */
+! update_screen(NOT_VALID);
+! # ifdef FEAT_MENU
+! gui_update_menus(0);
+! # endif
+! setcursor();
+! out_flush();
+! gui_update_cursor(FALSE, FALSE);
+! gui_mch_flush();
+ }
+
+ static void
+--- 1823,1940 ----
+ * Drag aNd Drop support handlers.
+ */
+
+! /*
+! * Count how many items there may be and separate them with a NUL.
+! * Apparently the items are separated with \r\n. This is not documented,
+! * thus be careful not to go past the end. Also allow separation with
+! * NUL characters.
+! */
+! static int
+! count_and_decode_uri_list(char_u *out, char_u *raw, int len)
+ {
+! int i;
+! char_u *p = out;
+! int count = 0;
+
+! for (i = 0; i < len; ++i)
+ {
+! if (raw[i] == NUL || raw[i] == '\n' || raw[i] == '\r')
+ {
+! if (p > out && p[-1] != NUL)
+ {
+! ++count;
+! *p++ = NUL;
+ }
+ }
+! else if (raw[i] == '%' && i + 2 < len && hexhex2nr(raw + i + 1) > 0)
+ {
+! *p++ = hexhex2nr(raw + i + 1);
+ i += 2;
+ }
+ else
+! *p++ = raw[i];
+ }
+! if (p > out && p[-1] != NUL)
+ {
+! *p = NUL; /* last item didn't have \r or \n */
+! ++count;
+ }
++ return count;
++ }
+
+! /*
+! * Parse NUL separated "src" strings. Make it an array "outlist" form. On
+! * this process, URI which protocol is not "file:" are removed. Return
+! * length of array (less than "max").
+! */
+! static int
+! filter_uri_list(char_u **outlist, int max, char_u *src)
+! {
+! int i, j;
+!
+! for (i = j = 0; i < max; ++i)
+ {
+! outlist[i] = NULL;
+! if (STRNCMP(src, "file:", 5) == 0)
+ {
+! src += 5;
+! if (STRNCMP(src, "//localhost", 11) == 0)
+! src += 11;
+! while (src[0] == '/' && src[1] == '/')
+! ++src;
+! outlist[j++] = vim_strsave(src);
+ }
+! src += STRLEN(src) + 1;
+ }
++ return j;
++ }
+
+! static char_u **
+! parse_uri_list(int *count, char_u *data, int len)
+! {
+! int n = 0;
+! char_u *tmp = NULL;
+! char_u **array = NULL;;
+!
+! if (data != NULL && len > 0 && (tmp = (char_u *)alloc(len + 1)) != NULL)
+! {
+! n = count_and_decode_uri_list(tmp, data, len);
+! if (n > 0 && (array = (char_u **)alloc(n * sizeof(char_u *))) != NULL)
+! n = filter_uri_list(array, n, tmp);
+! }
+! vim_free(tmp);
+! *count = n;
+! return array;
+! }
+
+! static void
+! drag_handle_uri_list(GdkDragContext *context,
+! GtkSelectionData *data,
+! guint time_,
+! GdkModifierType state,
+! gint x,
+! gint y)
+! {
+! char_u **fnames;
+! int nfiles = 0;
+
+! fnames = parse_uri_list(&nfiles, data->data, data->length);
+
+! if (fnames != NULL && nfiles > 0)
+! {
+! int_u modifiers = 0;
+
+! gtk_drag_finish(context, TRUE, FALSE, time_); /* accept */
+
+! if (state & GDK_SHIFT_MASK)
+! modifiers |= MOUSE_SHIFT;
+! if (state & GDK_CONTROL_MASK)
+! modifiers |= MOUSE_CTRL;
+! if (state & GDK_MOD1_MASK)
+! modifiers |= MOUSE_ALT;
+
+! gui_handle_drop(x, y, modifiers, fnames, nfiles);
+! }
+ }
+
+ static void
+***************
+*** 2071,2077 ****
+
+ /* Not sure about the role of "text/plain" here... */
+ if (info == (guint)TARGET_TEXT_URI_LIST)
+! drag_handle_uri_list(context, data, time_, state);
+ else
+ drag_handle_text(context, data, time_, state);
+
+--- 2030,2036 ----
+
+ /* Not sure about the role of "text/plain" here... */
+ if (info == (guint)TARGET_TEXT_URI_LIST)
+! drag_handle_uri_list(context, data, time_, state, x, y);
+ else
+ drag_handle_text(context, data, time_, state);
+
+*** ../vim-6.2.210/src/gui_mac.c Sun Jan 25 20:42:15 2004
+--- src/gui_mac.c Thu Jan 22 10:44:31 2004
+***************
+*** 2653,2658 ****
+--- 2653,2712 ----
+ }
+ #endif
+
++ static OSErr
++ receiveHandler(WindowRef theWindow, void* handlerRefCon, DragRef theDrag)
++ {
++ int x, y;
++ int_u modifiers;
++ char_u **fnames = NULL;
++ int count;
++ int i, j;
++
++ /* Get drop position, modifiers and count of items */
++ {
++ Point point;
++ SInt16 mouseUpModifiers;
++ UInt16 countItem;
++
++ GetDragMouse(theDrag, &point, NULL);
++ GlobalToLocal(&point);
++ x = point.h;
++ y = point.v;
++ GetDragModifiers(theDrag, NULL, NULL, &mouseUpModifiers);
++ modifiers = EventModifiers2VimMouseModifiers(mouseUpModifiers);
++ CountDragItems(theDrag, &countItem);
++ count = countItem;
++ }
++
++ fnames = (char_u **)alloc(count * sizeof(char_u *));
++ if (fnames == NULL)
++ return dragNotAcceptedErr;
++
++ /* Get file names dropped */
++ for (i = j = 0; i < count; ++i)
++ {
++ DragItemRef item;
++ OSErr err;
++ Size size;
++ FlavorType type = flavorTypeHFS;
++ HFSFlavor hfsFlavor;
++
++ fnames[i] = NULL;
++ GetDragItemReferenceNumber(theDrag, i + 1, &item);
++ err = GetFlavorDataSize(theDrag, item, type, &size);
++ if (err != noErr || size > sizeof(hfsFlavor))
++ continue;
++ err = GetFlavorData(theDrag, item, type, &hfsFlavor, &size, 0);
++ if (err != noErr)
++ continue;
++ fnames[j++] = FullPathFromFSSpec_save(hfsFlavor.fileSpec);
++ }
++ count = j;
++
++ gui_handle_drop(x, y, modifiers, fnames, count);
++ return noErr;
++ }
++
+ /*
+ * Initialise the GUI. Create all the windows, set up all the call-backs
+ * etc.
+***************
+*** 2721,2726 ****
+--- 2775,2782 ----
+
+ gui.VimWindow = NewCWindow(nil, &windRect, "\pgVim on Macintosh", true, documentProc,
+ (WindowPtr) -1L, false, 0);
++ InstallReceiveHandler((DragReceiveHandlerUPP)receiveHandler,
++ gui.VimWindow, NULL);
+ #ifdef USE_CARBONIZED
+ SetPortWindowPort ( gui.VimWindow );
+ #else
+*** ../vim-6.2.210/src/gui_w48.c Sun Jan 25 20:24:03 2004
+--- src/gui_w48.c Wed Jan 21 16:11:49 2004
+***************
+*** 2841,2924 ****
+ char szFile[BUFPATHLEN];
+ UINT cFiles = DragQueryFile(hDrop, DRAGQVAL, szFile, BUFPATHLEN);
+ UINT i;
+- char_u *fname;
+ char_u **fnames;
+ char_u redo_dirs = FALSE;
+
+ /* TRACE("_OnDropFiles: %d files dropped\n", cFiles); */
+
+ # ifdef FEAT_VISUAL
+ reset_VIsual();
+ # endif
+
+ fnames = (char_u **)alloc(cFiles * sizeof(char_u *));
+
+! for (i = 0; i < cFiles; ++i)
+! {
+! DragQueryFile(hDrop, i, szFile, BUFPATHLEN);
+!
+! mch_dirname(IObuff, IOSIZE);
+! fname = shorten_fname(szFile, IObuff);
+! if (fname == NULL)
+! fname = szFile;
+! fnames[i] = vim_strsave(fname);
+! }
+! DragFinish(hDrop);
+!
+! /*
+! * When the cursor is at the command line, add the file names to the
+! * command line, don't edit the files.
+! */
+! if (State & CMDLINE)
+! {
+ for (i = 0; i < cFiles; ++i)
+ {
+! if (fnames[i] != NULL)
+! {
+! if (i > 0)
+! add_to_input_buf(" ", 1);
+! add_to_input_buf(fnames[i], (int)STRLEN(fnames[i]));
+! }
+! }
+! }
+! else
+! {
+! /*
+! * Handle dropping a directory on Vim.
+! * Change to that directory and don't open any file.
+! */
+! if (cFiles == 1 && mch_isdir(fnames[0]))
+! {
+! if (mch_chdir(fnames[0]) == 0)
+! {
+! msg_str((char_u *)":cd %s", fnames[0]);
+! vim_free(fnames[0]);
+! fnames[0] = NULL;
+! redo_dirs = TRUE;
+! }
+ }
+
+! if (fnames[0] != NULL)
+! {
+! /* If Shift held down, change to first file's directory */
+! if (GetKeyState(VK_SHIFT) & 0x8000)
+! if (vim_chdirfile(fnames[0]) == OK)
+! redo_dirs = TRUE;
+!
+! /* Handle the drop, :edit or :split to get to the file */
+! handle_drop(cFiles, fnames,
+! ((GetKeyState(VK_CONTROL) & 0x8000) != 0));
+! }
+
+! if (redo_dirs)
+! shorten_fnames(TRUE);
+
+! /* Update the screen display */
+! update_screen(NOT_VALID);
+! setcursor();
+! out_flush();
+ }
+- s_need_activate = TRUE;
+ #endif
+ }
+
+--- 2841,2885 ----
+ char szFile[BUFPATHLEN];
+ UINT cFiles = DragQueryFile(hDrop, DRAGQVAL, szFile, BUFPATHLEN);
+ UINT i;
+ char_u **fnames;
+ char_u redo_dirs = FALSE;
++ POINT pt;
++ int_u modifiers = 0;
+
+ /* TRACE("_OnDropFiles: %d files dropped\n", cFiles); */
+
++ /* Obtain dropped position */
++ DragQueryPoint(hDrop, &pt);
++ MapWindowPoints(s_hwnd, s_textArea, &pt, 1);
++
+ # ifdef FEAT_VISUAL
+ reset_VIsual();
+ # endif
+
+ fnames = (char_u **)alloc(cFiles * sizeof(char_u *));
+
+! if (fnames != NULL)
+ for (i = 0; i < cFiles; ++i)
+ {
+! DragQueryFile(hDrop, i, szFile, BUFPATHLEN);
+! fnames[i] = vim_strsave(szFile);
+ }
+
+! DragFinish(hDrop);
+!
+! if (fnames != NULL)
+! {
+! if ((GetKeyState(VK_SHIFT) & 0x8000) != 0)
+! modifiers |= MOUSE_SHIFT;
+! if ((GetKeyState(VK_CONTROL) & 0x8000) != 0)
+! modifiers |= MOUSE_CTRL;
+! if ((GetKeyState(VK_MENU) & 0x8000) != 0)
+! modifiers |= MOUSE_ALT;
+
+! gui_handle_drop(pt.x, pt.y, modifiers, fnames, cFiles);
+
+! s_need_activate = TRUE;
+ }
+ #endif
+ }
+
+*** ../vim-6.2.210/src/proto/fileio.pro Sun Jun 1 12:26:09 2003
+--- src/proto/fileio.pro Wed Jan 21 15:32:29 2004
+***************
+*** 5,10 ****
+--- 5,11 ----
+ 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));
+ 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));
+ char_u *modname __ARGS((char_u *fname, char_u *ext, int prepend_dot));
+ char_u *buf_modname __ARGS((int shortname, char_u *fname, char_u *ext, int prepend_dot));
+ int vim_fgets __ARGS((char_u *buf, int size, FILE *fp));
+*** ../vim-6.2.210/src/proto/gui.pro Sun Jun 1 12:26:24 2003
+--- src/proto/gui.pro Wed Jan 21 15:32:24 2004
+***************
+*** 57,60 ****
+--- 57,61 ----
+ void gui_update_screen __ARGS((void));
+ char_u *get_find_dialog_text __ARGS((char_u *arg, int *wwordp, int *mcasep));
+ int gui_do_findrepl __ARGS((int flags, char_u *find_text, char_u *repl_text, int down));
++ void gui_handle_drop __ARGS((int x, int y, int_u modifiers, char_u **fnames, int count));
+ /* vim: set ft=c : */
+*** ../vim-6.2.210/src/version.c Sun Jan 25 20:42:15 2004
+--- src/version.c Sun Jan 25 20:44:30 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+ { /* Add new patch number below this line */
++ /**/
++ 211,
+ /**/
+
+--
+NEIL INNES PLAYED: THE FIRST SELF-DESTRUCTIVE MONK, ROBIN'S LEAST FAVORITE
+ MINSTREL, THE PAGE CRUSHED BY A RABBIT, THE OWNER OF A DUCK
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///