]> git.pld-linux.org Git - packages/vim.git/commitdiff
- new auto/ac/vim-7_2_75-1 auto/th/vim-7_2_75-1
authorAdam Gołębiowski <adamg@pld-linux.org>
Fri, 26 Dec 2008 11:25:14 +0000 (11:25 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    7.2.041 -> 1.1
    7.2.042 -> 1.1
    7.2.043 -> 1.1
    7.2.044 -> 1.1
    7.2.045 -> 1.1
    7.2.046 -> 1.1
    7.2.047 -> 1.1
    7.2.048 -> 1.1
    7.2.049 -> 1.1
    7.2.050 -> 1.1
    7.2.051 -> 1.1
    7.2.052 -> 1.1
    7.2.053 -> 1.1
    7.2.054 -> 1.1
    7.2.055 -> 1.1
    7.2.056 -> 1.1
    7.2.057 -> 1.1
    7.2.058 -> 1.1
    7.2.059 -> 1.1
    7.2.060 -> 1.1
    7.2.061 -> 1.1
    7.2.062 -> 1.1
    7.2.063 -> 1.1
    7.2.064 -> 1.1
    7.2.065 -> 1.1
    7.2.066 -> 1.1
    7.2.067 -> 1.1
    7.2.068 -> 1.1
    7.2.069 -> 1.1
    7.2.070 -> 1.1
    7.2.071 -> 1.1
    7.2.072 -> 1.1
    7.2.073 -> 1.1
    7.2.074 -> 1.1
    7.2.075 -> 1.1

35 files changed:
7.2.041 [new file with mode: 0644]
7.2.042 [new file with mode: 0644]
7.2.043 [new file with mode: 0644]
7.2.044 [new file with mode: 0644]
7.2.045 [new file with mode: 0644]
7.2.046 [new file with mode: 0644]
7.2.047 [new file with mode: 0644]
7.2.048 [new file with mode: 0644]
7.2.049 [new file with mode: 0644]
7.2.050 [new file with mode: 0644]
7.2.051 [new file with mode: 0644]
7.2.052 [new file with mode: 0644]
7.2.053 [new file with mode: 0644]
7.2.054 [new file with mode: 0644]
7.2.055 [new file with mode: 0644]
7.2.056 [new file with mode: 0644]
7.2.057 [new file with mode: 0644]
7.2.058 [new file with mode: 0644]
7.2.059 [new file with mode: 0644]
7.2.060 [new file with mode: 0644]
7.2.061 [new file with mode: 0644]
7.2.062 [new file with mode: 0644]
7.2.063 [new file with mode: 0644]
7.2.064 [new file with mode: 0644]
7.2.065 [new file with mode: 0644]
7.2.066 [new file with mode: 0644]
7.2.067 [new file with mode: 0644]
7.2.068 [new file with mode: 0644]
7.2.069 [new file with mode: 0644]
7.2.070 [new file with mode: 0644]
7.2.071 [new file with mode: 0644]
7.2.072 [new file with mode: 0644]
7.2.073 [new file with mode: 0644]
7.2.074 [new file with mode: 0644]
7.2.075 [new file with mode: 0644]

diff --git a/7.2.041 b/7.2.041
new file mode 100644 (file)
index 0000000..b562206
--- /dev/null
+++ b/7.2.041
@@ -0,0 +1,729 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.041
+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 7.2.041
+Problem:    In diff mode, when using two tabs, each with two diffed buffers,
+           editing a buffer of the other tab messes up the diff.  (Matt
+           Mzyzik)
+Solution:   Only copy options from a window where the buffer was edited that
+           doesn't have 'diff' set or is for the current tab page.
+           Also fix that window options for a buffer are stored with the
+           wrong window.
+Files:     src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
+           src/ex_getln.c, src/if_sniff.c, src/main.c, src/netbeans.c,
+           src/normal.c, src/popupmnu.c, src/proto/buffer.pro,
+           src/proto/ex_cmds.pro src/quickfix.c, src/window.c
+
+
+*** ../vim-7.2.040/src/buffer.c        Wed Nov 12 12:51:38 2008
+--- src/buffer.c       Wed Nov 12 17:45:01 2008
+***************
+*** 33,39 ****
+  static char_u        *fname_match __ARGS((regprog_T *prog, char_u *name));
+  #endif
+  static void  buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
+! static wininfo_T *find_wininfo __ARGS((buf_T *buf));
+  #ifdef UNIX
+  static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st));
+  static int   otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp));
+--- 33,39 ----
+  static char_u        *fname_match __ARGS((regprog_T *prog, char_u *name));
+  #endif
+  static void  buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
+! static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
+  #ifdef UNIX
+  static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st));
+  static int   otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp));
+***************
+*** 1093,1099 ****
+  #endif
+           setpcmark();
+           retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
+!                                                forceit ? ECMD_FORCEIT : 0);
+  
+           /*
+            * do_ecmd() may create a new buffer, then we have to delete
+--- 1093,1099 ----
+  #endif
+           setpcmark();
+           retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
+!                                        forceit ? ECMD_FORCEIT : 0, curwin);
+  
+           /*
+            * do_ecmd() may create a new buffer, then we have to delete
+***************
+*** 1316,1322 ****
+      setpcmark();
+      if (!cmdmod.keepalt)
+       curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
+!     buflist_altfpos();                        /* remember curpos */
+  
+  #ifdef FEAT_VISUAL
+      /* Don't restart Select mode after switching to another buffer. */
+--- 1316,1322 ----
+      setpcmark();
+      if (!cmdmod.keepalt)
+       curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
+!     buflist_altfpos(curwin);                  /* remember curpos */
+  
+  #ifdef FEAT_VISUAL
+      /* Don't restart Select mode after switching to another buffer. */
+***************
+*** 2404,2425 ****
+      return;
+  }
+  
+  /*
+   * Find info for the current window in buffer "buf".
+   * If not found, return the info for the most recently used window.
+   * Returns NULL when there isn't any info.
+   */
+      static wininfo_T *
+! find_wininfo(buf)
+      buf_T    *buf;
+  {
+      wininfo_T        *wip;
+  
+      for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+!      if (wip->wi_win == curwin)
+           break;
+!     if (wip == NULL) /* if no fpos for curwin, use the first in the list */
+!      wip = buf->b_wininfo;
+      return wip;
+  }
+  
+--- 2404,2473 ----
+      return;
+  }
+  
++ #ifdef FEAT_DIFF
++ static int wininfo_other_tab_diff __ARGS((wininfo_T *wip));
++ 
++ /*
++  * Return TRUE when "wip" has 'diff' set and the diff is only for another tab
++  * page.  That's because a diff is local to a tab page.
++  */
++     static int
++ wininfo_other_tab_diff(wip)
++     wininfo_T        *wip;
++ {
++     win_T    *wp;
++ 
++     if (wip->wi_opt.wo_diff)
++     {
++      for (wp = firstwin; wp != NULL; wp = wp->w_next)
++          /* return FALSE when it's a window in the current tab page, thus
++           * the buffer was in diff mode here */
++          if (wip->wi_win == wp)
++              return FALSE;
++      return TRUE;
++     }
++     return FALSE;
++ }
++ #endif
++ 
+  /*
+   * Find info for the current window in buffer "buf".
+   * If not found, return the info for the most recently used window.
++  * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in
++  * another tab page.
+   * Returns NULL when there isn't any info.
+   */
++ /*ARGSUSED*/
+      static wininfo_T *
+! find_wininfo(buf, skip_diff_buffer)
+      buf_T    *buf;
++     int              skip_diff_buffer;
+  {
+      wininfo_T        *wip;
+  
+      for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+!      if (wip->wi_win == curwin
+! #ifdef FEAT_DIFF
+!              && (!skip_diff_buffer || !wininfo_other_tab_diff(wip))
+! #endif
+!         )
+           break;
+! 
+!     /* If no wininfo for curwin, use the first in the list (that doesn't have
+!      * 'diff' set and is in another tab page). */
+!     if (wip == NULL)
+!     {
+! #ifdef FEAT_DIFF
+!      if (skip_diff_buffer)
+!      {
+!          for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+!              if (!wininfo_other_tab_diff(wip))
+!                  break;
+!      }
+!      else
+! #endif
+!          wip = buf->b_wininfo;
+!     }
+      return wip;
+  }
+  
+***************
+*** 2440,2446 ****
+      clearFolding(curwin);
+  #endif
+  
+!     wip = find_wininfo(buf);
+      if (wip != NULL && wip->wi_optset)
+      {
+       copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
+--- 2488,2494 ----
+      clearFolding(curwin);
+  #endif
+  
+!     wip = find_wininfo(buf, TRUE);
+      if (wip != NULL && wip->wi_optset)
+      {
+       copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
+***************
+*** 2472,2478 ****
+      wininfo_T        *wip;
+      static pos_T no_position = {1, 0};
+  
+!     wip = find_wininfo(buf);
+      if (wip != NULL)
+       return &(wip->wi_fpos);
+      else
+--- 2520,2526 ----
+      wininfo_T        *wip;
+      static pos_T no_position = {1, 0};
+  
+!     wip = find_wininfo(buf, FALSE);
+      if (wip != NULL)
+       return &(wip->wi_fpos);
+      else
+***************
+*** 2793,2806 ****
+  #endif
+  
+  /*
+!  * Set alternate cursor position for current window.
+   * Also save the local window option values.
+   */
+      void
+! buflist_altfpos()
+  {
+!     buflist_setfpos(curbuf, curwin, curwin->w_cursor.lnum,
+!                                                curwin->w_cursor.col, TRUE);
+  }
+  
+  /*
+--- 2841,2854 ----
+  #endif
+  
+  /*
+!  * Set alternate cursor position for the current buffer and window "win".
+   * Also save the local window option values.
+   */
+      void
+! buflist_altfpos(win)
+!     win_T *win;
+  {
+!     buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE);
+  }
+  
+  /*
+***************
+*** 4492,4498 ****
+                     ECMD_ONE,
+                     ((P_HID(curwin->w_buffer)
+                          || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
+!                                                             + ECMD_OLDBUF);
+  #ifdef FEAT_AUTOCMD
+           if (use_firstwin)
+               ++autocmd_no_leave;
+--- 4540,4546 ----
+                     ECMD_ONE,
+                     ((P_HID(curwin->w_buffer)
+                          || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
+!                                                     + ECMD_OLDBUF, curwin);
+  #ifdef FEAT_AUTOCMD
+           if (use_firstwin)
+               ++autocmd_no_leave;
+*** ../vim-7.2.040/src/ex_cmds.c       Sun Nov  9 13:43:25 2008
+--- src/ex_cmds.c      Wed Nov 12 22:41:41 2008
+***************
+*** 3052,3058 ****
+       retval = 0;     /* it's in the same file */
+      }
+      else if (do_ecmd(fnum, ffname, sfname, NULL, lnum,
+!              (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0)) == OK)
+       retval = -1;    /* opened another file */
+      else
+       retval = 1;     /* error encountered */
+--- 3052,3059 ----
+       retval = 0;     /* it's in the same file */
+      }
+      else if (do_ecmd(fnum, ffname, sfname, NULL, lnum,
+!              (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0),
+!              curwin) == OK)
+       retval = -1;    /* opened another file */
+      else
+       retval = 1;     /* error encountered */
+***************
+*** 3085,3101 ****
+   *    ECMD_OLDBUF: use existing buffer if it exists
+   *   ECMD_FORCEIT: ! used for Ex command
+   *    ECMD_ADDBUF: don't edit, just add to buffer list
+   *
+   * return FAIL for failure, OK otherwise
+   */
+      int
+! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags)
+      int              fnum;
+      char_u   *ffname;
+      char_u   *sfname;
+      exarg_T  *eap;                   /* can be NULL! */
+      linenr_T newlnum;
+      int              flags;
+  {
+      int              other_file;             /* TRUE if editing another file */
+      int              oldbuf;                 /* TRUE if using existing buffer */
+--- 3086,3106 ----
+   *    ECMD_OLDBUF: use existing buffer if it exists
+   *   ECMD_FORCEIT: ! used for Ex command
+   *    ECMD_ADDBUF: don't edit, just add to buffer list
++  *   oldwin: Should be "curwin" when editing a new buffer in the current
++  *           window, NULL when splitting the window first.  When not NULL info
++  *           of the previous buffer for "oldwin" is stored.
+   *
+   * return FAIL for failure, OK otherwise
+   */
+      int
+! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
+      int              fnum;
+      char_u   *ffname;
+      char_u   *sfname;
+      exarg_T  *eap;                   /* can be NULL! */
+      linenr_T newlnum;
+      int              flags;
++     win_T    *oldwin;
+  {
+      int              other_file;             /* TRUE if editing another file */
+      int              oldbuf;                 /* TRUE if using existing buffer */
+***************
+*** 3267,3273 ****
+       {
+           if (!cmdmod.keepalt)
+               curwin->w_alt_fnum = curbuf->b_fnum;
+!          buflist_altfpos();
+       }
+  
+       if (fnum)
+--- 3272,3279 ----
+       {
+           if (!cmdmod.keepalt)
+               curwin->w_alt_fnum = curbuf->b_fnum;
+!          if (oldwin != NULL)
+!              buflist_altfpos(oldwin);
+       }
+  
+       if (fnum)
+***************
+*** 3371,3377 ****
+  
+               /* close the link to the current buffer */
+               u_sync(FALSE);
+!              close_buffer(curwin, curbuf,
+                                     (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+  
+  #ifdef FEAT_AUTOCMD
+--- 3377,3383 ----
+  
+               /* close the link to the current buffer */
+               u_sync(FALSE);
+!              close_buffer(oldwin, curbuf,
+                                     (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+  
+  #ifdef FEAT_AUTOCMD
+***************
+*** 5609,5615 ****
+            */
+           alt_fnum = curbuf->b_fnum;
+           (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
+!                                                 ECMD_HIDE + ECMD_SET_HELP);
+           if (!cmdmod.keepalt)
+               curwin->w_alt_fnum = alt_fnum;
+           empty_fnum = curbuf->b_fnum;
+--- 5615,5627 ----
+            */
+           alt_fnum = curbuf->b_fnum;
+           (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
+!                        ECMD_HIDE + ECMD_SET_HELP,
+! #ifdef FEAT_WINDOWS
+!                        NULL  /* buffer is still open, don't store info */
+! #else
+!                        curwin
+! #endif
+!                  );
+           if (!cmdmod.keepalt)
+               curwin->w_alt_fnum = alt_fnum;
+           empty_fnum = curbuf->b_fnum;
+*** ../vim-7.2.040/src/ex_cmds2.c      Sun Sep  7 15:49:45 2008
+--- src/ex_cmds2.c     Wed Nov 12 17:46:41 2008
+***************
+*** 2132,2139 ****
+        * argument index. */
+       if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
+                     eap, ECMD_LAST,
+!                    (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) +
+!                                 (eap->forceit ? ECMD_FORCEIT : 0)) == FAIL)
+           curwin->w_arg_idx = old_arg_idx;
+       /* like Vi: set the mark where the cursor is in the file. */
+       else if (eap->cmdidx != CMD_argdo)
+--- 2132,2139 ----
+        * argument index. */
+       if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
+                     eap, ECMD_LAST,
+!                    (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0)
+!                       + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL)
+           curwin->w_arg_idx = old_arg_idx;
+       /* like Vi: set the mark where the cursor is in the file. */
+       else if (eap->cmdidx != CMD_argdo)
+*** ../vim-7.2.040/src/ex_docmd.c      Sun Nov  9 13:43:25 2008
+--- src/ex_docmd.c     Wed Nov 12 18:04:22 2008
+***************
+*** 7488,7494 ****
+       /* ":new" or ":tabnew" without argument: edit an new empty buffer */
+       setpcmark();
+       (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
+!                             ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0));
+      }
+      else if ((eap->cmdidx != CMD_split
+  #ifdef FEAT_VERTSPLIT
+--- 7488,7495 ----
+       /* ":new" or ":tabnew" without argument: edit an new empty buffer */
+       setpcmark();
+       (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
+!                    ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
+!                    old_curwin == NULL ? curwin : NULL);
+      }
+      else if ((eap->cmdidx != CMD_split
+  #ifdef FEAT_VERTSPLIT
+***************
+*** 7525,7531 ****
+  #ifdef FEAT_LISTCMDS
+                   + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
+  #endif
+!                  ) == FAIL)
+       {
+           /* Editing the file failed.  If the window was split, close it. */
+  #ifdef FEAT_WINDOWS
+--- 7526,7532 ----
+  #ifdef FEAT_LISTCMDS
+                   + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
+  #endif
+!                  , old_curwin == NULL ? curwin : NULL) == FAIL)
+       {
+           /* Editing the file failed.  If the window was split, close it. */
+  #ifdef FEAT_WINDOWS
+*** ../vim-7.2.040/src/ex_getln.c      Sun Sep 14 14:41:44 2008
+--- src/ex_getln.c     Wed Nov 12 18:06:25 2008
+***************
+*** 6051,6057 ****
+       cmdwin_type = '-';
+  
+      /* Create the command-line buffer empty. */
+!     (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
+      (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
+      set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
+      set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+--- 6051,6057 ----
+       cmdwin_type = '-';
+  
+      /* Create the command-line buffer empty. */
+!     (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
+      (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
+      set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
+      set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+*** ../vim-7.2.040/src/if_sniff.c      Sat Aug  9 19:41:16 2008
+--- src/if_sniff.c     Wed Nov 12 17:48:46 2008
+***************
+*** 1114,1120 ****
+      char *fname;
+  {
+      ++no_wait_return;
+!     do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF);
+      curbuf->b_sniff = TRUE;
+      --no_wait_return;                                        /* [ex_docmd.c] */
+  }
+--- 1114,1121 ----
+      char *fname;
+  {
+      ++no_wait_return;
+!     do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF,
+!          curwin);
+      curbuf->b_sniff = TRUE;
+      --no_wait_return;                                        /* [ex_docmd.c] */
+  }
+*** ../vim-7.2.040/src/main.c  Sun Nov  9 13:43:25 2008
+--- src/main.c Wed Nov 12 17:49:06 2008
+***************
+*** 2588,2594 ****
+  # endif
+           (void)do_ecmd(0, arg_idx < GARGCOUNT
+                         ? alist_name(&GARGLIST[arg_idx]) : NULL,
+!                        NULL, NULL, ECMD_LASTL, ECMD_HIDE);
+  # ifdef HAS_SWAP_EXISTS_ACTION
+           if (swap_exists_did_quit)
+           {
+--- 2588,2594 ----
+  # endif
+           (void)do_ecmd(0, arg_idx < GARGCOUNT
+                         ? alist_name(&GARGLIST[arg_idx]) : NULL,
+!                        NULL, NULL, ECMD_LASTL, ECMD_HIDE, curwin);
+  # ifdef HAS_SWAP_EXISTS_ACTION
+           if (swap_exists_did_quit)
+           {
+*** ../vim-7.2.040/src/netbeans.c      Sun Jul 13 19:18:03 2008
+--- src/netbeans.c     Wed Nov 12 17:49:40 2008
+***************
+*** 1795,1801 ****
+           buf->displayname = NULL;
+  
+           netbeansReadFile = 0; /* don't try to open disk file */
+!          do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF);
+           netbeansReadFile = 1;
+           buf->bufp = curbuf;
+           maketitle();
+--- 1795,1801 ----
+           buf->displayname = NULL;
+  
+           netbeansReadFile = 0; /* don't try to open disk file */
+!          do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin);
+           netbeansReadFile = 1;
+           buf->bufp = curbuf;
+           maketitle();
+***************
+*** 1960,1966 ****
+  
+           netbeansReadFile = 0; /* don't try to open disk file */
+           do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE,
+!                                                   ECMD_HIDE + ECMD_OLDBUF);
+           netbeansReadFile = 1;
+           buf->bufp = curbuf;
+           maketitle();
+--- 1960,1966 ----
+  
+           netbeansReadFile = 0; /* don't try to open disk file */
+           do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE,
+!                                           ECMD_HIDE + ECMD_OLDBUF, curwin);
+           netbeansReadFile = 1;
+           buf->bufp = curbuf;
+           maketitle();
+***************
+*** 1979,1985 ****
+           vim_free(buf->displayname);
+           buf->displayname = nb_unquote(args, NULL);
+           do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
+!                                                   ECMD_HIDE + ECMD_OLDBUF);
+           buf->bufp = curbuf;
+           buf->initDone = TRUE;
+           doupdate = 1;
+--- 1979,1985 ----
+           vim_free(buf->displayname);
+           buf->displayname = nb_unquote(args, NULL);
+           do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE,
+!                                           ECMD_HIDE + ECMD_OLDBUF, curwin);
+           buf->bufp = curbuf;
+           buf->initDone = TRUE;
+           doupdate = 1;
+*** ../vim-7.2.040/src/normal.c        Sat Nov  1 13:51:57 2008
+--- src/normal.c       Wed Nov 12 17:49:50 2008
+***************
+*** 6050,6056 ****
+           autowrite(curbuf, FALSE);
+       setpcmark();
+       (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
+!                                             P_HID(curbuf) ? ECMD_HIDE : 0);
+       if (cap->nchar == 'F' && lnum >= 0)
+       {
+           curwin->w_cursor.lnum = lnum;
+--- 6050,6056 ----
+           autowrite(curbuf, FALSE);
+       setpcmark();
+       (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
+!                                     P_HID(curbuf) ? ECMD_HIDE : 0, curwin);
+       if (cap->nchar == 'F' && lnum >= 0)
+       {
+           curwin->w_cursor.lnum = lnum;
+*** ../vim-7.2.040/src/popupmnu.c      Sun Jul 13 19:33:51 2008
+--- src/popupmnu.c     Wed Nov 12 18:08:07 2008
+***************
+*** 573,579 ****
+               {
+                   /* Don't want to sync undo in the current buffer. */
+                   ++no_u_sync;
+!                  res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0);
+                   --no_u_sync;
+                   if (res == OK)
+                   {
+--- 573,579 ----
+               {
+                   /* Don't want to sync undo in the current buffer. */
+                   ++no_u_sync;
+!                  res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL);
+                   --no_u_sync;
+                   if (res == OK)
+                   {
+*** ../vim-7.2.040/src/proto/buffer.pro        Sun May  6 13:57:53 2007
+--- src/proto/buffer.pro       Wed Nov 12 17:43:39 2008
+***************
+*** 33,39 ****
+  char_u *getaltfname __ARGS((int errmsg));
+  int buflist_add __ARGS((char_u *fname, int flags));
+  void buflist_slash_adjust __ARGS((void));
+! void buflist_altfpos __ARGS((void));
+  int otherfile __ARGS((char_u *ffname));
+  void buf_setino __ARGS((buf_T *buf));
+  void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
+--- 33,39 ----
+  char_u *getaltfname __ARGS((int errmsg));
+  int buflist_add __ARGS((char_u *fname, int flags));
+  void buflist_slash_adjust __ARGS((void));
+! void buflist_altfpos __ARGS((win_T *win));
+  int otherfile __ARGS((char_u *ffname));
+  void buf_setino __ARGS((buf_T *buf));
+  void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
+*** ../vim-7.2.040/src/proto/ex_cmds.pro       Sun Nov  9 13:43:25 2008
+--- src/proto/ex_cmds.pro      Wed Nov 12 17:44:27 2008
+***************
+*** 27,33 ****
+  void do_wqall __ARGS((exarg_T *eap));
+  int not_writing __ARGS((void));
+  int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
+! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags));
+  void ex_append __ARGS((exarg_T *eap));
+  void ex_change __ARGS((exarg_T *eap));
+  void ex_z __ARGS((exarg_T *eap));
+--- 27,33 ----
+  void do_wqall __ARGS((exarg_T *eap));
+  int not_writing __ARGS((void));
+  int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit));
+! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags, win_T *oldwin));
+  void ex_append __ARGS((exarg_T *eap));
+  void ex_change __ARGS((exarg_T *eap));
+  void ex_z __ARGS((exarg_T *eap));
+*** ../vim-7.2.040/src/quickfix.c      Thu Jul 24 18:44:59 2008
+--- src/quickfix.c     Wed Nov 12 18:12:00 2008
+***************
+*** 1420,1425 ****
+--- 1420,1426 ----
+      win_T            *win;
+      win_T            *altwin;
+  #endif
++     win_T            *oldwin = curwin;
+      int                      print_message = TRUE;
+      int                      len;
+  #ifdef FEAT_FOLDING
+***************
+*** 1744,1750 ****
+           }
+           else
+               ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
+!                                                 ECMD_HIDE + ECMD_SET_HELP);
+       }
+       else
+           ok = buflist_getfile(qf_ptr->qf_fnum,
+--- 1745,1752 ----
+           }
+           else
+               ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
+!                                         ECMD_HIDE + ECMD_SET_HELP,
+!                                         oldwin == curwin ? curwin : NULL);
+       }
+       else
+           ok = buflist_getfile(qf_ptr->qf_fnum,
+***************
+*** 2267,2272 ****
+--- 2269,2275 ----
+      win_T    *win;
+      tabpage_T        *prevtab = curtab;
+      buf_T    *qf_buf;
++     win_T    *oldwin = curwin;
+  
+      if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+      {
+***************
+*** 2326,2339 ****
+           win->w_llist->qf_refcount++;
+       }
+  
+       if (qf_buf != NULL)
+           /* Use the existing quickfix buffer */
+           (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
+!                                                   ECMD_HIDE + ECMD_OLDBUF);
+       else
+       {
+           /* Create a new quickfix buffer */
+!          (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
+           /* switch off 'swapfile' */
+           set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+           set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+--- 2329,2344 ----
+           win->w_llist->qf_refcount++;
+       }
+  
++      if (oldwin != curwin)
++          oldwin = NULL;  /* don't store info when in another window */
+       if (qf_buf != NULL)
+           /* Use the existing quickfix buffer */
+           (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
+!                                           ECMD_HIDE + ECMD_OLDBUF, oldwin);
+       else
+       {
+           /* Create a new quickfix buffer */
+!          (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
+           /* switch off 'swapfile' */
+           set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+           set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+*** ../vim-7.2.040/src/window.c        Wed Aug  6 18:32:11 2008
+--- src/window.c       Wed Nov 12 18:12:37 2008
+***************
+*** 531,537 ****
+  # ifdef FEAT_SCROLLBIND
+                       curwin->w_p_scb = FALSE;
+  # endif
+!                      (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE);
+                       if (nchar == 'F' && lnum >= 0)
+                       {
+                           curwin->w_cursor.lnum = lnum;
+--- 531,538 ----
+  # ifdef FEAT_SCROLLBIND
+                       curwin->w_p_scb = FALSE;
+  # endif
+!                      (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
+!                                                         ECMD_HIDE, NULL);
+                       if (nchar == 'F' && lnum >= 0)
+                       {
+                           curwin->w_cursor.lnum = lnum;
+*** ../vim-7.2.040/src/version.c       Wed Nov 12 16:04:43 2008
+--- src/version.c      Wed Nov 12 16:54:35 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     41,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+260. Co-workers have to E-mail you about the fire alarm to get
+     you out of the building.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.042 b/7.2.042
new file mode 100644 (file)
index 0000000..cd2b568
--- /dev/null
+++ b/7.2.042
@@ -0,0 +1,166 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.042
+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 7.2.042
+Problem:    When using winrestview() in a BufWinEnter autocommand the window
+           is scrolled anyway. (Matt Zyzik)
+Solution:   Don't recompute topline when above 'scrolloff' from the bottom.
+           Don't always put the cursor halfway when entering a buffer.  Add
+           "w_topline_was_set".
+Files:     src/buffer.c, src/move.c, src/structs.h
+
+
+*** ../vim-7.2.041/src/buffer.c        Sat Nov 15 14:10:23 2008
+--- src/buffer.c       Sat Nov 15 14:58:52 2008
+***************
+*** 1401,1406 ****
+--- 1401,1409 ----
+      curwin->w_cursor.coladd = 0;
+  #endif
+      curwin->w_set_curswant = TRUE;
++ #ifdef FEAT_AUTOCMD
++     curwin->w_topline_was_set = FALSE;
++ #endif
+  
+      /* Make sure the buffer is loaded. */
+      if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */
+***************
+*** 1440,1446 ****
+      maketitle();
+  #endif
+  #ifdef FEAT_AUTOCMD
+!     if (curwin->w_topline == 1)              /* when autocmds didn't change it */
+  #endif
+       scroll_cursor_halfway(FALSE);   /* redisplay at correct position */
+  
+--- 1443,1450 ----
+      maketitle();
+  #endif
+  #ifdef FEAT_AUTOCMD
+!      /* when autocmds didn't change it */
+!     if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
+  #endif
+       scroll_cursor_halfway(FALSE);   /* redisplay at correct position */
+  
+*** ../vim-7.2.041/src/move.c  Sun Jul 13 19:25:23 2008
+--- src/move.c Sat Nov 15 14:56:47 2008
+***************
+*** 280,297 ****
+  
+       if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
+       {
+!          if (curwin->w_cursor.lnum < curwin->w_botline
+!                  && ((long)curwin->w_cursor.lnum
+                                            >= (long)curwin->w_botline - p_so
+  #ifdef FEAT_FOLDING
+                       || hasAnyFolding(curwin)
+  #endif
+                       ))
+!          {
+               lineoff_T       loff;
+  
+!              /* Cursor is above botline, check if there are 'scrolloff'
+!               * window lines below the cursor.  If not, need to scroll. */
+               n = curwin->w_empty_rows;
+               loff.lnum = curwin->w_cursor.lnum;
+  #ifdef FEAT_FOLDING
+--- 280,299 ----
+  
+       if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
+       {
+!          if (curwin->w_cursor.lnum < curwin->w_botline)
+!          {
+!            if (((long)curwin->w_cursor.lnum
+                                            >= (long)curwin->w_botline - p_so
+  #ifdef FEAT_FOLDING
+                       || hasAnyFolding(curwin)
+  #endif
+                       ))
+!            {
+               lineoff_T       loff;
+  
+!              /* Cursor is (a few lines) above botline, check if there are
+!               * 'scrolloff' window lines below the cursor.  If not, need to
+!               * scroll. */
+               n = curwin->w_empty_rows;
+               loff.lnum = curwin->w_cursor.lnum;
+  #ifdef FEAT_FOLDING
+***************
+*** 317,322 ****
+--- 319,328 ----
+               if (n >= p_so)
+                   /* sufficient context, no need to scroll */
+                   check_botline = FALSE;
++            }
++            else
++                /* sufficient context, no need to scroll */
++                check_botline = FALSE;
+           }
+           if (check_botline)
+           {
+***************
+*** 509,514 ****
+--- 515,523 ----
+      /* Approximate the value of w_botline */
+      wp->w_botline += lnum - wp->w_topline;
+      wp->w_topline = lnum;
++ #ifdef FEAT_AUTOCMD
++     wp->w_topline_was_set = TRUE;
++ #endif
+  #ifdef FEAT_DIFF
+      wp->w_topfill = 0;
+  #endif
+*** ../vim-7.2.041/src/structs.h       Sun Nov  9 13:43:25 2008
+--- src/structs.h      Sat Nov 15 14:56:42 2008
+***************
+*** 1784,1793 ****
+  #endif
+  
+      /*
+!      * The next three specify the offsets for displaying the buffer:
+       */
+      linenr_T w_topline;          /* buffer line number of the line at the
+                                      top of the window */
+  #ifdef FEAT_DIFF
+      int              w_topfill;          /* number of filler lines above w_topline */
+      int              w_old_topfill;      /* w_topfill at last redraw */
+--- 1784,1798 ----
+  #endif
+  
+      /*
+!      * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
+!      * displaying the buffer.
+       */
+      linenr_T w_topline;          /* buffer line number of the line at the
+                                      top of the window */
++ #ifdef FEAT_AUTOCMD
++     char     w_topline_was_set;  /* flag set to TRUE when topline is set,
++                                     e.g. by winrestview() */
++ #endif
+  #ifdef FEAT_DIFF
+      int              w_topfill;          /* number of filler lines above w_topline */
+      int              w_old_topfill;      /* w_topfill at last redraw */
+*** ../vim-7.2.041/src/version.c       Sat Nov 15 14:10:23 2008
+--- src/version.c      Sat Nov 15 16:01:29 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     42,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+261. You find diskettes in your pockets when doing laundry.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.043 b/7.2.043
new file mode 100644 (file)
index 0000000..5c52254
--- /dev/null
+++ b/7.2.043
@@ -0,0 +1,78 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.043
+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 7.2.043
+Problem:    VMS: Too many characters are escaped in filename and shell
+           commands.
+Solution:   Escape fewer characters. (Zoltan Arpadffy)
+Files:     src/vim.h
+
+
+*** ../vim-7.2.042/src/vim.h   Sun Nov  9 13:43:25 2008
+--- src/vim.h  Fri Nov 14 21:41:17 2008
+***************
+*** 341,348 ****
+  #ifdef BACKSLASH_IN_FILENAME
+  # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
+  #else
+! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
+! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
+  #endif
+  
+  #define NUMBUFLEN 30     /* length of a buffer to store a number in ASCII */
+--- 341,354 ----
+  #ifdef BACKSLASH_IN_FILENAME
+  # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
+  #else
+! # ifdef VMS
+!     /* VMS allows a lot of characters in the file name */
+! #  define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!")
+! #  define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&")
+! # else
+! #  define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
+! #  define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
+! # endif
+  #endif
+  
+  #define NUMBUFLEN 30     /* length of a buffer to store a number in ASCII */
+***************
+*** 370,376 ****
+     * Define __w64 as an empty token for everything but MSVC 7.x or later.
+     */
+  # if !defined(_MSC_VER)      || (_MSC_VER < 1300)
+! #  define __w64 
+  # endif
+  typedef unsigned long __w64  long_u;
+  typedef               long __w64     long_i;
+--- 376,382 ----
+     * Define __w64 as an empty token for everything but MSVC 7.x or later.
+     */
+  # if !defined(_MSC_VER)      || (_MSC_VER < 1300)
+! #  define __w64
+  # endif
+  typedef unsigned long __w64  long_u;
+  typedef               long __w64     long_i;
+*** ../vim-7.2.042/src/version.c       Sat Nov 15 16:05:30 2008
+--- src/version.c      Thu Nov 20 10:23:51 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     43,
+  /**/
+
+-- 
+In his lifetime van Gogh painted 486 oil paintings. Oddly enough, 8975
+of them are to be found in the United States.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.044 b/7.2.044
new file mode 100644 (file)
index 0000000..4cfe651
--- /dev/null
+++ b/7.2.044
@@ -0,0 +1,161 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.044
+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 7.2.044
+Problem:    Crash because of STRCPY() being over protective of the destination
+           size. (Dominique Pelle)
+Solution:   Add -D_FORTIFY_SOURCE=1 to CFLAGS.  Use an intermediate variable
+           for the pointer to avoid a warning.
+Files:     src/auto/configure, src/configure.in, src/eval.c
+
+
+*** ../vim-7.2.043/src/auto/configure  Thu Jul 24 17:20:50 2008
+--- src/auto/configure Sun Nov 16 17:08:44 2008
+***************
+*** 16819,16839 ****
+    LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
+  fi
+  
+- { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
+- $as_echo_n "checking for GCC 3 or later... " >&6; }
+  DEPEND_CFLAGS_FILTER=
+  if test "$GCC" = yes; then
+    gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
+    if test "$gccmajor" -gt "2"; then
+      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
+!   fi
+! fi
+! if test "$DEPEND_CFLAGS_FILTER" = ""; then
+!   { $as_echo "$as_me:$LINENO: result: no" >&5
+  $as_echo "no" >&6; }
+! else
+!   { $as_echo "$as_me:$LINENO: result: yes" >&5
+  $as_echo "yes" >&6; }
+  fi
+  
+  
+--- 16819,16847 ----
+    LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
+  fi
+  
+  DEPEND_CFLAGS_FILTER=
+  if test "$GCC" = yes; then
++   { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
++ $as_echo_n "checking for GCC 3 or later... " >&6; }
+    gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
+    if test "$gccmajor" -gt "2"; then
+      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
+!     { $as_echo "$as_me:$LINENO: result: yes" >&5
+! $as_echo "yes" >&6; }
+!   else
+!     { $as_echo "$as_me:$LINENO: result: no" >&5
+  $as_echo "no" >&6; }
+!   fi
+!       { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+! $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
+!   if test "$gccmajor" -gt "3"; then
+!     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1"
+!     { $as_echo "$as_me:$LINENO: result: yes" >&5
+  $as_echo "yes" >&6; }
++   else
++     { $as_echo "$as_me:$LINENO: result: no" >&5
++ $as_echo "no" >&6; }
++   fi
+  fi
+  
+  
+*** ../vim-7.2.043/src/configure.in    Thu Jul 24 17:20:31 2008
+--- src/configure.in   Sun Nov 16 17:08:40 2008
+***************
+*** 3152,3169 ****
+  dnl But only when making dependencies, cproto and lint don't take "-isystem".
+  dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
+  dnl the number before the version number.
+- AC_MSG_CHECKING(for GCC 3 or later)
+  DEPEND_CFLAGS_FILTER=
+  if test "$GCC" = yes; then
+    gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
+    if test "$gccmajor" -gt "2"; then
+      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
+    fi
+- fi
+- if test "$DEPEND_CFLAGS_FILTER" = ""; then
+-   AC_MSG_RESULT(no)
+- else
+-   AC_MSG_RESULT(yes)
+  fi
+  AC_SUBST(DEPEND_CFLAGS_FILTER)
+  
+--- 3152,3176 ----
+  dnl But only when making dependencies, cproto and lint don't take "-isystem".
+  dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
+  dnl the number before the version number.
+  DEPEND_CFLAGS_FILTER=
+  if test "$GCC" = yes; then
++   AC_MSG_CHECKING(for GCC 3 or later)
+    gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
+    if test "$gccmajor" -gt "2"; then
+      DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
++     AC_MSG_RESULT(yes)
++   else
++     AC_MSG_RESULT(no)
++   fi
++   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
++   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
++   AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
++   if test "$gccmajor" -gt "3"; then
++     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1"
++     AC_MSG_RESULT(yes)
++   else
++     AC_MSG_RESULT(no)
+    fi
+  fi
+  AC_SUBST(DEPEND_CFLAGS_FILTER)
+  
+*** ../vim-7.2.043/src/eval.c  Wed Nov 12 15:28:37 2008
+--- src/eval.c Sun Nov 16 20:46:28 2008
+***************
+*** 21150,21157 ****
+      init_var_dict(&fc.l_avars, &fc.l_avars_var);
+      add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
+                               (varnumber_T)(argcount - fp->uf_args.ga_len));
+      v = &fc.fixvar[fixvar_idx++].var;
+!     STRCPY(v->di_key, "000");
+      v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
+      hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
+      v->di_tv.v_type = VAR_LIST;
+--- 21150,21160 ----
+      init_var_dict(&fc.l_avars, &fc.l_avars_var);
+      add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
+                               (varnumber_T)(argcount - fp->uf_args.ga_len));
++     /* Use "name" to avoid a warning from some compiler that checks the
++      * destination size. */
+      v = &fc.fixvar[fixvar_idx++].var;
+!     name = v->di_key;
+!     STRCPY(name, "000");
+      v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
+      hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
+      v->di_tv.v_type = VAR_LIST;
+*** ../vim-7.2.043/src/version.c       Thu Nov 20 10:26:19 2008
+--- src/version.c      Thu Nov 20 10:34:31 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     44,
+  /**/
+
+-- 
+Error:015 - Unable to exit Windows.  Try the door.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.045 b/7.2.045
new file mode 100644 (file)
index 0000000..cf37908
--- /dev/null
+++ b/7.2.045
@@ -0,0 +1,67 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.045
+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 7.2.045
+Problem:    The Python interface has an empty entry in sys.path.
+Solution:   Filter out the empty entry. (idea from James Vega)
+Files:     src/if_python.c
+
+
+*** ../vim-7.2.044/src/if_python.c     Thu Jul 24 16:24:48 2008
+--- src/if_python.c    Thu Nov 20 11:03:53 2008
+***************
+*** 531,536 ****
+--- 531,542 ----
+       if (PythonMod_Init())
+           goto fail;
+  
++      /* Remove the element from sys.path that was added because of our
++       * argv[0] value in PythonMod_Init().  Previously we used an empty
++       * string, but dependinding on the OS we then get an empty entry or
++       * the current directory in sys.path. */
++      PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
++ 
+       /* the first python thread is vim's, release the lock */
+       Python_SaveThread();
+  
+***************
+*** 2345,2351 ****
+  {
+      PyObject *mod;
+      PyObject *dict;
+!     static char *(argv[2]) = {"", NULL};
+  
+      /* Fixups... */
+      BufferType.ob_type = &PyType_Type;
+--- 2351,2358 ----
+  {
+      PyObject *mod;
+      PyObject *dict;
+!     /* The special value is removed from sys.path in Python_Init(). */
+!     static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+  
+      /* Fixups... */
+      BufferType.ob_type = &PyType_Type;
+*** ../vim-7.2.044/src/version.c       Thu Nov 20 10:36:04 2008
+--- src/version.c      Thu Nov 20 10:58:11 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     45,
+  /**/
+
+-- 
+press CTRL-ALT-DEL for more information
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.046 b/7.2.046
new file mode 100644 (file)
index 0000000..335f814
--- /dev/null
+++ b/7.2.046
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.046
+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 7.2.046
+Problem:    Wrong check for filling buffer with encoding. (Danek Duvall)
+Solution:   Remove pointers. (Dominique Pelle)
+Files:     src/mbyte.c
+
+
+*** ../vim-7.2.045/src/mbyte.c Wed Nov 12 13:07:48 2008
+--- src/mbyte.c        Wed Nov 19 21:44:50 2008
+***************
+*** 3131,3137 ****
+       else
+           s = p + 1;
+      }
+!     for (i = 0; s[i] != NUL && s + i < buf + sizeof(buf) - 1; ++i)
+      {
+       if (s[i] == '_' || s[i] == '-')
+           buf[i] = '-';
+--- 3131,3137 ----
+       else
+           s = p + 1;
+      }
+!     for (i = 0; s[i] != NUL && i < sizeof(buf) - 1; ++i)
+      {
+       if (s[i] == '_' || s[i] == '-')
+           buf[i] = '-';
+*** ../vim-7.2.045/src/version.c       Thu Nov 20 11:04:01 2008
+--- src/version.c      Thu Nov 20 11:54:23 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     46,
+  /**/
+
+-- 
+       He was not in the least bit scared to be mashed into a pulp
+       Or to have his eyes gouged out and his elbows broken;
+       To have his kneecaps split and his body burned away
+       And his limbs all hacked and mangled, brave Sir Robin.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.047 b/7.2.047
new file mode 100644 (file)
index 0000000..5826d2a
--- /dev/null
+++ b/7.2.047
@@ -0,0 +1,88 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.047
+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 7.2.047
+Problem:    Starting Vim with the -nb argument while it's not supported causes
+           the other side to hang.
+Solution:   When -nb is used while it's not supported exit Vim. (Xavier de
+           Gaye)
+Files:     src/main.c, src/vim.h
+
+
+*** ../vim-7.2.046/src/main.c  Sat Nov 15 14:10:23 2008
+--- src/main.c Thu Nov 20 14:09:27 2008
+***************
+*** 1510,1516 ****
+  early_arg_scan(parmp)
+      mparm_T  *parmp;
+  {
+! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER)
+      int              argc = parmp->argc;
+      char     **argv = parmp->argv;
+      int              i;
+--- 1510,1517 ----
+  early_arg_scan(parmp)
+      mparm_T  *parmp;
+  {
+! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \
+!      || !defined(FEAT_NETBEANS_INTG)
+      int              argc = parmp->argc;
+      char     **argv = parmp->argv;
+      int              i;
+***************
+*** 1582,1587 ****
+--- 1583,1596 ----
+       else if (STRICMP(argv[i], "--echo-wid") == 0)
+           echo_wid_arg = TRUE;
+  # endif
++ # ifndef FEAT_NETBEANS_INTG
++      else if (strncmp(argv[i], "-nb", (size_t)3) == 0)
++         {
++             mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n"));
++             mch_exit(2);
++         }
++ # endif
++ 
+      }
+  #endif
+  }
+*** ../vim-7.2.046/src/vim.h   Thu Nov 20 10:26:19 2008
+--- src/vim.h  Thu Nov 20 12:06:14 2008
+***************
+*** 1986,1991 ****
+--- 1986,1994 ----
+  # endif
+  #endif
+  
++ #ifndef FEAT_NETBEANS_INTG
++ # undef NBDEBUG
++ #endif
+  #ifdef NBDEBUG /* Netbeans debugging. */
+  # include "nbdebug.h"
+  #else
+*** ../vim-7.2.046/src/version.c       Thu Nov 20 11:55:53 2008
+--- src/version.c      Thu Nov 20 14:07:57 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     47,
+  /**/
+
+-- 
+FIRST HEAD:  Oh! quick! get the sword out I want to cut his head off.
+THIRD HEAD:  Oh, cut your own head off.
+SECOND HEAD: Yes - do us all a favour.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.048 b/7.2.048
new file mode 100644 (file)
index 0000000..3975308
--- /dev/null
+++ b/7.2.048
@@ -0,0 +1,160 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.048
+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 7.2.048
+Problem:    v:prevcount is changed too often.  Counts are not multiplied when
+           setting v:count.
+Solution:   Set v:prevcount properly.  Multiply counts. (idea by Ben Schmidt)
+Files:     src/eval.c, src/normal.c, src/proto/eval.pro
+
+
+*** ../vim-7.2.047/src/eval.c  Thu Nov 20 10:36:04 2008
+--- src/eval.c Thu Nov 20 15:53:47 2008
+***************
+*** 18146,18159 ****
+  }
+  
+  /*
+!  * Set v:count, v:count1 and v:prevcount.
+   */
+      void
+! set_vcount(count, count1)
+      long     count;
+      long     count1;
+  {
+!     vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
+      vimvars[VV_COUNT].vv_nr = count;
+      vimvars[VV_COUNT1].vv_nr = count1;
+  }
+--- 18146,18162 ----
+  }
+  
+  /*
+!  * Set v:count to "count" and v:count1 to "count1".
+!  * When "set_prevcount" is TRUE first set v:prevcount from v:count.
+   */
+      void
+! set_vcount(count, count1, set_prevcount)
+      long     count;
+      long     count1;
++     int              set_prevcount;
+  {
+!     if (set_prevcount)
+!      vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
+      vimvars[VV_COUNT].vv_nr = count;
+      vimvars[VV_COUNT1].vv_nr = count1;
+  }
+*** ../vim-7.2.047/src/normal.c        Sat Nov 15 14:10:23 2008
+--- src/normal.c       Thu Nov 20 16:04:44 2008
+***************
+*** 580,585 ****
+--- 580,588 ----
+      static int       old_mapped_len = 0;
+  #endif
+      int              idx;
++ #ifdef FEAT_EVAL
++     int              set_prevcount = FALSE;
++ #endif
+  
+      vim_memset(&ca, 0, sizeof(ca));  /* also resets ca.retval */
+      ca.oap = oap;
+***************
+*** 615,621 ****
+--- 618,629 ----
+      /* When not finishing an operator and no register name typed, reset the
+       * count. */
+      if (!finish_op && !oap->regname)
++     {
+       ca.opcount = 0;
++ #ifdef FEAT_EVAL
++      set_prevcount = TRUE;
++ #endif
++     }
+  
+  #ifdef FEAT_AUTOCMD
+      /* Restore counts from before receiving K_CURSORHOLD.  This means after
+***************
+*** 719,725 ****
+            * command, so that v:count can be used in an expression mapping
+            * right after the count. */
+           if (toplevel && stuff_empty())
+!              set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0);
+  #endif
+           if (ctrl_w)
+           {
+--- 727,741 ----
+            * command, so that v:count can be used in an expression mapping
+            * right after the count. */
+           if (toplevel && stuff_empty())
+!          {
+!              long count = ca.count0;
+! 
+!              /* multiply with ca.opcount the same way as below */
+!              if (ca.opcount != 0)
+!                  count = ca.opcount * (count == 0 ? 1 : count);
+!              set_vcount(count, count == 0 ? 1 : count, set_prevcount);
+!              set_prevcount = FALSE;  /* only set v:prevcount once */
+!          }
+  #endif
+           if (ctrl_w)
+           {
+***************
+*** 806,812 ****
+       * Only set v:count when called from main() and not a stuffed command.
+       */
+      if (toplevel && stuff_empty())
+!      set_vcount(ca.count0, ca.count1);
+  #endif
+  
+      /*
+--- 822,828 ----
+       * Only set v:count when called from main() and not a stuffed command.
+       */
+      if (toplevel && stuff_empty())
+!      set_vcount(ca.count0, ca.count1, set_prevcount);
+  #endif
+  
+      /*
+*** ../vim-7.2.047/src/proto/eval.pro  Sun Nov  9 13:43:25 2008
+--- src/proto/eval.pro Thu Nov 20 15:53:54 2008
+***************
+*** 61,67 ****
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
+  list_T *get_vim_var_list __ARGS((int idx));
+! void set_vcount __ARGS((long count, long count1));
+  void set_vim_var_string __ARGS((int idx, char_u *val, int len));
+  void set_vim_var_list __ARGS((int idx, list_T *val));
+  void set_reg_var __ARGS((int c));
+--- 61,67 ----
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
+  list_T *get_vim_var_list __ARGS((int idx));
+! void set_vcount __ARGS((long count, long count1, int set_prevcount));
+  void set_vim_var_string __ARGS((int idx, char_u *val, int len));
+  void set_vim_var_list __ARGS((int idx, list_T *val));
+  void set_reg_var __ARGS((int c));
+*** ../vim-7.2.047/src/version.c       Thu Nov 20 14:11:47 2008
+--- src/version.c      Thu Nov 20 16:08:19 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     48,
+  /**/
+
+-- 
+Microsoft's definition of a boolean: TRUE, FALSE, MAYBE
+"Embrace and extend"...?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.049 b/7.2.049
new file mode 100644 (file)
index 0000000..0f6efa8
--- /dev/null
+++ b/7.2.049
@@ -0,0 +1,1193 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.049 (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 7.2.049 (extra)
+Problem:    Win32: the clipboard doesn't support UTF-16.
+Solution:   Change UCS-2 support to UTF-16 support. (Jia Yanwei)
+Files:     src/gui_w32.c, src/gui_w48.c, src/mbyte.c, src/misc1.c,
+           src/os_mswin.c, src/os_win32.c, src/proto/os_mswin.pro
+
+
+*** ../vim-7.2.048/src/gui_w32.c       Tue Jun 24 23:46:14 2008
+--- src/gui_w32.c      Thu Nov 20 16:47:10 2008
+***************
+*** 992,998 ****
+                           SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
+                                                                     0, 500);
+  
+!                          tt_text = enc_to_ucs2(str, NULL);
+                           lpdi->lpszText = tt_text;
+                           /* can't show tooltip if failed */
+                       }
+--- 992,998 ----
+                           SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH,
+                                                                     0, 500);
+  
+!                          tt_text = enc_to_utf16(str, NULL);
+                           lpdi->lpszText = tt_text;
+                           /* can't show tooltip if failed */
+                       }
+***************
+*** 1935,1941 ****
+      if (buf == NULL)
+       return NULL;
+  
+!     convbuf = ucs2_to_enc(buf, lenp);
+      pImmReleaseContext(hwnd, hIMC);
+      vim_free(buf);
+      return convbuf;
+--- 1935,1941 ----
+      if (buf == NULL)
+       return NULL;
+  
+!     convbuf = utf16_to_enc(buf, lenp);
+      pImmReleaseContext(hwnd, hIMC);
+      vim_free(buf);
+      return convbuf;
+***************
+*** 2566,2572 ****
+           {
+               /* 'encoding' differs from active codepage: convert menu name
+                * and use wide function */
+!              wn = enc_to_ucs2(menu->name, NULL);
+               if (wn != NULL)
+               {
+                   MENUITEMINFOW       infow;
+--- 2566,2572 ----
+           {
+               /* 'encoding' differs from active codepage: convert menu name
+                * and use wide function */
+!              wn = enc_to_utf16(menu->name, NULL);
+               if (wn != NULL)
+               {
+                   MENUITEMINFOW       infow;
+***************
+*** 2728,2734 ****
+       {
+           /* 'encoding' differs from active codepage: convert menu item name
+            * and use wide function */
+!          wn = enc_to_ucs2(menu->name, NULL);
+           if (wn != NULL)
+           {
+               n = InsertMenuW(parent->submenu_id, (UINT)idx,
+--- 2728,2734 ----
+       {
+           /* 'encoding' differs from active codepage: convert menu item name
+            * and use wide function */
+!          wn = enc_to_utf16(menu->name, NULL);
+           if (wn != NULL)
+           {
+               n = InsertMenuW(parent->submenu_id, (UINT)idx,
+***************
+*** 3570,3576 ****
+      if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
+      {
+       /* Not a codepage, use our own conversion function. */
+!      wn = enc_to_ucs2(lpAnsiIn, NULL);
+       if (wn != NULL)
+       {
+           wcscpy(lpWCStr, wn);
+--- 3570,3576 ----
+      if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
+      {
+       /* Not a codepage, use our own conversion function. */
+!      wn = enc_to_utf16(lpAnsiIn, NULL);
+       if (wn != NULL)
+       {
+           wcscpy(lpWCStr, wn);
+*** ../vim-7.2.048/src/gui_w48.c       Wed Nov 12 13:35:31 2008
+--- src/gui_w48.c      Thu Nov 20 16:42:32 2008
+***************
+*** 547,553 ****
+       else
+       {
+           len = 1;
+!          ws = ucs2_to_enc(wstring, &len);
+           if (ws == NULL)
+               len = 0;
+           else
+--- 547,553 ----
+       else
+       {
+           len = 1;
+!          ws = utf16_to_enc(wstring, &len);
+           if (ws == NULL)
+               len = 0;
+           else
+***************
+*** 2128,2134 ****
+      {
+       /* 'encoding' differs from active codepage: convert text and use wide
+        * function */
+!      wstr = enc_to_ucs2(str, &wlen);
+       if (wstr != NULL)
+       {
+           n = GetTextExtentPointW(hdc, wstr, wlen, &size);
+--- 2128,2134 ----
+      {
+       /* 'encoding' differs from active codepage: convert text and use wide
+        * function */
+!      wstr = enc_to_utf16(str, &wlen);
+       if (wstr != NULL)
+       {
+           n = GetTextExtentPointW(hdc, wstr, wlen, &size);
+***************
+*** 2252,2258 ****
+      {
+       /* 'encoding' differs from active codepage: convert menu name
+        * and use wide function */
+!      wn = enc_to_ucs2(item_text, NULL);
+       if (wn != NULL)
+       {
+           MENUITEMINFOW       infow;
+--- 2252,2258 ----
+      {
+       /* 'encoding' differs from active codepage: convert menu name
+        * and use wide function */
+!      wn = enc_to_utf16(item_text, NULL);
+       if (wn != NULL)
+       {
+           MENUITEMINFOW       infow;
+***************
+*** 2422,2428 ****
+       if (use_unicode)
+       {
+           /* Need to go through Unicode. */
+!          wstr = enc_to_ucs2(NameBuff, NULL);
+           if (wstr != NULL)
+           {
+               TCITEMW         tiw;
+--- 2422,2428 ----
+       if (use_unicode)
+       {
+           /* Need to go through Unicode. */
+!          wstr = enc_to_utf16(NameBuff, NULL);
+           if (wstr != NULL)
+           {
+               TCITEMW         tiw;
+***************
+*** 2521,2528 ****
+       WCHAR   *wbuf;
+       int     n;
+  
+!      /* Convert the title from 'encoding' to ucs2. */
+!      wbuf = (WCHAR *)enc_to_ucs2((char_u *)title, NULL);
+       if (wbuf != NULL)
+       {
+           n = SetWindowTextW(hwnd, wbuf);
+--- 2521,2528 ----
+       WCHAR   *wbuf;
+       int     n;
+  
+!      /* Convert the title from 'encoding' to UTF-16. */
+!      wbuf = (WCHAR *)enc_to_utf16((char_u *)title, NULL);
+       if (wbuf != NULL)
+       {
+           n = SetWindowTextW(hwnd, wbuf);
+***************
+*** 3222,3228 ****
+       char_u *initdir,
+       char_u *filter)
+  {
+!     /* We always use the wide function.  This means enc_to_ucs2() must work,
+       * otherwise it fails miserably! */
+      OPENFILENAMEW    fileStruct;
+      WCHAR            fileBuf[MAXPATHL];
+--- 3222,3228 ----
+       char_u *initdir,
+       char_u *filter)
+  {
+!     /* We always use the wide function.  This means enc_to_utf16() must work,
+       * otherwise it fails miserably! */
+      OPENFILENAMEW    fileStruct;
+      WCHAR            fileBuf[MAXPATHL];
+***************
+*** 3238,3244 ****
+       fileBuf[0] = NUL;
+      else
+      {
+!      wp = enc_to_ucs2(dflt, NULL);
+       if (wp == NULL)
+           fileBuf[0] = NUL;
+       else
+--- 3238,3244 ----
+       fileBuf[0] = NUL;
+      else
+      {
+!      wp = enc_to_utf16(dflt, NULL);
+       if (wp == NULL)
+           fileBuf[0] = NUL;
+       else
+***************
+*** 3263,3273 ****
+  #endif
+  
+      if (title != NULL)
+!      titlep = enc_to_ucs2(title, NULL);
+      fileStruct.lpstrTitle = titlep;
+  
+      if (ext != NULL)
+!      extp = enc_to_ucs2(ext, NULL);
+      fileStruct.lpstrDefExt = extp;
+  
+      fileStruct.lpstrFile = fileBuf;
+--- 3263,3273 ----
+  #endif
+  
+      if (title != NULL)
+!      titlep = enc_to_utf16(title, NULL);
+      fileStruct.lpstrTitle = titlep;
+  
+      if (ext != NULL)
+!      extp = enc_to_utf16(ext, NULL);
+      fileStruct.lpstrDefExt = extp;
+  
+      fileStruct.lpstrFile = fileBuf;
+***************
+*** 3278,3284 ****
+      if (initdir != NULL && *initdir != NUL)
+      {
+       /* Must have backslashes here, no matter what 'shellslash' says */
+!      initdirp = enc_to_ucs2(initdir, NULL);
+       if (initdirp != NULL)
+       {
+           for (wp = initdirp; *wp != NUL; ++wp)
+--- 3278,3284 ----
+      if (initdir != NULL && *initdir != NUL)
+      {
+       /* Must have backslashes here, no matter what 'shellslash' says */
+!      initdirp = enc_to_utf16(initdir, NULL);
+       if (initdirp != NULL)
+       {
+           for (wp = initdirp; *wp != NUL; ++wp)
+***************
+*** 3318,3324 ****
+      vim_free(extp);
+  
+      /* Convert from UCS2 to 'encoding'. */
+!     p = ucs2_to_enc(fileBuf, NULL);
+      if (p != NULL)
+       /* when out of memory we get garbage for non-ASCII chars */
+       STRCPY(fileBuf, p);
+--- 3318,3324 ----
+      vim_free(extp);
+  
+      /* Convert from UCS2 to 'encoding'. */
+!     p = utf16_to_enc(fileBuf, NULL);
+      if (p != NULL)
+       /* when out of memory we get garbage for non-ASCII chars */
+       STRCPY(fileBuf, p);
+***************
+*** 3518,3524 ****
+       {
+  #ifdef FEAT_MBYTE
+           if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
+!              fnames[i] = ucs2_to_enc(wszFile, NULL);
+           else
+  #endif
+           {
+--- 3518,3524 ----
+       {
+  #ifdef FEAT_MBYTE
+           if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0)
+!              fnames[i] = utf16_to_enc(wszFile, NULL);
+           else
+  #endif
+           {
+*** ../vim-7.2.048/src/mbyte.c Thu Nov 20 11:55:53 2008
+--- src/mbyte.c        Thu Nov 20 16:47:41 2008
+***************
+*** 6101,6107 ****
+  
+           /* 1. codepage/UTF-8  ->  ucs-2. */
+           if (vcp->vc_cpfrom == 0)
+!              tmp_len = utf8_to_ucs2(ptr, len, NULL, NULL);
+           else
+               tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
+                                                             ptr, len, 0, 0);
+--- 6101,6107 ----
+  
+           /* 1. codepage/UTF-8  ->  ucs-2. */
+           if (vcp->vc_cpfrom == 0)
+!              tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
+           else
+               tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
+                                                             ptr, len, 0, 0);
+***************
+*** 6109,6121 ****
+           if (tmp == NULL)
+               break;
+           if (vcp->vc_cpfrom == 0)
+!              utf8_to_ucs2(ptr, len, tmp, unconvlenp);
+           else
+               MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len);
+  
+           /* 2. ucs-2  ->  codepage/UTF-8. */
+           if (vcp->vc_cpto == 0)
+!              retlen = ucs2_to_utf8(tmp, tmp_len, NULL);
+           else
+               retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
+                                                   tmp, tmp_len, 0, 0, 0, 0);
+--- 6109,6121 ----
+           if (tmp == NULL)
+               break;
+           if (vcp->vc_cpfrom == 0)
+!              utf8_to_utf16(ptr, len, tmp, unconvlenp);
+           else
+               MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len);
+  
+           /* 2. ucs-2  ->  codepage/UTF-8. */
+           if (vcp->vc_cpto == 0)
+!              retlen = utf16_to_utf8(tmp, tmp_len, NULL);
+           else
+               retlen = WideCharToMultiByte(vcp->vc_cpto, 0,
+                                                   tmp, tmp_len, 0, 0, 0, 0);
+***************
+*** 6123,6129 ****
+           if (retval != NULL)
+           {
+               if (vcp->vc_cpto == 0)
+!                  ucs2_to_utf8(tmp, tmp_len, retval);
+               else
+                   WideCharToMultiByte(vcp->vc_cpto, 0,
+                                         tmp, tmp_len, retval, retlen, 0, 0);
+--- 6123,6129 ----
+           if (retval != NULL)
+           {
+               if (vcp->vc_cpto == 0)
+!                  utf16_to_utf8(tmp, tmp_len, retval);
+               else
+                   WideCharToMultiByte(vcp->vc_cpto, 0,
+                                         tmp, tmp_len, retval, retlen, 0, 0);
+*** ../vim-7.2.048/src/misc1.c Sun Nov  9 13:43:25 2008
+--- src/misc1.c        Thu Nov 20 16:42:59 2008
+***************
+*** 8728,8734 ****
+       /* The active codepage differs from 'encoding'.  Attempt using the
+        * wide function.  If it fails because it is not implemented fall back
+        * to the non-wide version (for Windows 98) */
+!      wn = enc_to_ucs2(buf, NULL);
+       if (wn != NULL)
+       {
+           hFind = FindFirstFileW(wn, &wfb);
+--- 8728,8734 ----
+       /* The active codepage differs from 'encoding'.  Attempt using the
+        * wide function.  If it fails because it is not implemented fall back
+        * to the non-wide version (for Windows 98) */
+!      wn = enc_to_utf16(buf, NULL);
+       if (wn != NULL)
+       {
+           hFind = FindFirstFileW(wn, &wfb);
+***************
+*** 8756,8762 ****
+  #ifdef WIN3264
+  # ifdef FEAT_MBYTE
+       if (wn != NULL)
+!          p = ucs2_to_enc(wfb.cFileName, NULL);   /* p is allocated here */
+       else
+  # endif
+           p = (char_u *)fb.cFileName;
+--- 8756,8762 ----
+  #ifdef WIN3264
+  # ifdef FEAT_MBYTE
+       if (wn != NULL)
+!          p = utf16_to_enc(wfb.cFileName, NULL);   /* p is allocated here */
+       else
+  # endif
+           p = (char_u *)fb.cFileName;
+***************
+*** 8830,8836 ****
+           if (wn != NULL)
+           {
+               vim_free(wn);
+!              wn = enc_to_ucs2(buf, NULL);
+               if (wn != NULL)
+                   hFind = FindFirstFileW(wn, &wfb);
+           }
+--- 8830,8836 ----
+           if (wn != NULL)
+           {
+               vim_free(wn);
+!              wn = enc_to_utf16(buf, NULL);
+               if (wn != NULL)
+                   hFind = FindFirstFileW(wn, &wfb);
+           }
+*** ../vim-7.2.048/src/os_mswin.c      Sat Aug  9 19:37:30 2008
+--- src/os_mswin.c     Thu Nov 20 17:05:10 2008
+***************
+*** 309,315 ****
+       if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+       {
+           /* Convert the title from 'encoding' to the active codepage. */
+!          WCHAR       *wp = enc_to_ucs2(title, NULL);
+           int n;
+  
+           if (wp != NULL)
+--- 309,315 ----
+       if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+       {
+           /* Convert the title from 'encoding' to the active codepage. */
+!          WCHAR       *wp = enc_to_utf16(title, NULL);
+           int n;
+  
+           if (wp != NULL)
+***************
+*** 406,415 ****
+            * - invoke _wfullpath()
+            * - convert the result from UCS2 to 'encoding'.
+            */
+!          wname = enc_to_ucs2(fname, NULL);
+           if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
+           {
+!              cname = ucs2_to_enc((short_u *)wbuf, NULL);
+               if (cname != NULL)
+               {
+                   vim_strncpy(buf, cname, len - 1);
+--- 406,415 ----
+            * - invoke _wfullpath()
+            * - convert the result from UCS2 to 'encoding'.
+            */
+!          wname = enc_to_utf16(fname, NULL);
+           if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
+           {
+!              cname = utf16_to_enc((short_u *)wbuf, NULL);
+               if (cname != NULL)
+               {
+                   vim_strncpy(buf, cname, len - 1);
+***************
+*** 507,513 ****
+  # endif
+         )
+      {
+!      WCHAR   *wp = enc_to_ucs2(buf, NULL);
+       int     n;
+  
+       if (wp != NULL)
+--- 507,513 ----
+  # endif
+         )
+      {
+!      WCHAR   *wp = enc_to_utf16(buf, NULL);
+       int     n;
+  
+       if (wp != NULL)
+***************
+*** 668,674 ****
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_ucs2(path, NULL);
+       int     n;
+  
+       if (p != NULL)
+--- 668,674 ----
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_utf16(path, NULL);
+       int     n;
+  
+       if (p != NULL)
+***************
+*** 891,909 ****
+  
+  #if defined(FEAT_MBYTE) || defined(PROTO)
+  /*
+!  * Convert an UTF-8 string to UCS-2.
+   * "instr[inlen]" is the input.  "inlen" is in bytes.
+!  * When "outstr" is NULL only return the number of UCS-2 words produced.
+   * Otherwise "outstr" must be a buffer of sufficient size.
+!  * Returns the number of UCS-2 words produced.
+   */
+      int
+! utf8_to_ucs2(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
+  {
+      int              outlen = 0;
+      char_u   *p = instr;
+      int              todo = inlen;
+      int              l;
+  
+      while (todo > 0)
+      {
+--- 891,910 ----
+  
+  #if defined(FEAT_MBYTE) || defined(PROTO)
+  /*
+!  * Convert an UTF-8 string to UTF-16.
+   * "instr[inlen]" is the input.  "inlen" is in bytes.
+!  * When "outstr" is NULL only return the number of UTF-16 words produced.
+   * Otherwise "outstr" must be a buffer of sufficient size.
+!  * Returns the number of UTF-16 words produced.
+   */
+      int
+! utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
+  {
+      int              outlen = 0;
+      char_u   *p = instr;
+      int              todo = inlen;
+      int              l;
++     int              ch;
+  
+      while (todo > 0)
+      {
+***************
+*** 917,924 ****
+           break;
+       }
+  
+!      if (outstr != NULL)
+!          *outstr++ = utf_ptr2char(p);
+       ++outlen;
+       p += l;
+       todo -= l;
+--- 918,936 ----
+           break;
+       }
+  
+!      ch = utf_ptr2char(p);
+!      if (ch >= 0x10000)
+!      {
+!          /* non-BMP character, encoding with surrogate pairs */
+!          ++outlen;
+!          if (outstr != NULL)
+!          {
+!              *outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
+!              *outstr++ = 0xDC00 | (ch & 0x3FF);
+!          }
+!      }
+!      else if (outstr != NULL)
+!          *outstr++ = ch;
+       ++outlen;
+       p += l;
+       todo -= l;
+***************
+*** 928,956 ****
+  }
+  
+  /*
+!  * Convert an UCS-2 string to UTF-8.
+!  * The input is "instr[inlen]" with "inlen" in number of ucs-2 words.
+   * When "outstr" is NULL only return the required number of bytes.
+   * Otherwise "outstr" must be a buffer of sufficient size.
+   * Return the number of bytes produced.
+   */
+      int
+! ucs2_to_utf8(short_u *instr, int inlen, char_u *outstr)
+  {
+      int              outlen = 0;
+      int              todo = inlen;
+      short_u  *p = instr;
+      int              l;
+  
+      while (todo > 0)
+      {
+       if (outstr != NULL)
+       {
+!          l = utf_char2bytes(*p, outstr);
+           outstr += l;
+       }
+       else
+!          l = utf_char2len(*p);
+       ++p;
+       outlen += l;
+       --todo;
+--- 940,981 ----
+  }
+  
+  /*
+!  * Convert an UTF-16 string to UTF-8.
+!  * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
+   * When "outstr" is NULL only return the required number of bytes.
+   * Otherwise "outstr" must be a buffer of sufficient size.
+   * Return the number of bytes produced.
+   */
+      int
+! utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
+  {
+      int              outlen = 0;
+      int              todo = inlen;
+      short_u  *p = instr;
+      int              l;
++     int              ch, ch2;
+  
+      while (todo > 0)
+      {
++      ch = *p;
++      if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
++      {
++          /* surrogate pairs handling */
++          ch2 = p[1];
++          if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
++          {
++              ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
++              ++p;
++              --todo;
++          }
++      }
+       if (outstr != NULL)
+       {
+!          l = utf_char2bytes(ch, outstr);
+           outstr += l;
+       }
+       else
+!          l = utf_char2len(ch);
+       ++p;
+       outlen += l;
+       --todo;
+***************
+*** 1079,1092 ****
+   */
+  
+  /*
+!  * Convert "str" from 'encoding' to UCS-2.
+   * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
+   * Output is returned as an allocated string.  "*lenp" is set to the length of
+   * the result.  A trailing NUL is always added.
+   * Returns NULL when out of memory.
+   */
+      short_u *
+! enc_to_ucs2(char_u *str, int *lenp)
+  {
+      vimconv_T        conv;
+      WCHAR    *ret;
+--- 1104,1117 ----
+   */
+  
+  /*
+!  * Convert "str" from 'encoding' to UTF-16.
+   * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
+   * Output is returned as an allocated string.  "*lenp" is set to the length of
+   * the result.  A trailing NUL is always added.
+   * Returns NULL when out of memory.
+   */
+      short_u *
+! enc_to_utf16(char_u *str, int *lenp)
+  {
+      vimconv_T        conv;
+      WCHAR    *ret;
+***************
+*** 1102,1108 ****
+  
+      if (enc_codepage > 0)
+      {
+!      /* We can do any CP### -> UCS-2 in one pass, and we can do it
+        * without iconv() (convert_* may need iconv). */
+       MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
+      }
+--- 1127,1133 ----
+  
+      if (enc_codepage > 0)
+      {
+!      /* We can do any CP### -> UTF-16 in one pass, and we can do it
+        * without iconv() (convert_* may need iconv). */
+       MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
+      }
+***************
+*** 1123,1133 ****
+       }
+       convert_setup(&conv, NULL, NULL);
+  
+!      length = utf8_to_ucs2(str, *lenp, NULL, NULL);
+       ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+       if (ret != NULL)
+       {
+!          utf8_to_ucs2(str, *lenp, (short_u *)ret, NULL);
+           ret[length] = 0;
+       }
+  
+--- 1148,1158 ----
+       }
+       convert_setup(&conv, NULL, NULL);
+  
+!      length = utf8_to_utf16(str, *lenp, NULL, NULL);
+       ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+       if (ret != NULL)
+       {
+!          utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
+           ret[length] = 0;
+       }
+  
+***************
+*** 1139,1145 ****
+  }
+  
+  /*
+!  * Convert an UCS-2 string to 'encoding'.
+   * Input in "str" with length (counted in wide characters) "*lenp".  When
+   * "lenp" is NULL, use wcslen().
+   * Output is returned as an allocated string.  If "*lenp" is not NULL it is
+--- 1164,1170 ----
+  }
+  
+  /*
+!  * Convert an UTF-16 string to 'encoding'.
+   * Input in "str" with length (counted in wide characters) "*lenp".  When
+   * "lenp" is NULL, use wcslen().
+   * Output is returned as an allocated string.  If "*lenp" is not NULL it is
+***************
+*** 1147,1153 ****
+   * Returns NULL when out of memory.
+   */
+      char_u *
+! ucs2_to_enc(short_u *str, int *lenp)
+  {
+      vimconv_T        conv;
+      char_u   *utf8_str = NULL, *enc_str = NULL;
+--- 1172,1178 ----
+   * Returns NULL when out of memory.
+   */
+      char_u *
+! utf16_to_enc(short_u *str, int *lenp)
+  {
+      vimconv_T        conv;
+      char_u   *utf8_str = NULL, *enc_str = NULL;
+***************
+*** 1161,1167 ****
+  
+      if (enc_codepage > 0)
+      {
+!      /* We can do any UCS-2 -> CP### in one pass. */
+       int length;
+  
+       WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+--- 1186,1192 ----
+  
+      if (enc_codepage > 0)
+      {
+!      /* We can do any UTF-16 -> CP### in one pass. */
+       int length;
+  
+       WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+***************
+*** 1171,1180 ****
+      }
+  
+      /* Avoid allocating zero bytes, it generates an error message. */
+!     utf8_str = alloc(ucs2_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+      if (utf8_str != NULL)
+      {
+!      *lenp = ucs2_to_utf8(str, *lenp, utf8_str);
+  
+       /* We might be called before we have p_enc set up. */
+       conv.vc_type = CONV_NONE;
+--- 1196,1205 ----
+      }
+  
+      /* Avoid allocating zero bytes, it generates an error message. */
+!     utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+      if (utf8_str != NULL)
+      {
+!      *lenp = utf16_to_utf8(str, *lenp, utf8_str);
+  
+       /* We might be called before we have p_enc set up. */
+       conv.vc_type = CONV_NONE;
+***************
+*** 1308,1314 ****
+                   if (hMemWstr[str_size] == NUL)
+                       break;
+           }
+!          to_free = str = ucs2_to_enc((short_u *)hMemWstr, &str_size);
+           GlobalUnlock(hMemW);
+       }
+      }
+--- 1333,1339 ----
+                   if (hMemWstr[str_size] == NUL)
+                       break;
+           }
+!          to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
+           GlobalUnlock(hMemW);
+       }
+      }
+***************
+*** 1340,1346 ****
+  
+  # if defined(FEAT_MBYTE) && defined(WIN3264)
+           /* The text is in the active codepage.  Convert to 'encoding',
+!           * going through UCS-2. */
+           acp_to_enc(str, str_size, &to_free, &maxlen);
+           if (to_free != NULL)
+           {
+--- 1365,1371 ----
+  
+  # if defined(FEAT_MBYTE) && defined(WIN3264)
+           /* The text is in the active codepage.  Convert to 'encoding',
+!           * going through UTF-16. */
+           acp_to_enc(str, str_size, &to_free, &maxlen);
+           if (to_free != NULL)
+           {
+***************
+*** 1404,1410 ****
+      if (widestr != NULL)
+      {
+       ++*outlen;      /* Include the 0 after the string */
+!      *out = ucs2_to_enc((short_u *)widestr, outlen);
+       vim_free(widestr);
+      }
+  }
+--- 1429,1435 ----
+      if (widestr != NULL)
+      {
+       ++*outlen;      /* Include the 0 after the string */
+!      *out = utf16_to_enc((short_u *)widestr, outlen);
+       vim_free(widestr);
+      }
+  }
+***************
+*** 1466,1474 ****
+       WCHAR           *out;
+       int             len = metadata.txtlen;
+  
+!      /* Convert the text to UCS-2. This is put on the clipboard as
+        * CF_UNICODETEXT. */
+!      out = (WCHAR *)enc_to_ucs2(str, &len);
+       if (out != NULL)
+       {
+           WCHAR *lpszMemW;
+--- 1491,1499 ----
+       WCHAR           *out;
+       int             len = metadata.txtlen;
+  
+!      /* Convert the text to UTF-16. This is put on the clipboard as
+        * CF_UNICODETEXT. */
+!      out = (WCHAR *)enc_to_utf16(str, &len);
+       if (out != NULL)
+       {
+           WCHAR *lpszMemW;
+***************
+*** 1488,1494 ****
+           WideCharToMultiByte(GetACP(), 0, out, len,
+                                                 str, metadata.txtlen, 0, 0);
+  
+!          /* Allocate memory for the UCS-2 text, add one NUL word to
+            * terminate the string. */
+           hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+                                                  (len + 1) * sizeof(WCHAR));
+--- 1513,1519 ----
+           WideCharToMultiByte(GetACP(), 0, out, len,
+                                                 str, metadata.txtlen, 0, 0);
+  
+!          /* Allocate memory for the UTF-16 text, add one NUL word to
+            * terminate the string. */
+           hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+                                                  (len + 1) * sizeof(WCHAR));
+*** ../vim-7.2.048/src/os_win32.c      Thu Jul 24 20:50:30 2008
+--- src/os_win32.c     Thu Nov 20 16:44:33 2008
+***************
+*** 1587,1593 ****
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_ucs2(name, NULL);
+       WCHAR   fnamew[_MAX_PATH];
+       WCHAR   *dumw;
+       long    n;
+--- 1587,1593 ----
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_utf16(name, NULL);
+       WCHAR   fnamew[_MAX_PATH];
+       WCHAR   *dumw;
+       long    n;
+***************
+*** 2440,2446 ****
+  
+       if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
+       {
+!          char_u  *p = ucs2_to_enc(wbuf, NULL);
+  
+           if (p != NULL)
+           {
+--- 2440,2446 ----
+  
+       if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
+       {
+!          char_u  *p = utf16_to_enc(wbuf, NULL);
+  
+           if (p != NULL)
+           {
+***************
+*** 2466,2472 ****
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_ucs2(name, NULL);
+       long    n;
+  
+       if (p != NULL)
+--- 2466,2472 ----
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_utf16(name, NULL);
+       long    n;
+  
+       if (p != NULL)
+***************
+*** 2495,2501 ****
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_ucs2(name, NULL);
+       long    n;
+  
+       if (p != NULL)
+--- 2495,2501 ----
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      WCHAR   *p = enc_to_utf16(name, NULL);
+       long    n;
+  
+       if (p != NULL)
+***************
+*** 2522,2528 ****
+      WCHAR    *p = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!      p = enc_to_ucs2(name, NULL);
+  #endif
+  
+  #ifdef FEAT_MBYTE
+--- 2522,2528 ----
+      WCHAR    *p = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!      p = enc_to_utf16(name, NULL);
+  #endif
+  
+  #ifdef FEAT_MBYTE
+***************
+*** 2590,2596 ****
+      WCHAR    *wn = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!      wn = enc_to_ucs2(fname, NULL);
+      if (wn != NULL)
+      {
+       hFile = CreateFileW(wn,         /* file name */
+--- 2590,2596 ----
+      WCHAR    *wn = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!      wn = enc_to_utf16(fname, NULL);
+      if (wn != NULL)
+      {
+       hFile = CreateFileW(wn,         /* file name */
+***************
+*** 4239,4245 ****
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      wn = enc_to_ucs2(name, NULL);
+       if (wn != NULL)
+       {
+           SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
+--- 4239,4245 ----
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      wn = enc_to_utf16(name, NULL);
+       if (wn != NULL)
+       {
+           SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
+***************
+*** 4382,4389 ****
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      wold = enc_to_ucs2((char_u *)pszOldFile, NULL);
+!      wnew = enc_to_ucs2((char_u *)pszNewFile, NULL);
+       if (wold != NULL && wnew != NULL)
+           retval = mch_wrename(wold, wnew);
+       vim_free(wold);
+--- 4382,4389 ----
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      wold = enc_to_utf16((char_u *)pszOldFile, NULL);
+!      wnew = enc_to_utf16((char_u *)pszNewFile, NULL);
+       if (wold != NULL && wnew != NULL)
+           retval = mch_wrename(wold, wnew);
+       vim_free(wold);
+***************
+*** 4492,4498 ****
+      WCHAR    *wn = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!      wn = enc_to_ucs2(n, NULL);
+  #endif
+  
+      if (mch_isdir(n))
+--- 4492,4498 ----
+      WCHAR    *wn = NULL;
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!      wn = enc_to_utf16(n, NULL);
+  #endif
+  
+      if (mch_isdir(n))
+***************
+*** 4618,4624 ****
+  
+  #if defined(FEAT_MBYTE) || defined(PROTO)
+  /*
+!  * Version of open() that may use ucs2 file name.
+   */
+      int
+  mch_open(char *name, int flags, int mode)
+--- 4618,4624 ----
+  
+  #if defined(FEAT_MBYTE) || defined(PROTO)
+  /*
+!  * Version of open() that may use UTF-16 file name.
+   */
+      int
+  mch_open(char *name, int flags, int mode)
+***************
+*** 4630,4636 ****
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      wn = enc_to_ucs2(name, NULL);
+       if (wn != NULL)
+       {
+           f = _wopen(wn, flags, mode);
+--- 4630,4636 ----
+  
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+!      wn = enc_to_utf16(name, NULL);
+       if (wn != NULL)
+       {
+           f = _wopen(wn, flags, mode);
+***************
+*** 4648,4654 ****
+  }
+  
+  /*
+!  * Version of fopen() that may use ucs2 file name.
+   */
+      FILE *
+  mch_fopen(char *name, char *mode)
+--- 4648,4654 ----
+  }
+  
+  /*
+!  * Version of fopen() that may use UTF-16 file name.
+   */
+      FILE *
+  mch_fopen(char *name, char *mode)
+***************
+*** 4675,4682 ****
+       else if (newMode == 'b')
+           _set_fmode(_O_BINARY);
+  # endif
+!      wn = enc_to_ucs2(name, NULL);
+!      wm = enc_to_ucs2(mode, NULL);
+       if (wn != NULL && wm != NULL)
+           f = _wfopen(wn, wm);
+       vim_free(wn);
+--- 4675,4682 ----
+       else if (newMode == 'b')
+           _set_fmode(_O_BINARY);
+  # endif
+!      wn = enc_to_utf16(name, NULL);
+!      wm = enc_to_utf16(mode, NULL);
+       if (wn != NULL && wm != NULL)
+           f = _wfopen(wn, wm);
+       vim_free(wn);
+***************
+*** 4776,4783 ****
+      int                      len;
+  
+      /* Convert the file names to wide characters. */
+!     fromw = enc_to_ucs2(from, NULL);
+!     tow = enc_to_ucs2(to, NULL);
+      if (fromw != NULL && tow != NULL)
+      {
+       /* Open the file for reading. */
+--- 4776,4783 ----
+      int                      len;
+  
+      /* Convert the file names to wide characters. */
+!     fromw = enc_to_utf16(from, NULL);
+!     tow = enc_to_utf16(to, NULL);
+      if (fromw != NULL && tow != NULL)
+      {
+       /* Open the file for reading. */
+***************
+*** 5122,5128 ****
+      for (i = 0; i < used_file_count; ++i)
+      {
+       idx = used_file_indexes[i];
+!      str = ucs2_to_enc(ArglistW[idx], NULL);
+       if (str != NULL)
+       {
+  #ifdef FEAT_DIFF
+--- 5122,5128 ----
+      for (i = 0; i < used_file_count; ++i)
+      {
+       idx = used_file_indexes[i];
+!      str = utf16_to_enc(ArglistW[idx], NULL);
+       if (str != NULL)
+       {
+  #ifdef FEAT_DIFF
+*** ../vim-7.2.048/src/proto/os_mswin.pro      Sat May  5 19:07:50 2007
+--- src/proto/os_mswin.pro     Thu Nov 20 16:41:00 2008
+***************
+*** 22,35 ****
+  int can_end_termcap_mode __ARGS((int give_msg));
+  int mch_screenmode __ARGS((char_u *arg));
+  int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
+! int utf8_to_ucs2 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
+! int ucs2_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
+  void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
+  void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
+  int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+  void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+! short_u *enc_to_ucs2 __ARGS((char_u *str, int *lenp));
+! char_u *ucs2_to_enc __ARGS((short_u *str, int *lenp));
+  void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+  void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
+  void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+--- 22,35 ----
+  int can_end_termcap_mode __ARGS((int give_msg));
+  int mch_screenmode __ARGS((char_u *arg));
+  int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
+! int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
+! int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
+  void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
+  void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
+  int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+  void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+! short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
+! char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
+  void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+  void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
+  void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+*** ../vim-7.2.048/src/version.c       Thu Nov 20 16:11:03 2008
+--- src/version.c      Thu Nov 20 17:08:07 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     49,
+  /**/
+
+-- 
+FIRST HEAD: All right! All right! We'll kill him first and then have tea and
+            biscuits.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.050 b/7.2.050
new file mode 100644 (file)
index 0000000..416d32b
--- /dev/null
+++ b/7.2.050
@@ -0,0 +1,316 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.050
+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 7.2.050
+Problem:    Warnings for not checking return value of fwrite(). (Chip Campbell)
+Solution:   Use the return value.
+Files:     src/spell.c
+
+
+*** ../vim-7.2.049/src/spell.c Mon Aug 25 04:12:38 2008
+--- src/spell.c        Thu Nov 20 17:28:01 2008
+***************
+*** 7926,7931 ****
+--- 7926,7933 ----
+      char_u   *p;
+      int              rr;
+      int              retval = OK;
++     int              fwv = 1;  /* collect return value of fwrite() to avoid
++                           warnings from picky compiler */
+  
+      fd = mch_fopen((char *)fname, "w");
+      if (fd == NULL)
+***************
+*** 7936,7946 ****
+  
+      /* <HEADER>: <fileID> <versionnr> */
+                                                           /* <fileID> */
+!     if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1)
+!     {
+!      EMSG(_(e_write));
+!      retval = FAIL;
+!     }
+      putc(VIMSPELLVERSION, fd);                                   /* <versionnr> */
+  
+      /*
+--- 7938,7944 ----
+  
+      /* <HEADER>: <fileID> <versionnr> */
+                                                           /* <fileID> */
+!     fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
+      putc(VIMSPELLVERSION, fd);                                   /* <versionnr> */
+  
+      /*
+***************
+*** 7955,7961 ****
+  
+       i = (int)STRLEN(spin->si_info);
+       put_bytes(fd, (long_u)i, 4);                    /* <sectionlen> */
+!      fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
+      }
+  
+      /* SN_REGION: <regionname> ...
+--- 7953,7959 ----
+  
+       i = (int)STRLEN(spin->si_info);
+       put_bytes(fd, (long_u)i, 4);                    /* <sectionlen> */
+!      fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
+      }
+  
+      /* SN_REGION: <regionname> ...
+***************
+*** 7966,7972 ****
+       putc(SNF_REQUIRED, fd);                         /* <sectionflags> */
+       l = spin->si_region_count * 2;
+       put_bytes(fd, (long_u)l, 4);                    /* <sectionlen> */
+!      fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
+                                                       /* <regionname> ... */
+       regionmask = (1 << spin->si_region_count) - 1;
+      }
+--- 7964,7970 ----
+       putc(SNF_REQUIRED, fd);                         /* <sectionflags> */
+       l = spin->si_region_count * 2;
+       put_bytes(fd, (long_u)l, 4);                    /* <sectionlen> */
+!      fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
+                                                       /* <regionname> ... */
+       regionmask = (1 << spin->si_region_count) - 1;
+      }
+***************
+*** 8016,8022 ****
+       }
+  
+       put_bytes(fd, (long_u)l, 2);                    /* <folcharslen> */
+!      fwrite(folchars, (size_t)l, (size_t)1, fd);     /* <folchars> */
+      }
+  
+      /* SN_MIDWORD: <midword> */
+--- 8014,8020 ----
+       }
+  
+       put_bytes(fd, (long_u)l, 2);                    /* <folcharslen> */
+!      fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* <folchars> */
+      }
+  
+      /* SN_MIDWORD: <midword> */
+***************
+*** 8027,8033 ****
+  
+       i = (int)STRLEN(spin->si_midword);
+       put_bytes(fd, (long_u)i, 4);                    /* <sectionlen> */
+!      fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* <midword> */
+      }
+  
+      /* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
+--- 8025,8032 ----
+  
+       i = (int)STRLEN(spin->si_midword);
+       put_bytes(fd, (long_u)i, 4);                    /* <sectionlen> */
+!      fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd);
+!                                                      /* <midword> */
+      }
+  
+      /* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
+***************
+*** 8113,8119 ****
+               p = rr == 1 ? ftp->ft_from : ftp->ft_to;
+               l = (int)STRLEN(p);
+               putc(l, fd);
+!              fwrite(p, l, (size_t)1, fd);
+           }
+       }
+  
+--- 8112,8118 ----
+               p = rr == 1 ? ftp->ft_from : ftp->ft_to;
+               l = (int)STRLEN(p);
+               putc(l, fd);
+!              fwv &= fwrite(p, l, (size_t)1, fd);
+           }
+       }
+  
+***************
+*** 8131,8141 ****
+                                                       /* <sectionlen> */
+  
+       put_bytes(fd, (long_u)l, 2);                    /* <sofofromlen> */
+!      fwrite(spin->si_sofofr, l, (size_t)1, fd);      /* <sofofrom> */
+  
+       l = (int)STRLEN(spin->si_sofoto);
+       put_bytes(fd, (long_u)l, 2);                    /* <sofotolen> */
+!      fwrite(spin->si_sofoto, l, (size_t)1, fd);      /* <sofoto> */
+      }
+  
+      /* SN_WORDS: <word> ...
+--- 8130,8140 ----
+                                                       /* <sectionlen> */
+  
+       put_bytes(fd, (long_u)l, 2);                    /* <sofofromlen> */
+!      fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */
+  
+       l = (int)STRLEN(spin->si_sofoto);
+       put_bytes(fd, (long_u)l, 2);                    /* <sofotolen> */
+!      fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */
+      }
+  
+      /* SN_WORDS: <word> ...
+***************
+*** 8160,8166 ****
+                   l = (int)STRLEN(hi->hi_key) + 1;
+                   len += l;
+                   if (round == 2)                     /* <word> */
+!                      fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
+                   --todo;
+               }
+           if (round == 1)
+--- 8159,8165 ----
+                   l = (int)STRLEN(hi->hi_key) + 1;
+                   len += l;
+                   if (round == 2)                     /* <word> */
+!                      fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
+                   --todo;
+               }
+           if (round == 1)
+***************
+*** 8176,8182 ****
+       putc(0, fd);                                    /* <sectionflags> */
+       l = spin->si_map.ga_len;
+       put_bytes(fd, (long_u)l, 4);                    /* <sectionlen> */
+!      fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
+                                                       /* <mapstr> */
+      }
+  
+--- 8175,8181 ----
+       putc(0, fd);                                    /* <sectionflags> */
+       l = spin->si_map.ga_len;
+       put_bytes(fd, (long_u)l, 4);                    /* <sectionlen> */
+!      fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
+                                                       /* <mapstr> */
+      }
+  
+***************
+*** 8232,8241 ****
+       {
+           p = ((char_u **)(spin->si_comppat.ga_data))[i];
+           putc((int)STRLEN(p), fd);                   /* <comppatlen> */
+!          fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* <comppattext> */
+       }
+                                                       /* <compflags> */
+!      fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
+                                                              (size_t)1, fd);
+      }
+  
+--- 8231,8241 ----
+       {
+           p = ((char_u **)(spin->si_comppat.ga_data))[i];
+           putc((int)STRLEN(p), fd);                   /* <comppatlen> */
+!          fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);
+!                                                      /* <comppattext> */
+       }
+                                                       /* <compflags> */
+!      fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
+                                                              (size_t)1, fd);
+      }
+  
+***************
+*** 8259,8265 ****
+  
+       l = (int)STRLEN(spin->si_syllable);
+       put_bytes(fd, (long_u)l, 4);                    /* <sectionlen> */
+!      fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* <syllable> */
+      }
+  
+      /* end of <SECTIONS> */
+--- 8259,8266 ----
+  
+       l = (int)STRLEN(spin->si_syllable);
+       put_bytes(fd, (long_u)l, 4);                    /* <sectionlen> */
+!      fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd);
+!                                                      /* <syllable> */
+      }
+  
+      /* end of <SECTIONS> */
+***************
+*** 8295,8307 ****
+       (void)put_node(fd, tree, 0, regionmask, round == 3);
+      }
+  
+!     /* Write another byte to check for errors. */
+      if (putc(0, fd) == EOF)
+       retval = FAIL;
+  
+      if (fclose(fd) == EOF)
+       retval = FAIL;
+  
+      return retval;
+  }
+  
+--- 8296,8313 ----
+       (void)put_node(fd, tree, 0, regionmask, round == 3);
+      }
+  
+!     /* Write another byte to check for errors (file system full). */
+      if (putc(0, fd) == EOF)
+       retval = FAIL;
+  
+      if (fclose(fd) == EOF)
+       retval = FAIL;
+  
++     if (fwv != 1)
++      retval = FAIL;
++     if (retval == FAIL)
++      EMSG(_(e_write));
++ 
+      return retval;
+  }
+  
+***************
+*** 9890,9895 ****
+--- 9896,9902 ----
+      char_u   *p;
+      int              len;
+      int              totlen;
++     int              x = 1;  /* collect return value of fwrite() */
+  
+      if (fd != NULL)
+       put_bytes(fd, (long_u)gap->ga_len, 2);      /* <prefcondcnt> */
+***************
+*** 9906,9912 ****
+           if (fd != NULL)
+           {
+               fputc(len, fd);
+!              fwrite(p, (size_t)len, (size_t)1, fd);
+           }
+           totlen += len;
+       }
+--- 9913,9919 ----
+           if (fd != NULL)
+           {
+               fputc(len, fd);
+!              x &= fwrite(p, (size_t)len, (size_t)1, fd);
+           }
+           totlen += len;
+       }
+*** ../vim-7.2.049/src/version.c       Thu Nov 20 17:09:09 2008
+--- src/version.c      Fri Nov 28 10:06:13 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     50,
+  /**/
+
+-- 
+You got to work at a mill?  Lucky!  I got sent back to work in the
+acid-mines for my daily crust of stale bread... which not even the
+birds would eat.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.051 b/7.2.051
new file mode 100644 (file)
index 0000000..7c36dfe
--- /dev/null
+++ b/7.2.051
@@ -0,0 +1,411 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.051
+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 7.2.051
+Problem:    Can't avoid 'wildignore' and 'suffixes' for glob() and globpath().
+Solution:   Add an extra argument to these functions. (Ingo Karkat)
+Files:     src/eval.c, src/ex_getln.c, src/proto/ex_getln.pro,
+           runtime/doc/eval.txt, runtime/doc/options.txt
+
+
+*** ../vim-7.2.050/src/eval.c  Thu Nov 20 16:11:03 2008
+--- src/eval.c Thu Nov 27 22:15:40 2008
+***************
+*** 7564,7571 ****
+      {"getwinposx",   0, 0, f_getwinposx},
+      {"getwinposy",   0, 0, f_getwinposy},
+      {"getwinvar",    2, 2, f_getwinvar},
+!     {"glob",         1, 1, f_glob},
+!     {"globpath",     2, 2, f_globpath},
+      {"has",          1, 1, f_has},
+      {"has_key",              2, 2, f_has_key},
+      {"haslocaldir",  0, 0, f_haslocaldir},
+--- 7564,7571 ----
+      {"getwinposx",   0, 0, f_getwinposx},
+      {"getwinposy",   0, 0, f_getwinposy},
+      {"getwinvar",    2, 2, f_getwinvar},
+!     {"glob",         1, 2, f_glob},
+!     {"globpath",     2, 3, f_globpath},
+      {"has",          1, 1, f_has},
+      {"has_key",              2, 2, f_has_key},
+      {"haslocaldir",  0, 0, f_haslocaldir},
+***************
+*** 9557,9563 ****
+      else
+      {
+       /* When the optional second argument is non-zero, don't remove matches
+!       * for 'suffixes' and 'wildignore' */
+       if (argvars[1].v_type != VAR_UNKNOWN
+                                   && get_tv_number_chk(&argvars[1], &error))
+           flags |= WILD_KEEP_ALL;
+--- 9557,9563 ----
+      else
+      {
+       /* When the optional second argument is non-zero, don't remove matches
+!       * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+       if (argvars[1].v_type != VAR_UNKNOWN
+                                   && get_tv_number_chk(&argvars[1], &error))
+           flags |= WILD_KEEP_ALL;
+***************
+*** 11323,11335 ****
+      typval_T *argvars;
+      typval_T *rettv;
+  {
+      expand_T xpc;
+  
+!     ExpandInit(&xpc);
+!     xpc.xp_context = EXPAND_FILES;
+!     rettv->v_type = VAR_STRING;
+!     rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+!                                   NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
+  }
+  
+  /*
+--- 11323,11347 ----
+      typval_T *argvars;
+      typval_T *rettv;
+  {
++     int              flags = WILD_SILENT|WILD_USE_NL;
+      expand_T xpc;
++     int              error = FALSE;
+  
+!     /* When the optional second argument is non-zero, don't remove matches
+!     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+!     if (argvars[1].v_type != VAR_UNKNOWN
+!                              && get_tv_number_chk(&argvars[1], &error))
+!      flags |= WILD_KEEP_ALL;
+!     rettv->v_type = VAR_STRING;
+!     if (!error)
+!     {
+!      ExpandInit(&xpc);
+!      xpc.xp_context = EXPAND_FILES;
+!      rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+!                                                     NULL, flags, WILD_ALL);
+!     }
+!     else
+!      rettv->vval.v_string = NULL;
+  }
+  
+  /*
+***************
+*** 11340,11353 ****
+      typval_T *argvars;
+      typval_T *rettv;
+  {
+      char_u   buf1[NUMBUFLEN];
+      char_u   *file = get_tv_string_buf_chk(&argvars[1], buf1);
+  
+      rettv->v_type = VAR_STRING;
+!     if (file == NULL)
+       rettv->vval.v_string = NULL;
+      else
+!      rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file);
+  }
+  
+  /*
+--- 11352,11373 ----
+      typval_T *argvars;
+      typval_T *rettv;
+  {
++     int              flags = 0;
+      char_u   buf1[NUMBUFLEN];
+      char_u   *file = get_tv_string_buf_chk(&argvars[1], buf1);
++     int              error = FALSE;
+  
++     /* When the optional second argument is non-zero, don't remove matches
++     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
++     if (argvars[2].v_type != VAR_UNKNOWN
++                              && get_tv_number_chk(&argvars[2], &error))
++      flags |= WILD_KEEP_ALL;
+      rettv->v_type = VAR_STRING;
+!     if (file == NULL || error)
+       rettv->vval.v_string = NULL;
+      else
+!      rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
+!                                                                     flags);
+  }
+  
+  /*
+*** ../vim-7.2.050/src/ex_getln.c      Sat Nov 15 14:10:23 2008
+--- src/ex_getln.c     Thu Nov 20 18:37:20 2008
+***************
+*** 2524,2530 ****
+           && ccline.xpc->xp_context != EXPAND_NOTHING
+           && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
+      {
+!      int i = ccline.xpc->xp_pattern - p;
+  
+       /* If xp_pattern points inside the old cmdbuff it needs to be adjusted
+        * to point into the newly allocated memory. */
+--- 2524,2530 ----
+           && ccline.xpc->xp_context != EXPAND_NOTHING
+           && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
+      {
+!      int i = (int)(ccline.xpc->xp_pattern - p);
+  
+       /* If xp_pattern points inside the old cmdbuff it needs to be adjusted
+        * to point into the newly allocated memory. */
+***************
+*** 4897,4903 ****
+      if (s == NULL)
+       return FAIL;
+      sprintf((char *)s, "%s/%s*.vim", dirname, pat);
+!     all = globpath(p_rtp, s);
+      vim_free(s);
+      if (all == NULL)
+       return FAIL;
+--- 4897,4903 ----
+      if (s == NULL)
+       return FAIL;
+      sprintf((char *)s, "%s/%s*.vim", dirname, pat);
+!     all = globpath(p_rtp, s, 0);
+      vim_free(s);
+      if (all == NULL)
+       return FAIL;
+***************
+*** 4938,4946 ****
+   * newlines.  Returns NULL for an error or no matches.
+   */
+      char_u *
+! globpath(path, file)
+      char_u   *path;
+      char_u   *file;
+  {
+      expand_T xpc;
+      char_u   *buf;
+--- 4938,4947 ----
+   * newlines.  Returns NULL for an error or no matches.
+   */
+      char_u *
+! globpath(path, file, expand_options)
+      char_u   *path;
+      char_u   *file;
++     int              expand_options;
+  {
+      expand_T xpc;
+      char_u   *buf;
+***************
+*** 4969,4978 ****
+       {
+           add_pathsep(buf);
+           STRCAT(buf, file);
+!          if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL
+!                                                               && num_p > 0)
+           {
+!              ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT);
+               for (len = 0, i = 0; i < num_p; ++i)
+                   len += (int)STRLEN(p[i]) + 1;
+  
+--- 4970,4979 ----
+       {
+           add_pathsep(buf);
+           STRCAT(buf, file);
+!          if (ExpandFromContext(&xpc, buf, &num_p, &p,
+!                           WILD_SILENT|expand_options) != FAIL && num_p > 0)
+           {
+!              ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
+               for (len = 0, i = 0; i < num_p; ++i)
+                   len += (int)STRLEN(p[i]) + 1;
+  
+*** ../vim-7.2.050/src/proto/ex_getln.pro      Wed May 28 16:49:01 2008
+--- src/proto/ex_getln.pro     Thu Nov 20 18:27:57 2008
+***************
+*** 31,37 ****
+  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+! char_u *globpath __ARGS((char_u *path, char_u *file));
+  void init_history __ARGS((void));
+  int get_histtype __ARGS((char_u *name));
+  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
+--- 31,37 ----
+  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+! char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+  void init_history __ARGS((void));
+  int get_histtype __ARGS((char_u *name));
+  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
+*** ../vim-7.2.050/runtime/doc/eval.txt        Sun Nov  9 13:43:25 2008
+--- runtime/doc/eval.txt       Thu Nov 27 22:17:13 2008
+***************
+*** 1,4 ****
+! *eval.txt*   For Vim version 7.2.  Last change: 2008 Nov 02
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*   For Vim version 7.2.  Last change: 2008 Nov 27
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1706,1712 ****
+  exists( {expr})                      Number  TRUE if {expr} exists
+  extend({expr1}, {expr2} [, {expr3}])
+                               List/Dict insert items of {expr2} into {expr1}
+! expand( {expr})                      String  expand special keywords in {expr}
+  feedkeys( {string} [, {mode}])       Number  add key sequence to typeahead buffer
+  filereadable( {file})                Number  TRUE if {file} is a readable file
+  filewritable( {file})                Number  TRUE if {file} is a writable file
+--- 1709,1715 ----
+  exists( {expr})                      Number  TRUE if {expr} exists
+  extend({expr1}, {expr2} [, {expr3}])
+                               List/Dict insert items of {expr2} into {expr1}
+! expand( {expr} [, {flag}])   String  expand special keywords in {expr}
+  feedkeys( {string} [, {mode}])       Number  add key sequence to typeahead buffer
+  filereadable( {file})                Number  TRUE if {file} is a readable file
+  filewritable( {file})                Number  TRUE if {file} is a writable file
+***************
+*** 1758,1765 ****
+  getwinposx()                 Number  X coord in pixels of GUI Vim window
+  getwinposy()                 Number  Y coord in pixels of GUI Vim window
+  getwinvar( {nr}, {varname})  any     variable {varname} in window {nr}
+! glob( {expr})                        String  expand file wildcards in {expr}
+! globpath( {path}, {expr})    String  do glob({expr}) for all dirs in {path}
+  has( {feature})                      Number  TRUE if feature {feature} supported
+  has_key( {dict}, {key})              Number  TRUE if {dict} has entry {key}
+  haslocaldir()                        Number  TRUE if current window executed |:lcd|
+--- 1761,1769 ----
+  getwinposx()                 Number  X coord in pixels of GUI Vim window
+  getwinposy()                 Number  Y coord in pixels of GUI Vim window
+  getwinvar( {nr}, {varname})  any     variable {varname} in window {nr}
+! glob( {expr} [, {flag}])     String  expand file wildcards in {expr}
+! globpath( {path}, {expr} [, {flag}])
+!                              String  do glob({expr}) for all dirs in {path}
+  has( {feature})                      Number  TRUE if feature {feature} supported
+  has_key( {dict}, {key})              Number  TRUE if {dict} has entry {key}
+  haslocaldir()                        Number  TRUE if current window executed |:lcd|
+***************
+*** 3286,3299 ****
+                       :let list_is_on = getwinvar(2, '&list')
+                       :echo "myvar = " . getwinvar(1, 'myvar')
+  <
+!                                                      *glob()*
+! glob({expr}) Expand the file wildcards in {expr}.  See |wildcards| for the
+               use of special characters.
+               The result is a String.
+               When there are several matches, they are separated by <NL>
+               characters.
+!              The 'wildignore' option applies: Names matching one of the
+!              patterns in 'wildignore' will be skipped.
+               If the expansion fails, the result is an empty string.
+               A name for a non-existing file is not included.
+  
+--- 3290,3305 ----
+                       :let list_is_on = getwinvar(2, '&list')
+                       :echo "myvar = " . getwinvar(1, 'myvar')
+  <
+! glob({expr} [, {flag}])                                      *glob()*
+!              Expand the file wildcards in {expr}.  See |wildcards| for the
+               use of special characters.
+               The result is a String.
+               When there are several matches, they are separated by <NL>
+               characters.
+!              Unless the optional {flag} argument is given and is non-zero,
+!              the 'suffixes' and 'wildignore' options apply: Names matching
+!              one of the patterns in 'wildignore' will be skipped and
+!              'suffixes' affect the ordering of matches.
+               If the expansion fails, the result is an empty string.
+               A name for a non-existing file is not included.
+  
+***************
+*** 3307,3326 ****
+               See |expand()| for expanding special Vim variables.  See
+               |system()| for getting the raw output of an external command.
+  
+! globpath({path}, {expr})                             *globpath()*
+               Perform glob() on all directories in {path} and concatenate
+               the results.  Example: >
+                       :echo globpath(&rtp, "syntax/c.vim")
+  <            {path} is a comma-separated list of directory names.  Each
+               directory name is prepended to {expr} and expanded like with
+!              glob().  A path separator is inserted when needed.
+               To add a comma inside a directory name escape it with a
+               backslash.  Note that on MS-Windows a directory may have a
+               trailing backslash, remove it if you put a comma after it.
+               If the expansion fails for one of the directories, there is no
+               error message.
+!              The 'wildignore' option applies: Names matching one of the
+!              patterns in 'wildignore' will be skipped.
+  
+               The "**" item can be used to search in a directory tree.
+               For example, to find all "README.txt" files in the directories
+--- 3313,3334 ----
+               See |expand()| for expanding special Vim variables.  See
+               |system()| for getting the raw output of an external command.
+  
+! globpath({path}, {expr} [, {flag}])                  *globpath()*
+               Perform glob() on all directories in {path} and concatenate
+               the results.  Example: >
+                       :echo globpath(&rtp, "syntax/c.vim")
+  <            {path} is a comma-separated list of directory names.  Each
+               directory name is prepended to {expr} and expanded like with
+!              |glob()|.  A path separator is inserted when needed.
+               To add a comma inside a directory name escape it with a
+               backslash.  Note that on MS-Windows a directory may have a
+               trailing backslash, remove it if you put a comma after it.
+               If the expansion fails for one of the directories, there is no
+               error message.
+!              Unless the optional {flag} argument is given and is non-zero,
+!              the 'suffixes' and 'wildignore' options apply: Names matching
+!              one of the patterns in 'wildignore' will be skipped and
+!              'suffixes' affect the ordering of matches.
+  
+               The "**" item can be used to search in a directory tree.
+               For example, to find all "README.txt" files in the directories
+*** ../vim-7.2.050/runtime/doc/options.txt     Sat Aug  9 19:36:49 2008
+--- runtime/doc/options.txt    Tue Nov 25 23:43:55 2008
+***************
+*** 1,4 ****
+! *options.txt*        For Vim version 7.2.  Last change: 2008 Aug 06
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *options.txt*        For Vim version 7.2.  Last change: 2008 Nov 25
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 7472,7478 ****
+                       {not available when compiled without the |+wildignore|
+                       feature}
+       A list of file patterns.  A file that matches with one of these
+!      patterns is ignored when completing file or directory names.
+       The pattern is used like with |:autocmd|, see |autocmd-patterns|.
+       Also see 'suffixes'.
+       Example: >
+--- 7481,7489 ----
+                       {not available when compiled without the |+wildignore|
+                       feature}
+       A list of file patterns.  A file that matches with one of these
+!      patterns is ignored when completing file or directory names, and
+!      influences the result of |expand()|, |glob()| and |globpath()| unless
+!      a flag is passed to disable this.
+       The pattern is used like with |:autocmd|, see |autocmd-patterns|.
+       Also see 'suffixes'.
+       Example: >
+*** ../vim-7.2.050/src/version.c       Fri Nov 28 10:08:05 2008
+--- src/version.c      Fri Nov 28 10:55:44 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     51,
+  /**/
+
+-- 
+Not too long ago, unzipping in public was illegal...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.052 b/7.2.052
new file mode 100644 (file)
index 0000000..eb331f3
--- /dev/null
+++ b/7.2.052
@@ -0,0 +1,83 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.052
+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 7.2.052
+Problem:    synIDattr() doesn't support "sp" for special color.
+Solution:   Recognize "sp" and "sp#".  (Matt Wozniski)
+Files:     runtime/doc/eval.txt, src/eval.c
+
+
+*** ../vim-7.2.051/runtime/doc/eval.txt        Fri Nov 28 10:59:57 2008
+--- runtime/doc/eval.txt       Thu Nov 27 22:17:13 2008
+***************
+*** 5348,5357 ****
+               "fg"            foreground color (GUI: color name used to set
+                               the color, cterm: color number as a string,
+                               term: empty string)
+!              "bg"            background color (like "fg")
+               "fg#"           like "fg", but for the GUI and the GUI is
+                               running the name in "#RRGGBB" form
+               "bg#"           like "fg#" for "bg"
+               "bold"          "1" if bold
+               "italic"        "1" if italic
+               "reverse"       "1" if reverse
+--- 5359,5370 ----
+               "fg"            foreground color (GUI: color name used to set
+                               the color, cterm: color number as a string,
+                               term: empty string)
+!              "bg"            background color (as with "fg")
+!              "sp"            special color (as with "fg") |highlight-guisp|
+               "fg#"           like "fg", but for the GUI and the GUI is
+                               running the name in "#RRGGBB" form
+               "bg#"           like "fg#" for "bg"
++              "sp#"           like "fg#" for "sp"
+               "bold"          "1" if bold
+               "italic"        "1" if italic
+               "reverse"       "1" if reverse
+*** ../vim-7.2.051/src/eval.c  Fri Nov 28 10:59:57 2008
+--- src/eval.c Thu Nov 27 22:15:40 2008
+***************
+*** 16648,16655 ****
+               p = highlight_has_attr(id, HL_INVERSE, modec);
+               break;
+  
+!      case 's':                                       /* standout */
+!              p = highlight_has_attr(id, HL_STANDOUT, modec);
+               break;
+  
+       case 'u':
+--- 16648,16658 ----
+               p = highlight_has_attr(id, HL_INVERSE, modec);
+               break;
+  
+!      case 's':
+!              if (TOLOWER_ASC(what[1]) == 'p')        /* sp[#] */
+!                  p = highlight_color(id, what, modec);
+!              else                                    /* standout */
+!                  p = highlight_has_attr(id, HL_STANDOUT, modec);
+               break;
+  
+       case 'u':
+*** ../vim-7.2.051/src/version.c       Fri Nov 28 10:59:57 2008
+--- src/version.c      Fri Nov 28 11:13:45 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     52,
+  /**/
+
+-- 
+Not too long ago, a keyboard was something to make music with...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.053 b/7.2.053
new file mode 100644 (file)
index 0000000..410d166
--- /dev/null
+++ b/7.2.053
@@ -0,0 +1,58 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.053
+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 7.2.053
+Problem:    Crash when using WorkShop command ":ws foo". (Dominique Pelle)
+Solution:   Avoid using a NULL pointer.
+Files:     src/workshop.c
+
+
+*** ../vim-7.2.052/src/workshop.c      Tue Jun 24 23:34:50 2008
+--- src/workshop.c     Thu Nov 27 22:31:27 2008
+***************
+*** 1121,1128 ****
+                                     ? (char *)curbuf->b_sfname : "<None>");
+  #endif
+  
+!     strcpy(ffname, (char *) curbuf->b_ffname);
+!     *filename = ffname;              /* copy so nobody can change b_ffname */
+      *curLine = curwin->w_cursor.lnum;
+      *curCol = curwin->w_cursor.col;
+  
+--- 1121,1132 ----
+                                     ? (char *)curbuf->b_sfname : "<None>");
+  #endif
+  
+!     if (curbuf->b_ffname == NULL)
+!      ffname[0] = NUL;
+!     else
+!      /* copy so nobody can change b_ffname */
+!      strcpy(ffname, (char *) curbuf->b_ffname);
+!     *filename = ffname;
+      *curLine = curwin->w_cursor.lnum;
+      *curCol = curwin->w_cursor.col;
+  
+*** ../vim-7.2.052/src/version.c       Fri Nov 28 11:15:10 2008
+--- src/version.c      Fri Nov 28 11:44:23 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     53,
+  /**/
+
+-- 
+What the word 'politics' means: 'Poli' in Latin meaning 'many' and 'tics'
+meaning 'bloodsucking creatures'.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.054 b/7.2.054
new file mode 100644 (file)
index 0000000..98ce9e8
--- /dev/null
+++ b/7.2.054
@@ -0,0 +1,68 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.054
+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 7.2.054
+Problem:    Compilation warnings for format in getchar.c.
+Solution:   Use fputs() instead of fprintf().  (Dominique Pelle)
+Files:     src/getchar.c
+
+
+*** ../vim-7.2.053/src/getchar.c       Tue Jul 22 18:58:23 2008
+--- src/getchar.c      Thu Nov 27 22:38:24 2008
+***************
+*** 4702,4708 ****
+                       return FAIL;
+                   if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
+                       return FAIL;
+!                  if (fprintf(fd, cmd) < 0)
+                       return FAIL;
+                   if (buf != NULL && fputs(" <buffer>", fd) < 0)
+                       return FAIL;
+--- 4702,4708 ----
+                       return FAIL;
+                   if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
+                       return FAIL;
+!                  if (fputs(cmd, fd) < 0)
+                       return FAIL;
+                   if (buf != NULL && fputs(" <buffer>", fd) < 0)
+                       return FAIL;
+***************
+*** 4801,4807 ****
+           }
+           if (IS_SPECIAL(c) || modifiers)     /* special key */
+           {
+!              if (fprintf(fd, (char *)get_special_key_name(c, modifiers)) < 0)
+                   return FAIL;
+               continue;
+           }
+--- 4801,4807 ----
+           }
+           if (IS_SPECIAL(c) || modifiers)     /* special key */
+           {
+!              if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0)
+                   return FAIL;
+               continue;
+           }
+*** ../vim-7.2.053/src/version.c       Fri Nov 28 11:47:14 2008
+--- src/version.c      Fri Nov 28 12:02:48 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     54,
+  /**/
+
+-- 
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.055 b/7.2.055
new file mode 100644 (file)
index 0000000..ffab9a2
--- /dev/null
+++ b/7.2.055
@@ -0,0 +1,1271 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.055
+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 7.2.055
+Problem:    Various compiler warnings with strict checking.
+Solution:   Avoid the warnings by using return values and renaming.
+Files:     src/diff.c, src/eval.c, src/ex_cmds.c, src/ex_docmd.c,
+           src/fileio.c, src/fold.c, src/globals.h, src/gui.c,
+           src/gui_at_sb.c, src/gui_gtk_x11.c, src/gui_xmdlg.c,
+           src/gui_xmebw.c, src/main.c, src/mbyte.c, src/message.c,
+           src/netbeans.c, src/option.c, src/os_unix.c, src/spell.c,
+           src/ui.c, src/window.c
+
+
+*** ../vim-7.2.054/src/diff.c  Fri Jan 18 17:39:32 2008
+--- src/diff.c Fri Nov 28 17:23:35 2008
+***************
+*** 661,666 ****
+--- 665,671 ----
+      char_u   *tmp_diff;
+      FILE     *fd;
+      int              ok;
++     int              io_error = FALSE;
+  
+      /* Delete all diffblocks. */
+      diff_clear(curtab);
+***************
+*** 697,714 ****
+      {
+       ok = FALSE;
+       fd = mch_fopen((char *)tmp_orig, "w");
+!      if (fd != NULL)
+       {
+!          fwrite("line1\n", (size_t)6, (size_t)1, fd);
+           fclose(fd);
+           fd = mch_fopen((char *)tmp_new, "w");
+!          if (fd != NULL)
+           {
+!              fwrite("line2\n", (size_t)6, (size_t)1, fd);
+               fclose(fd);
+               diff_file(tmp_orig, tmp_new, tmp_diff);
+               fd = mch_fopen((char *)tmp_diff, "r");
+!              if (fd != NULL)
+               {
+                   char_u      linebuf[LBUFLEN];
+  
+--- 702,727 ----
+      {
+       ok = FALSE;
+       fd = mch_fopen((char *)tmp_orig, "w");
+!      if (fd == NULL)
+!          io_error = TRUE;
+!      else
+       {
+!          if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1)
+!              io_error = TRUE;
+           fclose(fd);
+           fd = mch_fopen((char *)tmp_new, "w");
+!          if (fd == NULL)
+!              io_error = TRUE;
+!          else
+           {
+!              if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1)
+!                  io_error = TRUE;
+               fclose(fd);
+               diff_file(tmp_orig, tmp_new, tmp_diff);
+               fd = mch_fopen((char *)tmp_diff, "r");
+!              if (fd == NULL)
+!                  io_error = TRUE;
+!              else
+               {
+                   char_u      linebuf[LBUFLEN];
+  
+***************
+*** 761,766 ****
+--- 774,781 ----
+      }
+      if (!ok)
+      {
++      if (io_error)
++          EMSG(_("E810: Cannot read or write temp files"));
+       EMSG(_("E97: Cannot create diffs"));
+       diff_a_works = MAYBE;
+  #if defined(MSWIN) || defined(MSDOS)
+***************
+*** 925,934 ****
+      {
+  # ifdef TEMPDIRNAMES
+       if (vim_tempdir != NULL)
+!          mch_chdir((char *)vim_tempdir);
+       else
+  # endif
+!          mch_chdir("/tmp");
+       shorten_fnames(TRUE);
+      }
+  #endif
+--- 940,949 ----
+      {
+  # ifdef TEMPDIRNAMES
+       if (vim_tempdir != NULL)
+!          ignored = mch_chdir((char *)vim_tempdir);
+       else
+  # endif
+!          ignored = mch_chdir("/tmp");
+       shorten_fnames(TRUE);
+      }
+  #endif
+*** ../vim-7.2.054/src/eval.c  Fri Nov 28 11:15:10 2008
+--- src/eval.c Fri Nov 28 12:23:13 2008
+***************
+*** 10641,10647 ****
+  # ifdef FEAT_WINDOWS
+           win_T       *wp;
+  # endif
+!          int         n = 1;
+  
+           if (row >= 0 && col >= 0)
+           {
+--- 10641,10647 ----
+  # ifdef FEAT_WINDOWS
+           win_T       *wp;
+  # endif
+!          int         winnr = 1;
+  
+           if (row >= 0 && col >= 0)
+           {
+***************
+*** 10651,10659 ****
+               (void)mouse_comp_pos(win, &row, &col, &lnum);
+  # ifdef FEAT_WINDOWS
+               for (wp = firstwin; wp != win; wp = wp->w_next)
+!                  ++n;
+  # endif
+!              vimvars[VV_MOUSE_WIN].vv_nr = n;
+               vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
+               vimvars[VV_MOUSE_COL].vv_nr = col + 1;
+           }
+--- 10651,10659 ----
+               (void)mouse_comp_pos(win, &row, &col, &lnum);
+  # ifdef FEAT_WINDOWS
+               for (wp = firstwin; wp != win; wp = wp->w_next)
+!                  ++winnr;
+  # endif
+!              vimvars[VV_MOUSE_WIN].vv_nr = winnr;
+               vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
+               vimvars[VV_MOUSE_COL].vv_nr = col + 1;
+           }
+*** ../vim-7.2.054/src/ex_cmds.c       Sat Nov 15 14:10:23 2008
+--- src/ex_cmds.c      Fri Nov 28 17:24:08 2008
+***************
+*** 1941,1947 ****
+            * root.
+            */
+           if (fp_out != NULL)
+!              (void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
+  #endif
+       }
+      }
+--- 1941,1947 ----
+            * root.
+            */
+           if (fp_out != NULL)
+!              ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
+  #endif
+       }
+      }
+*** ../vim-7.2.054/src/ex_docmd.c      Sat Nov 15 14:10:23 2008
+--- src/ex_docmd.c     Fri Nov 28 17:26:13 2008
+***************
+*** 8753,8760 ****
+               else if (*dirnow != NUL
+                       && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+               {
+!                  (void)mch_chdir((char *)globaldir);
+!                  shorten_fnames(TRUE);
+               }
+  
+               failed |= (makeopens(fd, dirnow) == FAIL);
+--- 8753,8760 ----
+               else if (*dirnow != NUL
+                       && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+               {
+!                  if (mch_chdir((char *)globaldir) == OK)
+!                      shorten_fnames(TRUE);
+               }
+  
+               failed |= (makeopens(fd, dirnow) == FAIL);
+*** ../vim-7.2.054/src/fileio.c        Wed Nov 12 16:04:43 2008
+--- src/fileio.c       Fri Nov 28 17:35:54 2008
+***************
+*** 2214,2220 ****
+      {
+       /* Use stderr for stdin, makes shell commands work. */
+       close(0);
+!      dup(2);
+      }
+  #endif
+  
+--- 2214,2220 ----
+      {
+       /* Use stderr for stdin, makes shell commands work. */
+       close(0);
+!      ignored = dup(2);
+      }
+  #endif
+  
+***************
+*** 3449,3455 ****
+               {
+  # ifdef UNIX
+  #  ifdef HAVE_FCHOWN
+!                  fchown(fd, st_old.st_uid, st_old.st_gid);
+  #  endif
+                   if (mch_stat((char *)IObuff, &st) < 0
+                           || st.st_uid != st_old.st_uid
+--- 3449,3455 ----
+               {
+  # ifdef UNIX
+  #  ifdef HAVE_FCHOWN
+!                  ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
+  #  endif
+                   if (mch_stat((char *)IObuff, &st) < 0
+                           || st.st_uid != st_old.st_uid
+***************
+*** 4365,4371 ****
+               || st.st_uid != st_old.st_uid
+               || st.st_gid != st_old.st_gid)
+       {
+!          fchown(fd, st_old.st_uid, st_old.st_gid);
+           if (perm >= 0)      /* set permission again, may have changed */
+               (void)mch_setperm(wfname, perm);
+       }
+--- 4365,4371 ----
+               || st.st_uid != st_old.st_uid
+               || st.st_gid != st_old.st_gid)
+       {
+!          ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
+           if (perm >= 0)      /* set permission again, may have changed */
+               (void)mch_setperm(wfname, perm);
+       }
+***************
+*** 6030,6038 ****
+       {
+           tbuf[FGETS_SIZE - 2] = NUL;
+  #ifdef USE_CR
+!          fgets_cr((char *)tbuf, FGETS_SIZE, fp);
+  #else
+!          fgets((char *)tbuf, FGETS_SIZE, fp);
+  #endif
+       } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
+      }
+--- 6030,6038 ----
+       {
+           tbuf[FGETS_SIZE - 2] = NUL;
+  #ifdef USE_CR
+!          ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
+  #else
+!          ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
+  #endif
+       } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
+      }
+*** ../vim-7.2.054/src/fold.c  Wed Aug  6 18:59:40 2008
+--- src/fold.c Fri Nov 28 12:24:16 2008
+***************
+*** 48,54 ****
+  static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
+  static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
+  static void checkupdate __ARGS((win_T *wp));
+! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open));
+  static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
+  static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
+  static void foldOpenNested __ARGS((fold_T *fpr));
+--- 48,54 ----
+  static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
+  static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
+  static void checkupdate __ARGS((win_T *wp));
+! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open));
+  static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
+  static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
+  static void foldOpenNested __ARGS((fold_T *fpr));
+***************
+*** 1241,1250 ****
+   * Repeat "count" times.
+   */
+      static void
+! setFoldRepeat(lnum, count, open)
+      linenr_T lnum;
+      long     count;
+!     int              open;
+  {
+      int              done;
+      long     n;
+--- 1241,1250 ----
+   * Repeat "count" times.
+   */
+      static void
+! setFoldRepeat(lnum, count, do_open)
+      linenr_T lnum;
+      long     count;
+!     int              do_open;
+  {
+      int              done;
+      long     n;
+***************
+*** 1252,1258 ****
+      for (n = 0; n < count; ++n)
+      {
+       done = DONE_NOTHING;
+!      (void)setManualFold(lnum, open, FALSE, &done);
+       if (!(done & DONE_ACTION))
+       {
+           /* Only give an error message when no fold could be opened. */
+--- 1252,1258 ----
+      for (n = 0; n < count; ++n)
+      {
+       done = DONE_NOTHING;
+!      (void)setManualFold(lnum, do_open, FALSE, &done);
+       if (!(done & DONE_ACTION))
+       {
+           /* Only give an error message when no fold could be opened. */
+*** ../vim-7.2.054/src/globals.h       Thu Sep 18 21:29:07 2008
+--- src/globals.h      Fri Nov 28 17:35:50 2008
+***************
+*** 1549,1554 ****
+--- 1549,1562 ----
+  EXTERN time_t starttime;
+  
+  /*
++  * Some compilers warn for not using a return value, but in some situations we
++  * can't do anything useful with the value.  Assign to this variable to avoid
++  * the warning.
++  */
++ EXTERN int ignored;
++ EXTERN char *ignoredp;
++ 
++ /*
+   * Optional Farsi support.  Include it here, so EXTERN and INIT are defined.
+   */
+  #ifdef FEAT_FKMAP
+*** ../vim-7.2.054/src/gui.c   Wed Aug  6 14:37:26 2008
+--- src/gui.c  Fri Nov 28 18:48:31 2008
+***************
+*** 139,145 ****
+               /* The read returns when the child closes the pipe (or when
+                * the child dies for some reason). */
+               close(pipefd[1]);
+!              (void)read(pipefd[0], &dummy, (size_t)1);
+               close(pipefd[0]);
+           }
+  
+--- 139,145 ----
+               /* The read returns when the child closes the pipe (or when
+                * the child dies for some reason). */
+               close(pipefd[1]);
+!              ignored = (int)read(pipefd[0], &dummy, (size_t)1);
+               close(pipefd[0]);
+           }
+  
+*** ../vim-7.2.054/src/gui_at_sb.c     Sun Jun 13 21:37:13 2004
+--- src/gui_at_sb.c    Fri Nov 28 12:19:19 2008
+***************
+*** 1078,1083 ****
+--- 1078,1089 ----
+      Cardinal *num_params;    /* unused */
+  {
+      ScrollbarWidget sbw = (ScrollbarWidget)w;
++     /* Use a union to avoid a warning for the weird conversion from float to
++      * XtPointer.  Comes from Xaw/Scrollbar.c. */
++     union {
++      XtPointer xtp;
++      float xtf;
++     } xtpf;
+  
+      if (LookAhead(w, event))
+       return;
+***************
+*** 1085,1091 ****
+      /* thumbProc is not pretty, but is necessary for backwards
+         compatibility on those architectures for which it work{s,ed};
+         the intent is to pass a (truncated) float by value. */
+!     XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top);
+      XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
+  }
+  
+--- 1091,1098 ----
+      /* thumbProc is not pretty, but is necessary for backwards
+         compatibility on those architectures for which it work{s,ed};
+         the intent is to pass a (truncated) float by value. */
+!     xtpf.xtf = sbw->scrollbar.top;
+!     XtCallCallbacks(w, XtNthumbProc, xtpf.xtp);
+      XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
+  }
+  
+*** ../vim-7.2.054/src/gui_gtk_x11.c   Tue Jul  8 12:46:08 2008
+--- src/gui_gtk_x11.c  Fri Nov 28 21:06:38 2008
+***************
+*** 4070,4083 ****
+  
+       if (mask & (XValue | YValue))
+       {
+!          int w, h;
+!          gui_mch_get_screen_dimensions(&w, &h);
+!          h += p_ghr + get_menu_tool_height();
+!          w += get_menu_tool_width();
+           if (mask & XNegative)
+!              x += w - pixel_width;
+           if (mask & YNegative)
+!              y += h - pixel_height;
+  #ifdef HAVE_GTK2
+           gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
+  #else
+--- 4070,4083 ----
+  
+       if (mask & (XValue | YValue))
+       {
+!          int ww, hh;
+!          gui_mch_get_screen_dimensions(&ww, &hh);
+!          hh += p_ghr + get_menu_tool_height();
+!          ww += get_menu_tool_width();
+           if (mask & XNegative)
+!              x += ww - pixel_width;
+           if (mask & YNegative)
+!              y += hh - pixel_height;
+  #ifdef HAVE_GTK2
+           gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
+  #else
+*** ../vim-7.2.054/src/gui_xmdlg.c     Tue Jun 24 23:39:32 2008
+--- src/gui_xmdlg.c    Fri Nov 28 21:04:08 2008
+***************
+*** 369,378 ****
+      char     buf[TEMP_BUF_SIZE];
+      XmString items[MAX_ENTRIES_IN_LIST];
+      int              i;
+!     int              index;
+  
+!     for (index = (int)ENCODING; index < (int)NONE; ++index)
+!      count[index] = 0;
+  
+      /* First we insert the wild char into every single list. */
+      if (fix != ENCODING)
+--- 369,378 ----
+      char     buf[TEMP_BUF_SIZE];
+      XmString items[MAX_ENTRIES_IN_LIST];
+      int              i;
+!     int              idx;
+  
+!     for (idx = (int)ENCODING; idx < (int)NONE; ++idx)
+!      count[idx] = 0;
+  
+      /* First we insert the wild char into every single list. */
+      if (fix != ENCODING)
+***************
+*** 503,516 ****
+      /*
+       * Now loop trough the remaining lists and set them up.
+       */
+!     for (index = (int)NAME; index < (int)NONE; ++index)
+      {
+       Widget w;
+  
+!      if (fix == (enum ListSpecifier)index)
+           continue;
+  
+!      switch ((enum ListSpecifier)index)
+       {
+           case NAME:
+               w = data->list[NAME];
+--- 503,516 ----
+      /*
+       * Now loop trough the remaining lists and set them up.
+       */
+!     for (idx = (int)NAME; idx < (int)NONE; ++idx)
+      {
+       Widget w;
+  
+!      if (fix == (enum ListSpecifier)idx)
+           continue;
+  
+!      switch ((enum ListSpecifier)idx)
+       {
+           case NAME:
+               w = data->list[NAME];
+***************
+*** 525,545 ****
+               w = (Widget)0;  /* for lint */
+       }
+  
+!      for (i = 0; i < count[index]; ++i)
+       {
+!          items[i] = XmStringCreateLocalized(list[index][i]);
+!          XtFree(list[index][i]);
+       }
+       XmListDeleteAllItems(w);
+!      XmListAddItems(w, items, count[index], 1);
+!      if (data->sel[index])
+       {
+           XmStringFree(items[0]);
+!          items[0] = XmStringCreateLocalized(data->sel[index]);
+           XmListSelectItem(w, items[0], False);
+           XmListSetBottomItem(w, items[0]);
+       }
+!      for (i = 0; i < count[index]; ++i)
+           XmStringFree(items[i]);
+      }
+  }
+--- 525,545 ----
+               w = (Widget)0;  /* for lint */
+       }
+  
+!      for (i = 0; i < count[idx]; ++i)
+       {
+!          items[i] = XmStringCreateLocalized(list[idx][i]);
+!          XtFree(list[idx][i]);
+       }
+       XmListDeleteAllItems(w);
+!      XmListAddItems(w, items, count[idx], 1);
+!      if (data->sel[idx])
+       {
+           XmStringFree(items[0]);
+!          items[0] = XmStringCreateLocalized(data->sel[idx]);
+           XmListSelectItem(w, items[0], False);
+           XmListSetBottomItem(w, items[0]);
+       }
+!      for (i = 0; i < count[idx]; ++i)
+           XmStringFree(items[i]);
+      }
+  }
+***************
+*** 695,708 ****
+       int         n;
+       XmString    str;
+       Arg         args[4];
+!      char        *msg = _("no specific match");
+  
+       n = 0;
+!      str = XmStringCreateLocalized(msg);
+       XtSetArg(args[n], XmNlabelString, str); ++n;
+       XtSetValues(data->sample, args, n);
+       apply_fontlist(data->sample);
+!      XmTextSetString(data->name, msg);
+       XmStringFree(str);
+  
+       return False;
+--- 695,708 ----
+       int         n;
+       XmString    str;
+       Arg         args[4];
+!      char        *nomatch_msg = _("no specific match");
+  
+       n = 0;
+!      str = XmStringCreateLocalized(nomatch_msg);
+       XtSetArg(args[n], XmNlabelString, str); ++n;
+       XtSetValues(data->sample, args, n);
+       apply_fontlist(data->sample);
+!      XmTextSetString(data->name, nomatch_msg);
+       XmStringFree(str);
+  
+       return False;
+***************
+*** 886,906 ****
+      {
+       int     i;
+       int     max;
+!      int     index = 0;
+       int     size;
+!      char    str[128];
+  
+       for (i = 0, max = 0; i < data->num; i++)
+       {
+!          get_part(fn(data, i), 7, str);
+!          size = atoi(str);
+           if ((size > max) && (size < MAX_DISPLAY_SIZE))
+           {
+!              index = i;
+               max = size;
+           }
+       }
+!      strcpy(big_font, fn(data, index));
+      }
+      data->old = XLoadQueryFont(XtDisplay(parent), big_font);
+      data->old_list = gui_motif_create_fontlist(data->old);
+--- 886,906 ----
+      {
+       int     i;
+       int     max;
+!      int     idx = 0;
+       int     size;
+!      char    buf[128];
+  
+       for (i = 0, max = 0; i < data->num; i++)
+       {
+!          get_part(fn(data, i), 7, buf);
+!          size = atoi(buf);
+           if ((size > max) && (size < MAX_DISPLAY_SIZE))
+           {
+!              idx = i;
+               max = size;
+           }
+       }
+!      strcpy(big_font, fn(data, idx));
+      }
+      data->old = XLoadQueryFont(XtDisplay(parent), big_font);
+      data->old_list = gui_motif_create_fontlist(data->old);
+***************
+*** 1217,1244 ****
+  
+       if (i != 0)
+       {
+!          char name[TEMP_BUF_SIZE];
+!          char style[TEMP_BUF_SIZE];
+!          char size[TEMP_BUF_SIZE];
+!          char encoding[TEMP_BUF_SIZE];
+           char *found;
+  
+           found = names[0];
+  
+!          name_part(found, name);
+!          style_part(found, style);
+!          size_part(found, size, data->in_pixels);
+!          encoding_part(found, encoding);
+! 
+!          if (strlen(name) > 0
+!                  && strlen(style) > 0
+!                  && strlen(size) > 0
+!                  && strlen(encoding) > 0)
+           {
+!              data->sel[NAME] = XtNewString(name);
+!              data->sel[STYLE] = XtNewString(style);
+!              data->sel[SIZE] = XtNewString(size);
+!              data->sel[ENCODING] = XtNewString(encoding);
+               data->font_name = XtNewString(names[0]);
+               display_sample(data);
+               XmTextSetString(data->name, data->font_name);
+--- 1217,1244 ----
+  
+       if (i != 0)
+       {
+!          char namebuf[TEMP_BUF_SIZE];
+!          char stylebuf[TEMP_BUF_SIZE];
+!          char sizebuf[TEMP_BUF_SIZE];
+!          char encodingbuf[TEMP_BUF_SIZE];
+           char *found;
+  
+           found = names[0];
+  
+!          name_part(found, namebuf);
+!          style_part(found, stylebuf);
+!          size_part(found, sizebuf, data->in_pixels);
+!          encoding_part(found, encodingbuf);
+! 
+!          if (strlen(namebuf) > 0
+!                  && strlen(stylebuf) > 0
+!                  && strlen(sizebuf) > 0
+!                  && strlen(encodingbuf) > 0)
+           {
+!              data->sel[NAME] = XtNewString(namebuf);
+!              data->sel[STYLE] = XtNewString(stylebuf);
+!              data->sel[SIZE] = XtNewString(sizebuf);
+!              data->sel[ENCODING] = XtNewString(encodingbuf);
+               data->font_name = XtNewString(names[0]);
+               display_sample(data);
+               XmTextSetString(data->name, data->font_name);
+*** ../vim-7.2.054/src/gui_xmebw.c     Thu Nov  8 20:48:14 2007
+--- src/gui_xmebw.c    Fri Nov 28 18:58:53 2008
+***************
+*** 1256,1262 ****
+      }
+      else
+      {
+!      int adjust = 0;
+  
+  #if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+       /*
+--- 1256,1262 ----
+      }
+      else
+      {
+!      adjust = 0;
+  
+  #if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+       /*
+***************
+*** 1268,1279 ****
+       {
+           case XmEXTERNAL_HIGHLIGHT:
+               adjust = (eb->primitive.highlight_thickness -
+!                      (eb->pushbutton.default_button_shadow_thickness ?
+!                       Xm3D_ENHANCE_PIXEL : 0));
+               break;
+  
+           case XmINTERNAL_HIGHLIGHT:
+-              adjust = 0;
+               break;
+  
+           default:
+--- 1268,1278 ----
+       {
+           case XmEXTERNAL_HIGHLIGHT:
+               adjust = (eb->primitive.highlight_thickness -
+!                       (eb->pushbutton.default_button_shadow_thickness
+!                        ?  Xm3D_ENHANCE_PIXEL : 0));
+               break;
+  
+           case XmINTERNAL_HIGHLIGHT:
+               break;
+  
+           default:
+*** ../vim-7.2.054/src/main.c  Thu Nov 20 14:11:47 2008
+--- src/main.c Fri Nov 28 18:32:48 2008
+***************
+*** 2372,2378 ****
+       * Is there any other system that cannot do this?
+       */
+      close(0);
+!     dup(2);
+  #endif
+  }
+  
+--- 2372,2378 ----
+       * Is there any other system that cannot do this?
+       */
+      close(0);
+!     ignored = dup(2);
+  #endif
+  }
+  
+*** ../vim-7.2.054/src/mbyte.c Thu Nov 20 17:09:09 2008
+--- src/mbyte.c        Fri Nov 28 18:44:05 2008
+***************
+*** 717,723 ****
+                    * where mblen() returns 0 for invalid character.
+                    * Therefore, following condition includes 0.
+                    */
+!                  (void)mblen(NULL, 0);       /* First reset the state. */
+                   if (mblen(buf, (size_t)1) <= 0)
+                       n = 2;
+                   else
+--- 717,723 ----
+                    * where mblen() returns 0 for invalid character.
+                    * Therefore, following condition includes 0.
+                    */
+!                  ignored = mblen(NULL, 0);   /* First reset the state. */
+                   if (mblen(buf, (size_t)1) <= 0)
+                       n = 2;
+                   else
+***************
+*** 5278,5284 ****
+  
+  /*ARGSUSED*/
+      static void
+! preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data)
+  {
+  #ifdef XIM_DEBUG
+      xim_log("xim_decide_input_style()\n");
+--- 5278,5284 ----
+  
+  /*ARGSUSED*/
+      static void
+! preedit_start_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
+  {
+  #ifdef XIM_DEBUG
+      xim_log("xim_decide_input_style()\n");
+***************
+*** 5312,5318 ****
+  
+  /*ARGSUSED*/
+      static void
+! preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data)
+  {
+      XIMPreeditDrawCallbackStruct *draw_data;
+      XIMText  *text;
+--- 5312,5318 ----
+  
+  /*ARGSUSED*/
+      static void
+! preedit_draw_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
+  {
+      XIMPreeditDrawCallbackStruct *draw_data;
+      XIMText  *text;
+***************
+*** 5453,5459 ****
+  
+  /*ARGSUSED*/
+      static void
+! preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data)
+  {
+  #ifdef XIM_DEBUG
+      xim_log("preedit_caret_cbproc()\n");
+--- 5453,5459 ----
+  
+  /*ARGSUSED*/
+      static void
+! preedit_caret_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
+  {
+  #ifdef XIM_DEBUG
+      xim_log("preedit_caret_cbproc()\n");
+***************
+*** 5462,5468 ****
+  
+  /*ARGSUSED*/
+      static void
+! preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data)
+  {
+  #ifdef XIM_DEBUG
+      xim_log("preedit_done_cbproc()\n");
+--- 5462,5468 ----
+  
+  /*ARGSUSED*/
+      static void
+! preedit_done_cbproc(XIC thexic, XPointer client_data, XPointer call_data)
+  {
+  #ifdef XIM_DEBUG
+      xim_log("preedit_done_cbproc()\n");
+*** ../vim-7.2.054/src/message.c       Sun Jul 13 19:18:44 2008
+--- src/message.c      Fri Nov 28 12:26:56 2008
+***************
+*** 4585,4645 ****
+                       if (remove_trailing_zeroes)
+                       {
+                           int i;
+!                          char *p;
+  
+                           /* Using %g or %G: remove superfluous zeroes. */
+                           if (fmt_spec == 'f')
+!                              p = tmp + str_arg_l - 1;
+                           else
+                           {
+!                              p = (char *)vim_strchr((char_u *)tmp,
+                                                fmt_spec == 'e' ? 'e' : 'E');
+!                              if (p != NULL)
+                               {
+                                   /* Remove superfluous '+' and leading
+                                    * zeroes from the exponent. */
+!                                  if (p[1] == '+')
+                                   {
+                                       /* Change "1.0e+07" to "1.0e07" */
+!                                      STRMOVE(p + 1, p + 2);
+                                       --str_arg_l;
+                                   }
+!                                  i = (p[1] == '-') ? 2 : 1;
+!                                  while (p[i] == '0')
+                                   {
+                                       /* Change "1.0e07" to "1.0e7" */
+!                                      STRMOVE(p + i, p + i + 1);
+                                       --str_arg_l;
+                                   }
+!                                  --p;
+                               }
+                           }
+  
+!                          if (p != NULL && !precision_specified)
+                               /* Remove trailing zeroes, but keep the one
+                                * just after a dot. */
+!                              while (p > tmp + 2 && *p == '0' && p[-1] != '.')
+                               {
+!                                  STRMOVE(p, p + 1);
+!                                  --p;
+                                   --str_arg_l;
+                               }
+                       }
+                       else
+                       {
+!                          char *p;
+  
+                           /* Be consistent: some printf("%e") use 1.0e+12
+                            * and some 1.0e+012.  Remove one zero in the last
+                            * case. */
+!                          p = (char *)vim_strchr((char_u *)tmp,
+                                                fmt_spec == 'e' ? 'e' : 'E');
+!                          if (p != NULL && (p[1] == '+' || p[1] == '-')
+!                                        && p[2] == '0'
+!                                        && vim_isdigit(p[3])
+!                                        && vim_isdigit(p[4]))
+                           {
+!                              STRMOVE(p + 2, p + 3);
+                               --str_arg_l;
+                           }
+                       }
+--- 4585,4646 ----
+                       if (remove_trailing_zeroes)
+                       {
+                           int i;
+!                          char *tp;
+  
+                           /* Using %g or %G: remove superfluous zeroes. */
+                           if (fmt_spec == 'f')
+!                              tp = tmp + str_arg_l - 1;
+                           else
+                           {
+!                              tp = (char *)vim_strchr((char_u *)tmp,
+                                                fmt_spec == 'e' ? 'e' : 'E');
+!                              if (tp != NULL)
+                               {
+                                   /* Remove superfluous '+' and leading
+                                    * zeroes from the exponent. */
+!                                  if (tp[1] == '+')
+                                   {
+                                       /* Change "1.0e+07" to "1.0e07" */
+!                                      STRMOVE(tp + 1, tp + 2);
+                                       --str_arg_l;
+                                   }
+!                                  i = (tp[1] == '-') ? 2 : 1;
+!                                  while (tp[i] == '0')
+                                   {
+                                       /* Change "1.0e07" to "1.0e7" */
+!                                      STRMOVE(tp + i, tp + i + 1);
+                                       --str_arg_l;
+                                   }
+!                                  --tp;
+                               }
+                           }
+  
+!                          if (tp != NULL && !precision_specified)
+                               /* Remove trailing zeroes, but keep the one
+                                * just after a dot. */
+!                              while (tp > tmp + 2 && *tp == '0'
+!                                                           && tp[-1] != '.')
+                               {
+!                                  STRMOVE(tp, tp + 1);
+!                                  --tp;
+                                   --str_arg_l;
+                               }
+                       }
+                       else
+                       {
+!                          char *tp;
+  
+                           /* Be consistent: some printf("%e") use 1.0e+12
+                            * and some 1.0e+012.  Remove one zero in the last
+                            * case. */
+!                          tp = (char *)vim_strchr((char_u *)tmp,
+                                                fmt_spec == 'e' ? 'e' : 'E');
+!                          if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
+!                                        && tp[2] == '0'
+!                                        && vim_isdigit(tp[3])
+!                                        && vim_isdigit(tp[4]))
+                           {
+!                              STRMOVE(tp + 2, tp + 3);
+                               --str_arg_l;
+                           }
+                       }
+*** ../vim-7.2.054/src/netbeans.c      Sat Nov 15 14:10:23 2008
+--- src/netbeans.c     Fri Nov 28 18:51:43 2008
+***************
+*** 1043,1049 ****
+       nbdebug(("EVT: %s", buf));
+  /*   nb_send(buf, "netbeans_end");    avoid "write failed" messages */
+       if (sd >= 0)
+!          sock_write(sd, buf, (int)STRLEN(buf));  /* ignore errors */
+      }
+  }
+  
+--- 1043,1049 ----
+       nbdebug(("EVT: %s", buf));
+  /*   nb_send(buf, "netbeans_end");    avoid "write failed" messages */
+       if (sd >= 0)
+!          ignored = sock_write(sd, buf, (int)STRLEN(buf));
+      }
+  }
+  
+***************
+*** 2277,2285 ****
+           int serNum;
+           int localTypeNum;
+           int typeNum;
+- # ifdef NBDEBUG
+-          int len;
+- # endif
+           pos_T *pos;
+  
+           if (buf == NULL || buf->bufp == NULL)
+--- 2277,2282 ----
+***************
+*** 2303,2315 ****
+           pos = get_off_or_lnum(buf->bufp, &args);
+  
+           cp = (char *)args;
+! # ifdef NBDEBUG
+!          len =
+! # endif
+!              strtol(cp, &cp, 10);
+           args = (char_u *)cp;
+  # ifdef NBDEBUG
+!          if (len != -1)
+           {
+               nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
+           }
+--- 2300,2309 ----
+           pos = get_off_or_lnum(buf->bufp, &args);
+  
+           cp = (char *)args;
+!          ignored = (int)strtol(cp, &cp, 10);
+           args = (char_u *)cp;
+  # ifdef NBDEBUG
+!          if (ignored != -1)
+           {
+               nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
+           }
+*** ../vim-7.2.054/src/option.c        Sun Nov  9 13:43:25 2008
+--- src/option.c       Fri Nov 28 12:27:34 2008
+***************
+*** 8232,8244 ****
+           {
+               if (number == 0 && string != NULL)
+               {
+!                  int index;
+  
+                   /* Either we are given a string or we are setting option
+                    * to zero. */
+!                  for (index = 0; string[index] == '0'; ++index)
+                       ;
+!                  if (string[index] != NUL || index == 0)
+                   {
+                       /* There's another character after zeros or the string
+                        * is empty.  In both cases, we are trying to set a
+--- 8232,8244 ----
+           {
+               if (number == 0 && string != NULL)
+               {
+!                  int idx;
+  
+                   /* Either we are given a string or we are setting option
+                    * to zero. */
+!                  for (idx = 0; string[idx] == '0'; ++idx)
+                       ;
+!                  if (string[idx] != NUL || idx == 0)
+                   {
+                       /* There's another character after zeros or the string
+                        * is empty.  In both cases, we are trying to set a
+*** ../vim-7.2.054/src/os_unix.c       Wed Nov 12 14:09:38 2008
+--- src/os_unix.c      Fri Nov 28 18:39:55 2008
+***************
+*** 315,326 ****
+      {-1,         "Unknown!", FALSE}
+  };
+  
+      void
+  mch_write(s, len)
+      char_u   *s;
+      int              len;
+  {
+!     write(1, (char *)s, len);
+      if (p_wd)                /* Unix is too fast, slow down a bit more */
+       RealWaitForChar(read_cmd_fd, p_wd, NULL);
+  }
+--- 315,329 ----
+      {-1,         "Unknown!", FALSE}
+  };
+  
++ /*
++  * Write s[len] to the screen.
++  */
+      void
+  mch_write(s, len)
+      char_u   *s;
+      int              len;
+  {
+!     ignored = (int)write(1, (char *)s, len);
+      if (p_wd)                /* Unix is too fast, slow down a bit more */
+       RealWaitForChar(read_cmd_fd, p_wd, NULL);
+  }
+***************
+*** 3927,3935 ****
+                */
+               if (fd >= 0)
+               {
+!                  dup(fd); /* To replace stdin  (file descriptor 0) */
+!                  dup(fd); /* To replace stdout (file descriptor 1) */
+!                  dup(fd); /* To replace stderr (file descriptor 2) */
+  
+                   /* Don't need this now that we've duplicated it */
+                   close(fd);
+--- 3930,3938 ----
+                */
+               if (fd >= 0)
+               {
+!                  ignored = dup(fd); /* To replace stdin  (fd 0) */
+!                  ignored = dup(fd); /* To replace stdout (fd 1) */
+!                  ignored = dup(fd); /* To replace stderr (fd 2) */
+  
+                   /* Don't need this now that we've duplicated it */
+                   close(fd);
+***************
+*** 3997,4009 ****
+  
+                   /* set up stdin/stdout/stderr for the child */
+                   close(0);
+!                  dup(pty_slave_fd);
+                   close(1);
+!                  dup(pty_slave_fd);
+                   if (gui.in_use)
+                   {
+                       close(2);
+!                      dup(pty_slave_fd);
+                   }
+  
+                   close(pty_slave_fd);    /* has been dupped, close it now */
+--- 4000,4012 ----
+  
+                   /* set up stdin/stdout/stderr for the child */
+                   close(0);
+!                  ignored = dup(pty_slave_fd);
+                   close(1);
+!                  ignored = dup(pty_slave_fd);
+                   if (gui.in_use)
+                   {
+                       close(2);
+!                      ignored = dup(pty_slave_fd);
+                   }
+  
+                   close(pty_slave_fd);    /* has been dupped, close it now */
+***************
+*** 4014,4026 ****
+                   /* set up stdin for the child */
+                   close(fd_toshell[1]);
+                   close(0);
+!                  dup(fd_toshell[0]);
+                   close(fd_toshell[0]);
+  
+                   /* set up stdout for the child */
+                   close(fd_fromshell[0]);
+                   close(1);
+!                  dup(fd_fromshell[1]);
+                   close(fd_fromshell[1]);
+  
+  # ifdef FEAT_GUI
+--- 4017,4029 ----
+                   /* set up stdin for the child */
+                   close(fd_toshell[1]);
+                   close(0);
+!                  ignored = dup(fd_toshell[0]);
+                   close(fd_toshell[0]);
+  
+                   /* set up stdout for the child */
+                   close(fd_fromshell[0]);
+                   close(1);
+!                  ignored = dup(fd_fromshell[1]);
+                   close(fd_fromshell[1]);
+  
+  # ifdef FEAT_GUI
+***************
+*** 4028,4034 ****
+                   {
+                       /* set up stderr for the child */
+                       close(2);
+!                      dup(1);
+                   }
+  # endif
+               }
+--- 4031,4037 ----
+                   {
+                       /* set up stderr for the child */
+                       close(2);
+!                      ignored = dup(1);
+                   }
+  # endif
+               }
+***************
+*** 4159,4165 ****
+                                           && (lnum !=
+                                                   curbuf->b_ml.ml_line_count
+                                                   || curbuf->b_p_eol)))
+!                                  write(toshell_fd, "\n", (size_t)1);
+                               ++lnum;
+                               if (lnum > curbuf->b_op_end.lnum)
+                               {
+--- 4162,4169 ----
+                                           && (lnum !=
+                                                   curbuf->b_ml.ml_line_count
+                                                   || curbuf->b_p_eol)))
+!                                  ignored = write(toshell_fd, "\n",
+!                                                                 (size_t)1);
+                               ++lnum;
+                               if (lnum > curbuf->b_op_end.lnum)
+                               {
+*** ../vim-7.2.054/src/spell.c Fri Nov 28 10:08:05 2008
+--- src/spell.c        Fri Nov 28 12:28:24 2008
+***************
+*** 4950,4956 ****
+  static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
+  static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
+  static void clear_node __ARGS((wordnode_T *node));
+! static int put_node __ARGS((FILE *fd, wordnode_T *node, int index, int regionmask, int prefixtree));
+  static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
+  static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
+  static int sug_maketable __ARGS((spellinfo_T *spin));
+--- 4950,4956 ----
+  static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
+  static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
+  static void clear_node __ARGS((wordnode_T *node));
+! static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree));
+  static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
+  static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
+  static int sug_maketable __ARGS((spellinfo_T *spin));
+*** ../vim-7.2.054/src/ui.c    Sun Sep 14 15:57:54 2008
+--- src/ui.c   Fri Nov 28 19:04:36 2008
+***************
+*** 1820,1826 ****
+  #ifdef HAVE_DUP
+           /* Use stderr for stdin, also works for shell commands. */
+           close(0);
+!          dup(2);
+  #else
+           read_cmd_fd = 2;    /* read from stderr instead of stdin */
+  #endif
+--- 1820,1826 ----
+  #ifdef HAVE_DUP
+           /* Use stderr for stdin, also works for shell commands. */
+           close(0);
+!          ignored = dup(2);
+  #else
+           read_cmd_fd = 2;    /* read from stderr instead of stdin */
+  #endif
+*** ../vim-7.2.054/src/window.c        Sat Nov 15 14:10:23 2008
+--- src/window.c       Fri Nov 28 18:46:45 2008
+***************
+*** 4029,4042 ****
+           if (mch_dirname(cwd, MAXPATHL) == OK)
+               globaldir = vim_strsave(cwd);
+       }
+!      mch_chdir((char *)curwin->w_localdir);
+!      shorten_fnames(TRUE);
+      }
+      else if (globaldir != NULL)
+      {
+       /* Window doesn't have a local directory and we are not in the global
+        * directory: Change to the global directory. */
+!      mch_chdir((char *)globaldir);
+       vim_free(globaldir);
+       globaldir = NULL;
+       shorten_fnames(TRUE);
+--- 4029,4042 ----
+           if (mch_dirname(cwd, MAXPATHL) == OK)
+               globaldir = vim_strsave(cwd);
+       }
+!      if (mch_chdir((char *)curwin->w_localdir) == 0)
+!          shorten_fnames(TRUE);
+      }
+      else if (globaldir != NULL)
+      {
+       /* Window doesn't have a local directory and we are not in the global
+        * directory: Change to the global directory. */
+!      ignored = mch_chdir((char *)globaldir);
+       vim_free(globaldir);
+       globaldir = NULL;
+       shorten_fnames(TRUE);
+*** ../vim-7.2.054/src/version.c       Fri Nov 28 12:05:07 2008
+--- src/version.c      Fri Nov 28 21:12:42 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     55,
+  /**/
+
+-- 
+PRINCE:    He's come to rescue me, father.
+LAUNCELOT: (embarrassed) Well, let's not jump to conclusions ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.056 b/7.2.056
new file mode 100644 (file)
index 0000000..9e23f3d
--- /dev/null
+++ b/7.2.056
@@ -0,0 +1,57 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.056
+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 7.2.056 (after 7.2.050)
+Problem:    Tests 58 and 59 fail.
+Solution:   Don't invoke fwrite() with a zero length. (Dominique Pelle)
+Files:     src/spell.c
+
+
+*** ../vim-7.2.055/src/spell.c Fri Nov 28 21:26:50 2008
+--- src/spell.c        Sat Nov 29 19:58:21 2008
+***************
+*** 8112,8118 ****
+               p = rr == 1 ? ftp->ft_from : ftp->ft_to;
+               l = (int)STRLEN(p);
+               putc(l, fd);
+!              fwv &= fwrite(p, l, (size_t)1, fd);
+           }
+       }
+  
+--- 8218,8225 ----
+               p = rr == 1 ? ftp->ft_from : ftp->ft_to;
+               l = (int)STRLEN(p);
+               putc(l, fd);
+!              if (l > 0)
+!                  fwv &= fwrite(p, l, (size_t)1, fd);
+           }
+       }
+  
+*** ../vim-7.2.055/src/version.c       Fri Nov 28 21:26:50 2008
+--- src/version.c      Sat Nov 29 20:10:05 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     56,
+  /**/
+
+-- 
+GUARD #1:  Where'd you get the coconut?
+ARTHUR:    We found them.
+GUARD #1:  Found them?  In Mercea?  The coconut's tropical!
+ARTHUR:    What do you mean?
+GUARD #1:  Well, this is a temperate zone.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.057 b/7.2.057
new file mode 100644 (file)
index 0000000..3754912
--- /dev/null
+++ b/7.2.057
@@ -0,0 +1,111 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.057
+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 7.2.057 (after 7.2.056)
+Problem:    Combination of int and size_t may not work.
+Solution:   Use size_t for variable.
+Files:     src/spell.c
+
+
+*** ../vim-7.2.056/src/spell.c Sat Nov 29 20:10:59 2008
+--- src/spell.c        Sat Nov 29 20:15:43 2008
+***************
+*** 7926,7932 ****
+      char_u   *p;
+      int              rr;
+      int              retval = OK;
+!     int              fwv = 1;  /* collect return value of fwrite() to avoid
+                            warnings from picky compiler */
+  
+      fd = mch_fopen((char *)fname, "w");
+--- 8028,8034 ----
+      char_u   *p;
+      int              rr;
+      int              retval = OK;
+!     size_t   fwv = 1;  /* collect return value of fwrite() to avoid
+                            warnings from picky compiler */
+  
+      fd = mch_fopen((char *)fname, "w");
+***************
+*** 7939,7944 ****
+--- 8041,8050 ----
+      /* <HEADER>: <fileID> <versionnr> */
+                                                           /* <fileID> */
+      fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
++     if (fwv != (size_t)1)
++      /* Catch first write error, don't try writing more. */
++      goto theend;
++ 
+      putc(VIMSPELLVERSION, fd);                                   /* <versionnr> */
+  
+      /*
+***************
+*** 8300,8310 ****
+      /* Write another byte to check for errors (file system full). */
+      if (putc(0, fd) == EOF)
+       retval = FAIL;
+! 
+      if (fclose(fd) == EOF)
+       retval = FAIL;
+  
+!     if (fwv != 1)
+       retval = FAIL;
+      if (retval == FAIL)
+       EMSG(_(e_write));
+--- 8406,8416 ----
+      /* Write another byte to check for errors (file system full). */
+      if (putc(0, fd) == EOF)
+       retval = FAIL;
+! theend:
+      if (fclose(fd) == EOF)
+       retval = FAIL;
+  
+!     if (fwv != (size_t)1)
+       retval = FAIL;
+      if (retval == FAIL)
+       EMSG(_(e_write));
+***************
+*** 9897,9903 ****
+      char_u   *p;
+      int              len;
+      int              totlen;
+!     int              x = 1;  /* collect return value of fwrite() */
+  
+      if (fd != NULL)
+       put_bytes(fd, (long_u)gap->ga_len, 2);      /* <prefcondcnt> */
+--- 10003,10009 ----
+      char_u   *p;
+      int              len;
+      int              totlen;
+!     size_t   x = 1;  /* collect return value of fwrite() */
+  
+      if (fd != NULL)
+       put_bytes(fd, (long_u)gap->ga_len, 2);      /* <prefcondcnt> */
+*** ../vim-7.2.056/src/version.c       Sat Nov 29 20:10:59 2008
+--- src/version.c      Sat Nov 29 20:13:46 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     57,
+  /**/
+
+-- 
+GUARD #1:  What -- a swallow carrying a coconut?
+ARTHUR:    It could grip it by the husk!
+GUARD #1:  It's not a question of where he grips it!  It's a simple question
+           of weight ratios!  A five ounce bird could not carry a 1 pound
+           coconut.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.058 b/7.2.058
new file mode 100644 (file)
index 0000000..95de243
--- /dev/null
+++ b/7.2.058
@@ -0,0 +1,83 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.058
+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 7.2.058
+Problem:    Can't add a patch name to the ":version" output.
+Solution:   Add the extra_patches array.
+Files:     src/version.c
+
+
+*** ../vim-7.2.057/src/version.c       Sat Nov 29 20:18:44 2008
+--- src/version.c      Sun Nov 30 12:12:31 2008
+***************
+*** 794,799 ****
+--- 796,814 ----
+      0
+  };
+  
++ /*
++  * Place to put a short description when adding a feature with a patch.
++  * Keep it short, e.g.,: "relative numbers", "persistent undo".
++  * Also add a comment marker to separate the lines.
++  * See the official Vim patches for the diff format: It must use a context of
++  * one line only.  Use "diff -C2".
++  */
++ static char *(extra_patches[]) =
++ {   /* Add your patch description below this line */
++ /**/
++     NULL
++ };
++ 
+      int
+  highest_patch()
+  {
+***************
+*** 939,944 ****
+--- 954,972 ----
+       }
+      }
+  
++     /* Print the list of extra patch descriptions if there is at least one. */
++     if (extra_patches[0] != NULL)
++     {
++      MSG_PUTS(_("\nExtra patches: "));
++      s = "";
++      for (i = 0; extra_patches[i] != NULL; ++i)
++      {
++          MSG_PUTS(s);
++          s = ", ";
++          MSG_PUTS(extra_patches[i]);
++      }
++     }
++ 
+  #ifdef MODIFIED_BY
+      MSG_PUTS("\n");
+      MSG_PUTS(_("Modified by "));
+*** ../vim-7.2.057/src/version.c       Sat Nov 29 20:18:44 2008
+--- src/version.c      Sun Nov 30 12:12:31 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     58,
+  /**/
+
+-- 
+ARTHUR:    Well, it doesn't matter.  Will you go and tell your master that
+           Arthur from the Court of Camelot is here.
+GUARD #1:  Listen, in order to maintain air-speed velocity, a swallow
+           needs to beat its wings 43 times every second, right?
+ARTHUR:    Please!
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.059 b/7.2.059
new file mode 100644 (file)
index 0000000..0012ad6
--- /dev/null
+++ b/7.2.059
@@ -0,0 +1,70 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.059
+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 7.2.059
+Problem:    Diff display is not always updated.
+Solution:   Update the display more often.
+Files:     src/diff.c
+
+
+*** ../vim-7.2.058/src/diff.c  Fri Nov 28 21:26:50 2008
+--- src/diff.c Fri Nov 28 17:23:35 2008
+***************
+*** 73,78 ****
+--- 73,80 ----
+       {
+           tp->tp_diffbuf[i] = NULL;
+           tp->tp_diff_invalid = TRUE;
++          if (tp == curtab)
++              diff_redraw(TRUE);
+       }
+      }
+  }
+***************
+*** 102,107 ****
+--- 104,110 ----
+           {
+               curtab->tp_diffbuf[i] = NULL;
+               curtab->tp_diff_invalid = TRUE;
++              diff_redraw(TRUE);
+           }
+       }
+      }
+***************
+*** 131,136 ****
+--- 134,140 ----
+       {
+           curtab->tp_diffbuf[i] = buf;
+           curtab->tp_diff_invalid = TRUE;
++          diff_redraw(TRUE);
+           return;
+       }
+  
+*** ../vim-7.2.058/src/version.c       Sun Nov 30 12:14:35 2008
+--- src/version.c      Sun Nov 30 15:13:18 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     59,
+  /**/
+
+-- 
+GUARD #2:  Wait a minute -- supposing two swallows carried it together?
+GUARD #1:  No, they'd have to have it on a line.
+GUARD #2:  Well, simple!  They'd just use a standard creeper!
+GUARD #1:  What, held under the dorsal guiding feathers?
+GUARD #2:  Well, why not?
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.060 b/7.2.060
new file mode 100644 (file)
index 0000000..ec6e6b7
--- /dev/null
+++ b/7.2.060
@@ -0,0 +1,1102 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.060
+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 7.2.060
+Problem:    When a spell files has many compound rules it may take a very long
+           time making the list of suggestions.  Displaying also can be slow
+           when there are misspelled words.
+           Can't parse some Hunspell .aff files.
+Solution:   Check if a compounding can possibly work before trying a
+           combination, if the compound rules don't contain wildcards.
+           Implement using CHECKCOMPOUNDPATTERN.
+           Ignore COMPOUNDRULES.  Ignore a comment after most items.
+           Accept ONLYINCOMPOUND as an alias for NEEDCOMPOUND.
+           Accept FORBIDDENWORD as an alias for BAD.
+Files:     runtime/doc/spell.txt, src/spell.c
+
+
+*** ../vim-7.2.059/runtime/doc/spell.txt       Sat Aug  9 19:36:52 2008
+--- runtime/doc/spell.txt      Sun Nov 30 16:30:02 2008
+***************
+*** 1,4 ****
+! *spell.txt*  For Vim version 7.2.  Last change: 2008 Jun 21
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *spell.txt*  For Vim version 7.2.  Last change: 2008 Nov 30
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 831,838 ****
+  
+       # comment line ~
+  
+! With some items it's also possible to put a comment after it, but this isn't
+! supported in general.
+  
+  
+  ENCODING                                                     *spell-SET*
+--- 831,841 ----
+  
+       # comment line ~
+  
+! Items with a fixed number of arguments can be followed by a comment.  But only
+! if none of the arguments can contain white space.  The comment must start with
+! a "#" character.  Example:
+! 
+!      KEEPCASE =  # fix case for words with this flag ~
+  
+  
+  ENCODING                                                     *spell-SET*
+***************
+*** 965,970 ****
+--- 968,976 ----
+  
+  Note: When using utf-8 only characters up to 65000 may be used for flags.
+  
++ Note: even when using "num" or "long" the number of flags available to
++ compounding and prefixes is limited to about 250.
++ 
+  
+  AFFIXES
+                                           *spell-PFX* *spell-SFX*
+***************
+*** 1178,1183 ****
+--- 1185,1193 ----
+  The flag also applies to the word with affixes, thus this can be used to mark
+  a whole bunch of related words as bad.
+  
++                                                      *spell-FORBIDDENWORD*
++ FORBIDDENWORD can be used just like BAD.  For compatibility with Hunspell.
++ 
+                                                       *spell-NEEDAFFIX*
+  The NEEDAFFIX flag is used to require that a word is used with an affix.  The
+  word itself is not a good word (unless there is an empty affix).  Example:
+***************
+*** 1268,1273 ****
+--- 1278,1287 ----
+  
+       NEEDCOMPOUND & ~
+  
++                                                      *spell-ONLYINCOMPOUND*
++ The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND.  Supported for
++ compatiblity with Hunspell.
++ 
+                                                       *spell-COMPOUNDMIN*
+  The minimal character length of a word used for compounding is specified with
+  COMPOUNDMIN.  Example:
+***************
+*** 1328,1333 ****
+--- 1342,1361 ----
+  rules.  Can also be used for an affix to count the affix as a compounding
+  word.
+  
++                                              *spell-CHECKCOMPOUNDPATTERN*
++ CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the
++ position where two words are compounded together forbids the compound.
++ For example:
++      CHECKCOMPOUNDPATTERN o e ~
++ 
++ This forbids compounding if the first word ends in "o" and the second word
++ starts with "e".
++ 
++ The arguments must be plain text, no patterns are actually supported, despite
++ the item name.  Case is always ignored.
++ 
++ The Hunspell feature to use three arguments and flags is not supported.
++ 
+                                                       *spell-SYLLABLE*
+  The SYLLABLE item defines characters or character sequences that are used to
+  count the number of syllables in a word.  Example:
+***************
+*** 1496,1501 ****
+--- 1524,1533 ----
+  ACCENT               (Hunspell)                              *spell-ACCENT*
+               Use MAP instead. |spell-MAP|
+  
++ BREAK                (Hunspell)                              *spell-BREAK*
++              Define break points.  Unclear how it works exactly.
++              Not supported.
++ 
+  CHECKCOMPOUNDCASE  (Hunspell)                        *spell-CHECKCOMPOUNDCASE*
+               Disallow uppercase letters at compound word boundaries.
+               Not supported.
+***************
+*** 1512,1520 ****
+               Forbid three identical characters when compounding.  Not
+               supported.
+  
+- CHECKCOMPOUNDPATTERN  (Hunspell)             *spell-CHECKCOMPOUNDPATTERN*
+-              Forbid compounding when patterns match.  Not supported.
+- 
+  COMPLEXPREFIXES  (Hunspell)                          *spell-COMPLEXPREFIXES*
+               Enables using two prefixes.  Not supported.
+  
+--- 1544,1549 ----
+***************
+*** 1536,1548 ****
+  COMPOUNDMIDDLE       (Hunspell)                              *spell-COMPOUNDMIDDLE*
+               Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
+  
+  COMPOUNDSYLLABLE  (Hunspell)                 *spell-COMPOUNDSYLLABLE*
+               Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
+               |spell-COMPOUNDSYLMAX|
+  
+! FORBIDDENWORD        (Hunspell)                              *spell-FORBIDDENWORD*
+!              Use BAD instead. |spell-BAD|
+! 
+  LANG         (Hunspell)                              *spell-LANG*
+               This specifies language-specific behavior.  This actually
+               moves part of the language knowledge into the program,
+--- 1565,1582 ----
+  COMPOUNDMIDDLE       (Hunspell)                              *spell-COMPOUNDMIDDLE*
+               Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
+  
++ COMPOUNDRULES        (Hunspell)                              *spell-COMPOUNDRULES*
++              Number of COMPOUNDRULE lines following.  Ignored, but the
++              argument must be a number.
++ 
+  COMPOUNDSYLLABLE  (Hunspell)                 *spell-COMPOUNDSYLLABLE*
+               Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
+               |spell-COMPOUNDSYLMAX|
+  
+! KEY          (Hunspell)                              *spell-KEY*
+!              Define characters that are close together on the keyboard.
+!              Used to give better suggestions.  Not supported.
+!              
+  LANG         (Hunspell)                              *spell-LANG*
+               This specifies language-specific behavior.  This actually
+               moves part of the language knowledge into the program,
+***************
+*** 1553,1562 ****
+               Only needed for morphological analysis.
+  
+  MAXNGRAMSUGS (Hunspell)                              *spell-MAXNGRAMSUGS*
+!              Not supported.
+! 
+! ONLYINCOMPOUND       (Hunspell)                              *spell-ONLYINCOMPOUND*
+!              Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND|
+  
+  PSEUDOROOT   (Hunspell)                              *spell-PSEUDOROOT*
+               Use NEEDAFFIX instead. |spell-NEEDAFFIX|
+--- 1587,1593 ----
+               Only needed for morphological analysis.
+  
+  MAXNGRAMSUGS (Hunspell)                              *spell-MAXNGRAMSUGS*
+!              Set number of n-gram suggestions.  Not supported.
+  
+  PSEUDOROOT   (Hunspell)                              *spell-PSEUDOROOT*
+               Use NEEDAFFIX instead. |spell-NEEDAFFIX|
+*** ../vim-7.2.059/src/spell.c Sat Nov 29 20:18:44 2008
+--- src/spell.c        Sun Nov 30 20:59:13 2008
+***************
+*** 469,474 ****
+--- 469,475 ----
+      garray_T sl_comppat;     /* CHECKCOMPOUNDPATTERN items */
+      regprog_T        *sl_compprog;   /* COMPOUNDRULE turned into a regexp progrm
+                                * (NULL when no compounding) */
++     char_u   *sl_comprules;  /* all COMPOUNDRULE concatenated (or NULL) */
+      char_u   *sl_compstartflags; /* flags for first compound word */
+      char_u   *sl_compallflags; /* all flags for compound words */
+      char_u   sl_nobreak;     /* When TRUE: no spaces between words */
+***************
+*** 839,845 ****
+--- 840,849 ----
+  static void slang_clear __ARGS((slang_T *lp));
+  static void slang_clear_sug __ARGS((slang_T *lp));
+  static void find_word __ARGS((matchinf_T *mip, int mode));
++ static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap));
+  static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags));
++ static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag));
++ static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags));
+  static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req));
+  static void find_prefix __ARGS((matchinf_T *mip, int mode));
+  static int fold_more __ARGS((matchinf_T *mip));
+***************
+*** 1519,1524 ****
+--- 1523,1533 ----
+                                           ((unsigned)flags >> 24)))
+                   continue;
+  
++              /* If there is a match with a CHECKCOMPOUNDPATTERN rule
++               * discard the compound word. */
++              if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat))
++                  continue;
++ 
+               if (mode == FIND_COMPOUND)
+               {
+                   int     capflags;
+***************
+*** 1577,1582 ****
+--- 1586,1596 ----
+                   if (!can_compound(slang, fword, mip->mi_compflags))
+                       continue;
+               }
++              else if (slang->sl_comprules != NULL
++                           && !match_compoundrule(slang, mip->mi_compflags))
++                  /* The compound flags collected so far do not match any
++                   * COMPOUNDRULE, discard the compounded word. */
++                  continue;
+           }
+  
+           /* Check NEEDCOMPOUND: can't use word without compounding. */
+***************
+*** 1727,1732 ****
+--- 1741,1779 ----
+  }
+  
+  /*
++  * Return TRUE if there is a match between the word ptr[wlen] and
++  * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another
++  * word.
++  * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the
++  * end of ptr[wlen] and the second part matches after it.
++  */
++     static int
++ match_checkcompoundpattern(ptr, wlen, gap)
++     char_u   *ptr;
++     int              wlen;
++     garray_T *gap;  /* &sl_comppat */
++ {
++     int              i;
++     char_u   *p;
++     int              len;
++ 
++     for (i = 0; i + 1 < gap->ga_len; i += 2)
++     {
++      p = ((char_u **)gap->ga_data)[i + 1];
++      if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0)
++      {
++          /* Second part matches at start of following compound word, now
++           * check if first part matches at end of previous word. */
++          p = ((char_u **)gap->ga_data)[i];
++          len = STRLEN(p);
++          if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0)
++              return TRUE;
++      }
++     }
++     return FALSE;
++ }
++ 
++ /*
+   * Return TRUE if "flags" is a valid sequence of compound flags and "word"
+   * does not have too many syllables.
+   */
+***************
+*** 1773,1778 ****
+--- 1820,1917 ----
+  }
+  
+  /*
++  * Return TRUE when the sequence of flags in "compflags" plus "flag" can
++  * possibly form a valid compounded word.  This also checks the COMPOUNDRULE
++  * lines if they don't contain wildcards.
++  */
++     static int
++ can_be_compound(sp, slang, compflags, flag)
++     trystate_T       *sp;
++     slang_T  *slang;
++     char_u   *compflags;
++     int              flag;
++ {
++     /* If the flag doesn't appear in sl_compstartflags or sl_compallflags
++      * then it can't possibly compound. */
++     if (!byte_in_str(sp->ts_complen == sp->ts_compsplit
++              ? slang->sl_compstartflags : slang->sl_compallflags, flag))
++      return FALSE;
++ 
++     /* If there are no wildcards, we can check if the flags collected so far
++      * possibly can form a match with COMPOUNDRULE patterns.  This only
++      * makes sense when we have two or more words. */
++     if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit)
++     {
++      int v;
++ 
++      compflags[sp->ts_complen] = flag;
++      compflags[sp->ts_complen + 1] = NUL;
++      v = match_compoundrule(slang, compflags + sp->ts_compsplit);
++      compflags[sp->ts_complen] = NUL;
++      return v;
++     }
++ 
++     return TRUE;
++ }
++ 
++ 
++ /*
++  * Return TRUE if the compound flags in compflags[] match the start of any
++  * compound rule.  This is used to stop trying a compound if the flags
++  * collected so far can't possibly match any compound rule.
++  * Caller must check that slang->sl_comprules is not NULL.
++  */
++     static int
++ match_compoundrule(slang, compflags)
++     slang_T  *slang;
++     char_u   *compflags;
++ {
++     char_u   *p;
++     int              i;
++     int              c;
++ 
++     /* loop over all the COMPOUNDRULE entries */
++     for (p = slang->sl_comprules; *p != NUL; ++p)
++     {
++      /* loop over the flags in the compound word we have made, match
++       * them against the current rule entry */
++      for (i = 0; ; ++i)
++      {
++          c = compflags[i];
++          if (c == NUL)
++              /* found a rule that matches for the flags we have so far */
++              return TRUE;
++          if (*p == '/' || *p == NUL)
++              break;  /* end of rule, it's too short */
++          if (*p == '[')
++          {
++              int match = FALSE;
++ 
++              /* compare against all the flags in [] */
++              ++p;
++              while (*p != ']' && *p != NUL)
++                  if (*p++ == c)
++                      match = TRUE;
++              if (!match)
++                  break;  /* none matches */
++          }
++          else if (*p != c)
++              break;  /* flag of word doesn't match flag in pattern */
++          ++p;
++      }
++ 
++      /* Skip to the next "/", where the next pattern starts. */
++      p = vim_strchr(p, '/');
++      if (p == NULL)
++          break;
++     }
++ 
++     /* Checked all the rules and none of them match the flags, so there
++      * can't possibly be a compound starting with these flags. */
++     return FALSE;
++ }
++ 
++ /*
+   * Return non-zero if the prefix indicated by "arridx" matches with the prefix
+   * ID in "flags" for the word "word".
+   * The WF_RAREPFX flag is included in the return value for a rare prefix.
+***************
+*** 2513,2521 ****
+--- 2652,2662 ----
+      lp->sl_midword = NULL;
+  
+      vim_free(lp->sl_compprog);
++     vim_free(lp->sl_comprules);
+      vim_free(lp->sl_compstartflags);
+      vim_free(lp->sl_compallflags);
+      lp->sl_compprog = NULL;
++     lp->sl_comprules = NULL;
+      lp->sl_compstartflags = NULL;
+      lp->sl_compallflags = NULL;
+  
+***************
+*** 3460,3465 ****
+--- 3601,3607 ----
+      char_u   *pp;
+      char_u   *cp;
+      char_u   *ap;
++     char_u   *crp;
+      int              cnt;
+      garray_T *gap;
+  
+***************
+*** 3545,3550 ****
+--- 3687,3698 ----
+      slang->sl_compallflags = ap;
+      *ap = NUL;
+  
++     /* And a list of all patterns in their original form, for checking whether
++      * compounding may work in match_compoundrule().  This is freed when we
++      * encounter a wildcard, the check doesn't work then. */
++     crp = alloc(todo + 1);
++     slang->sl_comprules = crp;
++ 
+      pp = pat;
+      *pp++ = '^';
+      *pp++ = '\\';
+***************
+*** 3587,3592 ****
+--- 3735,3754 ----
+                   atstart = 0;
+           }
+       }
++ 
++      /* Copy flag to "sl_comprules", unless we run into a wildcard. */
++      if (crp != NULL)
++      {
++          if (c == '+' || c == '*')
++          {
++              vim_free(slang->sl_comprules);
++              slang->sl_comprules = NULL;
++              crp = NULL;
++          }
++          else
++              *crp++ = c;
++      }
++ 
+       if (c == '/')       /* slash separates two items */
+       {
+           *pp++ = '\\';
+***************
+*** 3611,3616 ****
+--- 3773,3781 ----
+      *pp++ = '$';
+      *pp = NUL;
+  
++     if (crp != NULL)
++      *crp = NUL;
++ 
+      slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT);
+      vim_free(pat);
+      if (slang->sl_compprog == NULL)
+***************
+*** 4915,4920 ****
+--- 5080,5086 ----
+  } spellinfo_T;
+  
+  static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname));
++ static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int       mincount));
+  static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry));
+  static int spell_info_item __ARGS((char_u *s));
+  static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u      *fname, int lnum));
+***************
+*** 5223,5230 ****
+       /* Handle non-empty lines. */
+       if (itemcnt > 0)
+       {
+!          if (STRCMP(items[0], "SET") == 0 && itemcnt == 2
+!                                                     && aff->af_enc == NULL)
+           {
+  #ifdef FEAT_MBYTE
+               /* Setup for conversion from "ENC" to 'encoding'. */
+--- 5389,5395 ----
+       /* Handle non-empty lines. */
+       if (itemcnt > 0)
+       {
+!          if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL)
+           {
+  #ifdef FEAT_MBYTE
+               /* Setup for conversion from "ENC" to 'encoding'. */
+***************
+*** 5239,5245 ****
+                   smsg((char_u *)_("Conversion in %s not supported"), fname);
+  #endif
+           }
+!          else if (STRCMP(items[0], "FLAG") == 0 && itemcnt == 2
+                                             && aff->af_flagtype == AFT_CHAR)
+           {
+               if (STRCMP(items[1], "long") == 0)
+--- 5404,5410 ----
+                   smsg((char_u *)_("Conversion in %s not supported"), fname);
+  #endif
+           }
+!          else if (is_aff_rule(items, itemcnt, "FLAG", 2)
+                                             && aff->af_flagtype == AFT_CHAR)
+           {
+               if (STRCMP(items[1], "long") == 0)
+***************
+*** 5284,5352 ****
+                       spin->si_info = p;
+                   }
+           }
+!          else if (STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 2
+                                                          && midword == NULL)
+           {
+               midword = getroom_save(spin, items[1]);
+           }
+!          else if (STRCMP(items[0], "TRY") == 0 && itemcnt == 2)
+           {
+               /* ignored, we look in the tree for what chars may appear */
+           }
+           /* TODO: remove "RAR" later */
+!          else if ((STRCMP(items[0], "RAR") == 0
+!                      || STRCMP(items[0], "RARE") == 0) && itemcnt == 2
+!                                                     && aff->af_rare == 0)
+           {
+               aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+           /* TODO: remove "KEP" later */
+!          else if ((STRCMP(items[0], "KEP") == 0
+!                  || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 2
+                                                    && aff->af_keepcase == 0)
+           {
+               aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2
+!                                                     && aff->af_bad == 0)
+           {
+               aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 2
+                                                   && aff->af_needaffix == 0)
+           {
+               aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 2
+                                                   && aff->af_circumfix == 0)
+           {
+               aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 2
+                                                   && aff->af_nosuggest == 0)
+           {
+               aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2
+                                                    && aff->af_needcomp == 0)
+           {
+               aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 2
+                                                    && aff->af_comproot == 0)
+           {
+               aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 0
+!                                 && itemcnt == 2 && aff->af_compforbid == 0)
+           {
+               aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+--- 5449,5519 ----
+                       spin->si_info = p;
+                   }
+           }
+!          else if (is_aff_rule(items, itemcnt, "MIDWORD", 2)
+                                                          && midword == NULL)
+           {
+               midword = getroom_save(spin, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "TRY", 2))
+           {
+               /* ignored, we look in the tree for what chars may appear */
+           }
+           /* TODO: remove "RAR" later */
+!          else if ((is_aff_rule(items, itemcnt, "RAR", 2)
+!                      || is_aff_rule(items, itemcnt, "RARE", 2))
+!                                                       && aff->af_rare == 0)
+           {
+               aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+           /* TODO: remove "KEP" later */
+!          else if ((is_aff_rule(items, itemcnt, "KEP", 2)
+!                      || is_aff_rule(items, itemcnt, "KEEPCASE", 2))
+                                                    && aff->af_keepcase == 0)
+           {
+               aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if ((is_aff_rule(items, itemcnt, "BAD", 2)
+!                      || is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2))
+!                                                        && aff->af_bad == 0)
+           {
+               aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2)
+                                                   && aff->af_needaffix == 0)
+           {
+               aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2)
+                                                   && aff->af_circumfix == 0)
+           {
+               aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2)
+                                                   && aff->af_nosuggest == 0)
+           {
+               aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2)
+!                      || is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2))
+                                                    && aff->af_needcomp == 0)
+           {
+               aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2)
+                                                    && aff->af_comproot == 0)
+           {
+               aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2)
+!                                                 && aff->af_compforbid == 0)
+           {
+               aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+***************
+*** 5354,5361 ****
+                   smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
+                           fname, lnum);
+           }
+!          else if (STRCMP(items[0], "COMPOUNDPERMITFLAG") == 0
+!                                 && itemcnt == 2 && aff->af_comppermit == 0)
+           {
+               aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+--- 5521,5528 ----
+                   smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
+                           fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2)
+!                                                 && aff->af_comppermit == 0)
+           {
+               aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
+                                                                fname, lnum);
+***************
+*** 5363,5369 ****
+                   smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
+                           fname, lnum);
+           }
+!          else if (STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 2
+                                                        && compflags == NULL)
+           {
+               /* Turn flag "c" into COMPOUNDRULE compatible string "c+",
+--- 5530,5536 ----
+                   smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
+                           fname, lnum);
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2)
+                                                        && compflags == NULL)
+           {
+               /* Turn flag "c" into COMPOUNDRULE compatible string "c+",
+***************
+*** 5376,5382 ****
+                   compflags = p;
+               }
+           }
+!          else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2)
+           {
+               /* Concatenate this string to previously defined ones, using a
+                * slash to separate them. */
+--- 5543,5557 ----
+                   compflags = p;
+               }
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2))
+!          {
+!              /* We don't use the count, but do check that it's a number and
+!               * not COMPOUNDRULE mistyped. */
+!              if (atoi((char *)items[1]) == 0)
+!                  smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"),
+!                                                     fname, lnum, items[1]);
+!          }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
+           {
+               /* Concatenate this string to previously defined ones, using a
+                * slash to separate them. */
+***************
+*** 5395,5401 ****
+                   compflags = p;
+               }
+           }
+!          else if (STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 2
+                                                             && compmax == 0)
+           {
+               compmax = atoi((char *)items[1]);
+--- 5570,5576 ----
+                   compflags = p;
+               }
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
+                                                             && compmax == 0)
+           {
+               compmax = atoi((char *)items[1]);
+***************
+*** 5403,5409 ****
+                   smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 2
+                                                          && compminlen == 0)
+           {
+               compminlen = atoi((char *)items[1]);
+--- 5578,5584 ----
+                   smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2)
+                                                          && compminlen == 0)
+           {
+               compminlen = atoi((char *)items[1]);
+***************
+*** 5411,5417 ****
+                   smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 2
+                                                          && compsylmax == 0)
+           {
+               compsylmax = atoi((char *)items[1]);
+--- 5586,5592 ----
+                   smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2)
+                                                          && compsylmax == 0)
+           {
+               compsylmax = atoi((char *)items[1]);
+***************
+*** 5419,5450 ****
+                   smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1)
+           {
+               compoptions |= COMP_CHECKDUP;
+           }
+!          else if (STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1)
+           {
+               compoptions |= COMP_CHECKREP;
+           }
+!          else if (STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1)
+           {
+               compoptions |= COMP_CHECKCASE;
+           }
+!          else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0
+!                                                            && itemcnt == 1)
+           {
+               compoptions |= COMP_CHECKTRIPLE;
+           }
+!          else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
+!                                                            && itemcnt == 2)
+           {
+               if (atoi((char *)items[1]) == 0)
+                   smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
+!                                                            && itemcnt == 3)
+           {
+               garray_T    *gap = &spin->si_comppat;
+               int         i;
+--- 5594,5622 ----
+                   smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1))
+           {
+               compoptions |= COMP_CHECKDUP;
+           }
+!          else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1))
+           {
+               compoptions |= COMP_CHECKREP;
+           }
+!          else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1))
+           {
+               compoptions |= COMP_CHECKCASE;
+           }
+!          else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1))
+           {
+               compoptions |= COMP_CHECKTRIPLE;
+           }
+!          else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2))
+           {
+               if (atoi((char *)items[1]) == 0)
+                   smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
+                                                      fname, lnum, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3))
+           {
+               garray_T    *gap = &spin->si_comppat;
+               int         i;
+***************
+*** 5463,5486 ****
+                                              = getroom_save(spin, items[2]);
+               }
+           }
+!          else if (STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 2
+                                                         && syllable == NULL)
+           {
+               syllable = getroom_save(spin, items[1]);
+           }
+!          else if (STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1)
+           {
+               spin->si_nobreak = TRUE;
+           }
+!          else if (STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1)
+           {
+               spin->si_nosplitsugs = TRUE;
+           }
+!          else if (STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1)
+           {
+               spin->si_nosugfile = TRUE;
+           }
+!          else if (STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1)
+           {
+               aff->af_pfxpostpone = TRUE;
+           }
+--- 5635,5658 ----
+                                              = getroom_save(spin, items[2]);
+               }
+           }
+!          else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2)
+                                                         && syllable == NULL)
+           {
+               syllable = getroom_save(spin, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "NOBREAK", 1))
+           {
+               spin->si_nobreak = TRUE;
+           }
+!          else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1))
+           {
+               spin->si_nosplitsugs = TRUE;
+           }
+!          else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1))
+           {
+               spin->si_nosugfile = TRUE;
+           }
+!          else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1))
+           {
+               aff->af_pfxpostpone = TRUE;
+           }
+***************
+*** 5771,5794 ****
+                   }
+               }
+           }
+!          else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2
+!                                                             && fol == NULL)
+           {
+               fol = vim_strsave(items[1]);
+           }
+!          else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2
+!                                                             && low == NULL)
+           {
+               low = vim_strsave(items[1]);
+           }
+!          else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2
+!                                                             && upp == NULL)
+           {
+               upp = vim_strsave(items[1]);
+           }
+!          else if ((STRCMP(items[0], "REP") == 0
+!                      || STRCMP(items[0], "REPSAL") == 0)
+!                  && itemcnt == 2)
+           {
+               /* Ignore REP/REPSAL count */;
+               if (!isdigit(*items[1]))
+--- 5943,5962 ----
+                   }
+               }
+           }
+!          else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL)
+           {
+               fol = vim_strsave(items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL)
+           {
+               low = vim_strsave(items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL)
+           {
+               upp = vim_strsave(items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "REP", 2)
+!                   || is_aff_rule(items, itemcnt, "REPSAL", 2))
+           {
+               /* Ignore REP/REPSAL count */;
+               if (!isdigit(*items[1]))
+***************
+*** 5819,5825 ****
+                                        : &spin->si_rep, items[1], items[2]);
+               }
+           }
+!          else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
+           {
+               /* MAP item or count */
+               if (!found_map)
+--- 5987,5993 ----
+                                        : &spin->si_rep, items[1], items[2]);
+               }
+           }
+!          else if (is_aff_rule(items, itemcnt, "MAP", 2))
+           {
+               /* MAP item or count */
+               if (!found_map)
+***************
+*** 5856,5864 ****
+                   ga_append(&spin->si_map, '/');
+               }
+           }
+!          /* Accept "SAL from to" and "SAL from to # comment". */
+!          else if (STRCMP(items[0], "SAL") == 0
+!                  && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#')))
+           {
+               if (do_sal)
+               {
+--- 6024,6031 ----
+                   ga_append(&spin->si_map, '/');
+               }
+           }
+!          /* Accept "SAL from to" and "SAL from to  #comment". */
+!          else if (is_aff_rule(items, itemcnt, "SAL", 3))
+           {
+               if (do_sal)
+               {
+***************
+*** 5877,5888 ****
+                                                               : items[2]);
+               }
+           }
+!          else if (STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 2
+                                                         && sofofrom == NULL)
+           {
+               sofofrom = getroom_save(spin, items[1]);
+           }
+!          else if (STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 2
+                                                           && sofoto == NULL)
+           {
+               sofoto = getroom_save(spin, items[1]);
+--- 6044,6055 ----
+                                                               : items[2]);
+               }
+           }
+!          else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2)
+                                                         && sofofrom == NULL)
+           {
+               sofofrom = getroom_save(spin, items[1]);
+           }
+!          else if (is_aff_rule(items, itemcnt, "SOFOTO", 2)
+                                                           && sofoto == NULL)
+           {
+               sofoto = getroom_save(spin, items[1]);
+***************
+*** 6017,6022 ****
+--- 6184,6205 ----
+  }
+  
+  /*
++  * Return TRUE when items[0] equals "rulename", there are "mincount" items or
++  * a comment is following after item "mincount".
++  */
++     static int
++ is_aff_rule(items, itemcnt, rulename, mincount)
++     char_u   **items;
++     int              itemcnt;
++     char     *rulename;
++     int              mincount;
++ {
++     return (STRCMP(items[0], rulename) == 0
++          && (itemcnt == mincount
++              || (itemcnt > mincount && items[mincount][0] == '#')));
++ }
++ 
++ /*
+   * For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from
+   * ae_flags to ae_comppermit and ae_compforbid.
+   */
+***************
+*** 11492,11506 ****
+                   vim_strncpy(preword + sp->ts_prewordlen,
+                           tword + sp->ts_splitoff,
+                           sp->ts_twordlen - sp->ts_splitoff);
+!                  p = preword;
+!                  while (*skiptowhite(p) != NUL)
+!                      p = skipwhite(skiptowhite(p));
+!                  if (fword_ends && !can_compound(slang, p,
+!                                              compflags + sp->ts_compsplit))
+!                      /* Compound is not allowed.  But it may still be
+!                       * possible if we add another (short) word. */
+                       compound_ok = FALSE;
+  
+                   /* Get pointer to last char of previous word. */
+                   p = preword + sp->ts_prewordlen;
+                   mb_ptr_back(preword, p);
+--- 11675,11698 ----
+                   vim_strncpy(preword + sp->ts_prewordlen,
+                           tword + sp->ts_splitoff,
+                           sp->ts_twordlen - sp->ts_splitoff);
+! 
+!                  /* Verify CHECKCOMPOUNDPATTERN  rules. */
+!                  if (match_checkcompoundpattern(preword,  sp->ts_prewordlen,
+!                                                        &slang->sl_comppat))
+                       compound_ok = FALSE;
+  
++                  if (compound_ok)
++                  {
++                      p = preword;
++                      while (*skiptowhite(p) != NUL)
++                          p = skipwhite(skiptowhite(p));
++                      if (fword_ends && !can_compound(slang, p,
++                                              compflags + sp->ts_compsplit))
++                          /* Compound is not allowed.  But it may still be
++                           * possible if we add another (short) word. */
++                          compound_ok = FALSE;
++                  }
++ 
+                   /* Get pointer to last char of previous word. */
+                   p = preword + sp->ts_prewordlen;
+                   mb_ptr_back(preword, p);
+***************
+*** 11697,11706 ****
+                       && (slang->sl_compsylmax < MAXWLEN
+                           || sp->ts_complen + 1 - sp->ts_compsplit
+                                                         < slang->sl_compmax)
+!                      && (byte_in_str(sp->ts_complen == sp->ts_compsplit
+!                                          ? slang->sl_compstartflags
+!                                          : slang->sl_compallflags,
+!                                                  ((unsigned)flags >> 24))))
+               {
+                   try_compound = TRUE;
+                   compflags[sp->ts_complen] = ((unsigned)flags >> 24);
+--- 11889,11897 ----
+                       && (slang->sl_compsylmax < MAXWLEN
+                           || sp->ts_complen + 1 - sp->ts_compsplit
+                                                         < slang->sl_compmax)
+!                      && (can_be_compound(sp, slang,
+!                                       compflags, ((unsigned)flags >> 24))))
+! 
+               {
+                   try_compound = TRUE;
+                   compflags[sp->ts_complen] = ((unsigned)flags >> 24);
+*** ../vim-7.2.059/src/version.c       Sun Nov 30 15:15:56 2008
+--- src/version.c      Sun Nov 30 21:09:23 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     60,
+  /**/
+
+-- 
+DEAD PERSON:  I'm getting better!
+CUSTOMER:     No, you're not -- you'll be stone dead in a moment.
+MORTICIAN:    Oh, I can't take him like that -- it's against regulations.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.061 b/7.2.061
new file mode 100644 (file)
index 0000000..787aa66
--- /dev/null
+++ b/7.2.061
@@ -0,0 +1,56 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.061
+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 7.2.061
+Problem:    Can't create a funcref for an autoload function without loading
+           the script first. (Marc Weber)
+Solution:   Accept autoload functions that don't exist yet in function().
+Files:     src/eval.c
+
+
+*** ../vim-7.2.060/src/eval.c  Fri Nov 28 21:26:50 2008
+--- src/eval.c Sat Nov 29 12:28:51 2008
+***************
+*** 10339,10345 ****
+      s = get_tv_string(&argvars[0]);
+      if (s == NULL || *s == NUL || VIM_ISDIGIT(*s))
+       EMSG2(_(e_invarg2), s);
+!     else if (!function_exists(s))
+       EMSG2(_("E700: Unknown function: %s"), s);
+      else
+      {
+--- 10339,10346 ----
+      s = get_tv_string(&argvars[0]);
+      if (s == NULL || *s == NUL || VIM_ISDIGIT(*s))
+       EMSG2(_(e_invarg2), s);
+!     /* Don't check an autoload name for existence here. */
+!     else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s))
+       EMSG2(_("E700: Unknown function: %s"), s);
+      else
+      {
+*** ../vim-7.2.060/src/version.c       Sun Nov 30 21:11:54 2008
+--- src/version.c      Wed Dec  3 09:49:07 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     61,
+  /**/
+
+-- 
+There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU,
+Linux, etc, and those who know COBOL.  It gets very difficult for me at
+parties, not knowing which group to socialise with :-)
+                                               Sitaram Chamarty
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.062 b/7.2.062
new file mode 100644 (file)
index 0000000..6b4b890
--- /dev/null
+++ b/7.2.062
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.062
+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 7.2.062
+Problem:    "[Scratch]" is not translated.
+Solution:   Mark the string for translation. (Dominique Pelle)
+Files:     src/buffer.c
+
+
+*** ../vim-7.2.061/src/buffer.c        Sat Nov 15 16:05:30 2008
+--- src/buffer.c       Tue Dec  2 21:51:02 2008
+***************
+*** 5118,5124 ****
+      {
+       if (buf->b_sfname != NULL)
+           return (char *)buf->b_sfname;
+!      return "[Scratch]";
+      }
+  #endif
+      if (buf->b_fname == NULL)
+--- 5118,5124 ----
+      {
+       if (buf->b_sfname != NULL)
+           return (char *)buf->b_sfname;
+!      return _("[Scratch]");
+      }
+  #endif
+      if (buf->b_fname == NULL)
+*** ../vim-7.2.061/src/version.c       Wed Dec  3 09:51:19 2008
+--- src/version.c      Wed Dec  3 11:20:30 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     62,
+  /**/
+
+-- 
+DENNIS:  Listen -- strange women lying in ponds distributing swords is no
+         basis for a system of government.  Supreme executive power derives
+         from a mandate from the masses, not from some farcical aquatic
+         ceremony.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.063 b/7.2.063
new file mode 100644 (file)
index 0000000..f951554
--- /dev/null
+++ b/7.2.063
@@ -0,0 +1,103 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.063
+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 7.2.063
+Problem:    Warning for NULL argument of Perl_sys_init3().
+Solution:   Use Perl_sys_init() instead. (partly by Dominique Pelle)
+Files:     src/if_perl.xs
+
+
+*** ../vim-7.2.062/src/if_perl.xs      Mon Sep  1 17:56:05 2008
+--- src/if_perl.xs     Wed Dec  3 12:44:38 2008
+***************
+*** 166,172 ****
+  # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr
+  # define boot_DynaLoader dll_boot_DynaLoader
+  
+! # define Perl_sys_init3 dll_Perl_sys_init3
+  # define Perl_sys_term dll_Perl_sys_term
+  # define Perl_ISv_ptr dll_Perl_ISv_ptr
+  # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr
+--- 166,172 ----
+  # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr
+  # define boot_DynaLoader dll_boot_DynaLoader
+  
+! # define Perl_sys_init dll_Perl_sys_init
+  # define Perl_sys_term dll_Perl_sys_term
+  # define Perl_ISv_ptr dll_Perl_ISv_ptr
+  # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr
+***************
+*** 272,278 ****
+  
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
+  static void (*Perl_sv_free2)(pTHX_ SV*);
+! static void (*Perl_sys_init3)(int* argc, char*** argv, char*** env);
+  static void (*Perl_sys_term)(void);
+  static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
+  static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
+--- 272,278 ----
+  
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
+  static void (*Perl_sv_free2)(pTHX_ SV*);
+! static void (*Perl_sys_init)(int* argc, char*** argv);
+  static void (*Perl_sys_term)(void);
+  static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
+  static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
+***************
+*** 372,378 ****
+      {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr},
+  #else
+      {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
+!     {"Perl_sys_init3", (PERL_PROC*)&Perl_sys_init3},
+      {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
+      {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
+      {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+--- 372,378 ----
+      {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr},
+  #else
+      {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
+!     {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
+      {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
+      {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
+      {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+***************
+*** 460,466 ****
+      static char *argv[] = { "", "-e", "" };
+  
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
+!     Perl_sys_init3(&argc, (char***)&argv, NULL);
+  #endif
+      perl_interp = perl_alloc();
+      perl_construct(perl_interp);
+--- 460,466 ----
+      static char *argv[] = { "", "-e", "" };
+  
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
+!     Perl_sys_init(&argc, (char***)&argv);
+  #endif
+      perl_interp = perl_alloc();
+      perl_construct(perl_interp);
+*** ../vim-7.2.062/src/version.c       Wed Dec  3 11:21:20 2008
+--- src/version.c      Wed Dec  3 12:42:50 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     63,
+  /**/
+
+-- 
+Windows
+M!uqoms
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.064 b/7.2.064
new file mode 100644 (file)
index 0000000..48ca877
--- /dev/null
+++ b/7.2.064
@@ -0,0 +1,66 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.064
+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 7.2.064
+Problem:    Screen update bug when repeating "~" on a Visual block and the
+           last line doesn't change.
+Solution:   Keep track of changes for all lines.  (Moritz Orbach)
+Files:     src/ops.c
+
+
+*** ../vim-7.2.063/src/ops.c   Tue Jun 24 23:59:55 2008
+--- src/ops.c  Wed Dec  3 13:12:06 2008
+***************
+*** 2209,2220 ****
+      {
+       for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
+       {
+           block_prep(oap, &bd, pos.lnum, FALSE);
+           pos.col = bd.textcol;
+!          did_change = swapchars(oap->op_type, &pos, bd.textlen);
+  
+  # ifdef FEAT_NETBEANS_INTG
+!          if (usingNetbeans && did_change)
+           {
+               char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
+  
+--- 2209,2223 ----
+      {
+       for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
+       {
++          int one_change;
++ 
+           block_prep(oap, &bd, pos.lnum, FALSE);
+           pos.col = bd.textcol;
+!          one_change = swapchars(oap->op_type, &pos, bd.textlen);
+!          did_change |= one_change;
+  
+  # ifdef FEAT_NETBEANS_INTG
+!          if (usingNetbeans && one_change)
+           {
+               char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
+  
+*** ../vim-7.2.063/src/version.c       Wed Dec  3 13:18:16 2008
+--- src/version.c      Wed Dec  3 13:14:46 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     64,
+  /**/
+
+-- 
+Q:   How many hardware engineers does it take to change a lightbulb?
+A:   None.  We'll fix it in software.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.065 b/7.2.065
new file mode 100644 (file)
index 0000000..d2cac84
--- /dev/null
+++ b/7.2.065
@@ -0,0 +1,177 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.065
+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 7.2.065
+Problem:    GTK GUI: the cursor disappears when doing ":vsp" and the Vim
+           window is maximized.  (Dominique Pelle, Denis Smolyar)
+Solution:   Don't change "Columns" back to an old value at a wrong moment.
+           Do change "Rows" when it should not be a problem.
+Files:     src/gui.c
+
+
+*** ../vim-7.2.064/src/gui.c   Fri Nov 28 21:26:50 2008
+--- src/gui.c  Wed Dec  3 18:01:21 2008
+***************
+*** 3241,3247 ****
+           i = Rows;
+           gui_update_tabline();
+           Rows = i;
+!          need_set_size = RESIZE_VERT;
+           if (using_tabline)
+               fix_size = TRUE;
+           if (!gui_use_tabline())
+--- 3241,3247 ----
+           i = Rows;
+           gui_update_tabline();
+           Rows = i;
+!          need_set_size |= RESIZE_VERT;
+           if (using_tabline)
+               fix_size = TRUE;
+           if (!gui_use_tabline())
+***************
+*** 3275,3283 ****
+               if (gui.which_scrollbars[i] != prev_which_scrollbars[i])
+               {
+                   if (i == SBAR_BOTTOM)
+!                      need_set_size = RESIZE_VERT;
+                   else
+!                      need_set_size = RESIZE_HOR;
+                   if (gui.which_scrollbars[i])
+                       fix_size = TRUE;
+               }
+--- 3275,3283 ----
+               if (gui.which_scrollbars[i] != prev_which_scrollbars[i])
+               {
+                   if (i == SBAR_BOTTOM)
+!                      need_set_size |= RESIZE_VERT;
+                   else
+!                      need_set_size |= RESIZE_HOR;
+                   if (gui.which_scrollbars[i])
+                       fix_size = TRUE;
+               }
+***************
+*** 3297,3303 ****
+           gui_mch_enable_menu(gui.menu_is_active);
+           Rows = i;
+           prev_menu_is_active = gui.menu_is_active;
+!          need_set_size = RESIZE_VERT;
+           if (gui.menu_is_active)
+               fix_size = TRUE;
+       }
+--- 3297,3303 ----
+           gui_mch_enable_menu(gui.menu_is_active);
+           Rows = i;
+           prev_menu_is_active = gui.menu_is_active;
+!          need_set_size |= RESIZE_VERT;
+           if (gui.menu_is_active)
+               fix_size = TRUE;
+       }
+***************
+*** 3308,3314 ****
+       {
+           gui_mch_show_toolbar(using_toolbar);
+           prev_toolbar = using_toolbar;
+!          need_set_size = RESIZE_VERT;
+           if (using_toolbar)
+               fix_size = TRUE;
+       }
+--- 3308,3314 ----
+       {
+           gui_mch_show_toolbar(using_toolbar);
+           prev_toolbar = using_toolbar;
+!          need_set_size |= RESIZE_VERT;
+           if (using_toolbar)
+               fix_size = TRUE;
+       }
+***************
+*** 3318,3324 ****
+       {
+           gui_mch_enable_footer(using_footer);
+           prev_footer = using_footer;
+!          need_set_size = RESIZE_VERT;
+           if (using_footer)
+               fix_size = TRUE;
+       }
+--- 3318,3324 ----
+       {
+           gui_mch_enable_footer(using_footer);
+           prev_footer = using_footer;
+!          need_set_size |= RESIZE_VERT;
+           if (using_footer)
+               fix_size = TRUE;
+       }
+***************
+*** 3330,3339 ****
+           prev_tearoff = using_tearoff;
+       }
+  #endif
+!      if (need_set_size)
+       {
+  #ifdef FEAT_GUI_GTK
+!          long    c = Columns;
+  #endif
+           /* Adjust the size of the window to make the text area keep the
+            * same size and to avoid that part of our window is off-screen
+--- 3330,3340 ----
+           prev_tearoff = using_tearoff;
+       }
+  #endif
+!      if (need_set_size != 0)
+       {
+  #ifdef FEAT_GUI_GTK
+!          long    prev_Columns = Columns;
+!          long    prev_Rows = Rows;
+  #endif
+           /* Adjust the size of the window to make the text area keep the
+            * same size and to avoid that part of our window is off-screen
+***************
+*** 3349,3359 ****
+            * If you remove this, please test this command for resizing
+            * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q".
+            * Don't do this while starting up though.
+!           * And don't change Rows, it may have be reduced intentionally
+!           * when adding menu/toolbar/tabline. */
+!          if (!gui.starting)
+               (void)char_avail();
+!          Columns = c;
+  #endif
+       }
+  #ifdef FEAT_WINDOWS
+--- 3350,3363 ----
+            * If you remove this, please test this command for resizing
+            * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q".
+            * Don't do this while starting up though.
+!           * Don't change Rows when adding menu/toolbar/tabline.
+!           * Don't change Columns when adding vertical toolbar. */
+!          if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR))
+               (void)char_avail();
+!          if ((need_set_size & RESIZE_VERT) == 0)
+!              Rows = prev_Rows;
+!          if ((need_set_size & RESIZE_HOR) == 0)
+!              Columns = prev_Columns;
+  #endif
+       }
+  #ifdef FEAT_WINDOWS
+*** ../vim-7.2.064/src/version.c       Wed Dec  3 13:38:00 2008
+--- src/version.c      Wed Dec  3 18:47:11 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     65,
+  /**/
+
+-- 
+Seen on the back of a biker's vest: If you can read this, my wife fell off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.066 b/7.2.066
new file mode 100644 (file)
index 0000000..a5991d4
--- /dev/null
+++ b/7.2.066
@@ -0,0 +1,70 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.066
+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 7.2.066
+Problem:    It's not easy to see whether 'encoding' is a multi-byte encoding.
+Solution:   Add has('multi_byte_encoding').
+Files:     runtime/doc/eval.txt, src/eval.c
+
+
+*** ../vim-7.2.065/runtime/doc/eval.txt        Fri Nov 28 11:15:10 2008
+--- runtime/doc/eval.txt       Tue Dec  9 10:55:59 2008
+***************
+*** 5841,5847 ****
+  mouse_pterm          Compiled with support for qnx pterm mouse.
+  mouse_sysmouse               Compiled with support for sysmouse (*BSD console mouse)
+  mouse_xterm          Compiled with support for xterm mouse.
+! multi_byte           Compiled with support for editing Korean et al.
+  multi_byte_ime               Compiled with support for IME input method.
+  multi_lang           Compiled with support for multiple languages.
+  mzscheme             Compiled with MzScheme interface |mzscheme|.
+--- 5852,5859 ----
+  mouse_pterm          Compiled with support for qnx pterm mouse.
+  mouse_sysmouse               Compiled with support for sysmouse (*BSD console mouse)
+  mouse_xterm          Compiled with support for xterm mouse.
+! multi_byte           Compiled with support for 'encoding'
+! multi_byte_encoding  'encoding' is set to a multi-byte encoding.
+  multi_byte_ime               Compiled with support for IME input method.
+  multi_lang           Compiled with support for multiple languages.
+  mzscheme             Compiled with MzScheme interface |mzscheme|.
+*** ../vim-7.2.065/src/eval.c  Wed Dec  3 09:51:19 2008
+--- src/eval.c Wed Dec  3 14:29:09 2008
+***************
+*** 11842,11847 ****
+--- 11842,11851 ----
+           n = has_patch(atoi((char *)name + 5));
+       else if (STRICMP(name, "vim_starting") == 0)
+           n = (starting != 0);
++ #ifdef FEAT_MBYTE
++      else if (STRICMP(name, "multi_byte_encoding") == 0)
++          n = has_mbyte;
++ #endif
+  #if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32)
+       else if (STRICMP(name, "balloon_multiline") == 0)
+           n = multiline_balloon_available();
+*** ../vim-7.2.065/src/version.c       Wed Dec  3 18:50:09 2008
+--- src/version.c      Tue Dec  9 10:48:49 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     66,
+  /**/
+
+-- 
+ARTHUR: Listen, old crone!  Unless you tell us where we can buy a shrubbery,
+        my friend and I will ... we will say "Ni!"
+CRONE:  Do your worst!
+                 "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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.067 b/7.2.067
new file mode 100644 (file)
index 0000000..079a053
--- /dev/null
+++ b/7.2.067
@@ -0,0 +1,52 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.067
+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 7.2.067
+Problem:    Session file can't load extra file when the path contains special
+           characters.
+Solution:   Escape the file name. (Lech Lorens)
+Files:     src/ex_docmd.c
+
+
+*** ../vim-7.2.066/src/ex_docmd.c      Fri Nov 28 21:26:50 2008
+--- src/ex_docmd.c     Fri Dec  5 21:34:11 2008
+***************
+*** 10106,10112 ****
+       */
+      if (put_line(fd, "let s:sx = expand(\"<sfile>:p:r\").\"x.vim\"") == FAIL
+           || put_line(fd, "if file_readable(s:sx)") == FAIL
+!          || put_line(fd, "  exe \"source \" . s:sx") == FAIL
+           || put_line(fd, "endif") == FAIL)
+       return FAIL;
+  
+--- 10106,10112 ----
+       */
+      if (put_line(fd, "let s:sx = expand(\"<sfile>:p:r\").\"x.vim\"") == FAIL
+           || put_line(fd, "if file_readable(s:sx)") == FAIL
+!          || put_line(fd, "  exe \"source \" . fnameescape(s:sx)") == FAIL
+           || put_line(fd, "endif") == FAIL)
+       return FAIL;
+  
+*** ../vim-7.2.066/src/version.c       Tue Dec  9 10:56:50 2008
+--- src/version.c      Tue Dec  9 11:16:27 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     67,
+  /**/
+
+-- 
+Life is a gift, living is an art.              (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.068 b/7.2.068
new file mode 100644 (file)
index 0000000..508bac1
--- /dev/null
+++ b/7.2.068
@@ -0,0 +1,101 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.068
+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 7.2.068
+Problem:    Emacs tags file lines can be too long, resulting in an error
+           message. (James Vega)
+Solution:   Ignore lines with errors if they are too long.
+Files:     src/tag.c
+
+
+*** ../vim-7.2.067/src/tag.c   Fri Jul 18 11:26:12 2008
+--- src/tag.c  Sat Dec  6 13:54:33 2008
+***************
+*** 2725,2731 ****
+--- 2725,2748 ----
+        */
+       p_7f = vim_strchr(lbuf, 0x7f);
+       if (p_7f == NULL)
++      {
++ etag_fail:
++          if (vim_strchr(lbuf, '\n') == NULL)
++          {
++              /* Truncated line.  Ignore it. */
++              if (p_verbose >= 5)
++              {
++                  verbose_enter();
++                  MSG(_("Ignoring long line in tags file"));
++                  verbose_leave();
++              }
++              tagp->command = lbuf;
++              tagp->tagname = lbuf;
++              tagp->tagname_end = lbuf;
++              return OK;
++          }
+           return FAIL;
++      }
+  
+       /* Find ^A.  If not found the line number is after the 0x7f */
+       p = vim_strchr(p_7f, Ctrl_A);
+***************
+*** 2735,2741 ****
+           ++p;
+  
+       if (!VIM_ISDIGIT(*p))       /* check for start of line number */
+!          return FAIL;
+       tagp->command = p;
+  
+  
+--- 2752,2758 ----
+           ++p;
+  
+       if (!VIM_ISDIGIT(*p))       /* check for start of line number */
+!          goto etag_fail;
+       tagp->command = p;
+  
+  
+***************
+*** 2749,2755 ****
+           /* find end of tagname */
+           for (p = p_7f - 1; !vim_iswordc(*p); --p)
+               if (p == lbuf)
+!                  return FAIL;
+           tagp->tagname_end = p + 1;
+           while (p >= lbuf && vim_iswordc(*p))
+               --p;
+--- 2766,2772 ----
+           /* find end of tagname */
+           for (p = p_7f - 1; !vim_iswordc(*p); --p)
+               if (p == lbuf)
+!                  goto etag_fail;
+           tagp->tagname_end = p + 1;
+           while (p >= lbuf && vim_iswordc(*p))
+               --p;
+*** ../vim-7.2.067/src/version.c       Tue Dec  9 11:17:23 2008
+--- src/version.c      Tue Dec  9 12:05:41 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     68,
+  /**/
+
+-- 
+Q: What do you call a fish without an eye?
+A: fsh!
+Q: What do you call a deer with no eyes?
+A: no eye deer.
+Q: What do you call a deer with no eyes and no legs?
+A: still no eye deer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.069 b/7.2.069
new file mode 100644 (file)
index 0000000..7714fae
--- /dev/null
+++ b/7.2.069
@@ -0,0 +1,52 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.069
+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 7.2.069 (after 7.2.060)
+Problem:    Compiler warning for storing size_t in int.
+Solution:   Add type cast.
+Files:      src/spell.c
+
+
+*** ../vim-7.2.068/src/spell.c Sun Nov 30 21:11:54 2008
+--- src/spell.c        Tue Dec  9 22:19:04 2008
+***************
+*** 1765,1771 ****
+           /* Second part matches at start of following compound word, now
+            * check if first part matches at end of previous word. */
+           p = ((char_u **)gap->ga_data)[i];
+!          len = STRLEN(p);
+           if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0)
+               return TRUE;
+       }
+--- 1765,1771 ----
+           /* Second part matches at start of following compound word, now
+            * check if first part matches at end of previous word. */
+           p = ((char_u **)gap->ga_data)[i];
+!          len = (int)STRLEN(p);
+           if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0)
+               return TRUE;
+       }
+*** ../vim-7.2.068/src/version.c       Tue Dec  9 12:12:31 2008
+--- src/version.c      Tue Dec  9 22:21:15 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     69,
+  /**/
+
+-- 
+The war between Emacs and Vi is over.  Vi has won with 3 to 1.
+                       http://www.ssc.com/lg/issue30/raymond.html
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.070 b/7.2.070
new file mode 100644 (file)
index 0000000..9a7edc7
--- /dev/null
+++ b/7.2.070
@@ -0,0 +1,566 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.070
+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 7.2.070
+Problem:    Crash when a function returns a:000. (Matt Wozkiski)
+Solution:   Don't put the function struct on the stack, allocate it.  Free it
+           only when nothing in it is used.
+Files:     src/eval.c
+
+
+*** ../vim-7.2.069/src/eval.c  Tue Dec  9 10:56:50 2008
+--- src/eval.c Wed Dec 17 21:32:26 2008
+***************
+*** 32,37 ****
+--- 32,40 ----
+  
+  #define DICT_MAXNEST 100     /* maximum nesting of lists and dicts */
+  
++ #define DO_NOT_FREE_CNT 99999        /* refcount for dict or list that should not
++                                 be freed. */
++ 
+  /*
+   * In a hashtab item "hi_key" points to "di_key" in a dictitem.
+   * This avoids adding a pointer to the hashtab item.
+***************
+*** 789,794 ****
+--- 792,799 ----
+  static void func_unref __ARGS((char_u *name));
+  static void func_ref __ARGS((char_u *name));
+  static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
++ static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
++ static void free_funccal __ARGS((funccall_T *fc, int free_val));
+  static void add_nr_var __ARGS((dict_T *dp, dictitem_T *v, char *name, varnumber_T nr));
+  static win_T *find_win_by_nr __ARGS((typval_T *vp, tabpage_T *tp));
+  static void getwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off));
+***************
+*** 923,928 ****
+--- 928,937 ----
+  /* pointer to funccal for currently active function */
+  funccall_T *current_funccal = NULL;
+  
++ /* pointer to list of previously used funccal, still around because some
++  * item in it is still being used. */
++ funccall_T *previous_funccal = NULL;
++ 
+  /*
+   * Return TRUE when a function was ended by a ":return" command.
+   */
+***************
+*** 6490,6496 ****
+      buf_T    *buf;
+      win_T    *wp;
+      int              i;
+!     funccall_T       *fc;
+      int              did_free = FALSE;
+  #ifdef FEAT_WINDOWS
+      tabpage_T        *tp;
+--- 6499,6505 ----
+      buf_T    *buf;
+      win_T    *wp;
+      int              i;
+!     funccall_T       *fc, **pfc;
+      int              did_free = FALSE;
+  #ifdef FEAT_WINDOWS
+      tabpage_T        *tp;
+***************
+*** 6574,6579 ****
+--- 6583,6602 ----
+       else
+           ll = ll->lv_used_next;
+  
++     /* check if any funccal can be freed now */
++     for (pfc = &previous_funccal; *pfc != NULL; )
++     {
++      if (can_free_funccal(*pfc, copyID))
++      {
++          fc = *pfc;
++          *pfc = fc->caller;
++          free_funccal(fc, TRUE);
++          did_free = TRUE;
++      }
++      else
++          pfc = &(*pfc)->caller;
++     }
++ 
+      return did_free;
+  }
+  
+***************
+*** 18962,18968 ****
+      dictitem_T       *dict_var;
+  {
+      hash_init(&dict->dv_hashtab);
+!     dict->dv_refcount = 99999;
+      dict_var->di_tv.vval.v_dict = dict;
+      dict_var->di_tv.v_type = VAR_DICT;
+      dict_var->di_tv.v_lock = VAR_FIXED;
+--- 18985,18991 ----
+      dictitem_T       *dict_var;
+  {
+      hash_init(&dict->dv_hashtab);
+!     dict->dv_refcount = DO_NOT_FREE_CNT;
+      dict_var->di_tv.vval.v_dict = dict;
+      dict_var->di_tv.v_type = VAR_DICT;
+      dict_var->di_tv.v_lock = VAR_FIXED;
+***************
+*** 19299,19304 ****
+--- 19322,19329 ----
+   * Copy the values from typval_T "from" to typval_T "to".
+   * When needed allocates string or increases reference count.
+   * Does not make a copy of a list or dict but copies the reference!
++  * It is OK for "from" and "to" to point to the same item.  This is used to
++  * make a copy later.
+   */
+      static void
+  copy_tv(from, to)
+***************
+*** 21111,21117 ****
+      char_u   *save_sourcing_name;
+      linenr_T save_sourcing_lnum;
+      scid_T   save_current_SID;
+!     funccall_T       fc;
+      int              save_did_emsg;
+      static int       depth = 0;
+      dictitem_T       *v;
+--- 21136,21142 ----
+      char_u   *save_sourcing_name;
+      linenr_T save_sourcing_lnum;
+      scid_T   save_current_SID;
+!     funccall_T       *fc;
+      int              save_did_emsg;
+      static int       depth = 0;
+      dictitem_T       *v;
+***************
+*** 21137,21172 ****
+  
+      line_breakcheck();               /* check for CTRL-C hit */
+  
+!     fc.caller = current_funccal;
+!     current_funccal = &fc;
+!     fc.func = fp;
+!     fc.rettv = rettv;
+      rettv->vval.v_number = 0;
+!     fc.linenr = 0;
+!     fc.returned = FALSE;
+!     fc.level = ex_nesting_level;
+      /* Check if this function has a breakpoint. */
+!     fc.breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
+!     fc.dbg_tick = debug_tick;
+  
+      /*
+!      * Note about using fc.fixvar[]: This is an array of FIXVAR_CNT variables
+       * with names up to VAR_SHORT_LEN long.  This avoids having to alloc/free
+       * each argument variable and saves a lot of time.
+       */
+      /*
+       * Init l: variables.
+       */
+!     init_var_dict(&fc.l_vars, &fc.l_vars_var);
+      if (selfdict != NULL)
+      {
+       /* Set l:self to "selfdict".  Use "name" to avoid a warning from
+        * some compiler that checks the destination size. */
+!      v = &fc.fixvar[fixvar_idx++].var;
+       name = v->di_key;
+       STRCPY(name, "self");
+       v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX;
+!      hash_add(&fc.l_vars.dv_hashtab, DI2HIKEY(v));
+       v->di_tv.v_type = VAR_DICT;
+       v->di_tv.v_lock = 0;
+       v->di_tv.vval.v_dict = selfdict;
+--- 21162,21198 ----
+  
+      line_breakcheck();               /* check for CTRL-C hit */
+  
+!     fc = (funccall_T *)alloc(sizeof(funccall_T));
+!     fc->caller = current_funccal;
+!     current_funccal = fc;
+!     fc->func = fp;
+!     fc->rettv = rettv;
+      rettv->vval.v_number = 0;
+!     fc->linenr = 0;
+!     fc->returned = FALSE;
+!     fc->level = ex_nesting_level;
+      /* Check if this function has a breakpoint. */
+!     fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
+!     fc->dbg_tick = debug_tick;
+  
+      /*
+!      * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables
+       * with names up to VAR_SHORT_LEN long.  This avoids having to alloc/free
+       * each argument variable and saves a lot of time.
+       */
+      /*
+       * Init l: variables.
+       */
+!     init_var_dict(&fc->l_vars, &fc->l_vars_var);
+      if (selfdict != NULL)
+      {
+       /* Set l:self to "selfdict".  Use "name" to avoid a warning from
+        * some compiler that checks the destination size. */
+!      v = &fc->fixvar[fixvar_idx++].var;
+       name = v->di_key;
+       STRCPY(name, "self");
+       v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX;
+!      hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v));
+       v->di_tv.v_type = VAR_DICT;
+       v->di_tv.v_lock = 0;
+       v->di_tv.vval.v_dict = selfdict;
+***************
+*** 21178,21208 ****
+       * Set a:0 to "argcount".
+       * Set a:000 to a list with room for the "..." arguments.
+       */
+!     init_var_dict(&fc.l_avars, &fc.l_avars_var);
+!     add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
+                               (varnumber_T)(argcount - fp->uf_args.ga_len));
+      /* Use "name" to avoid a warning from some compiler that checks the
+       * destination size. */
+!     v = &fc.fixvar[fixvar_idx++].var;
+      name = v->di_key;
+      STRCPY(name, "000");
+      v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
+!     hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
+      v->di_tv.v_type = VAR_LIST;
+      v->di_tv.v_lock = VAR_FIXED;
+!     v->di_tv.vval.v_list = &fc.l_varlist;
+!     vim_memset(&fc.l_varlist, 0, sizeof(list_T));
+!     fc.l_varlist.lv_refcount = 99999;
+!     fc.l_varlist.lv_lock = VAR_FIXED;
+  
+      /*
+       * Set a:firstline to "firstline" and a:lastline to "lastline".
+       * Set a:name to named arguments.
+       * Set a:N to the "..." arguments.
+       */
+!     add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "firstline",
+                                                     (varnumber_T)firstline);
+!     add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "lastline",
+                                                      (varnumber_T)lastline);
+      for (i = 0; i < argcount; ++i)
+      {
+--- 21204,21234 ----
+       * Set a:0 to "argcount".
+       * Set a:000 to a list with room for the "..." arguments.
+       */
+!     init_var_dict(&fc->l_avars, &fc->l_avars_var);
+!     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
+                               (varnumber_T)(argcount - fp->uf_args.ga_len));
+      /* Use "name" to avoid a warning from some compiler that checks the
+       * destination size. */
+!     v = &fc->fixvar[fixvar_idx++].var;
+      name = v->di_key;
+      STRCPY(name, "000");
+      v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
+!     hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
+      v->di_tv.v_type = VAR_LIST;
+      v->di_tv.v_lock = VAR_FIXED;
+!     v->di_tv.vval.v_list = &fc->l_varlist;
+!     vim_memset(&fc->l_varlist, 0, sizeof(list_T));
+!     fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT;
+!     fc->l_varlist.lv_lock = VAR_FIXED;
+  
+      /*
+       * Set a:firstline to "firstline" and a:lastline to "lastline".
+       * Set a:name to named arguments.
+       * Set a:N to the "..." arguments.
+       */
+!     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline",
+                                                     (varnumber_T)firstline);
+!     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline",
+                                                      (varnumber_T)lastline);
+      for (i = 0; i < argcount; ++i)
+      {
+***************
+*** 21218,21224 ****
+       }
+       if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN)
+       {
+!          v = &fc.fixvar[fixvar_idx++].var;
+           v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
+       }
+       else
+--- 21244,21250 ----
+       }
+       if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN)
+       {
+!          v = &fc->fixvar[fixvar_idx++].var;
+           v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
+       }
+       else
+***************
+*** 21230,21236 ****
+           v->di_flags = DI_FLAGS_RO;
+       }
+       STRCPY(v->di_key, name);
+!      hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
+  
+       /* Note: the values are copied directly to avoid alloc/free.
+        * "argvars" must have VAR_FIXED for v_lock. */
+--- 21256,21262 ----
+           v->di_flags = DI_FLAGS_RO;
+       }
+       STRCPY(v->di_key, name);
+!      hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
+  
+       /* Note: the values are copied directly to avoid alloc/free.
+        * "argvars" must have VAR_FIXED for v_lock. */
+***************
+*** 21239,21247 ****
+  
+       if (ai >= 0 && ai < MAX_FUNC_ARGS)
+       {
+!          list_append(&fc.l_varlist, &fc.l_listitems[ai]);
+!          fc.l_listitems[ai].li_tv = argvars[i];
+!          fc.l_listitems[ai].li_tv.v_lock = VAR_FIXED;
+       }
+      }
+  
+--- 21265,21273 ----
+  
+       if (ai >= 0 && ai < MAX_FUNC_ARGS)
+       {
+!          list_append(&fc->l_varlist, &fc->l_listitems[ai]);
+!          fc->l_listitems[ai].li_tv = argvars[i];
+!          fc->l_listitems[ai].li_tv.v_lock = VAR_FIXED;
+       }
+      }
+  
+***************
+*** 21306,21312 ****
+       if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
+           func_do_profile(fp);
+       if (fp->uf_profiling
+!                     || (fc.caller != NULL && fc.caller->func->uf_profiling))
+       {
+           ++fp->uf_tm_count;
+           profile_start(&call_start);
+--- 21332,21338 ----
+       if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
+           func_do_profile(fp);
+       if (fp->uf_profiling
+!                  || (fc->caller != NULL && fc->caller->func->uf_profiling))
+       {
+           ++fp->uf_tm_count;
+           profile_start(&call_start);
+***************
+*** 21322,21328 ****
+      did_emsg = FALSE;
+  
+      /* call do_cmdline() to execute the lines */
+!     do_cmdline(NULL, get_func_line, (void *)&fc,
+                                    DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
+  
+      --RedrawingDisabled;
+--- 21348,21354 ----
+      did_emsg = FALSE;
+  
+      /* call do_cmdline() to execute the lines */
+!     do_cmdline(NULL, get_func_line, (void *)fc,
+                                    DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
+  
+      --RedrawingDisabled;
+***************
+*** 21337,21352 ****
+  
+  #ifdef FEAT_PROFILE
+      if (do_profiling == PROF_YES && (fp->uf_profiling
+!                  || (fc.caller != NULL && fc.caller->func->uf_profiling)))
+      {
+       profile_end(&call_start);
+       profile_sub_wait(&wait_start, &call_start);
+       profile_add(&fp->uf_tm_total, &call_start);
+       profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
+!      if (fc.caller != NULL && fc.caller->func->uf_profiling)
+       {
+!          profile_add(&fc.caller->func->uf_tm_children, &call_start);
+!          profile_add(&fc.caller->func->uf_tml_children, &call_start);
+       }
+      }
+  #endif
+--- 21363,21378 ----
+  
+  #ifdef FEAT_PROFILE
+      if (do_profiling == PROF_YES && (fp->uf_profiling
+!                  || (fc->caller != NULL && fc->caller->func->uf_profiling)))
+      {
+       profile_end(&call_start);
+       profile_sub_wait(&wait_start, &call_start);
+       profile_add(&fp->uf_tm_total, &call_start);
+       profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
+!      if (fc->caller != NULL && fc->caller->func->uf_profiling)
+       {
+!          profile_add(&fc->caller->func->uf_tm_children, &call_start);
+!          profile_add(&fc->caller->func->uf_tml_children, &call_start);
+       }
+      }
+  #endif
+***************
+*** 21359,21367 ****
+  
+       if (aborting())
+           smsg((char_u *)_("%s aborted"), sourcing_name);
+!      else if (fc.rettv->v_type == VAR_NUMBER)
+           smsg((char_u *)_("%s returning #%ld"), sourcing_name,
+!                                             (long)fc.rettv->vval.v_number);
+       else
+       {
+           char_u      buf[MSG_BUF_LEN];
+--- 21385,21393 ----
+  
+       if (aborting())
+           smsg((char_u *)_("%s aborted"), sourcing_name);
+!      else if (fc->rettv->v_type == VAR_NUMBER)
+           smsg((char_u *)_("%s returning #%ld"), sourcing_name,
+!                                             (long)fc->rettv->vval.v_number);
+       else
+       {
+           char_u      buf[MSG_BUF_LEN];
+***************
+*** 21372,21378 ****
+           /* The value may be very long.  Skip the middle part, so that we
+            * have some idea how it starts and ends. smsg() would always
+            * truncate it at the end. */
+!          s = tv2string(fc.rettv, &tofree, numbuf2, 0);
+           if (s != NULL)
+           {
+               trunc_string(s, buf, MSG_BUF_CLEN);
+--- 21398,21404 ----
+           /* The value may be very long.  Skip the middle part, so that we
+            * have some idea how it starts and ends. smsg() would always
+            * truncate it at the end. */
+!          s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+           if (s != NULL)
+           {
+               trunc_string(s, buf, MSG_BUF_CLEN);
+***************
+*** 21408,21421 ****
+      }
+  
+      did_emsg |= save_did_emsg;
+!     current_funccal = fc.caller;
+  
+!     /* The a: variables typevals were not allocated, only free the allocated
+!      * variables. */
+!     vars_clear_ext(&fc.l_avars.dv_hashtab, FALSE);
+  
+!     vars_clear(&fc.l_vars.dv_hashtab);               /* free all l: variables */
+!     --depth;
+  }
+  
+  /*
+--- 21434,21517 ----
+      }
+  
+      did_emsg |= save_did_emsg;
+!     current_funccal = fc->caller;
+!     --depth;
+  
+!     /* if the a:000 list and the a: dict are not referenced we can free the
+!      * funccall_T and what's in it. */
+!     if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT
+!          && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT
+!          && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT)
+!     {
+!      free_funccal(fc, FALSE);
+!     }
+!     else
+!     {
+!      hashitem_T      *hi;
+!      listitem_T      *li;
+!      int             todo;
+  
+!      /* "fc" is still in use.  This can happen when returning "a:000" or
+!       * assigning "l:" to a global variable.
+!       * Link "fc" in the list for garbage collection later. */
+!      fc->caller = previous_funccal;
+!      previous_funccal = fc;
+! 
+!      /* Make a copy of the a: variables, since we didn't do that above. */
+!      todo = (int)fc->l_avars.dv_hashtab.ht_used;
+!      for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi)
+!      {
+!          if (!HASHITEM_EMPTY(hi))
+!          {
+!              --todo;
+!              v = HI2DI(hi);
+!              copy_tv(&v->di_tv, &v->di_tv);
+!          }
+!      }
+! 
+!      /* Make a copy of the a:000 items, since we didn't do that above. */
+!      for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
+!          copy_tv(&li->li_tv, &li->li_tv);
+!     }
+! }
+! 
+! /*
+!  * Return TRUE if items in "fc" do not have "copyID".  That means they are not
+!  * referenced from anywyere.
+!  */
+!     static int
+! can_free_funccal(fc, copyID)
+!     funccall_T       *fc;
+!     int              copyID;
+! {
+!     return (fc->l_varlist.lv_copyID != copyID
+!          && fc->l_vars.dv_copyID != copyID
+!          && fc->l_avars.dv_copyID != copyID);
+! }
+! 
+! /*
+!  * Free "fc" and what it contains.
+!  */
+!    static void
+! free_funccal(fc, free_val)
+!     funccall_T       *fc;
+!     int              free_val;  /* a: vars were allocated */
+! {
+!     listitem_T       *li;
+! 
+!     /* The a: variables typevals may not have been allocated, only free the
+!      * allocated variables. */
+!     vars_clear_ext(&fc->l_avars.dv_hashtab, free_val);
+! 
+!     /* free all l: variables */
+!     vars_clear(&fc->l_vars.dv_hashtab);
+! 
+!     /* Free the a:000 variables if they were allocated. */
+!     if (free_val)
+!      for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
+!          clear_tv(&li->li_tv);
+! 
+!     vim_free(fc);
+  }
+  
+  /*
+*** ../vim-7.2.069/src/version.c       Tue Dec  9 22:34:02 2008
+--- src/version.c      Sun Dec 21 12:47:07 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     70,
+  /**/
+
+-- 
+Close your shells, or I'll kill -9 you
+Tomorrow I'll quota you
+Remember the disks'll always be full
+And then while I'm away
+I'll write ~ everyday
+And I'll send-pr all my buggings to you.
+    [ CVS log "Beatles style" for FreeBSD ports/INDEX, Satoshi Asami ]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.071 b/7.2.071
new file mode 100644 (file)
index 0000000..0a1e513
--- /dev/null
+++ b/7.2.071
@@ -0,0 +1,81 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.071
+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 7.2.071 (extra)
+Problem:    Win32: Handling netbeans events while Vim is busy updating the
+           screen may cause a crash.
+Solution:   Like with GTK, only handle netbeans messages in the main loop.
+           (Xavier de Gaye)
+Files:     src/gui_w48.c, src/netbeans.c
+
+
+*** ../vim-7.2.070/src/gui_w48.c       Thu Nov 20 17:09:09 2008
+--- src/gui_w48.c      Thu Dec 11 23:47:18 2008
+***************
+*** 1937,1942 ****
+--- 1937,1947 ----
+           s_need_activate = FALSE;
+       }
+  
++ #ifdef FEAT_NETBEANS_INTG
++      /* Process the queued netbeans messages. */
++      netbeans_parse_messages();
++ #endif
++ 
+       /*
+        * Don't use gui_mch_update() because then we will spin-lock until a
+        * char arrives, instead we use GetMessage() to hang until an
+*** ../vim-7.2.070/src/netbeans.c      Fri Nov 28 21:26:50 2008
+--- src/netbeans.c     Sun Nov 30 12:07:00 2008
+***************
+*** 769,779 ****
+       return; /* don't try to parse it */
+      }
+  
+! #ifdef FEAT_GUI_GTK
+      if (gtk_main_level() > 0)
+       gtk_main_quit();
+  #else
+!     /* Parse the messages, but avoid recursion. */
+      if (level == 1)
+       netbeans_parse_messages();
+  
+--- 769,782 ----
+       return; /* don't try to parse it */
+      }
+  
+! #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)
+!     /* Let the main loop handle messages. */
+! # ifdef FEAT_GUI_GTK
+      if (gtk_main_level() > 0)
+       gtk_main_quit();
++ # endif
+  #else
+!     /* Parse the messages now, but avoid recursion. */
+      if (level == 1)
+       netbeans_parse_messages();
+  
+*** ../vim-7.2.070/src/version.c       Sun Dec 21 13:02:47 2008
+--- src/version.c      Wed Dec 24 12:18:59 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     71,
+  /**/
+
+-- 
+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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.072 b/7.2.072
new file mode 100644 (file)
index 0000000..712d673
--- /dev/null
+++ b/7.2.072
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.072 (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 7.2.072 (extra)
+Problem:    Compiler warning in Sniff code.
+Solution:   Use return value of pipe(). (Dominique Pelle)
+Files:     src/if_sniff.c
+
+
+*** ../vim-7.2.071/src/if_sniff.c      Sat Nov 15 14:11:10 2008
+--- src/if_sniff.c     Sat Dec  6 14:01:57 2008
+***************
+*** 716,723 ****
+  #else                /* UNIX Version of the Code */
+      int ToSniffEmacs[2], FromSniffEmacs[2];
+  
+!     pipe(ToSniffEmacs);
+!     pipe(FromSniffEmacs);
+  
+      /* fork */
+      if ((sniffemacs_pid=fork()) == 0)
+--- 714,723 ----
+  #else                /* UNIX Version of the Code */
+      int ToSniffEmacs[2], FromSniffEmacs[2];
+  
+!     if (pipe(ToSniffEmacs) != 0)
+!      return 1;
+!     if (pipe(FromSniffEmacs) != 0)
+!      return 1;
+  
+      /* fork */
+      if ((sniffemacs_pid=fork()) == 0)
+*** ../vim-7.2.071/src/version.c       Wed Dec 24 12:20:10 2008
+--- src/version.c      Wed Dec 24 12:42:13 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     72,
+  /**/
+
+-- 
+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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.073 b/7.2.073
new file mode 100644 (file)
index 0000000..16f1297
--- /dev/null
+++ b/7.2.073
@@ -0,0 +1,135 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.073
+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 7.2.073
+Problem:    ":set <xHome>" has the same output as ":set <Home>". (Matt
+           Wozniski)
+Solution:   Don't translate "x" keys to its alternative for ":set".
+Files:     src/misc2.c, src/option.c, src/proto/misc2.pro
+
+
+*** ../vim-7.2.072/src/misc2.c Wed Nov 12 13:07:48 2008
+--- src/misc2.c        Sun Dec 14 12:28:47 2008
+***************
+*** 2561,2567 ****
+      int              key;
+      int              dlen = 0;
+  
+!     key = find_special_key(srcp, &modifiers, keycode);
+      if (key == 0)
+       return 0;
+  
+--- 2561,2567 ----
+      int              key;
+      int              dlen = 0;
+  
+!     key = find_special_key(srcp, &modifiers, keycode, FALSE);
+      if (key == 0)
+       return 0;
+  
+***************
+*** 2597,2606 ****
+   * returns 0 if there is no match.
+   */
+      int
+! find_special_key(srcp, modp, keycode)
+      char_u   **srcp;
+      int              *modp;
+!     int              keycode; /* prefer key code, e.g. K_DEL instead of DEL */
+  {
+      char_u   *last_dash;
+      char_u   *end_of_name;
+--- 2597,2607 ----
+   * returns 0 if there is no match.
+   */
+      int
+! find_special_key(srcp, modp, keycode, keep_x_key)
+      char_u   **srcp;
+      int              *modp;
+!     int              keycode;     /* prefer key code, e.g. K_DEL instead of DEL */
+!     int              keep_x_key;  /* don't translate xHome to Home key */
+  {
+      char_u   *last_dash;
+      char_u   *end_of_name;
+***************
+*** 2668,2674 ****
+           else
+           {
+               key = get_special_key_code(last_dash + 1);
+!              key = handle_x_keys(key);
+           }
+  
+           /*
+--- 2669,2676 ----
+           else
+           {
+               key = get_special_key_code(last_dash + 1);
+!              if (!keep_x_key)
+!                  key = handle_x_keys(key);
+           }
+  
+           /*
+*** ../vim-7.2.072/src/option.c        Fri Nov 28 21:26:50 2008
+--- src/option.c       Sun Dec 14 12:28:56 2008
+***************
+*** 8328,8334 ****
+      {
+       --arg;                      /* put arg at the '<' */
+       modifiers = 0;
+!      key = find_special_key(&arg, &modifiers, TRUE);
+       if (modifiers)              /* can't handle modifiers here */
+           key = 0;
+      }
+--- 8328,8334 ----
+      {
+       --arg;                      /* put arg at the '<' */
+       modifiers = 0;
+!      key = find_special_key(&arg, &modifiers, TRUE, TRUE);
+       if (modifiers)              /* can't handle modifiers here */
+           key = 0;
+      }
+*** ../vim-7.2.072/src/proto/misc2.pro Thu Jul 24 20:29:37 2008
+--- src/proto/misc2.pro        Sun Dec 14 12:29:05 2008
+***************
+*** 59,65 ****
+  int handle_x_keys __ARGS((int key));
+  char_u *get_special_key_name __ARGS((int c, int modifiers));
+  int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
+! int find_special_key __ARGS((char_u **srcp, int *modp, int keycode));
+  int extract_modifiers __ARGS((int key, int *modp));
+  int find_special_key_in_table __ARGS((int c));
+  int get_special_key_code __ARGS((char_u *name));
+--- 59,65 ----
+  int handle_x_keys __ARGS((int key));
+  char_u *get_special_key_name __ARGS((int c, int modifiers));
+  int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
+! int find_special_key __ARGS((char_u **srcp, int *modp, int keycode, int keep_x_key));
+  int extract_modifiers __ARGS((int key, int *modp));
+  int find_special_key_in_table __ARGS((int c));
+  int get_special_key_code __ARGS((char_u *name));
+*** ../vim-7.2.072/src/version.c       Wed Dec 24 12:43:15 2008
+--- src/version.c      Wed Dec 24 12:51:26 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     73,
+  /**/
+
+
+-- 
+ARTHUR: If you do not open these doors, we will take this castle by force ...
+   [A bucket of slops land on ARTHUR.  He tries to retain his dignity.]
+                 "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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.074 b/7.2.074
new file mode 100644 (file)
index 0000000..6000fca
--- /dev/null
+++ b/7.2.074
@@ -0,0 +1,54 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.074 (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 7.2.074 (extra, after 7.2.073)
+Problem:    ":set <xHome>" has the same output as ":set <Home>". (Matt
+           Wozniski)
+Solution:   Don't translate "x" keys to its alternative for ":set".
+Files:     src/gui_mac.c
+
+
+*** ../vim-7.2.073/src/gui_mac.c       Sat Aug  9 19:37:28 2008
+--- src/gui_mac.c      Sun Dec 14 12:28:26 2008
+***************
+*** 4966,4972 ****
+       char_u      *p_actext;
+  
+       p_actext = menu->actext;
+!      key = find_special_key(&p_actext, &modifiers, /*keycode=*/0);
+       if (*p_actext != 0)
+           key = 0; /* error: trailing text */
+       /* find_special_key() returns a keycode with as many of the
+--- 4966,4972 ----
+       char_u      *p_actext;
+  
+       p_actext = menu->actext;
+!      key = find_special_key(&p_actext, &modifiers, FALSE, FALSE);
+       if (*p_actext != 0)
+           key = 0; /* error: trailing text */
+       /* find_special_key() returns a keycode with as many of the
+*** ../vim-7.2.073/src/version.c       Wed Dec 24 12:53:33 2008
+--- src/version.c      Wed Dec 24 12:55:42 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     74,
+  /**/
+
+-- 
+   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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.075 b/7.2.075
new file mode 100644 (file)
index 0000000..4bec708
--- /dev/null
+++ b/7.2.075
@@ -0,0 +1,58 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.075
+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 7.2.075 (after 7.2.058)
+Problem:    Explanation about making a diff for extra_patches is unclear.
+Solution:   Adjust comment.
+Files:     src/version.c
+
+
+*** ../vim-7.2.074/src/version.c       Wed Dec 24 13:04:41 2008
+--- src/version.c      Wed Dec 24 13:07:47 2008
+***************
+*** 833,839 ****
+   * Keep it short, e.g.,: "relative numbers", "persistent undo".
+   * Also add a comment marker to separate the lines.
+   * See the official Vim patches for the diff format: It must use a context of
+!  * one line only.  Use "diff -C2".
+   */
+  static char *(extra_patches[]) =
+  {   /* Add your patch description below this line */
+--- 835,841 ----
+   * Keep it short, e.g.,: "relative numbers", "persistent undo".
+   * Also add a comment marker to separate the lines.
+   * See the official Vim patches for the diff format: It must use a context of
+!  * one line only.  Create it by hand or use "diff -C2" and edit the patch.
+   */
+  static char *(extra_patches[]) =
+  {   /* Add your patch description below this line */
+*** ../vim-7.2.074/src/version.c       Wed Dec 24 13:04:41 2008
+--- src/version.c      Wed Dec 24 13:07:47 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     75,
+  /**/
+
+-- 
+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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.407245 seconds and 4 git commands to generate.