updated for version 7.0e04
diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt
index 106c767..d2a3e28 100644
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -143,8 +143,7 @@
 Visual C++ 2005 Express Edition
 -------------------------------
 
-Visual C++ 2005 Express Edition can be downloaded for free
-before November 2006 from
+Visual C++ 2005 Express Edition can be downloaded for free from:
     http://msdn.microsoft.com/vstudio/express/visualC/default.aspx
 This includes the IDE and the debugger. You will also need
 |ms-platform-sdk|. You can build Vim with Make_mvc.mak.
diff --git a/src/auto/configure b/src/auto/configure
index ed5ea56..7a308a7 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -8986,8 +8986,9 @@
 
 
 
+
 for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-		   Xm/UnhighlightT.h
+		   Xm/UnhighlightT.h Xm/Notebook.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
diff --git a/src/config.h.in b/src/config.h.in
index 8e0863a..9b42b92 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -239,6 +239,7 @@
 #undef HAVE_XM_MANAGER_H
 #undef HAVE_XM_UNHIGHLIGHTT_H
 #undef HAVE_XM_JOINSIDET_H
+#undef HAVE_XM_NOTEBOOK_H
 #undef HAVE_X11_XPM_H
 #undef HAVE_X11_XMU_EDITRES_H
 #undef HAVE_X11_SM_SMLIB_H
diff --git a/src/configure.in b/src/configure.in
index 21a5f80..6a1a56f 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -1901,7 +1901,7 @@
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-		   Xm/UnhighlightT.h)
+		   Xm/UnhighlightT.h Xm/Notebook.h)
 
   if test $ac_cv_header_Xm_XpmP_h = yes; then
     dnl Solaris uses XpmAttributes_21, very annoying.
diff --git a/src/eval.c b/src/eval.c
index 1f208b9..1e75a31 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -8863,7 +8863,6 @@
 	    ExpandInit(&xpc);
 	    xpc.xp_context = EXPAND_FILES;
 	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
-	    ExpandCleanup(&xpc);
 	}
 	else
 	    rettv->vval.v_string = NULL;
@@ -10397,7 +10396,6 @@
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
 				     NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
-    ExpandCleanup(&xpc);
 }
 
 /*
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 27c44ff..4943bfc 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -4371,7 +4371,6 @@
 		    p = ExpandOne(&xpc, eap->arg, NULL,
 					    WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
 						   WILD_EXPAND_FREE);
-		    ExpandCleanup(&xpc);
 		    if (p == NULL)
 			return FAIL;
 		}
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 10f3355..ce48b67 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -3260,7 +3260,8 @@
  * Return a pointer to alloced memory containing the new string.
  * Return NULL for failure.
  *
- * Results are cached in xp->xp_files and xp->xp_numfiles.
+ * Results are cached in xp->xp_files and xp->xp_numfiles, except when "mode"
+ * is WILD_EXPAND_FREE or WILD_ALL.
  *
  * mode = WILD_FREE:	    just free previously expanded matches
  * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches
diff --git a/src/feature.h b/src/feature.h
index fdd7a29..82508fd 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -753,7 +753,8 @@
 /*
  * GUI tabline
  */
-#if defined(FEAT_WINDOWS) && (defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MOTIF)\
+#if defined(FEAT_WINDOWS) && (defined(FEAT_GUI_GTK) \
+	|| (defined(FEAT_GUI_MOTIF) && defined(HAVE_XM_NOTEBOOK_H)) \
 	|| (defined(FEAT_GUI_MSWIN) && (!defined(_MSC_VER) || _MSC_VER > 1020)))
 # define FEAT_GUI_TABLINE
 #endif
diff --git a/src/gui.c b/src/gui.c
index c377a35..755c20c 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -3491,7 +3491,7 @@
 /*
  * Send the event for clicking to select tab page "nr".
  * Returns TRUE if it was done, FALSE when skipped because we are already at
- * that tab page.
+ * that tab page or the cmdline window is open.
  */
     int
 send_tabline_event(nr)
@@ -3501,6 +3501,14 @@
 
     if (nr == tabpage_index(curtab))
 	return FALSE;
+# ifdef FEAT_CMDWIN
+    if (cmdwin_type != 0)
+    {
+	/* Set it back to the current tab page. */
+	gui_mch_set_curtab(tabpage_index(curtab));
+	return FALSE;
+    }
+# endif
     string[0] = CSI;
     string[1] = KS_TABLINE;
     string[2] = KE_FILLER;
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 762d30c..4ebc121 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -48,6 +48,11 @@
 
 /* Vim's Scrap flavor. */
 #define VIMSCRAPFLAVOR 'VIM!'
+#ifdef FEAT_MBYTE
+# define SCRAPTEXTFLAVOR kScrapFlavorTypeUnicode
+#else
+# define SCRAPTEXTFLAVOR kScrapFlavorTypeText
+#endif
 
 static EventHandlerUPP mouseWheelHandlerUPP = NULL;
 SInt32 gMacSystemVersion;
@@ -4427,69 +4432,65 @@
 
     if (flavor == 0)
     {
-	error = GetScrapFlavorFlags(scrap, kScrapFlavorTypeUnicode, &scrapFlags);
+	error = GetScrapFlavorFlags(scrap, SCRAPTEXTFLAVOR, &scrapFlags);
 	if (error != noErr)
 	    return;
 
-	error = GetScrapFlavorSize(scrap, kScrapFlavorTypeUnicode, &scrapSize);
+	error = GetScrapFlavorSize(scrap, SCRAPTEXTFLAVOR, &scrapSize);
 	if (error != noErr)
 	    return;
     }
 
     ReserveMem(scrapSize);
 
-    {
-	/* In CARBON we don't need a Handle, a pointer is good */
-	textOfClip = NewHandle(scrapSize);
-	/* tempclip = lalloc(scrapSize+1, TRUE); */
-	HLock(textOfClip);
-	error = GetScrapFlavorData(scrap,
-		flavor ? VIMSCRAPFLAVOR : kScrapFlavorTypeUnicode,
-		&scrapSize, *textOfClip);
-	scrapSize -= flavor;
+    /* In CARBON we don't need a Handle, a pointer is good */
+    textOfClip = NewHandle(scrapSize);
 
-	if (flavor)
-	    type = **textOfClip;
-	else
-	    type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+    /* tempclip = lalloc(scrapSize+1, TRUE); */
+    HLock(textOfClip);
+    error = GetScrapFlavorData(scrap,
+	    flavor ? VIMSCRAPFLAVOR : SCRAPTEXTFLAVOR,
+	    &scrapSize, *textOfClip);
+    scrapSize -= flavor;
 
-	tempclip = lalloc(scrapSize + 1, TRUE);
-#if defined(FEAT_MBYTE)
-	mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
-#else
-	STRNCPY(tempclip, *textOfClip + flavor, scrapSize);
-#endif
-	tempclip[scrapSize] = 0;
+    if (flavor)
+	type = **textOfClip;
+    else
+	type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+
+    tempclip = lalloc(scrapSize + 1, TRUE);
+    mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+    tempclip[scrapSize] = 0;
 
 #ifdef MACOS_CONVERT
+    {
 	/* Convert from utf-16 (clipboard) */
 	size_t encLen = 0;
 	char_u *to = mac_utf16_to_enc((UniChar *)tempclip, scrapSize, &encLen);
-	if (to)
+
+	if (to != NULL)
 	{
 	    scrapSize = encLen;
 	    vim_free(tempclip);
 	    tempclip = to;
 	}
+    }
 #endif
 
-	searchCR = (char *)tempclip;
-	while (searchCR != NULL)
-	{
-	    searchCR = strchr(searchCR, '\r');
-
-	    if (searchCR != NULL)
-		searchCR[0] = '\n';
-
-	}
-
-	clip_yank_selection(type, tempclip, scrapSize, cbd);
-
-	vim_free(tempclip);
-	HUnlock(textOfClip);
-
-	DisposeHandle(textOfClip);
+    searchCR = (char *)tempclip;
+    while (searchCR != NULL)
+    {
+	searchCR = strchr(searchCR, '\r');
+	if (searchCR != NULL)
+	    *searchCR = '\n';
     }
+
+    clip_yank_selection(type, tempclip, scrapSize, cbd);
+
+    vim_free(tempclip);
+    HUnlock(textOfClip);
+
+    DisposeHandle(textOfClip);
 }
 
     void
@@ -4527,12 +4528,10 @@
     /*
      * Once we set the clipboard, lose ownership.  If another application sets
      * the clipboard, we don't want to think that we still own it.
-     *
      */
-
     cbd->owned = FALSE;
 
-    type = clip_convert_selection(&str, (long_u *) &scrapSize, cbd);
+    type = clip_convert_selection(&str, (long_u *)&scrapSize, cbd);
 
 #ifdef MACOS_CONVERT
     size_t utf16_len = 0;
@@ -4555,7 +4554,7 @@
 	**textOfClip = type;
 	mch_memmove(*textOfClip + 1, str, scrapSize);
 	GetCurrentScrap(&scrap);
-	PutScrapFlavor(scrap, kScrapFlavorTypeUnicode, kScrapFlavorMaskNone,
+	PutScrapFlavor(scrap, SCRAPTEXTFLAVOR, kScrapFlavorMaskNone,
 		scrapSize, *textOfClip + 1);
 	PutScrapFlavor(scrap, VIMSCRAPFLAVOR, kScrapFlavorMaskNone,
 		scrapSize + 1, *textOfClip);
diff --git a/src/gui_motif.c b/src/gui_motif.c
index 7eb5758..9e28be2 100644
--- a/src/gui_motif.c
+++ b/src/gui_motif.c
@@ -26,7 +26,6 @@
 #include <Xm/LabelG.h>
 #include <Xm/ToggleBG.h>
 #include <Xm/SeparatoG.h>
-#include <Xm/Notebook.h>
 #include <Xm/XmP.h>
 
 #include <X11/keysym.h>
@@ -43,6 +42,9 @@
 #  include <Xm/XpmP.h>
 # endif
 #endif
+#ifdef HAVE_XM_NOTEBOOK_H
+# include <Xm/Notebook.h>
+#endif
 
 #include "gui_xmebw.h"	/* for our Enhanced Button Widget */
 
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 13e0324..6e4ec1a 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -2296,18 +2296,26 @@
     int		curtabidx = 0;
     RECT	rc;
 #ifdef FEAT_MBYTE
+    static int	use_unicode = FALSE;
+    int		uu;
     WCHAR	*wstr = NULL;
 #endif
 
     if (s_tabhwnd == NULL)
 	return;
 
-#if defined(FEAT_MBYTE) && defined(CCM_SETUNICODEFORMAT)
-    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-	/*
-	 * Enable unicode support
-	 */
-	SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)TRUE, (LPARAM)0);
+#if defined(FEAT_MBYTE)
+# ifndef CCM_SETUNICODEFORMAT
+    /* For older compilers.  We assume this never changes. */
+#  define CCM_SETUNICODEFORMAT 0x2005
+# endif
+    uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
+    if (uu != use_unicode)
+    {
+	/* Enable/disable unicode support */
+	SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
+	use_unicode = uu;
+    }
 #endif
 
     tie.mask = TCIF_TEXT;
@@ -2330,7 +2338,7 @@
 	tie.pszText = NameBuff;
 #ifdef FEAT_MBYTE
 	wstr = NULL;
-	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	if (use_unicode)
 	{
 	    /* Need to go through Unicode. */
 	    wstr = enc_to_ucs2(NameBuff, NULL);
diff --git a/src/memline.c b/src/memline.c
index 9284abb..e86a792 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -1532,7 +1532,7 @@
 			files[i] = files[i + 1];
 		}
 	}
-	if (nr)
+	if (nr > 0)
 	{
 	    file_count += num_files;
 	    if (nr <= file_count)
@@ -1578,7 +1578,8 @@
 
 	for (i = 0; i < num_names; ++i)
 	    vim_free(names[i]);
-	FreeWild(num_files, files);
+	if (num_files > 0)
+	    FreeWild(num_files, files);
     }
     vim_free(dir_name);
     return file_count;
diff --git a/src/menu.c b/src/menu.c
index b4f06d2..55fba1f 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -2336,20 +2336,23 @@
 	    {
 		tp = (menutrans_T *)menutrans_ga.ga_data;
 		from = vim_strsave(from);
-		from_noamp = menu_text(from, NULL, NULL);
-		to = vim_strnsave(to, (int)(arg - to));
-		if (from != NULL && from_noamp != NULL && to != NULL)
+		if (from != NULL)
 		{
-		    tp[menutrans_ga.ga_len].from = from;
-		    tp[menutrans_ga.ga_len].from_noamp = from_noamp;
-		    tp[menutrans_ga.ga_len].to = to;
-		    ++menutrans_ga.ga_len;
-		}
-		else
-		{
-		    vim_free(from);
-		    vim_free(from_noamp);
-		    vim_free(to);
+		    from_noamp = menu_text(from, NULL, NULL);
+		    to = vim_strnsave(to, (int)(arg - to));
+		    if (from_noamp != NULL && to != NULL)
+		    {
+			tp[menutrans_ga.ga_len].from = from;
+			tp[menutrans_ga.ga_len].from_noamp = from_noamp;
+			tp[menutrans_ga.ga_len].to = to;
+			++menutrans_ga.ga_len;
+		    }
+		    else
+		    {
+			vim_free(from);
+			vim_free(from_noamp);
+			vim_free(to);
+		    }
 		}
 	    }
 	}
diff --git a/src/misc1.c b/src/misc1.c
index 7d86e46..67a2fc0 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3625,7 +3625,6 @@
 		    xpc.xp_context = EXPAND_FILES;
 		    var = ExpandOne(&xpc, dst, NULL,
 				WILD_ADD_SLASH|WILD_SILENT, WILD_EXPAND_FREE);
-		    ExpandCleanup(&xpc);
 		    mustfree = TRUE;
 		}
 
@@ -9363,7 +9362,7 @@
     int	    count;
     char_u  **files;
 {
-    if (files == NULL || count <= 0)
+    if (count <= 0 || files == NULL)
 	return;
 #if defined(__EMX__) && defined(__ALWAYS_HAS_TRAILING_NULL_POINTER) /* XXX */
     /*
diff --git a/src/option.c b/src/option.c
index 29ab1ef..cfca188 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2996,35 +2996,44 @@
      * 'maxmemtot' and 'maxmem' may have to be adjusted for available memory
      */
     opt_idx = findoption((char_u *)"maxmemtot");
-#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
-    if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
-#endif
+    if (opt_idx >= 0)
     {
+#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
+	if (options[opt_idx].def_val[VI_DEFAULT] == (char_u *)0L)
+#endif
+	{
 #ifdef HAVE_AVAIL_MEM
-	/* Use amount of memory available at this moment. */
-	n = (mch_avail_mem(FALSE) >> 11);
+	    /* Use amount of memory available at this moment. */
+	    n = (mch_avail_mem(FALSE) >> 11);
 #else
 # ifdef HAVE_TOTAL_MEM
-	/* Use amount of memory available to Vim. */
-	n = (mch_total_mem(FALSE) >> 11);
+	    /* Use amount of memory available to Vim. */
+	    n = (mch_total_mem(FALSE) >> 11);
 # else
-	n = (0x7fffffff >> 11);
+	    n = (0x7fffffff >> 11);
 # endif
 #endif
-	options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
-	opt_idx = findoption((char_u *)"maxmem");
-#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
-	if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
-			  || (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
-#endif
 	    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+	    opt_idx = findoption((char_u *)"maxmem");
+	    if (opt_idx >= 0)
+	    {
+#if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
+		if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
+			|| (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
+#endif
+		    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
+	    }
+	}
     }
 
 #ifdef FEAT_GUI_W32
     /* force 'shortname' for Win32s */
     if (gui_is_win32s())
-	options[findoption((char_u *)"shortname")].def_val[VI_DEFAULT] =
-							       (char_u *)TRUE;
+    {
+	opt_idx = findoption((char_u *)"shortname");
+	if (opt_idx >= 0)
+	    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)TRUE;
+    }
 #endif
 
 #ifdef FEAT_SEARCHPATH
@@ -3057,8 +3066,11 @@
 		}
 		buf[j] = NUL;
 		opt_idx = findoption((char_u *)"cdpath");
-		options[opt_idx].def_val[VI_DEFAULT] = buf;
-		options[opt_idx].flags |= P_DEF_ALLOCED;
+		if (opt_idx >= 0)
+		{
+		    options[opt_idx].def_val[VI_DEFAULT] = buf;
+		    options[opt_idx].flags |= P_DEF_ALLOCED;
+		}
 	    }
 	    if (mustfree)
 		vim_free(cdpath);
@@ -3259,8 +3271,11 @@
 	if (mb_init() == NULL)
 	{
 	    opt_idx = findoption((char_u *)"encoding");
-	    options[opt_idx].def_val[VI_DEFAULT] = p_enc;
-	    options[opt_idx].flags |= P_DEF_ALLOCED;
+	    if (opt_idx >= 0)
+	    {
+		options[opt_idx].def_val[VI_DEFAULT] = p_enc;
+		options[opt_idx].flags |= P_DEF_ALLOCED;
+	    }
 
 #if defined(MSDOS) || defined(MSWIN) || defined(OS2) || defined(MACOS) \
 		|| defined(VMS)
@@ -3278,9 +3293,11 @@
 		set_string_option_direct((char_u *)"isk", -1,
 					      ISK_LATIN1, OPT_FREE, SID_NONE);
 		opt_idx = findoption((char_u *)"isp");
-		options[opt_idx].def_val[VIM_DEFAULT] = ISP_LATIN1;
+		if (opt_idx >= 0)
+		    options[opt_idx].def_val[VIM_DEFAULT] = ISP_LATIN1;
 		opt_idx = findoption((char_u *)"isk");
-		options[opt_idx].def_val[VIM_DEFAULT] = ISK_LATIN1;
+		if (opt_idx >= 0)
+		    options[opt_idx].def_val[VIM_DEFAULT] = ISK_LATIN1;
 		(void)init_chartab();
 	    }
 #endif
@@ -3297,8 +3314,11 @@
 		if (p_tenc != NULL)
 		{
 		    opt_idx = findoption((char_u *)"termencoding");
-		    options[opt_idx].def_val[VI_DEFAULT] = p_tenc;
-		    options[opt_idx].flags |= P_DEF_ALLOCED;
+		    if (opt_idx >= 0)
+		    {
+			options[opt_idx].def_val[VI_DEFAULT] = p_tenc;
+			options[opt_idx].flags |= P_DEF_ALLOCED;
+		    }
 		    convert_setup(&input_conv, p_tenc, p_enc);
 		    convert_setup(&output_conv, p_enc, p_tenc);
 		}
@@ -3436,10 +3456,13 @@
     if (p != NULL)		/* we don't want a NULL */
     {
 	opt_idx = findoption((char_u *)name);
-	if (options[opt_idx].flags & P_DEF_ALLOCED)
-	    vim_free(options[opt_idx].def_val[VI_DEFAULT]);
-	options[opt_idx].def_val[VI_DEFAULT] = p;
-	options[opt_idx].flags |= P_DEF_ALLOCED;
+	if (opt_idx >= 0)
+	{
+	    if (options[opt_idx].flags & P_DEF_ALLOCED)
+		vim_free(options[opt_idx].def_val[VI_DEFAULT]);
+	    options[opt_idx].def_val[VI_DEFAULT] = p;
+	    options[opt_idx].flags |= P_DEF_ALLOCED;
+	}
     }
 }
 
@@ -3452,7 +3475,11 @@
     char	*name;
     long	val;
 {
-    options[findoption((char_u *)name)].def_val[VI_DEFAULT] = (char_u *)val;
+    int		opt_idx;
+
+    opt_idx = findoption((char_u *)name);
+    if (opt_idx >= 0)
+	options[opt_idx].def_val[VI_DEFAULT] = (char_u *)val;
 }
 
 #if defined(EXITFREE) || defined(PROTO)
@@ -3498,7 +3525,7 @@
      */
     set_number_default("scroll", (long)((long_u)Rows >> 1));
     idx = findoption((char_u *)"scroll");
-    if (!(options[idx].flags & P_WAS_SET))
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
 	set_option_default(idx, OPT_LOCAL, p_cp);
     comp_col();
 
@@ -3507,7 +3534,7 @@
      * Default is Rows - 1.
      */
     idx = findoption((char_u *)"wi");
-    if (!(options[idx].flags & P_WAS_SET))
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
 	p_window = Rows - 1;
     set_number_default("window", Rows - 1);
 
@@ -3519,7 +3546,8 @@
      * with a dark background, that can handle color.
      */
     idx = findoption((char_u *)"bg");
-    if (!(options[idx].flags & P_WAS_SET) && *term_bg_default() == 'd')
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET)
+						 && *term_bg_default() == 'd')
     {
 	set_string_option_direct(NULL, idx, (char_u *)"dark", OPT_FREE, 0);
 	/* don't mark it as set, when starting the GUI it may be
@@ -3594,10 +3622,16 @@
 #endif
 
     idx_srr = findoption((char_u *)"srr");
-    do_srr = !(options[idx_srr].flags & P_WAS_SET);
+    if (idx_srr < 0)
+	do_srr = FALSE;
+    else
+	do_srr = !(options[idx_srr].flags & P_WAS_SET);
 #ifdef FEAT_QUICKFIX
     idx_sp = findoption((char_u *)"sp");
-    do_sp = !(options[idx_sp].flags & P_WAS_SET);
+    if (idx_sp < 0)
+	do_sp = FALSE;
+    else
+	do_sp = !(options[idx_sp].flags & P_WAS_SET);
 #endif
 
     /*
@@ -3692,7 +3726,7 @@
 	int	idx3;
 
 	idx3 = findoption((char_u *)"shcf");
-	if (!(options[idx3].flags & P_WAS_SET))
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
 	{
 	    p_shcf = (char_u *)"-c";
 	    options[idx3].def_val[VI_DEFAULT] = p_shcf;
@@ -3702,14 +3736,14 @@
 #  ifdef WIN3264
 	/* Somehow Win32 requires the quotes around the redirection too */
 	idx3 = findoption((char_u *)"sxq");
-	if (!(options[idx3].flags & P_WAS_SET))
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
 	{
 	    p_sxq = (char_u *)"\"";
 	    options[idx3].def_val[VI_DEFAULT] = p_sxq;
 	}
 #  else
 	idx3 = findoption((char_u *)"shq");
-	if (!(options[idx3].flags & P_WAS_SET))
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
 	{
 	    p_shq = (char_u *)"\"";
 	    options[idx3].def_val[VI_DEFAULT] = p_shq;
@@ -3738,7 +3772,7 @@
     if (lang == NULL || STRLEN(lang) < 2)	/* safety check */
 	return;
     idx = findoption((char_u *)"hlg");
-    if (!(options[idx].flags & P_WAS_SET))
+    if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
     {
 	if (options[idx].flags & P_ALLOCED)
 	    free_string_option(p_hlg);
@@ -3807,7 +3841,7 @@
      * not need to be contacted.
      */
     idx1 = findoption((char_u *)"title");
-    if (!(options[idx1].flags & P_WAS_SET))
+    if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET))
     {
 #ifdef FEAT_GUI
 	if (gui.starting || gui.in_use)
@@ -3819,7 +3853,7 @@
 	p_title = val;
     }
     idx1 = findoption((char_u *)"icon");
-    if (!(options[idx1].flags & P_WAS_SET))
+    if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET))
     {
 #ifdef FEAT_GUI
 	if (gui.starting || gui.in_use)
@@ -5224,7 +5258,7 @@
     if (opt_idx == -1)		/* use name */
     {
 	opt_idx = findoption(name);
-	if (opt_idx == -1)	/* not found (should not happen) */
+	if (opt_idx < 0)	/* not found (should not happen) */
 	{
 	    EMSG2(_(e_intern2), "set_string_option_direct()");
 	    return;
@@ -8127,7 +8161,7 @@
     long_u	flags;
 
     opt_idx = findoption(name);
-    if (opt_idx == -1)
+    if (opt_idx < 0)
 	EMSG2(_("E355: Unknown option: %s"), name);
     else
     {
@@ -9464,7 +9498,8 @@
     curbuf->b_p_ma = FALSE;
     p_ma = FALSE;
     opt_idx = findoption((char_u *)"ma");
-    options[opt_idx].def_val[VI_DEFAULT] = FALSE;
+    if (opt_idx >= 0)
+	options[opt_idx].def_val[VI_DEFAULT] = FALSE;
 }
 
 /*
@@ -10297,12 +10332,16 @@
 change_compatible(on)
     int	    on;
 {
+    int	    opt_idx;
+
     if (p_cp != on)
     {
 	p_cp = on;
 	compatible_set();
     }
-    options[findoption((char_u *)"cp")].flags |= P_WAS_SET;
+    opt_idx = findoption((char_u *)"cp");
+    if (opt_idx >= 0)
+	options[opt_idx].flags |= P_WAS_SET;
 }
 
 /*
diff --git a/src/po/de.po b/src/po/de.po
index eee8e2e..046e2ea 100644
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -4999,8 +4999,8 @@
 msgstr "E397: Dateiname wird benötigt"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Fehlende ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Fehlende ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/fr.po b/src/po/fr.po
index 3bf94ba..f7bc907 100644
--- a/src/po/fr.po
+++ b/src/po/fr.po
@@ -71,8 +71,15 @@
 # 			  - Hundreds of error messages numbers added (wow)
 # 2006-04-15    DB      Vim 7.0 first draft, based on fr.po 7.0c03
 #                         - 285 new messages.
+# 2006-05-17    DB      VIM 7.0 second draft, still 7.0c03
+#                         - (check.vim) Fixed 2 wrong translated messages.
+# 2006-05-19    DB      VIM 7.0 second draft, 7.0e02
+#                         - 15 new messages.
+# 2006-05-19    DB      VIM 7.0, based on 7.0e03
+#                         - (check.vim) Fixed wrong messages.
+#                         - header comment of this file should be updated.
 #
-# Translated:	 1677/1677 (100.00%)
+# Translated:	 1692/1692 (100.00%)
 #
 # Polishing done on:
 #  buffer.c
@@ -94,7 +101,7 @@
 "Project-Id-Version: Vim(Français)\n"
 "Report-Msgid-Bugs-To: Adrien Beau <version.francaise@free.fr>\n"
 "POT-Creation-Date: 2006-04-01 17:09+0200\n"
-"PO-Revision-Date: 2006-04-15 22:53+0200\n"
+"PO-Revision-Date: 2006-04-21 00:31+0200\n"
 "Last-Translator: David Blanchet <david.blanchet@free.fr>\n"
 "Language-Team: Adrien Beau <version.francaise@free.fr>\n"
 "MIME-Version: 1.0\n"
@@ -110,7 +117,7 @@
 #      explicite.
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr ""
-"E83: L'allocation du tampon a échoué: arrêtez Vim, libérez de la mémoire"
+"E83: L'allocation du tampon a échoué : arrêtez Vim, libérez de la mémoire"
 
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Aucun tampon n'a été déchargé"
@@ -327,6 +334,9 @@
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Le tampon %s n'est pas en mode diff"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Le tampon a été modifié inopinément"
+
 # AB - Je cherche une traduction plus concise pour "escape".
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Un digraphe ne peut contenir le caractère d'échappement"
@@ -346,8 +356,8 @@
 
 # DB - todo : Faut-il une majuscule à "mode" ?
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
-msgstr " mode ^X (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " mode ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Complètement de ligne entière (^L^N^P)"
@@ -388,8 +398,8 @@
 msgid " Omni completion (^O^N^P)"
 msgstr " Complètement selon le type de fichier (Omni) (^O^N^P)"
 
-msgid " Spelling suggestion (^S^N^P)"
-msgstr " Suggestion d'orthographe (^S^N^P)"
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Suggestion d'orthographe (s^N^P)"
 
 msgid " Keyword Local completion (^N^P)"
 msgstr " Complètement local de mot-clé (^N/^P)"
@@ -656,6 +666,22 @@
 msgid "E724: variable nested too deep for displaying"
 msgstr "E724: variable trop imbriquée pour être afficher"
 
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: Fonction inconnue : %s"
+
+#, c-format
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: La fonction %s n'a pas reçu assez d'arguments"
+
+#, c-format
+msgid "E120: Using <SID> not in a script context: %s"
+msgstr "E120: <SID> utilisé en dehors d'un script : %s"
+
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Appel d'une fonction « dict » sans Dictionnaire : %s"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Trop d'arguments"
 
@@ -696,8 +722,8 @@
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() a été appelé plus de fois qu'inputsave()"
 
-msgid "E745: Range not allowed"
-msgstr "E745: Les plages ne sont pas autorisés"
+msgid "E786: Range not allowed"
+msgstr "E786: Les plages ne sont pas autorisés"
 
 msgid "E701: Invalid type for len()"
 msgstr "E701: Type invalide avec len()"
@@ -1200,7 +1226,8 @@
 
 msgid "E146: Regular expressions can't be delimited by letters"
 msgstr ""
-"E146: Les expressions régulières ne peuvent pas être délimitées par des lettres"
+"E146: Les expressions régulières ne peuvent pas être délimitées par des "
+"lettres"
 
 #, c-format
 msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
@@ -1266,7 +1293,6 @@
 msgid "E478: Don't panic!"
 msgstr "E478: Pas de panique !"
 
-# DB - c-format : langue de l'aide puis sujet de l'aide.
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
 msgstr "E661: Désolé, aucune aide en langue '%s' pour %s"
@@ -1304,7 +1330,7 @@
 # DB - Suggestion.
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Marqueur \"%s\" dupliqué fichier %s/%s"
+msgstr "E154: Marqueur \"%s\" dupliqué dans le fichier %s/%s"
 
 # AB - Il faut respecter l'esprit plus que la lettre.
 #, c-format
@@ -1375,9 +1401,8 @@
 msgid "E464: Ambiguous use of user-defined command"
 msgstr "E464: Utilisation ambigüe d'une commande définie par l'utilisateur"
 
-# DB - Espace final car Vim peut ajouter ": <informations>" à la suite
 msgid "E492: Not an editor command"
-msgstr "E492: Commande inconnue "
+msgstr "E492: Commande inconnue"
 
 msgid "E493: Backwards range given"
 msgstr "E493: La plage spécifiée est inversée"
@@ -1444,8 +1469,7 @@
 msgstr "E182: Nom de commande invalide"
 
 msgid "E183: User defined commands must start with an uppercase letter"
-msgstr ""
-"E183: Les commandes utilisateur doivent commencer par une majuscule"
+msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule"
 
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -1487,11 +1511,10 @@
 msgid "Append File"
 msgstr "Ajouter fichier"
 
-# DB - todo : le messages d'aide (":h E747") n'a rien à voir...
 msgid "E747: Cannot change directory, buffer is modifed (add ! to override)"
 msgstr ""
-"E747: Tampon modifié : impossible de changer de répertoire (ajoutez ! "
-"pour passer outre)"
+"E747: Tampon modifié : impossible de changer de répertoire (ajoutez ! pour "
+"passer outre)"
 
 msgid "E186: No previous directory"
 msgstr "E186: Pas de répertoire précédent"
@@ -1555,8 +1578,7 @@
 msgstr "E496: Aucun numéro de tampon d'autocommande à substituer à \"<abuf>\""
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr ""
-"E497: Aucune correspondance d'autocommande à substituer à \"<amatch>\""
+msgstr "E497: Aucune correspondance d'autocommande à substituer à \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: Aucun nom de fichier :source à substituer à \"<sfile>\""
@@ -1664,12 +1686,15 @@
 msgid "E603: :catch without :try"
 msgstr "E603: :catch sans :try"
 
+#. Give up for a ":catch" after ":finally" and ignore it.
+#. * Just parse.
 msgid "E604: :catch after :finally"
 msgstr "E604: :catch après :finally"
 
 msgid "E606: :finally without :try"
 msgstr "E606: :finally sans :try"
 
+#. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
 msgstr "E607: Il ne peut y avoir qu'un seul :finally"
 
@@ -1679,6 +1704,9 @@
 msgid "E193: :endfunction not inside a function"
 msgstr "E193: :endfunction en dehors d'une fonction"
 
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: L'édition d'un autre tampon n'est plus permise"
+
 # DB - TODO : Pas compris le message ni comment le déclencher malgré une visite
 #      dans le code.
 msgid "tagname"
@@ -1754,6 +1782,7 @@
 msgid "Reading from stdin..."
 msgstr "Lecture de stdin..."
 
+#. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
 msgstr "E202: La conversion a rendu le fichier illisible !"
 
@@ -1831,17 +1860,15 @@
 msgstr "est en lecture seule (ajoutez ! pour passer outre)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr ""
-"E506: Impossible d'écrire la copie de secours (! pour passer outre)"
+msgstr "E506: Impossible d'écrire la copie de secours (! pour passer outre)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr ""
-"E507: Erreur de fermeture de la copie de secours (! pour passer outre)"
+msgstr "E507: Erreur de fermeture de la copie de secours (! pour passer outre)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
 msgstr ""
-"E508: Impossible de lire le fichier pour la copie de secours (ajoutez ! "
-"pour passer outre)"
+"E508: Impossible de lire le fichier pour la copie de secours (ajoutez ! pour "
+"passer outre)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
 msgstr ""
@@ -1963,6 +1990,9 @@
 msgid "[Incomplete last line]"
 msgstr "[Dernière ligne incomplète]"
 
+#. don't overwrite messages here
+#. must give this prompt
+#. don't use emsg() here, don't want to flush the buffers
 msgid "WARNING: The file has been changed since reading it!!!"
 msgstr "ALERTE: Le fichier a été modifié depuis que Vim l'a lu !"
 
@@ -2044,6 +2074,7 @@
 msgid "auto-removing autocommand: %s <buffer=%d>"
 msgstr "Autocommandes marquées pour auto-suppression : %s <tampon=%d>"
 
+#. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
 msgstr "E367: Aucun groupe \"%s\""
@@ -2356,11 +2387,11 @@
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Chercher et remplacer (utilisez '\\\\' pour trouver un '\\')"
 
-#. We fake this: Use a filter that doesn't select anything and a default
-#. * file name that won't be used.
 # DB - Traduction non indispensable puisque le code indique qu'il s'agit d'un
 #      paramétrage bidon afin de sélectionner un répertoire plutôt qu'un
 #      fichier.
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
 msgid "Not Used"
 msgstr "Non utilisé"
 
@@ -2434,6 +2465,7 @@
 msgid "Name:"
 msgstr "Nom :"
 
+#. create toggle button
 msgid "Show size in Points"
 msgstr "Afficher la taille en Points"
 
@@ -2516,8 +2548,7 @@
 "E674: 'printmbcharset' ne peut pas être vide avec un encodage multi-octets"
 
 msgid "E675: No default font specified for multi-byte printing."
-msgstr ""
-"E675: Aucune police par défaut pour l'impression multi-octets"
+msgstr "E675: Aucune police par défaut pour l'impression multi-octets"
 
 msgid "E324: Can't open PostScript output file"
 msgstr "E324: Impossible d'ouvrir le fichier PostScript de sortie"
@@ -2627,8 +2658,7 @@
 # DB - todo
 #, c-format
 msgid "E259: no matches found for cscope query %s of %s"
-msgstr ""
-"E259: aucune correspondance trouvée pour la requête cscope %s de %s"
+msgstr "E259: aucune correspondance trouvée pour la requête cscope %s de %s"
 
 #, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
@@ -2663,6 +2693,7 @@
 msgid "cscope connection %s closed"
 msgstr "connexion cscope %s fermée"
 
+#. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
 msgstr "E570: erreur fatale dans cs_manage_matches"
 
@@ -2817,12 +2848,33 @@
 msgid "no such window"
 msgstr "Cette fenêtre n'existe pas"
 
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ doit être une instance de chaîne (String)"
+
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: Désolé, commande désactivée : la bibliothèque Ruby n'a pas pu être "
 "chargée."
 
+msgid "E267: unexpected return"
+msgstr "E267: « return » inattendu"
+
+msgid "E268: unexpected next"
+msgstr "E268: « next » inattendu"
+
+msgid "E269: unexpected break"
+msgstr "E269: « break » inattendu"
+
+msgid "E270: unexpected redo"
+msgstr "E270: « redo » inattendu"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: « retry » hors d'une clause « rescue »"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Exception non prise en charge"
+
 # DB - todo
 #, c-format
 msgid "E273: unknown longjmp status %d"
@@ -3047,6 +3099,7 @@
 msgid "Vim: Warning: Input is not from a terminal\n"
 msgstr "Vim: Alerte: L'entrée ne se fait pas sur un terminal\n"
 
+#. just in case..
 msgid "pre-vimrc command line"
 msgstr "ligne de commande pre-vimrc"
 
@@ -3095,7 +3148,8 @@
 # DB - todo (VMS uniquement).
 msgid "where case is ignored prepend / to make flag upper case"
 msgstr ""
-"pour lesquels la casse est indifférente (/ pour que le drapeau soit majuscule)"
+"pour lesquels la casse est indifférente (/ pour que le drapeau soit "
+"majuscule)"
 
 msgid ""
 "\n"
@@ -3123,7 +3177,8 @@
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr ""
-"-f, --nofork\tPremier-plan : ne pas détacher l'interface graphique du terminal"
+"-f, --nofork\tPremier-plan : ne pas détacher l'interface graphique du "
+"terminal"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
 msgstr "-v\t\tMode Vi (comme \"vi\")"
@@ -3278,7 +3333,8 @@
 
 msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
 msgstr ""
-"--remote-expr <expr>\tÉvaluer <expr> dans un serveur Vim, afficher le résultat"
+"--remote-expr <expr>\tÉvaluer <expr> dans un serveur Vim, afficher le "
+"résultat"
 
 msgid "--serverlist\t\tList available Vim server names and exit"
 msgstr ""
@@ -3312,7 +3368,7 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (Athena version) :\n"
+"Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
 "Arguments reconnus par gvim (version Athena) :\n"
@@ -3394,8 +3450,7 @@
 "-display <display>\tLancer Vim sur ce <display>\t(également : --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
-msgstr ""
-"--role <rôle>\tDonner un rôle pour identifier la fenêtre principale"
+msgstr "--role <rôle>\tDonner un rôle pour identifier la fenêtre principale"
 
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOuvrir Vim dans un autre widget GTK"
@@ -3504,7 +3559,8 @@
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: le type de préédition de Vim n'est pas supporté par la méthode de saisie"
+"E289: le type de préédition de Vim n'est pas supporté par la méthode de "
+"saisie"
 
 # DB - todo
 msgid "E290: over-the-spot style requires fontset"
@@ -3576,8 +3632,8 @@
 "Maybe no changes were made or Vim did not update the swap file."
 msgstr ""
 "\n"
-"Il est possible qu'aucune modif. n'a été faite ou que Vim n'a pas mis à jour "
-" le fichier d'échange."
+"Il est possible qu'aucune modif. n'a été faite ou que Vim n'a pas mis à "
+"jour  le fichier d'échange."
 
 msgid " cannot be used with this version of Vim.\n"
 msgstr " ne peut pas être utilisé avec cette version de Vim.\n"
@@ -3651,7 +3707,8 @@
 msgid ""
 "E312: Errors detected while recovering; look for lines starting with ???"
 msgstr ""
-"E312: Erreurs lors de la récupération ; examinez les lignes commençant par ???"
+"E312: Erreurs lors de la récupération ; examinez les lignes commençant "
+"par ???"
 
 msgid "See \":help E312\" for more information."
 msgstr "Consultez \":help E312\" pour plus d'information."
@@ -3954,6 +4011,8 @@
 msgid "E332: Separator cannot be part of a menu path"
 msgstr "E332: Un séparateur ne peut faire partie d'un chemin de menu"
 
+#. Now we have found the matching menu, and we list the mappings
+#. Highlight title
 msgid ""
 "\n"
 "--- Menus ---"
@@ -4048,6 +4107,7 @@
 msgid "Open File dialog"
 msgstr "Ouvrir un fichier"
 
+#. TODO: non-GUI file selector here
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: Désolé, pas de sélecteur de fichiers en mode console"
 
@@ -4089,6 +4149,7 @@
 msgid "Vim: preserving files...\n"
 msgstr "Vim: préservation des fichiers...\n"
 
+#. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: Fini.\n"
 
@@ -4175,6 +4236,7 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Plus de fichier \"%s\" dans 'path'"
 
+#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Impossible de se connecter à Netbeans n°2"
 
@@ -4184,7 +4246,8 @@
 #, c-format
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
-"E668: Mode d'accès incorrect au fichier d'infos de connexion NetBeans : \"%s\""
+"E668: Mode d'accès incorrect au fichier d'infos de connexion NetBeans : \"%s"
+"\""
 
 # DB : message d'un appel à perror().
 msgid "read from Netbeans socket"
@@ -4259,6 +4322,7 @@
 msgstr "E748: Aucun registre n'a été précédemment utilisé"
 
 # DB - Question O/N.
+#. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "impossible de réaliser une copie ; effacer tout de même"
 
@@ -4291,6 +4355,7 @@
 msgid "E353: Nothing in register %s"
 msgstr "E353: Le registre %s est vide"
 
+#. Highlight title
 msgid ""
 "\n"
 "--- Registers ---"
@@ -4327,8 +4392,8 @@
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; "
-"%ld sur %ld octets sélectionnés"
+"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; %ld sur "
+"%ld octets sélectionnés"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4339,8 +4404,9 @@
 msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
-msgstr "Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; "
-"Caractère %ld sur %ld ; Octet %ld sur %ld"
+msgstr ""
+"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractère %ld sur "
+"%ld ; Octet %ld sur %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4352,9 +4418,8 @@
 msgid "Thanks for flying Vim"
 msgstr "Merci d'avoir choisi Vim"
 
-# DB - Espace final car Vim peut ajouter ": <informations>" à la suite
 msgid "E518: Unknown option"
-msgstr "E518: Option inconnue "
+msgstr "E518: Option inconnue"
 
 msgid "E519: Option not supported"
 msgstr "E519: Option non supportée"
@@ -4376,8 +4441,7 @@
 msgstr "E529: 'term' ne doit pas être une chaîne vide"
 
 msgid "E530: Cannot change term in GUI"
-msgstr ""
-"E530: Impossible de modifier term dans l'interface graphique"
+msgstr "E530: Impossible de modifier term dans l'interface graphique"
 
 msgid "E531: Use \":gui\" to start the GUI"
 msgstr "E531: Utilisez \":gui\" pour démarrer l'interface graphique"
@@ -4553,15 +4617,11 @@
 msgid "I/O ERROR"
 msgstr "ERREUR d'E/S"
 
-msgid "...(truncated)"
-msgstr "...(tronqué)"
-
 msgid "Message"
 msgstr "Message"
 
 msgid "'columns' is not 80, cannot execute external commands"
-msgstr ""
-"'columns' ne vaut pas 80, impossible d'exécuter des commandes externes"
+msgstr "'columns' ne vaut pas 80, impossible d'exécuter des commandes externes"
 
 msgid "E237: Printer selection failed"
 msgstr "E237: La sélection de l'imprimante a échoué"
@@ -5000,6 +5060,16 @@
 msgid "E389: Couldn't find pattern"
 msgstr "E389: Impossible de trouver le motif"
 
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Dernier motif de recherche %s :\n"
+"~"
+
 msgid "E759: Format error in spell file"
 msgstr "E759: Erreur de format du fichier orthographique"
 
@@ -5064,7 +5134,7 @@
 
 #, c-format
 msgid "Conversion in %s not supported"
-msgstr "La conversion dans %s non supportée" 
+msgstr "La conversion dans %s non supportée"
 
 #, c-format
 msgid "Invalid value for FLAG in %s line %d: %s"
@@ -5075,6 +5145,22 @@
 msgstr "FLAG trouvé après des drapeaux dans %s ligne %d : %s"
 
 #, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Définir COMPOUNDFORBIDFLAG après des PFX peut donner des résultats erronés "
+"dans %s ligne %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Définir COMPOUNDPERMITFLAG après des PFX peut donner des résultats erronés "
+" dans %s ligne %d"
+
+#, c-format
 msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
 msgstr "Valeur de COMPOUNDWORDMAX erronée dans %s ligne %d : %s"
 
@@ -5106,8 +5192,8 @@
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"Affixe aussi utilisée pour BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
-"dans %s ligne %d : %s"
+"Affixe aussi utilisée pour BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST dans %s ligne %d : %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
@@ -5118,13 +5204,6 @@
 msgid "Broken condition in %s line %d: %s"
 msgstr "Condition non valide dans %s ligne %d : %s"
 
-# DB - todo
-#, c-format
-msgid "Affix flags ignored when PFXPOSTPONE used in %s line %d: %s"
-msgstr ""
-"Drapeaux de l'affixe ignorés quand PFXPOSTPONE est utilisé dans %s ligne %d "
-": %s"
-
 #, c-format
 msgid "Expected REP(SAL) count in %s line %d"
 msgstr "Nombre de REP(SAL) attendu dans %s ligne %d"
@@ -5248,8 +5327,10 @@
 msgid "Reading back spell file..."
 msgstr "Relecture du fichier orthographique"
 
+#.
 #. * Go through the trie of good words, soundfold each word and add it to
 #. * the soundfold trie.
+#.
 msgid "Performing soundfolding..."
 msgstr "Analyse phonétique en cours..."
 
@@ -5313,6 +5394,7 @@
 msgid "Sorry, only %ld suggestions"
 msgstr "Désolé, seulement %ld suggestions"
 
+#. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
 msgstr "Remplacer \"%.*s\" par :"
@@ -5594,6 +5676,7 @@
 msgid "E429: File \"%s\" does not exist"
 msgstr "E429: Le fichier \"%s\" n'existe pas"
 
+#. Highlight title
 msgid ""
 "\n"
 "  # TO tag         FROM line  in file/text"
@@ -5654,6 +5737,7 @@
 msgid "E437: terminal capability \"cm\" required"
 msgstr "E437: capacité de terminal \"cm\" requise"
 
+#. Highlight title
 msgid ""
 "\n"
 "--- Terminal keys ---"
@@ -5668,6 +5752,7 @@
 msgstr "Vim: Erreur lors de la lecture de l'entrée, sortie...\n"
 
 # DB - Question O/N.
+#. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Annulation impossible ; continuer"
 
@@ -5719,6 +5804,10 @@
 msgid "number changes  time"
 msgstr "numéro  modif.  instant"
 
+#, c-format
+msgid "%ld seconds ago"
+msgstr "il y a %ld secondes"
+
 msgid "E439: undo list corrupt"
 msgstr "E439: la liste d'annulation est corrompue"
 
@@ -6031,6 +6120,9 @@
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "tapez  :help windows95<Entrée>  pour plus d'information"
 
+msgid "Already only one window"
+msgstr "Il n'y a déjà plus qu'une fenêtre"
+
 msgid "E441: There is no preview window"
 msgstr "E441: Il n'y a pas de fenêtre de prévisualisation"
 
@@ -6043,9 +6135,6 @@
 msgid "E444: Cannot close last window"
 msgstr "E444: Impossible de fermer la dernière fenêtre"
 
-msgid "Already only one window"
-msgstr "Il n'y a déjà plus qu'une fenêtre"
-
 msgid "E445: Other window contains changes"
 msgstr "E445: Les modifications de l'autre fenêtre n'ont pas été enregistrées"
 
@@ -6079,6 +6168,7 @@
 msgid "Edit with &Vim"
 msgstr "Éditer dans &Vim"
 
+#. Now concatenate
 msgid "Edit with existing Vim - "
 msgstr "Éditer dans le Vim existant - "
 
@@ -6088,8 +6178,8 @@
 # DB - MessageBox win32, la longueur n'est pas un problème !
 msgid "Error creating process: Check if gvim is in your path!"
 msgstr ""
-"Erreur de création du processus : "
-"vérifiez que gvim est bien dans votre chemin !"
+"Erreur de création du processus : vérifiez que gvim est bien dans votre "
+"chemin !"
 
 msgid "gvimext.dll error"
 msgstr "Erreur de gvimext.dll"
@@ -6102,6 +6192,10 @@
 msgid "--No lines in buffer--"
 msgstr "--Le tampon est vide--"
 
+#.
+#. * The error messages that can be shared are included here.
+#. * Excluded are errors that are only used once and debugging messages.
+#.
 msgid "E470: Command aborted"
 msgstr "E470: Commande annulée"
 
@@ -6338,7 +6432,8 @@
 
 #, c-format
 msgid "E46: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: Impossible de modifier une variable depuis le bac à sable : \"%s\""
+msgstr ""
+"E46: Impossible de modifier une variable depuis le bac à sable : \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Erreur lors de la lecture du fichier d'erreurs"
@@ -6429,7 +6524,7 @@
 msgid "E139: File is loaded in another buffer"
 msgstr "E139: Le fichier est chargé dans un autre tampon"
 
-#,c-format
+#, c-format
 msgid "E764: Option '%s' is not set"
 msgstr "E764: L'option '%s' n'est pas activée"
 
diff --git a/src/po/it.po b/src/po/it.po
index 7e970d4..2673c63 100644
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -5096,8 +5096,8 @@
 msgstr "E397: Nome file necessario"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Manca ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Manca ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/ja.po b/src/po/ja.po
index 67d877d..9549c24 100644
--- a/src/po/ja.po
+++ b/src/po/ja.po
@@ -5109,8 +5109,8 @@
 msgstr "E397: ¥Õ¥¡¥¤¥ë̾¤¬É¬ÍפǤ¹"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ']' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ']' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/ja.sjis.po b/src/po/ja.sjis.po
index 29592bb..96c2037 100644
--- a/src/po/ja.sjis.po
+++ b/src/po/ja.sjis.po
@@ -5109,8 +5109,8 @@
 msgstr "E397: ƒtƒ@ƒCƒ‹–¼‚ª•K—v‚Å‚·"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ']' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ']' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/pl.UTF-8.po b/src/po/pl.UTF-8.po
index 64b3203..323d6ac 100644
--- a/src/po/pl.UTF-8.po
+++ b/src/po/pl.UTF-8.po
@@ -5101,8 +5101,8 @@
 msgstr "E397: Wymagana nazwa pliku"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Brak ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Brak ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/pl.cp1250.po b/src/po/pl.cp1250.po
index 79cb55e..efd9afd 100644
--- a/src/po/pl.cp1250.po
+++ b/src/po/pl.cp1250.po
@@ -5101,8 +5101,8 @@
 msgstr "E397: Wymagana nazwa pliku"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Brak ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Brak ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/pl.po b/src/po/pl.po
index 5103473..40e140f 100644
--- a/src/po/pl.po
+++ b/src/po/pl.po
@@ -5101,8 +5101,8 @@
 msgstr "E397: Wymagana nazwa pliku"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Brak ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Brak ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/sk.cp1250.po b/src/po/sk.cp1250.po
index b8dad1b..75095c0 100644
--- a/src/po/sk.cp1250.po
+++ b/src/po/sk.cp1250.po
@@ -4871,8 +4871,8 @@
 msgstr "E397: Vyžadovaný názov súboru"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Chýba ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Chýba ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/sk.po b/src/po/sk.po
index 5474a55..3c67b32 100644
--- a/src/po/sk.po
+++ b/src/po/sk.po
@@ -4871,8 +4871,8 @@
 msgstr "E397: Vy¾adovaný názov súboru"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Chýba ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Chýba ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/sv.po b/src/po/sv.po
index e4a92df..e6bf7ee 100644
--- a/src/po/sv.po
+++ b/src/po/sv.po
@@ -5066,8 +5066,8 @@
 msgstr "E397: Filnamn krävs"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: Saknar ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: Saknar ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/zh_CN.UTF-8.po b/src/po/zh_CN.UTF-8.po
index 83eaaf1..de60cda 100644
--- a/src/po/zh_CN.UTF-8.po
+++ b/src/po/zh_CN.UTF-8.po
@@ -5056,8 +5056,8 @@
 msgstr "E397: 需要文件名称"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: 缺少 ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: 缺少 ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/zh_CN.cp936.po b/src/po/zh_CN.cp936.po
index 6e701ac..dd4df46 100644
--- a/src/po/zh_CN.cp936.po
+++ b/src/po/zh_CN.cp936.po
@@ -5056,8 +5056,8 @@
 msgstr "E397: ÐèÒªÎļþÃû³Æ"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ȱÉÙ ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ȱÉÙ ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/po/zh_CN.po b/src/po/zh_CN.po
index 83bd7f4..b77b45e 100644
--- a/src/po/zh_CN.po
+++ b/src/po/zh_CN.po
@@ -5056,8 +5056,8 @@
 msgstr "E397: ÐèÒªÎļþÃû³Æ"
 
 #, c-format
-msgid "E747: Missing ']': %s"
-msgstr "E747: ȱÉÙ ']': %s"
+msgid "E789: Missing ']': %s"
+msgstr "E789: ȱÉÙ ']': %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
diff --git a/src/popupmnu.c b/src/popupmnu.c
index fc5ffff..21dfc85 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -30,7 +30,7 @@
 
 static int pum_do_redraw = FALSE;	/* do redraw anyway */
 
-static int pum_set_selected __ARGS((int n));
+static int pum_set_selected __ARGS((int n, int repeat));
 
 #define PUM_DEF_HEIGHT 10
 #define PUM_DEF_WIDTH  15
@@ -59,6 +59,7 @@
     int		height;
     int		col;
     int		above_row = cmdline_row;
+    int		redo_count = 0;
 
 redo:
     def_width = PUM_DEF_WIDTH;
@@ -209,8 +210,9 @@
     pum_size = size;
 
     /* Set selected item and redraw.  If the window size changed need to redo
-     * the positioning. */
-    if (pum_set_selected(selected))
+     * the positioning.  Limit this to two times, when there is not much
+     * room the window size will keep changing. */
+    if (pum_set_selected(selected, redo_count) && ++redo_count <= 2)
 	goto redo;
 }
 
@@ -338,12 +340,17 @@
 /*
  * Set the index of the currently selected item.  The menu will scroll when
  * necessary.  When "n" is out of range don't scroll.
+ * This may be repeated when the preview window is used:
+ * "repeat" == 0: open preview window normally
+ * "repeat" == 1: open preview window but don't set the size
+ * "repeat" == 2: don't open preview window
  * Returns TRUE when the window was resized and the location of the popup menu
  * must be recomputed.
  */
     static int
-pum_set_selected(n)
+pum_set_selected(n, repeat)
     int	    n;
+    int	    repeat;
 {
     int	    resized = FALSE;
     int	    context = pum_height / 2;
@@ -404,10 +411,14 @@
 	/*
 	 * Show extra info in the preview window if there is something and
 	 * 'completeopt' contains "preview".
+	 * Skip this when tried twice already.
+	 * Skip this also when there is not much room.
 	 * NOTE: Be very careful not to sync undo!
 	 */
 	if (pum_array[pum_selected].pum_info != NULL
-					    && vim_strchr(p_cot, 'p') != NULL)
+		&& Rows > 10
+		&& repeat <= 1
+		&& vim_strchr(p_cot, 'p') != NULL)
 	{
 	    win_T	*curwin_save = curwin;
 	    int		res = OK;
@@ -470,12 +481,15 @@
 
 		    /* Increase the height of the preview window to show the
 		     * text, but no more than 'previewheight' lines. */
-		    if (lnum > p_pvh)
-			lnum = p_pvh;
-		    if (curwin->w_height < lnum)
+		    if (repeat == 0)
 		    {
-			win_setheight((int)lnum);
-			resized = TRUE;
+			if (lnum > p_pvh)
+			    lnum = p_pvh;
+			if (curwin->w_height < lnum)
+			{
+			    win_setheight((int)lnum);
+			    resized = TRUE;
+			}
 		    }
 
 		    curbuf->b_changed = 0;
diff --git a/src/syntax.c b/src/syntax.c
index dfeda5e..714de44 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -4528,7 +4528,7 @@
 			    break;
 			if (p[1] == NUL)
 			{
-			    EMSG2(_("E747: Missing ']': %s"), kw);
+			    EMSG2(_("E789: Missing ']': %s"), kw);
 			    kw = p + 2;		/* skip over the NUL */
 			    break;
 			}
@@ -6329,9 +6329,9 @@
      * depend on the number of colors available. */
     if (t_colors > 8)
 	do_highlight((char_u *)(*p_bg == 'l' ? "Visual ctermbg=LightGrey"
-				   : "Visual ctermbg=DarkGrey"), reset, TRUE);
+				   : "Visual ctermbg=DarkGrey"), FALSE, TRUE);
     else
-	do_highlight((char_u *)"Visual cterm=reverse", reset, TRUE);
+	do_highlight((char_u *)"Visual cterm=reverse", FALSE, TRUE);
 
 #ifdef FEAT_SYN_HL
     /*
diff --git a/src/tag.c b/src/tag.c
index 24809e3..c9af52c 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3356,7 +3356,6 @@
 	xpc.xp_context = EXPAND_FILES;
 	expanded_fname = ExpandOne(&xpc, (char_u *)fname, NULL,
 			    WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
-	ExpandCleanup(&xpc);
 	if (expanded_fname != NULL)
 	    fname = expanded_fname;
     }
diff --git a/src/version.h b/src/version.h
index 4c8a6ac..d2a14fe 100644
--- a/src/version.h
+++ b/src/version.h
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT	"vim70e"
 #define VIM_VERSION_SHORT	"7.0e"
-#define VIM_VERSION_MEDIUM	"7.0e03 BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0e03 BETA (2006 Apr 19)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0e03 BETA (2006 Apr 19, compiled "
+#define VIM_VERSION_MEDIUM	"7.0e04 BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0e04 BETA (2006 Apr 20)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0e04 BETA (2006 Apr 20, compiled "