updated for version 7.0e
diff --git a/src/GvimExt/GvimExt.reg b/src/GvimExt/GvimExt.reg
index 0169fe1..325c2e7 100644
--- a/src/GvimExt/GvimExt.reg
+++ b/src/GvimExt/GvimExt.reg
@@ -15,6 +15,6 @@
 [HKEY_LOCAL_MACHINE\Software\Vim\Gvim]
    "path"="gvim.exe"
 
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0d]
-   "DisplayName"="Vim 7.0d: Edit with Vim popup menu entry"
+[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0e]
+   "DisplayName"="Vim 7.0e: Edit with Vim popup menu entry"
    "UninstallString"="uninstal.exe"
diff --git a/src/Makefile b/src/Makefile
index 0a8bbbe..bbcbc1c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -880,7 +880,7 @@
 
 ### Vim version (adjusted by a script)
 VIMMAJOR = 7
-VIMMINOR = 0d
+VIMMINOR = 0e
 
 ### Location of Vim files (should not need to be changed, and  {{{1
 ### some things might not work when they are changed!)
diff --git a/src/auto/configure b/src/auto/configure
index 644d4ef..ed5ea56 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -14123,7 +14123,7 @@
 echo $ECHO_N "checking how to create tags... $ECHO_C" >&6
 test -f tags && mv tags tags.save
 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
-  TAGPRG="ctags -I INIT+"
+  TAGPRG="ctags -I INIT+ --fields=+S"
 else
   (eval etags	   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
   (eval etags -c   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags -c"
diff --git a/src/configure.in b/src/configure.in
index 3b867e5..21a5f80 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -2668,6 +2668,7 @@
 
 dnl Check how we can run ctags
 dnl --version for Exuberant ctags (preferred)
+dnl       Add --fields=+S to get function signatures for omni completion.
 dnl -t for typedefs (many ctags have this)
 dnl -s for static functions (Elvis ctags only?)
 dnl -v for variables. Dangerous, most ctags take this for 'vgrind style'.
@@ -2675,7 +2676,7 @@
 AC_MSG_CHECKING(how to create tags)
 test -f tags && mv tags tags.save
 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
-  TAGPRG="ctags -I INIT+"
+  TAGPRG="ctags -I INIT+ --fields=+S"
 else
   (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
   (eval etags -c   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 9ba3e81..533b2cc 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -299,32 +299,38 @@
     int		result = 0;
 
     /* If the user interrupts, there's no way to stop qsort() immediately, but
-     * if we return 0 every time, qsort will assume it's done sorting and exit */
+     * if we return 0 every time, qsort will assume it's done sorting and
+     * exit. */
     if (sort_abort)
 	return 0;
     fast_breakcheck();
     if (got_int)
 	sort_abort = TRUE;
 
-    /* When sorting numbers "start_col_nr" is the number, not the column number. */
+    /* When sorting numbers "start_col_nr" is the number, not the column
+     * number. */
     if (sort_nr)
 	result = l1.start_col_nr - l2.start_col_nr;
     else
     {
-	/* We need to copy one line into "sortbuf1", because there is no guarantee
-	 * that the first pointer becomes invalid when obtaining the second one. */
-	STRNCPY(sortbuf1, ml_get(l1.lnum) + l1.start_col_nr, l1.end_col_nr - l1.start_col_nr + 1);
+	/* We need to copy one line into "sortbuf1", because there is no
+	 * guarantee that the first pointer becomes invalid when obtaining the
+	 * second one. */
+	STRNCPY(sortbuf1, ml_get(l1.lnum) + l1.start_col_nr,
+					 l1.end_col_nr - l1.start_col_nr + 1);
 	sortbuf1[l1.end_col_nr - l1.start_col_nr] = 0;
-	STRNCPY(sortbuf2, ml_get(l2.lnum) + l2.start_col_nr, l2.end_col_nr - l2.start_col_nr + 1);
+	STRNCPY(sortbuf2, ml_get(l2.lnum) + l2.start_col_nr,
+					 l2.end_col_nr - l2.start_col_nr + 1);
 	sortbuf2[l2.end_col_nr - l2.start_col_nr] = 0;
 
-	result = sort_ic ? STRICMP(sortbuf1, sortbuf2) : STRCMP(sortbuf1, sortbuf2);
+	result = sort_ic ? STRICMP(sortbuf1, sortbuf2)
+						 : STRCMP(sortbuf1, sortbuf2);
     }
-    /* If the two lines have the same value, preserve the original line order */
+
+    /* If two lines have the same value, preserve the original line order. */
     if (result == 0)
-	return (int) (l1.lnum - l2.lnum);
-    else
-	return result;
+	return (int)(l1.lnum - l2.lnum);
+    return result;
 }
 
 /*
diff --git a/src/fileio.c b/src/fileio.c
index e0ae301..46b50f8 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1259,6 +1259,13 @@
 			if (bad_char_behavior != BAD_DROP)
 			{
 			    fio_flags = 0;	/* don't convert this */
+# ifdef USE_ICONV
+			    if (iconv_fd != (iconv_t)-1)
+			    {
+				iconv_close(iconv_fd);
+				iconv_fd = (iconv_t)-1;
+			    }
+# endif
 			    if (bad_char_behavior == BAD_KEEP)
 			    {
 				/* Keep the trailing bytes as-is. */
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index b44100e..9eb85ce 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5338,17 +5338,33 @@
     /* A number of colors that some X11 systems don't have */
     static const char *const vimnames[][2] =
     {
-	{"LightRed",	 "#FFBBBB"},
-	{"LightGreen",	 "#88FF88"},
-	{"LightMagenta", "#FFBBFF"},
-	{"DarkCyan",	 "#008888"},
-	{"DarkBlue",	 "#0000BB"},
-	{"DarkRed",	 "#BB0000"},
-	{"DarkMagenta",  "#BB00BB"},
-	{"DarkGrey",	 "#BBBBBB"},
-	{"DarkYellow",	 "#BBBB00"},
-	{"Grey90",	 "#E5E5E5"},
-	{"Gray90",	 "#E5E5E5"},
+	{"LightRed",	"#FFBBBB"},
+	{"LightGreen",	"#88FF88"},
+	{"LightMagenta","#FFBBFF"},
+	{"DarkCyan",	"#008888"},
+	{"DarkBlue",	"#0000BB"},
+	{"DarkRed",	"#BB0000"},
+	{"DarkMagenta", "#BB00BB"},
+	{"DarkGrey",	"#BBBBBB"},
+	{"DarkYellow",	"#BBBB00"},
+	{"Gray10",	"#1A1A1A"},
+	{"Grey10",	"#1A1A1A"},
+	{"Gray20",	"#333333"},
+	{"Grey20",	"#333333"},
+	{"Gray30",	"#4D4D4D"},
+	{"Grey30",	"#4D4D4D"},
+	{"Gray40",	"#666666"},
+	{"Grey40",	"#666666"},
+	{"Gray50",	"#7F7F7F"},
+	{"Grey50",	"#7F7F7F"},
+	{"Gray60",	"#999999"},
+	{"Grey60",	"#999999"},
+	{"Gray70",	"#B3B3B3"},
+	{"Grey70",	"#B3B3B3"},
+	{"Gray80",	"#CCCCCC"},
+	{"Grey80",	"#CCCCCC"},
+	{"Gray90",	"#E5E5E5"},
+	{"Grey90",	"#E5E5E5"},
 	{NULL, NULL}
     };
 
diff --git a/src/gui_mac.c b/src/gui_mac.c
index d9bb609..762d30c 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -3642,6 +3642,22 @@
 	{"Grey",	RGB(0xC0, 0xC0, 0xC0)}, /*W*/
 	{"lightgray",	RGB(0xE0, 0xE0, 0xE0)}, /*W*/
 	{"lightgrey",	RGB(0xE0, 0xE0, 0xE0)}, /*W*/
+	{"gray10",	RGB(0x1A, 0x1A, 0x1A)}, /*W*/
+	{"grey10",	RGB(0x1A, 0x1A, 0x1A)}, /*W*/
+	{"gray20",	RGB(0x33, 0x33, 0x33)}, /*W*/
+	{"grey20",	RGB(0x33, 0x33, 0x33)}, /*W*/
+	{"gray30",	RGB(0x4D, 0x4D, 0x4D)}, /*W*/
+	{"grey30",	RGB(0x4D, 0x4D, 0x4D)}, /*W*/
+	{"gray40",	RGB(0x66, 0x66, 0x66)}, /*W*/
+	{"grey40",	RGB(0x66, 0x66, 0x66)}, /*W*/
+	{"gray50",	RGB(0x7F, 0x7F, 0x7F)}, /*W*/
+	{"grey50",	RGB(0x7F, 0x7F, 0x7F)}, /*W*/
+	{"gray60",	RGB(0x99, 0x99, 0x99)}, /*W*/
+	{"grey60",	RGB(0x99, 0x99, 0x99)}, /*W*/
+	{"gray70",	RGB(0xB3, 0xB3, 0xB3)}, /*W*/
+	{"grey70",	RGB(0xB3, 0xB3, 0xB3)}, /*W*/
+	{"gray80",	RGB(0xCC, 0xCC, 0xCC)}, /*W*/
+	{"grey80",	RGB(0xCC, 0xCC, 0xCC)}, /*W*/
 	{"gray90",	RGB(0xE5, 0xE5, 0xE5)}, /*W*/
 	{"grey90",	RGB(0xE5, 0xE5, 0xE5)}, /*W*/
 	{"white",	RGB(0xFF, 0xFF, 0xFF)},
diff --git a/src/gui_photon.c b/src/gui_photon.c
index e651922..3408ba6 100644
--- a/src/gui_photon.c
+++ b/src/gui_photon.c
@@ -2007,6 +2007,22 @@
 	{"Grey",	    RGB(0xC0, 0xC0, 0xC0)},
 	{"LightGray",	    RGB(0xD3, 0xD3, 0xD3)},
 	{"LightGrey",	    RGB(0xD3, 0xD3, 0xD3)},
+	{"Gray10",	    RGB(0x1A, 0x1A, 0x1A)},
+	{"Grey10",	    RGB(0x1A, 0x1A, 0x1A)},
+	{"Gray20",	    RGB(0x33, 0x33, 0x33)},
+	{"Grey20",	    RGB(0x33, 0x33, 0x33)},
+	{"Gray30",	    RGB(0x4D, 0x4D, 0x4D)},
+	{"Grey30",	    RGB(0x4D, 0x4D, 0x4D)},
+	{"Gray40",	    RGB(0x66, 0x66, 0x66)},
+	{"Grey40",	    RGB(0x66, 0x66, 0x66)},
+	{"Gray50",	    RGB(0x7F, 0x7F, 0x7F)},
+	{"Grey50",	    RGB(0x7F, 0x7F, 0x7F)},
+	{"Gray60",	    RGB(0x99, 0x99, 0x99)},
+	{"Grey60",	    RGB(0x99, 0x99, 0x99)},
+	{"Gray70",	    RGB(0xB3, 0xB3, 0xB3)},
+	{"Grey70",	    RGB(0xB3, 0xB3, 0xB3)},
+	{"Gray80",	    RGB(0xCC, 0xCC, 0xCC)},
+	{"Grey80",	    RGB(0xCC, 0xCC, 0xCC)},
 	{"Gray90",	    RGB(0xE5, 0xE5, 0xE5)},
 	{"Grey90",	    RGB(0xE5, 0xE5, 0xE5)},
 	{"White",	    RGB(0xFF, 0xFF, 0xFF)},
diff --git a/src/gui_riscos.c b/src/gui_riscos.c
index 073bbfe..46e79c0 100644
--- a/src/gui_riscos.c
+++ b/src/gui_riscos.c
@@ -1145,8 +1145,24 @@
 	{ "LightGrey",		grgb(211,	211,	211)	},
 	{ "DarkGray",		grgb(169,	169,	169)	},
 	{ "DarkGrey",		grgb(169,	169,	169)	},
-	{ "Grey90",		grgb(229,	229,	229)	},
+	{ "Gray10",		grgb(26,	26,	26)	},
+	{ "Grey10",		grgb(26,	26,	26)	},
+	{ "Gray20",		grgb(51,	51,	51)	},
+	{ "Grey20",		grgb(51,	51,	51)	},
+	{ "Gray30",		grgb(77,	77,	77)	},
+	{ "Grey30",		grgb(77,	77,	77)	},
+	{ "Gray40",		grgb(102,	102,	102)	},
+	{ "Grey40",		grgb(102,	102,	102)	},
+	{ "Gray50",		grgb(127,	127,	127)	},
+	{ "Grey50",		grgb(127,	127,	127)	},
+	{ "Gray60",		grgb(153,	153,	153)	},
+	{ "Grey60",		grgb(153,	153,	153)	},
+	{ "Gray70",		grgb(179,	179,	179)	},
+	{ "Grey70",		grgb(179,	179,	179)	},
+	{ "Gray80",		grgb(204,	204,	204)	},
+	{ "Grey80",		grgb(204,	204,	204)	},
 	{ "Gray90",		grgb(229,	229,	229)	},
+	{ "Grey90",		grgb(229,	229,	229)	},
 
 	{ "Black",		grgb(0,		0,	0)	},
 	{ "White",		grgb(255,	255,	255)	},
diff --git a/src/gui_w48.c b/src/gui_w48.c
index f99662f..ef1e071 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -1343,6 +1343,22 @@
 	{"Grey",		RGB(0xC0, 0xC0, 0xC0)},
 	{"LightGray",		RGB(0xE0, 0xE0, 0xE0)},
 	{"LightGrey",		RGB(0xE0, 0xE0, 0xE0)},
+	{"Gray10",		RGB(0x1A, 0x1A, 0x1A)},
+	{"Grey10",		RGB(0x1A, 0x1A, 0x1A)},
+	{"Gray20",		RGB(0x33, 0x33, 0x33)},
+	{"Grey20",		RGB(0x33, 0x33, 0x33)},
+	{"Gray30",		RGB(0x4D, 0x4D, 0x4D)},
+	{"Grey30",		RGB(0x4D, 0x4D, 0x4D)},
+	{"Gray40",		RGB(0x66, 0x66, 0x66)},
+	{"Grey40",		RGB(0x66, 0x66, 0x66)},
+	{"Gray50",		RGB(0x7F, 0x7F, 0x7F)},
+	{"Grey50",		RGB(0x7F, 0x7F, 0x7F)},
+	{"Gray60",		RGB(0x99, 0x99, 0x99)},
+	{"Grey60",		RGB(0x99, 0x99, 0x99)},
+	{"Gray70",		RGB(0xB3, 0xB3, 0xB3)},
+	{"Grey70",		RGB(0xB3, 0xB3, 0xB3)},
+	{"Gray80",		RGB(0xCC, 0xCC, 0xCC)},
+	{"Grey80",		RGB(0xCC, 0xCC, 0xCC)},
 	{"Gray90",		RGB(0xE5, 0xE5, 0xE5)},
 	{"Grey90",		RGB(0xE5, 0xE5, 0xE5)},
 	{"White",		RGB(0xFF, 0xFF, 0xFF)},
diff --git a/src/gui_x11.c b/src/gui_x11.c
index 4330305..c49bbe5 100644
--- a/src/gui_x11.c
+++ b/src/gui_x11.c
@@ -2296,6 +2296,22 @@
 	{"DarkMagenta",	"#BB00BB"},
 	{"DarkGrey",	"#BBBBBB"},
 	{"DarkYellow",	"#BBBB00"},
+	{"Gray10",	"#1A1A1A"},
+	{"Grey10",	"#1A1A1A"},
+	{"Gray20",	"#333333"},
+	{"Grey20",	"#333333"},
+	{"Gray30",	"#4D4D4D"},
+	{"Grey30",	"#4D4D4D"},
+	{"Gray40",	"#666666"},
+	{"Grey40",	"#666666"},
+	{"Gray50",	"#7F7F7F"},
+	{"Grey50",	"#7F7F7F"},
+	{"Gray60",	"#999999"},
+	{"Grey60",	"#999999"},
+	{"Gray70",	"#B3B3B3"},
+	{"Grey70",	"#B3B3B3"},
+	{"Gray80",	"#CCCCCC"},
+	{"Grey80",	"#CCCCCC"},
 	{"Gray90",	"#E5E5E5"},
 	{"Grey90",	"#E5E5E5"},
 	{NULL, NULL}
diff --git a/src/misc1.c b/src/misc1.c
index dd1da46..6c3b5ad 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -6058,7 +6058,7 @@
     pos_T	cur_curpos;
     int		amount;
     int		scope_amount;
-    int		cur_amount;
+    int		cur_amount = MAXCOL;
     colnr_T	col;
     char_u	*theline;
     char_u	*linecopy;
@@ -6409,7 +6409,6 @@
 	else
 	{
 	    amount = -1;
-	    cur_amount = MAXCOL;
 	    our_paren_pos = *trypos;
 	    for (lnum = cur_curpos.lnum - 1; lnum > our_paren_pos.lnum; --lnum)
 	    {
@@ -6562,7 +6561,7 @@
 		/* Add ind_unclosed2 for each '(' before our matching one, but
 		 * ignore (void) before the line (ignore_paren_col). */
 		col = our_paren_pos.col;
-		while (our_paren_pos.col > ignore_paren_col)
+		while ((int)our_paren_pos.col > ignore_paren_col)
 		{
 		    --our_paren_pos.col;
 		    switch (*ml_get_pos(&our_paren_pos))
diff --git a/src/screen.c b/src/screen.c
index d371ed9..8d2a69e 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -8971,6 +8971,10 @@
 	    TabPageIdxs[Columns - 1] = -999;
 	}
     }
+
+    /* Reset the flag here again, in case evaluating 'tabline' causes it to be
+     * set. */
+    redraw_tabline = FALSE;
 }
 
 /*
diff --git a/src/syntax.c b/src/syntax.c
index 2686828..d6ce69c 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6115,10 +6115,6 @@
 	CENT("TabLineFill term=reverse cterm=reverse",
 	     "TabLineFill term=reverse cterm=reverse gui=reverse"),
 #endif
-#ifdef FEAT_AUTOCMD
-	CENT("MatchParen term=reverse ctermbg=Cyan",
-	     "MatchParen term=reverse ctermbg=Cyan guibg=Cyan"),
-#endif
 #ifdef FEAT_GUI
 	"Cursor guibg=fg guifg=bg",
 	"lCursor guibg=fg guifg=bg", /* should be different, but what? */
@@ -6196,6 +6192,10 @@
 	CENT("CursorLine term=underline cterm=underline",
 	     "CursorLine term=underline cterm=underline guibg=Grey90"),
 #endif
+#ifdef FEAT_AUTOCMD
+	CENT("MatchParen term=reverse ctermbg=Cyan",
+	     "MatchParen term=reverse ctermbg=Cyan guibg=Cyan"),
+#endif
 #ifdef FEAT_GUI
 	"Normal gui=NONE",
 #endif
@@ -6268,9 +6268,13 @@
 #endif
 #ifdef FEAT_SYN_HL
 	CENT("CursorColumn term=reverse ctermbg=DarkGrey",
-	     "CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey90"),
+	     "CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey40"),
 	CENT("CursorLine term=underline cterm=underline",
-	     "CursorLine term=underline cterm=underline guibg=Grey90"),
+	     "CursorLine term=underline cterm=underline guibg=Grey40"),
+#endif
+#ifdef FEAT_AUTOCMD
+	CENT("MatchParen term=reverse ctermbg=DarkCyan",
+	     "MatchParen term=reverse ctermbg=DarkCyan guibg=DarkCyan"),
 #endif
 #ifdef FEAT_GUI
 	"Normal gui=NONE",
diff --git a/src/version.h b/src/version.h
index fdb32c8..7f6e96e 100644
--- a/src/version.h
+++ b/src/version.h
@@ -33,8 +33,8 @@
  * VIM_VERSION_MEDIUM is used for the startup-screen.
  * VIM_VERSION_LONG is used for the ":version" command and "Vim -h".
  */
-#define VIM_VERSION_NODOT	"vim70d"
-#define VIM_VERSION_SHORT	"7.0d"
-#define VIM_VERSION_MEDIUM	"7.0d05 BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0d05 BETA (2006 Apr 15)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0d05 BETA (2006 Apr 15, compiled "
+#define VIM_VERSION_NODOT	"vim70e"
+#define VIM_VERSION_SHORT	"7.0e"
+#define VIM_VERSION_MEDIUM	"7.0e BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0e BETA (2006 Apr 16)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0e BETA (2006 Apr 16, compiled "
diff --git a/src/window.c b/src/window.c
index 5ee8172..dabfe2d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1705,8 +1705,11 @@
 			    && (room + (totwincount - 2))
 						  / (totwincount - 1) > p_wiw)
 		    {
-			next_curwin_size = (room + p_wiw + totwincount * p_wmw
-					   + (totwincount - 1)) / totwincount;
+			/* Can make all windows wider than 'winwidth', spread
+			 * the room equally. */
+			next_curwin_size = (room + p_wiw
+					    + (totwincount - 1) * p_wmw
+					    + (totwincount - 1)) / totwincount;
 			room -= next_curwin_size - p_wiw;
 		    }
 		    else
@@ -1847,7 +1850,10 @@
 			    && (room + (totwincount - 2))
 						   / (totwincount - 1) > p_wh)
 		    {
-			next_curwin_size = (room + p_wh + totwincount * p_wmh
+			/* can make all windows higher than 'winheight',
+			 * spread the room equally. */
+			next_curwin_size = (room + p_wh
+					   + (totwincount - 1) * p_wmh
 					   + (totwincount - 1)) / totwincount;
 			room -= next_curwin_size - p_wh;
 		    }