--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.3.030
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.3.030
+Problem: GTK 2: Crash when sourcing a script that deletes the menus, sets
+ 'encoding' to "utf-8" and loads the menus again. GTK error
+ message when tooltip text is in a wrong encoding.
+Solution: Don't copy characters from the old screen to the new screen when
+ switching 'encoding' to utf-8, they may be invalid. Only set the
+ tooltip when it is valid utf-8.
+Files: src/gui_gtk.c, src/mbyte.c, src/proto/mbyte.pro, src/screen.c
+
+
+*** ../vim-6.3.029/src/gui_gtk.c Wed Jun 9 14:56:25 2004
+--- src/gui_gtk.c Thu Oct 7 16:27:43 2004
+***************
+*** 749,754 ****
+--- 749,758 ----
+
+ text = CONVERT_TO_UTF8(menu->dname);
+ tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]);
++ if (tooltip != NULL && !utf_valid_string(tooltip, NULL))
++ /* Invalid text, can happen when 'encoding' is changed. Avoid
++ * a nasty GTK error message, skip the tooltip. */
++ CONVERT_TO_UTF8_FREE(tooltip);
+
+ menu->id = gtk_toolbar_insert_item(
+ toolbar,
+***************
+*** 993,998 ****
+--- 997,1004 ----
+
+ # ifdef HAVE_GTK2
+ tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]);
++ if (tooltip == NULL || utf_valid_string(tooltip, NULL))
++ /* Only set the tooltip when it's valid utf-8. */
+ # else
+ tooltip = menu->strings[MENU_INDEX_TIP];
+ # endif
+*** ../vim-6.3.029/src/mbyte.c Wed Jun 9 14:56:27 2004
+--- src/mbyte.c Thu Oct 7 19:27:45 2004
+***************
+*** 2467,2472 ****
+--- 2467,2502 ----
+ return 1 - dbcs_head_off(base, p);
+ }
+
++ #if (defined(HAVE_GTK2) && defined(FEAT_TOOLBAR)) || defined(PROTO)
++ /*
++ * Return TRUE if string "s" is a valid utf-8 string.
++ * When "end" is NULL stop at the first NUL.
++ * When "end" is positive stop there.
++ */
++ int
++ utf_valid_string(s, end)
++ char_u *s;
++ char_u *end;
++ {
++ int l;
++ char_u *p = s;
++
++ while (end == NULL ? *p != NUL : p < end)
++ {
++ if ((*p & 0xc0) == 0x80)
++ return FALSE; /* invalid lead byte */
++ l = utf8len_tab[*p];
++ if (end != NULL && p + l > end)
++ return FALSE; /* incomplete byte sequence */
++ ++p;
++ while (--l > 0)
++ if ((*p++ & 0xc0) != 0x80)
++ return FALSE; /* invalid trail byte */
++ }
++ return TRUE;
++ }
++ #endif
++
+ #if defined(FEAT_GUI) || defined(PROTO)
+ /*
+ * Special version of mb_tail_off() for use in ScreenLines[].
+*** ../vim-6.3.029/src/proto/mbyte.pro Wed Jun 9 14:56:24 2004
+--- src/proto/mbyte.pro Thu Oct 7 16:36:38 2004
+***************
+*** 47,52 ****
+--- 47,53 ----
+ int utf_head_off __ARGS((char_u *base, char_u *p));
+ int mb_off_next __ARGS((char_u *base, char_u *p));
+ int mb_tail_off __ARGS((char_u *base, char_u *p));
++ int utf_valid_string __ARGS((char_u *s, char_u *end));
+ int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+ void mb_adjust_cursor __ARGS((void));
+ void mb_adjustpos __ARGS((pos_T *lp));
+*** ../vim-6.3.029/src/screen.c Wed Jun 9 14:56:26 2004
+--- src/screen.c Thu Oct 7 15:40:54 2004
+***************
+*** 6608,6616 ****
+ len = screen_Columns;
+ else
+ len = Columns;
+! mch_memmove(new_ScreenLines + new_LineOffset[new_row],
+! ScreenLines + LineOffset[old_row],
+! (size_t)len * sizeof(schar_T));
+ #ifdef FEAT_MBYTE
+ if (enc_utf8 && ScreenLinesUC != NULL)
+ {
+--- 6608,6621 ----
+ len = screen_Columns;
+ else
+ len = Columns;
+! #ifdef FEAT_MBYTE
+! /* When switching to utf-8 don't copy characters, they
+! * may be invalid now. */
+! if (!(enc_utf8 && ScreenLinesUC == NULL))
+! #endif
+! mch_memmove(new_ScreenLines + new_LineOffset[new_row],
+! ScreenLines + LineOffset[old_row],
+! (size_t)len * sizeof(schar_T));
+ #ifdef FEAT_MBYTE
+ if (enc_utf8 && ScreenLinesUC != NULL)
+ {
+*** ../vim-6.3.029/src/version.c Tue Oct 5 17:02:41 2004
+--- src/version.c Thu Oct 7 20:05:58 2004
+***************
+*** 643,644 ****
+--- 643,646 ----
+ { /* Add new patch number below this line */
++ /**/
++ 30,
+ /**/
+
+--
+From "know your smileys":
+ :-E Has major dental problems
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.3.031
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.3.031
+Problem: When entering a mapping and pressing Tab halfway the command line
+ isn't redrawn properly. (Adri Verhoef)
+Solution: Reposition the cursor after drawing over the "..." of the
+ completion attempt.
+Files: src/ex_getln.c
+
+
+*** ../vim-6.3.030/src/ex_getln.c Sun Sep 5 20:48:38 2004
+--- src/ex_getln.c Tue Oct 19 19:37:30 2004
+***************
+*** 2892,2897 ****
+--- 2892,2898 ----
+ vim_free(p2);
+
+ redrawcmd();
++ cursorcmd();
+
+ /* When expanding a ":map" command and no matches are found, assume that
+ * the key is supposed to be inserted literally */
+*** ../vim-6.3.030/src/version.c Thu Oct 7 20:07:59 2004
+--- src/version.c Fri Oct 22 11:44:35 2004
+***************
+*** 643,644 ****
+--- 643,646 ----
+ { /* Add new patch number below this line */
++ /**/
++ 31,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+225. You sign up for free subscriptions for all the computer magazines
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.3.032
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.3.032
+Problem: Using Python 2.3 with threads doesn't work properly.
+Solution: Release the lock after initialization.
+Files: src/if_python.c
+
+
+*** ../vim-6.3.031/src/if_python.c Wed Jun 9 14:56:26 2004
+--- src/if_python.c Thu Nov 18 10:01:02 2004
+***************
+*** 380,386 ****
+ typedef PyObject PyThreadState;
+ #endif /* Python 1.4 */
+
+- #ifndef PY_CAN_RECURSE
+ static PyThreadState* saved_python_thread = NULL;
+
+ /*
+--- 380,385 ----
+***************
+*** 392,397 ****
+--- 391,397 ----
+ saved_python_thread = PyEval_SaveThread();
+ }
+
++ #ifndef PY_CAN_RECURSE
+ /*
+ * Restore a thread of the Python interpreter, waits for other threads to
+ * block.
+***************
+*** 456,465 ****
+ if (PythonMod_Init())
+ goto fail;
+
+! #ifndef PY_CAN_RECURSE
+! /* the first python thread is vim's */
+ Python_SaveThread();
+- #endif
+
+ initialised = 1;
+ }
+--- 456,463 ----
+ if (PythonMod_Init())
+ goto fail;
+
+! /* the first python thread is vim's, release the lock */
+ Python_SaveThread();
+
+ initialised = 1;
+ }
+*** ../vim-6.3.032/src/version.c Fri Oct 22 11:45:17 2004
+--- src/version.c Thu Nov 18 10:43:17 2004
+***************
+*** 643,644 ****
+--- 643,646 ----
+ { /* Add new patch number below this line */
++ /**/
++ 32,
+ /**/
+
+
+--
+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/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 6.3.033
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.3.033
+Problem: When a mapping ends in a Normal mode command of more than one
+ character Vim doesn't return to Insert mode.
+Solution: Check that the mapping has ended after obtaining all characters of
+ the Normal mode command.
+Files: src/normal.c
+
+
+*** ../vim-6.3.032/src/normal.c Fri Aug 27 21:14:50 2004
+--- src/normal.c Thu Nov 18 10:34:43 2004
+***************
+*** 1124,1129 ****
+--- 1124,1134 ----
+ #endif
+ }
+
++ /* get the length of mapped chars again after typing a count, second
++ * character or "z333<cr>". */
++ if (old_mapped_len > 0)
++ old_mapped_len = typebuf_maplen();
++
+ /*
+ * If an operation is pending, handle it...
+ */
+*** ../vim-6.3.032/src/version.c Thu Nov 18 10:47:38 2004
+--- src/version.c Thu Nov 18 10:45:02 2004
+***************
+*** 643,644 ****
+--- 643,646 ----
+ { /* Add new patch number below this line */
++ /**/
++ 33,
+ /**/
+
+--
+"A mouse can be just as dangerous as a bullet or a bomb."
+ (US Representative Lamar Smith, R-Texas)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ Project leader for A-A-P -- http://www.A-A-P.org ///
+ \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///