updated for version 7.0123
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index ab11dff..bb07582 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -6665,11 +6665,25 @@
 #endif
 	    && eap->cmdidx != CMD_new)
     {
-	fname = do_browse(0, (char_u *)_("Edit File in new window"),
+	if (
+# ifdef FEAT_GUI
+	    !gui.in_use &&
+# endif
+		au_has_group((char_u *)"FileExplorer"))
+	{
+	    /* No browsing supported but we do have the file explorer:
+	     * Edit the directory. */
+	    if (*eap->arg == NUL || !mch_isdir(eap->arg))
+		eap->arg = (char_u *)".";
+	}
+	else
+	{
+	    fname = do_browse(0, (char_u *)_("Edit File in new window"),
 					  eap->arg, NULL, NULL, NULL, curbuf);
-	if (fname == NULL)
-	    goto theend;
-	eap->arg = fname;
+	    if (fname == NULL)
+		goto theend;
+	    eap->arg = fname;
+	}
     }
     cmdmod.browse = FALSE;	/* Don't browse again in do_ecmd(). */
 #endif
diff --git a/src/fileio.c b/src/fileio.c
index 7e14155..7c4c9ac 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -7059,6 +7059,18 @@
     return AUGROUP_ERROR;
 }
 
+#if defined(FEAT_BROWSE) || defined(PROTO)
+/*
+ * Return TRUE if augroup "name" exists.
+ */
+    int
+au_has_group(name)
+    char_u	*name;
+{
+    return au_find_group(name) != AUGROUP_ERROR;
+}
+#endif
+
 /*
  * ":augroup {name}".
  */
diff --git a/src/misc2.c b/src/misc2.c
index 93b3bbe..704e176 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -4058,7 +4058,7 @@
 		else
 		    ff_expand_buffer[len++] = FF_MAX_STAR_STAR_EXPAND;
 		wc_part = (char_u *)errpt;
-		if (*wc_part != PATHSEP && *wc_part != NUL)
+		if (*wc_part != NUL && !vim_ispathsep(*wc_part))
 		{
 		    EMSG2(_("E343: Invalid path: '**[number]' must be at the end of the path or be followed by '%s'."), PATHSEPSTR);
 		    goto error_return;
@@ -4582,10 +4582,10 @@
 
 	    /* cut of last dir */
 	    while (path_end > ff_search_ctx->ffsc_start_dir
-		    && *path_end == PATHSEP)
+		    && vim_ispathsep(*path_end))
 		path_end--;
 	    while (path_end > ff_search_ctx->ffsc_start_dir
-		    && *(path_end-1) != PATHSEP)
+		    && !vim_ispathsep(path_end[-1]))
 		path_end--;
 	    *path_end = 0;
 	    path_end--;
@@ -5050,7 +5050,7 @@
     int		i = 0;
 
     /* eat up trailing path separators, except the first */
-    while (path_len > 1 && path[path_len - 1] == PATHSEP)
+    while (path_len > 1 && vim_ispathsep(path[path_len - 1]))
 	path_len--;
 
     /* if no path consider it as match */
@@ -5066,7 +5066,7 @@
 	     * '/home/r' would also match '/home/rks'
 	     */
 	    if (fnamencmp(stopdirs_v[i], path, path_len) == 0
-		    && stopdirs_v[i][path_len] == PATHSEP)
+		    && vim_ispathsep(stopdirs_v[i][path_len]))
 		return TRUE;
 	}
 	else
diff --git a/src/po/check.vim b/src/po/check.vim
new file mode 100644
index 0000000..a5f25aa
--- /dev/null
+++ b/src/po/check.vim
@@ -0,0 +1,58 @@
+" Vim script for checking .po files.
+"
+" Go through the file and verify that all %...s items in "msgid" are identical
+" to the ones in "msgstr".
+
+if 1	" Only execute this if the eval feature is available.
+
+" Function to get a split line at the cursor.
+" Used for both msgid and msgstr lines.
+" Removes all text except % items and returns the result.
+func! GetMline()
+  let idline = substitute(getline('.'), '"\(.*\)"$', '\1', '')
+  while line('.') < line('$')
+    +
+    let line = getline('.')
+    if line[0] != '"'
+      break
+    endif
+    let idline .= substitute(line, '"\(.*\)"$', '\1', '')
+  endwhile
+
+  " remove everything but % items.
+  return substitute(idline, '[^%]*\(%[-+ #''.0-9*]*l\=[dsuxXpoc%]\)\=', '\1', 'g')
+endfunc
+
+" Start at the first "msgid" line.
+1
+/^msgid
+let startline = line('.')
+let error = 0
+
+while 1
+  if getline(line('.') - 1) !~ "no-c-format"
+    let fromline = GetMline()
+    if getline('.') !~ '^msgstr'
+      echo 'Missing "msgstr" in line ' . line('.')
+      let error = 1
+    endif
+    let toline = GetMline()
+    if fromline != toline
+      echo 'Mismatching % in line ' . (line('.') - 1)
+      let error = 1
+    endif
+  endif
+
+  " Find next msgid.
+  " Wrap around at the end of the file, quit when back at the first one.
+  /^msgid
+  if line('.') == startline
+    break
+  endif
+endwhile
+
+if error == 0
+  echo "OK"
+endif
+
+endif
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index 8b05113..2f5897c 100644
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -22,6 +22,7 @@
 char_u *vim_tempname __ARGS((int extra_char));
 void forward_slash __ARGS((char_u *fname));
 void aubuflocal_remove __ARGS((buf_T *buf));
+int au_has_group __ARGS((char_u *name));
 void do_augroup __ARGS((char_u *arg, int del_group));
 void free_all_autocmds __ARGS((void));
 int check_ei __ARGS((void));
diff --git a/src/quickfix.c b/src/quickfix.c
index 5847ae1..bf0b0b8 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -323,13 +323,12 @@
 					 && efmp[1] != '\\' && efmp[1] != '%')
 		    {
 			/* A file name may contain spaces, but this isn't in
-			 * "\f".  use "[^x]\+" instead (x is next character) */
-			*ptr++ = '[';
-			*ptr++ = '^';
-			*ptr++ = efmp[1];
-			*ptr++ = ']';
-			*ptr++ = '\\';
-			*ptr++ = '+';
+			 * "\f".  For "%f:%l:%m" there may be a ":" in the
+			 * file name.  Use ".\{-1,}x" instead (x is the next
+			 * character), the requirement that :999: follows
+			 * should work. */
+			STRCPY(ptr, ".\\{-1,}");
+			ptr += 7;
 		    }
 		    else
 		    {
diff --git a/src/version.h b/src/version.h
index 2c5193e..3fff8d6 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 1)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 1, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 4)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 4, compiled "