diff --git a/src/Make_ro.mak b/src/Make_ro.mak
index 6ac2f94..82708f4 100644
--- a/src/Make_ro.mak
+++ b/src/Make_ro.mak
@@ -2,18 +2,16 @@
 # Makefile for Vim on RISC OS - Andy Wingate
 #
 
-GCC	    = gcc -mthrowback
-CFLAGS	   = -DRISCOS -DFEAT_GUI
-# Optimising on ex_docmd.c seems to cause segfaults on compilation. Needs investigation.
-CCEX_DOCMD = $(GCC) $(CFLAGS)
-CC	   = $(GCC) $(CFLAGS) -O2
+GCC         = gcc -mthrowback
+CFLAGS     = -DRISCOS -DFEAT_GUI
+CC         = $(GCC) $(CFLAGS) -O2
 # -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
 
 TERMFLAG   = -DUP_BC_PC_EXTERN
 
 ASMFLAGS   = -throwback -objasm -gcc
 
-OBJS =  o.buffer o.charset o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2 o.diff \
+OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
 	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar o.main o.mark o.mbyte  \
 	o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
 	o.normal o.ops o.option o.quickfix o.regexp o.screen o.search   \
@@ -26,7 +24,7 @@
 install: Vim
 	squeeze -v Vim @.!Vim.Vim
 
-clean:
+clean:	
 	create o.!fake! 0
 	wipe o.* ~cf
 	remove Vim
@@ -35,134 +33,93 @@
 	as $(ASMFLAGS) -o o.swis s.swis
 
 # Rules for object files
-# You shouldn't need to put all this information in as all but term.c have the same
-# rule (and only then to save extra defines) but some versions of make are awkward.
+
+o.%:	c.%
+	$(CC) -c $< -o $@
 
 o.buffer:	c.buffer
-	$(CC) -c c.buffer -o o.buffer
 
 o.charset:	c.charset
-	$(CC) -c c.charset -o o.charset
 
 o.digraph:	c.digraph
-	$(CC) -c c.digraph -o o.digraph
 
 o.diff:		c.diff
-	$(CC) -c c.diff -o o.diff
 
 o.edit:		c.edit
-	$(CC) -c c.edit -o o.edit
 
 o.eval:		c.eval
-	$(CC) -c c.eval -o o.eval
 
 o.ex_cmds:	c.ex_cmds
-	$(CC) -c c.ex_cmds -o o.ex_cmds
 
 o.ex_cmds2:	c.ex_cmds2
-	$(CC) -c c.ex_cmds2 -o o.ex_cmds2
 
 o.ex_docmd:	c.ex_docmd
-	$(CCEX_DOCMD) -c c.ex_docmd -o o.ex_docmd
 
 o.ex_eval:	c.ex_eval
-	$(CCEX_DOCMD) -c c.ex_eval -o o.ex_eval
 
 o.ex_getln:	c.ex_getln
-	$(CC) -c c.ex_getln -o o.ex_getln
 
 o.fileio:	c.fileio
-	$(CC) -c c.fileio -o o.fileio
 
 o.fold:		c.fold
-	$(CC) -c c.fold -o o.fold
 
 o.getchar:	c.getchar
-	$(CC) -c c.getchar -o o.getchar
 
 o.gui:		c.gui
-	$(CC) -c c.gui -o o.gui
 
 o.gui_riscos:	c.gui_riscos
-	$(CC) -c c.gui_riscos -o o.gui_riscos
 
 o.main:		c.main
-	$(CC) -c c.main -o o.main
 
 o.mark:		c.mark
-	$(CC) -c c.mark -o o.mark
 
 o.mbyte:	c.mbyte
-	$(CC) -c c.mbyte -o o.mbyte
 
 o.memfile:	c.memfile
-	$(CC) -c c.memfile -o o.memfile
 
 o.memline:	c.memline
-	$(CC) -c c.memline -o o.memline
 
 o.menu:		c.menu
-	$(CC) -c c.menu -o o.menu
 
 o.message:	c.message
-	$(CC) -c c.message -o o.message
 
 o.misc1:	c.misc1
-	$(CC) -c c.misc1 -o o.misc1
 
 o.misc2:	c.misc2
-	$(CC) -c c.misc2 -o o.misc2
 
 o.move:		c.move
-	$(CC) -c c.move -o o.move
 
 o.normal:	c.normal
-	$(CC) -c c.normal -o o.normal
 
 o.ops:		c.ops
-	$(CC) -c c.ops -o o.ops
 
 o.option:	c.option
-	$(CC) -c c.option -o o.option
 
 o.os_riscos:	c.os_riscos
-	$(CC) -c c.os_riscos -o o.os_riscos
 
 o.pty:		c.pty
-	$(CC) -c c.pty -o p.pty
 
 o.quickfix:	c.quickfix
-	$(CC) -c c.quickfix -o o.quickfix
 
 o.regexp:	c.regexp
-	$(CC) -c c.regexp -o o.regexp
 
 o.screen:	c.screen
-	$(CC) -c c.screen -o o.screen
 
 o.search:	c.search
-	$(CC) -c c.search -o o.search
 
 o.syntax:	c.syntax
-	$(CC) -c c.syntax -o o.syntax
 
 o.tag:		c.tag
-	$(CC) -c c.tag -o o.tag
 
 o.term:		c.term
 	$(CC) $(TERMFLAG) -c c.term -o o.term
 
 o.termlib:	c.termlib
-	$(CC) -c c.termlib -o o.termlib
 
 o.ui:		c.ui
-	$(CC) -c c.ui -o o.ui
 
 o.undo:		c.undo
-	$(CC) -c c.undo -o o.undo
 
 o.version:	c.version
-	$(CC) -c c.version -o o.version
 
 o.window:	c.window
-	$(CC) -c c.window -o o.window
diff --git a/src/buffer.c b/src/buffer.c
index a1d593d..f02c00d 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -538,8 +538,7 @@
 	    return;
     }
 # ifdef FEAT_EVAL
-    /* autocmds may abort script processing */
-    if (aborting())
+    if (aborting())	    /* autocmds may abort script processing */
 	return;
 # endif
 
@@ -755,7 +754,6 @@
 # endif
     }
     swap_exists_action = SEA_NONE;
-
 }
 #endif
 
@@ -1031,8 +1029,12 @@
 		     * now. */
 		    return FAIL;
 # endif
+		/* If it's still changed fail silently, the dialog already
+		 * mentioned why it fails. */
+		if (bufIsChanged(buf))
+		    return FAIL;
 	    }
-	    if (bufIsChanged(buf))
+	    else
 #endif
 	    {
 		EMSGN(_("E89: No write since last change for buffer %ld (add ! to override)"),
@@ -1518,8 +1520,7 @@
 	if (buf == curbuf)
 	    apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
 # ifdef FEAT_EVAL
-	/* autocmds may abort script processing */
-	if (aborting())
+	if (aborting())		/* autocmds may abort script processing */
 	    return NULL;
 # endif
 #endif
@@ -1572,8 +1573,7 @@
 	if (buf != curbuf)	 /* autocommands deleted the buffer! */
 	    return NULL;
 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
-	/* autocmds may abort script processing */
-	if (aborting())
+	if (aborting())		/* autocmds may abort script processing */
 	    return NULL;
 #endif
 	/* buf->b_nwindows = 0; why was this here? */
@@ -1649,8 +1649,7 @@
 	if (flags & BLN_LISTED)
 	    apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, buf);
 # ifdef FEAT_EVAL
-	/* autocmds may abort script processing */
-	if (aborting())
+	if (aborting())		/* autocmds may abort script processing */
 	    return NULL;
 # endif
     }
diff --git a/src/eval.c b/src/eval.c
index 88b9549..2778379 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -4485,7 +4485,16 @@
 	s = skipwhite(ml_get(lnum));
 	/* skip C comment-start */
 	if (s[0] == '/' && (s[1] == '*' || s[1] == '/'))
+	{
 	    s = skipwhite(s + 2);
+	    if (*skipwhite(s) == NUL
+			      && lnum + 1 < (linenr_T)vimvars[VV_FOLDEND].val)
+	    {
+		s = skipwhite(ml_get(lnum + 1));
+		if (*s == '*')
+		    s = skipwhite(s + 1);
+	    }
+	}
 	txt = _("+-%s%3ld lines: ");
 	r = alloc((unsigned)(STRLEN(txt)
 		    + STRLEN(vimvars[VV_FOLDDASHES].val)    /* for %s */
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 30a5f3a..7ad5513 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -7892,7 +7892,6 @@
 ex_normal(eap)
     exarg_T	*eap;
 {
-    oparg_T	oa;
     int		save_msg_scroll = msg_scroll;
     int		save_restart_edit = restart_edit;
     int		save_msg_didout = msg_didout;
@@ -7996,30 +7995,17 @@
 	 */
 	do
 	{
-	    clear_oparg(&oa);
-	    finish_op = FALSE;
 	    if (eap->addr_count != 0)
 	    {
 		curwin->w_cursor.lnum = eap->line1++;
 		curwin->w_cursor.col = 0;
 	    }
 
-	    /*
-	     * Stuff the argument into the typeahead buffer.
-	     * Execute normal_cmd() until there is no typeahead left.
-	     */
-	    ins_typebuf(
+	    exec_normal_cmd(
 #ifdef FEAT_MBYTE
 		    arg != NULL ? arg :
 #endif
-		    eap->arg, eap->forceit ? REMAP_NONE : REMAP_YES, 0,
-								 TRUE, FALSE);
-	    while ((!stuff_empty() || (!typebuf_typed() && typebuf.tb_len > 0))
-		    && !got_int)
-	    {
-		update_topline_cursor();
-		normal_cmd(&oa, FALSE);	/* execute a Normal mode cmd */
-	    }
+		    eap->arg, eap->forceit ? REMAP_NONE : REMAP_YES, FALSE);
 	}
 	while (eap->addr_count > 0 && eap->line1 <= eap->line2 && !got_int);
     }
@@ -8085,6 +8071,35 @@
 }
 #endif
 
+#if defined(FEAT_EX_EXTRA) || defined(FEAT_MENU) || defined(PROTO)
+/*
+ * Execute normal mode command "cmd".
+ * "remap" can be REMAP_NONE or REMAP_YES.
+ */
+    void
+exec_normal_cmd(cmd, remap, silent)
+    char_u	*cmd;
+    int		remap;
+    int		silent;
+{
+    oparg_T	oa;
+
+    /*
+     * Stuff the argument into the typeahead buffer.
+     * Execute normal_cmd() until there is no typeahead left.
+     */
+    clear_oparg(&oa);
+    finish_op = FALSE;
+    ins_typebuf(cmd, remap, 0, TRUE, silent);
+    while ((!stuff_empty() || (!typebuf_typed() && typebuf.tb_len > 0))
+								  && !got_int)
+    {
+	update_topline_cursor();
+	normal_cmd(&oa, FALSE);	/* execute a Normal mode cmd */
+    }
+}
+#endif
+
 #ifdef FEAT_FIND_ID
     static void
 ex_checkpath(eap)
@@ -8742,6 +8757,17 @@
     }
 
     /*
+     * If there is an empty, unnamed buffer we will wipe it out later.
+     * Remember the buffer number.
+     */
+    if (put_line(fd, "if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == ''") == FAIL)
+	return FAIL;
+    if (put_line(fd, "  let s:wipebuf = bufnr('%')") == FAIL)
+	return FAIL;
+    if (put_line(fd, "endif") == FAIL)
+	return FAIL;
+
+    /*
      * Now save the current files, current buffer first.
      */
     if (put_line(fd, "set shortmess=aoO") == FAIL)
@@ -8876,6 +8902,18 @@
 	return FAIL;
 
     /*
+     * Wipe out an empty unnamed buffer we started in.
+     */
+    if (put_line(fd, "if exists('s:wipebuf')") == FAIL)
+	return FAIL;
+    if (put_line(fd, "  exe 'bwipe ' . s:wipebuf") == FAIL)
+	return FAIL;
+    if (put_line(fd, "endif") == FAIL)
+	return FAIL;
+    if (put_line(fd, "unlet! s:wipebuf") == FAIL)
+	return FAIL;
+
+    /*
      * Restore window sizes again after jumping around in windows, because the
      * current window has a minimum size while others may not.
      */
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 8be11e1..e2699bc 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -1820,19 +1820,25 @@
 }
 
 /*
- * Function to be called before a failed command invokes a sequence of
- * autocommands for cleanup.  (Failure means here that a call to emsg() has
- * been made, an interrupt occurred, or there is an uncaught exception from a
- * previous autocommand execution of the same command.)  This function works a
- * bit like ex_finally() except that there was not actually an extra try block
- * around the part that failed and an error or interrupt has not (yet) been
- * converted to an exception.  This function saves the
- * error/interrupt/exception state and prepares for the call to do_cmdline()
- * that is going to be made for the cleanup autocommand execution.
+ * enter_cleanup() and leave_cleanup()
  *
- * Stores the pending error/interrupt/exception state in the cleanup_T
- * structure pointed to by "csp", which has to be passed as an argument to
- * leave_cleanup() after the autocommand execution has finished.
+ * Functions to be called before/after invoking a sequence of autocommands for
+ * cleanup for a failed command.  (Failure means here that a call to emsg()
+ * has been made, an interrupt occurred, or there is an uncaught exception
+ * from a previous autocommand execution of the same command.)
+ *
+ * Call enter_cleanup() with a pointer to a cleanup_T and pass the same
+ * pointer to leave_cleanup().  The cleanup_T structure stores the pending
+ * error/interrupt/exception state.
+ */
+
+/*
+ * This function works a bit like ex_finally() except that there was not
+ * actually an extra try block around the part that failed and an error or
+ * interrupt has not (yet) been converted to an exception.  This function
+ * saves the error/interrupt/ exception state and prepares for the call to
+ * do_cmdline() that is going to be made for the cleanup autocommand
+ * execution.
  */
     void
 enter_cleanup(csp)
@@ -1883,16 +1889,19 @@
 }
 
 /*
- * Function to be called after a failed command invoked a sequence of
- * autocommands for cleanup.  It is a bit like ex_endtry() except that there
- * was not actually an extra try block around the part that failed and an
- * error or interrupt had not (yet) been converted to an exception when the
- * cleanup autocommand sequence was invoked.  This function has to be called
- * with the address of the cleanup_T structure filled by enter_cleanup() as an
- * argument; it restores the error/interrupt/exception state saved by that
- * function - except there was an aborting error, an interrupt or an uncaught
- * exception during execution of the cleanup autocommands.  In the latter
- * case, the saved error/interrupt/ exception state is discarded.
+ * See comment above enter_cleanup() for how this function is used.
+ *
+ * This function is a bit like ex_endtry() except that there was not actually
+ * an extra try block around the part that failed and an error or interrupt
+ * had not (yet) been converted to an exception when the cleanup autocommand
+ * sequence was invoked.
+ *
+ * This function has to be called with the address of the cleanup_T structure
+ * filled by enter_cleanup() as an argument; it restores the error/interrupt/
+ * exception state saved by that function - except there was an aborting
+ * error, an interrupt or an uncaught exception during execution of the
+ * cleanup autocommands.  In the latter case, the saved error/interrupt/
+ * exception state is discarded.
  */
     void
 leave_cleanup(csp)
@@ -1959,7 +1968,7 @@
 
 	/* Report if required by the 'verbose' option or when debugging. */
 	report_resume_pending(pending,
-		(pending & CSTP_THROW) ? (void *)current_exception : NULL);
+		   (pending & CSTP_THROW) ? (void *)current_exception : NULL);
     }
 }
 
diff --git a/src/fileio.c b/src/fileio.c
index 029a339..c37c96a 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3985,8 +3985,9 @@
      * journalled.  Syncing the file slows down the system, but assures it has
      * been written to disk and we don't lose it.
      * For a device do try the fsync() but don't complain if it does not work
-     * (could be a pipe). */
-    if (fsync(fd) != 0 && !device)
+     * (could be a pipe).
+     * If the 'fsync' option is FALSE, don't fsync().  Useful for laptops. */
+    if (p_fs && fsync(fd) != 0 && !device)
     {
 	errmsg = (char_u *)_("E667: Fsync failed");
 	end = 0;
diff --git a/src/fold.c b/src/fold.c
index 1aee87c..bb268fb 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -902,6 +902,8 @@
     int		level;
     int		last;
 
+    checkupdate(curwin);
+
     /* Repeat "count" times. */
     for (n = 0; n < count; ++n)
     {
@@ -2883,7 +2885,7 @@
 	{
 	    /* Found an entry below top. */
 	    fold_changed = TRUE;
-	    if (fp->fd_top + fp->fd_len > bot)
+	    if (fp->fd_top + fp->fd_len - 1 > bot)
 	    {
 		/* 5: Make fold that includes bot start below bot. */
 		foldMarkAdjustRecurse(&fp->fd_nested,
diff --git a/src/getchar.c b/src/getchar.c
index f050540..dd52ac4 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1514,6 +1514,17 @@
 		continue;
 	    }
 #endif
+#ifdef HAVE_GTK2
+	    /* GTK: <F10> normally selects the menu, but it's passed until
+	     * here to allow mapping it.  Intercept and invoke the GTK
+	     * behavior if it's not mapped. */
+	    if (c == K_F10 && gui.menubar != NULL)
+	    {
+		gtk_menu_shell_select_first(GTK_MENU_SHELL(gui.menubar), FALSE);
+		continue;
+	    }
+#endif
+
 #ifdef FEAT_GUI
 	    /* Translate K_CSI to CSI.  The special key is only used to avoid
 	     * it being recognized as the start of a special key. */
@@ -1540,7 +1551,14 @@
 		case K_KDIVIDE:		c = '/'; break;
 		case K_KMULTIPLY:	c = '*'; break;
 		case K_KENTER:		c = CAR; break;
-		case K_KPOINT:		c = '.'; break;
+		case K_KPOINT:
+#ifdef WIN32
+					/* Can be either '.' or a ',', *
+					 * depending on the type of keypad. */
+					c = MapVirtualKey(VK_DECIMAL, 2); break;
+#else
+					c = '.'; break;
+#endif
 		case K_K0:		c = '0'; break;
 		case K_K1:		c = '1'; break;
 		case K_K2:		c = '2'; break;
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 6d6d55d..b67b6f2 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -3080,6 +3080,17 @@
     gui.menubar = gtk_menu_bar_new();
     gtk_widget_set_name(gui.menubar, "vim-menubar");
 
+# ifdef HAVE_GTK2
+    /* Avoid that GTK takes <F10> away from us. */
+    {
+	GtkSettings *gtk_settings;
+
+	gtk_settings = gtk_settings_get_for_screen(gdk_screen_get_default());
+	g_object_set(gtk_settings, "gtk-menu-bar-accel", NULL, NULL);
+    }
+# endif
+
+
 # ifdef FEAT_GUI_GNOME
     if (using_gnome)
     {
diff --git a/src/gui_mac.c b/src/gui_mac.c
index f60567e..7ad96fc 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -3792,6 +3792,27 @@
 	(void)SwapQDTextFlags(qd_flags);
     }
 
+    /*
+     * When antialiasing we're using srcOr mode, we have to clear the block
+     * before drawing the text.
+     * Also needed when 'linespace' is non-zero to remove the cursor and
+     * underlining.
+     * But not when drawing transparently.
+     * The following is like calling gui_mch_clear_block(row, col, row, col +
+     * len - 1), but without setting the bg color to gui.back_pixel.
+     */
+    if (((sys_version >= 0x1020 && p_antialias) || p_linespace != 0)
+	    && !(flags & DRAW_TRANSP))
+    {
+	Rect rc;
+
+	rc.left = FILL_X(col);
+	rc.top = FILL_Y(row);
+	rc.right = FILL_X(col + len) + (col + len == Columns);
+	rc.bottom = FILL_Y(row + 1);
+	EraseRect(&rc);
+    }
+
     if (sys_version >= 0x1020 && p_antialias)
     {
 	StyleParameter face;
@@ -3806,22 +3827,6 @@
 	/* Quartz antialiasing works only in srcOr transfer mode. */
 	TextMode(srcOr);
 
-	if (!(flags & DRAW_TRANSP))
-	{
-	    /*
-	     * Since we're using srcOr mode, we have to clear the block
-	     * before drawing the text.  The following is like calling
-	     * gui_mch_clear_block(row, col, row, col + len - 1),
-	     * but without setting the bg color to gui.back_pixel.
-	     */
-	    Rect rc;
-	    rc.left = FILL_X(col);
-	    rc.top = FILL_Y(row);
-	    rc.right = FILL_X(col + len) + (col + len == Columns);
-	    rc.bottom = FILL_Y(row + 1);
-	    EraseRect(&rc);
-	}
-
 	MoveTo(TEXT_X(col), TEXT_Y(row));
 	DrawText((char*)s, 0, len);
     }
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 0afa12d..461dcef 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -789,8 +789,7 @@
 	    break;
 	}
 #ifdef MSWIN_FIND_REPLACE
-	else
-	if (uMsg == s_findrep_msg && s_findrep_msg != 0)
+	else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
 	{
 	    _OnFindRepl();
 	}
@@ -1411,20 +1410,6 @@
 #include <imm.h>
 
 /*
- * display composition string(korean)
- */
-    static void
-DisplayCompStringOpaque(char_u *s, int len)
-{
-    int OldBkMode = GetBkMode(s_hdc);
-
-    SetBkMode(s_hdc, OPAQUE);
-    gui_outstr_nowrap(s, len, GUI_MON_TRS_CURSOR,
-					     (guicolor_T)0, (guicolor_T)0, 0);
-    SetBkMode(s_hdc, OldBkMode);
-}
-
-/*
  * handle WM_IME_NOTIFY message
  */
     static LRESULT
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 4f0bab7..516d070 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -488,27 +488,49 @@
     WCHAR	wstring[2];
     char_u	*ws = NULL;;
 
-    /* "ch" is a UTF-16 character.  Convert it to a string of bytes.  When
-     * "enc_codepage" is non-zero use the standard Win32 function, otherwise
-     * use our own conversion function (e.g., for UTF-8). */
-    wstring[0] = ch;
-    if (enc_codepage > 0)
-	len = WideCharToMultiByte(enc_codepage, 0, wstring, 1, string, slen,
-								     0, NULL);
-    else
+    if (os_version.dwPlatformId != VER_PLATFORM_WIN32_NT)
     {
-	len = 1;
-	ws = ucs2_to_enc(wstring, &len);
-	if (ws == NULL)
-	    len = 0;
+	/* On Windows 95/98 we apparently get the character in the active
+	 * codepage, not in UCS-2.  If conversion is needed convert it to
+	 * UCS-2 first. */
+	if ((int)GetACP() == enc_codepage)
+	    len = 0;	    /* no conversion required */
 	else
 	{
-	    if (len > slen)	/* just in case */
-		len = slen;
-	    mch_memmove(string, ws, len);
-	    vim_free(ws);
+	    string[0] = ch;
+	    len = MultiByteToWideChar(GetACP(), 0, string, 1, wstring, 2);
 	}
     }
+    else
+    {
+	wstring[0] = ch;
+	len = 1;
+    }
+
+    if (len > 0)
+    {
+	/* "ch" is a UTF-16 character.  Convert it to a string of bytes.  When
+	 * "enc_codepage" is non-zero use the standard Win32 function,
+	 * otherwise use our own conversion function (e.g., for UTF-8). */
+	if (enc_codepage > 0)
+	    len = WideCharToMultiByte(enc_codepage, 0, wstring, len,
+						       string, slen, 0, NULL);
+	else
+	{
+	    len = 1;
+	    ws = ucs2_to_enc(wstring, &len);
+	    if (ws == NULL)
+		len = 0;
+	    else
+	    {
+		if (len > slen)	/* just in case */
+		    len = slen;
+		mch_memmove(string, ws, len);
+		vim_free(ws);
+	    }
+	}
+    }
+
     if (len == 0)
 #endif
     {
@@ -682,9 +704,10 @@
 	 * Holding down the left and right buttons simulates pushing the middle
 	 * button.
 	 */
-	if (repeated_click &&
-		((button == MOUSE_LEFT && s_button_pending == MOUSE_RIGHT) ||
-		 (button == MOUSE_RIGHT && s_button_pending == MOUSE_LEFT)))
+	if (repeated_click
+		&& ((button == MOUSE_LEFT && s_button_pending == MOUSE_RIGHT)
+		    || (button == MOUSE_RIGHT
+					  && s_button_pending == MOUSE_LEFT)))
 	{
 	    /*
 	     * Hmm, gui.c will ignore more than one button down at a time, so
@@ -745,7 +768,7 @@
     {
 	/* Delayed action for mouse down event */
 	_OnMouseEvent(s_button_pending, s_x_pending,
-			s_y_pending, FALSE, s_kFlags_pending);
+					s_y_pending, FALSE, s_kFlags_pending);
 	s_button_pending = -1;
     }
     if (s_uMsg == WM_MOUSEMOVE)
@@ -1532,6 +1555,9 @@
     int		i;
     int		modifiers = 0;
     int		key;
+#ifdef FEAT_MENU
+    static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
+#endif
 
     GetMessage(&msg, NULL, 0, 0);
 
@@ -1619,11 +1645,11 @@
 		    && (vk != VK_SPACE || !(GetKeyState(VK_MENU) & 0x8000)))
 	    {
 #ifdef FEAT_MENU
-		/* Check for <F10>: Windows selects the menu.  Ignore it when
-		 * 'winaltkeys' is "yes" or "menu" */
+		/* Check for <F10>: Windows selects the menu.  When <F10> is
+		 * mapped we want to use the mapping instead. */
 		if (vk == VK_F10
 			&& gui.menu_is_active
-			&& (*p_wak == 'y' || *p_wak == 'm'))
+			&& check_map(k10, State, FALSE) == NULL)
 		    break;
 #endif
 		if (GetKeyState(VK_SHIFT) & 0x8000)
@@ -1734,9 +1760,10 @@
 #endif
 
 #ifdef FEAT_MENU
-    /* Check for <F10>: Windows selects the menu.  Don't let Windows handle it
-     * when 'winaltkeys' is "no" */
-    if (vk != VK_F10 || *p_wak != 'n')
+    /* Check for <F10>: Default effect is to select the menu.  When <F10> is
+     * mapped we need to stop it here to avoid strange effects (e.g., for the
+     * key-up event) */
+    if (vk != VK_F10 || check_map(k10, State, FALSE) == NULL)
 #endif
 	DispatchMessage(&msg);
 }
@@ -1829,6 +1856,11 @@
 		s_wait_timer = 0;
 	    }
 	    allow_scrollbar = FALSE;
+
+	    /* Clear pending mouse button, the release event may have been
+	     * taken by the dialog window. */
+	    s_button_pending = -1;
+
 	    return OK;
 	}
     }
diff --git a/src/if_cscope.c b/src/if_cscope.c
index 012e86c..f218ea4 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -1092,7 +1092,7 @@
 	    return FALSE;
 	}
     }
-    if (qfpos != NULL && *qfpos != '0' && totmatches > 1)
+    if (qfpos != NULL && *qfpos != '0' && totmatches > 0)
     {
 	/* fill error list */
 	FILE *f;
diff --git a/src/if_python.c b/src/if_python.c
index 8f4fdfd..511378a 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -381,13 +381,14 @@
 #endif /* Python 1.4 */
 
 #ifndef PY_CAN_RECURSE
-static PyThreadState* saved_python_thread = NULL;
+static PyThreadState *saved_python_thread = NULL;
 
 /*
  * Suspend a thread of the Python interpreter, other threads are allowed to
  * run.
  */
-static void Python_SaveThread(void)
+    static void
+Python_SaveThread(void)
 {
     saved_python_thread = PyEval_SaveThread();
 }
@@ -396,7 +397,8 @@
  * Restore a thread of the Python interpreter, waits for other threads to
  * block.
  */
-static void Python_RestoreThread(void)
+    static void
+Python_RestoreThread(void)
 {
     PyEval_RestoreThread(saved_python_thread);
     saved_python_thread = NULL;
@@ -456,8 +458,10 @@
 	if (PythonMod_Init())
 	    goto fail;
 
-#ifndef PY_CAN_RECURSE
-	/* the first python thread is vim's */
+	/* the first python thread is vim's, release the lock */
+#ifdef PY_CAN_RECURSE
+	PyEval_SaveThread();
+#else
 	Python_SaveThread();
 #endif
 
diff --git a/src/keymap.h b/src/keymap.h
index 24b0d61..cb79ad1 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -383,7 +383,7 @@
 #define K_KDIVIDE	TERMCAP2KEY('K', '8')	/* keypad / */
 #define K_KMULTIPLY	TERMCAP2KEY('K', '9')	/* keypad * */
 #define K_KENTER	TERMCAP2KEY('K', 'A')	/* keypad Enter */
-#define K_KPOINT	TERMCAP2KEY('K', 'B')	/* keypad . */
+#define K_KPOINT	TERMCAP2KEY('K', 'B')	/* keypad . or ,*/
 
 #define K_K0		TERMCAP2KEY('K', 'C')	/* keypad 0 */
 #define K_K1		TERMCAP2KEY('K', 'D')	/* keypad 1 */
diff --git a/src/main.c b/src/main.c
index 3976a44..5791bb6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2228,6 +2228,12 @@
 getout_preserve_modified(exitval)
     int		exitval;
 {
+#if defined(UNIX)
+    /* Ignore SIGHUP, because a dropped connection may make Vim exit and then
+     * get a SIGHUP while exiting, which causes various reentrent problems. */
+    signal(SIGHUP, SIG_IGN);
+#endif
+
     ml_close_notmod();		    /* close all not-modified buffers */
     ml_sync_all(FALSE, FALSE);	    /* preserve all swap files */
     ml_close_all(FALSE);	    /* close all memfiles, without deleting */
diff --git a/src/menu.c b/src/menu.c
index 258b84d..a64745b 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -2107,8 +2107,9 @@
 	return;
     }
 
-    /* Found the menu, so execute. */
-    if (restart_edit)
+    /* Found the menu, so execute.
+     * Use the Insert mode entry when returning to Insert mode. */
+    if (restart_edit && !current_SID)
     {
 	mode = (char_u *)"Insert";
 	idx = MENU_INDEX_INSERT;
@@ -2123,8 +2124,7 @@
 	/* GEDDES: This is not perfect - but it is a
 	 * quick way of detecting whether we are doing this from a
 	 * selection - see if the range matches up with the visual
-	 * select start and end.
-	 */
+	 * select start and end.  */
 	if ((curbuf->b_visual_start.lnum == eap->line1)
 		&& (curbuf->b_visual_end.lnum) == eap->line2)
 	{
@@ -2144,8 +2144,7 @@
 	    tpos.col = MAXCOL;
 	}
 
-	/* Activate visual mode
-	 */
+	/* Activate visual mode */
 	VIsual_active = TRUE;
 	VIsual_reselect = TRUE;
 	check_cursor();
@@ -2155,8 +2154,7 @@
 	check_cursor();
 
 	/* Adjust the cursor to make sure it is in the correct pos
-	 * for exclusive mode
-	 */
+	 * for exclusive mode */
 	if (*p_sel == 'e' && gchar_cursor() != NUL)
 	    ++curwin->w_cursor.col;
     }
@@ -2168,7 +2166,13 @@
 
     if (idx != MENU_INDEX_INVALID && menu->strings[idx] != NULL)
     {
-	ins_typebuf(menu->strings[idx], menu->noremap[idx], 0,
+	/* When executing a script or function execute the commands right now.
+	 * Otherwise put them in the typeahead buffer. */
+	if (current_SID != 0)
+	    exec_normal_cmd(menu->strings[idx], menu->noremap[idx],
+							   menu->silent[idx]);
+	else
+	    ins_typebuf(menu->strings[idx], menu->noremap[idx], 0,
 						     TRUE, menu->silent[idx]);
     }
     else
diff --git a/src/message.c b/src/message.c
index d678bf3..caf7ac0 100644
--- a/src/message.c
+++ b/src/message.c
@@ -487,7 +487,7 @@
     }
 
     /* remember the last sourcing name printed, also when it's empty */
-    if (sourcing_name == NULL || other_sourcing_name)
+    if (sourcing_name == NULL || other_sourcing_name())
     {
 	vim_free(last_sourcing_name);
 	if (sourcing_name == NULL)
diff --git a/src/misc1.c b/src/misc1.c
index ec74486..4dc5a41 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -7653,6 +7653,12 @@
     void
 prepare_to_exit()
 {
+#if defined(UNIX)
+    /* Ignore SIGHUP, because a dropped connection may make Vim exit and then
+     * get a SIGHUP while exiting, which causes various reentrent problems. */
+    signal(SIGHUP, SIG_IGN);
+#endif
+
 #ifdef FEAT_GUI
     if (gui.in_use)
     {
diff --git a/src/move.c b/src/move.c
index 0c37aa0..d1eb025 100644
--- a/src/move.c
+++ b/src/move.c
@@ -1551,7 +1551,12 @@
 	    --curwin->w_topfill;
 	else
 #endif
+	{
+#ifdef FEAT_FOLDING
+	    (void)hasFolding(curwin->w_topline, NULL, &curwin->w_topline);
+#endif
 	    ++curwin->w_topline;
+	}
 	++curwin->w_botline;		/* approximate w_botline */
 	curwin->w_valid &= ~(VALID_WROW|VALID_CROW|VALID_BOTLINE);
     }
diff --git a/src/netbeans.c b/src/netbeans.c
index 50ea188..b51ddfb 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -2380,7 +2380,7 @@
 
 	if ((sep = strchr(tok, '-')) != NULL)
 	{
-	    *sep = NULL;
+	    *sep = NUL;
 	    while (*tok)
 	    {
 		switch (*tok)
diff --git a/src/normal.c b/src/normal.c
index b252e2e..83759b7 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -1127,6 +1127,11 @@
 #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...
      */
diff --git a/src/ops.c b/src/ops.c
index 29afc56..2980f93 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2886,6 +2886,15 @@
      */
     curbuf->b_op_start = oap->start;
     curbuf->b_op_end = oap->end;
+    if (yanktype == MLINE
+#ifdef FEAT_VISUAL
+		&& !oap->block_mode
+#endif
+       )
+    {
+	curbuf->b_op_start.col = 0;
+	curbuf->b_op_end.col = MAXCOL;
+    }
 
 #ifdef FEAT_CLIPBOARD
     /*
diff --git a/src/option.c b/src/option.c
index 6c62196..d3e47eb 100644
--- a/src/option.c
+++ b/src/option.c
@@ -302,6 +302,7 @@
 #define P_SECURE	0x40000L/* cannot change in modeline or secure mode */
 #define P_GETTEXT	0x80000L/* expand default value with _() */
 #define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
+#define P_NFNAME       0x200000L/* only normal file name chars allowed */
 
 /*
  * options[] is initialized here.
@@ -422,7 +423,7 @@
     {"backupdir",   "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE,
 			    (char_u *)&p_bdir, PV_NONE,
 			    {(char_u *)DFLT_BDIR, (char_u *)0L}},
-    {"backupext",   "bex",  P_STRING|P_VI_DEF,
+    {"backupext",   "bex",  P_STRING|P_VI_DEF|P_NFNAME,
 			    (char_u *)&p_bex, PV_NONE,
 			    {
 #ifdef VMS
@@ -864,7 +865,7 @@
     {"fileformats", "ffs",  P_STRING|P_VIM|P_COMMA|P_NODUP,
 			    (char_u *)&p_ffs, PV_NONE,
 			    {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}},
-    {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
+    {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
 #ifdef FEAT_AUTOCMD
 			    (char_u *)&p_ft, PV_FT,
 			    {(char_u *)"", (char_u *)0L}
@@ -953,6 +954,15 @@
     {"formatprg",   "fp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
 			    (char_u *)&p_fp, PV_NONE,
 			    {(char_u *)"", (char_u *)0L}},
+    {"fsync",       "fs",   P_BOOL|P_SECURE|P_VI_DEF,
+#ifdef HAVE_FSYNC
+			    (char_u *)&p_fs, PV_NONE,
+			    {(char_u *)TRUE, (char_u *)0L}
+#else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)FALSE, (char_u *)0L}
+#endif
+			    },
     {"gdefault",    "gd",   P_BOOL|P_VI_DEF|P_VIM,
 			    (char_u *)&p_gd, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L}},
@@ -1278,7 +1288,8 @@
     {"isprint",	    "isp",  P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP,
 			    (char_u *)&p_isp, PV_NONE,
 			    {
-#if defined(MSDOS) || defined(MSWIN) || defined(OS2) || defined(MACOS) \
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2) \
+		|| (defined(MACOS) && !defined(MACOS_X)) \
 		|| defined(VMS)
 			    (char_u *)"@,~-255",
 #else
@@ -1302,7 +1313,7 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    },
-    {"keymap",	    "kmp",  P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT,
+    {"keymap",	    "kmp",  P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME,
 #ifdef FEAT_KEYMAP
 			    (char_u *)&p_keymap, PV_KMAP,
 			    {(char_u *)"", (char_u *)0L}
@@ -1348,7 +1359,7 @@
 			    {(char_u *)NULL,
 #endif
 				(char_u *)0L}},
-    {"langmenu",    "lm",   P_STRING|P_VI_DEF,
+    {"langmenu",    "lm",   P_STRING|P_VI_DEF|P_NFNAME,
 #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
 			    (char_u *)&p_lm, PV_NONE,
 #else
@@ -1594,7 +1605,7 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    },
-    {"patchmode",   "pm",   P_STRING|P_VI_DEF,
+    {"patchmode",   "pm",   P_STRING|P_VI_DEF|P_NFNAME,
 			    (char_u *)&p_pm, PV_NONE,
 			    {(char_u *)"", (char_u *)0L}},
     {"path",	    "pa",   P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
@@ -1627,7 +1638,7 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)FALSE, (char_u *)0L}},
-    {"printdevice", "pdev", P_STRING|P_VI_DEF,
+    {"printdevice", "pdev", P_STRING|P_VI_DEF|P_SECURE,
 #ifdef FEAT_PRINTER
 			    (char_u *)&p_pdev, PV_NONE,
 			    {(char_u *)"", (char_u *)0L}
@@ -2040,7 +2051,7 @@
     {"switchbuf",   "swb",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
 			    (char_u *)&p_swb, PV_NONE,
 			    {(char_u *)"", (char_u *)0L}},
-    {"syntax",	    "syn",  P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
+    {"syntax",	    "syn",  P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
 #ifdef FEAT_SYN_HL
 			    (char_u *)&p_syn, PV_SYN,
 			    {(char_u *)"", (char_u *)0L}
@@ -2145,7 +2156,7 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)85L, (char_u *)0L}},
-    {"titleold",    NULL,   P_STRING|P_VI_DEF|P_GETTEXT,
+    {"titleold",    NULL,   P_STRING|P_VI_DEF|P_GETTEXT|P_SECURE,
 #ifdef FEAT_TITLE
 			    (char_u *)&p_titleold, PV_NONE,
 			    {(char_u *)N_("Thanks for flying Vim"),
@@ -2380,7 +2391,7 @@
 			    {(char_u *)0L, (char_u *)0L}},
 
 /* terminal output codes */
-#define p_term(sss, vvv)   {sss, NULL, P_STRING|P_VI_DEF|P_RALL, \
+#define p_term(sss, vvv)   {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \
 			    (char_u *)&vvv, PV_NONE, \
 			    {(char_u *)"", (char_u *)0L}},
 
@@ -2435,6 +2446,8 @@
     p_term("t_vs", T_VS)
     p_term("t_WP", T_CWP)
     p_term("t_WS", T_CWS)
+    p_term("t_SI", T_CSI)
+    p_term("t_EI", T_CEI)
     p_term("t_xs", T_XS)
     p_term("t_ZH", T_CZH)
     p_term("t_ZR", T_CZR)
@@ -3388,7 +3401,8 @@
 	errmsg = NULL;
 	startarg = arg;		/* remember for error message */
 
-	if (STRNCMP(arg, "all", 3) == 0 && !isalpha(arg[3]))
+	if (STRNCMP(arg, "all", 3) == 0 && !isalpha(arg[3])
+						&& !(opt_flags & OPT_MODELINE))
 	{
 	    /*
 	     * ":set all"  show all options.
@@ -3404,7 +3418,7 @@
 	    else
 		showoptions(1, opt_flags);
 	}
-	else if (STRNCMP(arg, "termcap", 7) == 0)
+	else if (STRNCMP(arg, "termcap", 7) == 0 && !(opt_flags & OPT_MODELINE))
 	{
 	    showoptions(2, opt_flags);
 	    show_termcodes();
@@ -4704,6 +4718,15 @@
 	errmsg = e_secure;
     }
 
+    /* Check for a "normal" file name in some options.  Disallow a path
+     * separator (slash and/or backslash), wildcards and characters that are
+     * often illegal in a file name. */
+    else if ((options[opt_idx].flags & P_NFNAME)
+				   && vim_strpbrk(*varp, "/\\*?[|<>") != NULL)
+    {
+	errmsg = e_invarg;
+    }
+
     /* 'term' */
     else if (varp == &T_NAME)
     {
diff --git a/src/option.h b/src/option.h
index acb23de..566a561 100644
--- a/src/option.h
+++ b/src/option.h
@@ -19,26 +19,30 @@
 # endif
 #endif
 
-/* default values for p_efm 'errorformat' */
+/*
+ * Default values for 'errorformat'.
+ * The "%f|%l| %m" one is used for when the contents of the quickfix window is
+ * written to a file.
+ */
 #ifdef AMIGA
-# define DFLT_EFM	"%f>%l:%c:%t:%n:%m,%f:%l: %t%*\\D%n: %m,%f %l %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f:%l:%m"
+# define DFLT_EFM	"%f>%l:%c:%t:%n:%m,%f:%l: %t%*\\D%n: %m,%f %l %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f:%l:%m,%f|%l| %m"
 #else
 # if defined(MSDOS) || defined(WIN3264)
-#  define DFLT_EFM	"%f(%l) : %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f(%l) : %m,%*[^ ] %f %l: %m,%f:%l:%m"
+#  define DFLT_EFM	"%f(%l) : %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f(%l) : %m,%*[^ ] %f %l: %m,%f:%l:%m,%f|%l| %m"
 # else
 #  if defined(__EMX__)	/* put most common here (i.e. gcc format) at front */
-#   define DFLT_EFM	"%f:%l:%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f(%l:%c) : %m"
+#   define DFLT_EFM	"%f:%l:%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f(%l:%c) : %m,%f|%l| %m"
 #  else
 #   if defined(__QNX__)
-#    define DFLT_EFM	"%f(%l):%*[^WE]%t%*\\D%n:%m"
+#    define DFLT_EFM	"%f(%l):%*[^WE]%t%*\\D%n:%m,%f|%l| %m"
 #   else
 #    ifdef VMS
-#     define DFLT_EFM	"%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f"
+#     define DFLT_EFM	"%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f,%f|%l| %m"
 #    else /* Unix, probably */
 #     ifdef EBCDIC
-#define DFLT_EFM	"%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f"
+#define DFLT_EFM	"%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
 #     else
-#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f"
+#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
 #     endif
 #    endif
 #   endif
@@ -445,6 +449,7 @@
 # define FDO_JUMP		0x400
 #endif
 EXTERN char_u	*p_fp;		/* 'formatprg' */
+EXTERN int	p_fs;		/* 'fsync' */
 EXTERN int	p_gd;		/* 'gdefault' */
 #ifdef FEAT_PRINTER
 EXTERN char_u	*p_pdev;	/* 'printdevice' */
diff --git a/src/os_msdos.c b/src/os_msdos.c
index 92b14ea..1056fe0 100644
--- a/src/os_msdos.c
+++ b/src/os_msdos.c
@@ -505,14 +505,14 @@
     if (restore)
     {
 	if (saved)
-	    regs.h.ah = 0x01;	    /*Set Cursor*/
+	    regs.h.ah = 0x01;	    /* Set Cursor */
 	else
 	    return;
     }
     else
     {
-	regs.h.ah = 0x03;	    /*Get Cursor*/
-	regs.h.bh = 0x00;	    /*Page */
+	regs.h.ah = 0x03;	    /* Get Cursor */
+	regs.h.bh = 0x00;	    /* Page */
 	saved = TRUE;
     }
 
@@ -528,9 +528,9 @@
 {
     union REGS	    regs;
 
-    regs.h.ch = 7 - thickness;	    /*Starting Line*/
-    regs.h.cl = 7;		    /*Ending Line*/
-    regs.h.ah = 0x01;		    /*Set Cursor*/
+    regs.h.ch = 7 - thickness;	    /* Starting Line */
+    regs.h.cl = 7;		    /* Ending Line */
+    regs.h.ah = 0x01;		    /* Set Cursor */
     (void)int86(0x10, &regs, &regs);
 }
 
diff --git a/src/os_unix.c b/src/os_unix.c
index 08e9fc8..373dce1 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -903,6 +903,13 @@
     }
 #endif
 
+#ifdef SIGHASARG
+    /* When SIGHUP is blocked: postpone its effect and return here.  This
+     * avoids that a non-reentrant function is interrupted, e.g., free(). */
+    if (entered == 0 && sigarg == SIGHUP && !handle_sighup(SIGHUP_RCV))
+	SIGRETURN;
+#endif
+
     /* Remember how often we have been called. */
     ++entered;
 
@@ -1174,6 +1181,39 @@
 }
 
 /*
+ * Handling of SIGHUP:
+ * "when" == SIGHUP_RCV:  when busy, postpone, otherwise return TRUE
+ * "when" == SIGHUP_BLOCK: Going to be busy, block SIGHUP
+ * "when" == SIGHUP_UNBLOCK: Going wait, unblock SIGHUP
+ * Returns TRUE when Vim should exit.
+ */
+    int
+handle_sighup(when)
+    int		when;
+{
+    static int got_sighup = FALSE;
+    static int blocked = FALSE;
+
+    switch (when)
+    {
+	case SIGHUP_RCV:     if (!blocked)
+				 return TRUE;	/* exit! */
+			     got_sighup = TRUE;
+			     got_int = TRUE;    /* break any loops */
+			     break;
+
+	case SIGHUP_BLOCK:   blocked = TRUE;
+			     break;
+
+	case SIGHUP_UNBLOCK: blocked = FALSE;
+			     if (got_sighup)
+				 kill(getpid(), SIGHUP);
+			     break;
+    }
+    return FALSE;
+}
+
+/*
  * Check_win checks whether we have an interactive stdout.
  */
 /* ARGSUSED */
diff --git a/src/os_win32.c b/src/os_win32.c
index fce48f9..23a31f3 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -228,15 +228,18 @@
 #  define GETTEXT_DLL "libintl.dll"
 # endif
 /* Dummy funcitons */
-static char* null_libintl_gettext(const char *);
-static char* null_libintl_textdomain(const char *);
-static char* null_libintl_bindtextdomain(const char *, const char *);
+static char *null_libintl_gettext(const char *);
+static char *null_libintl_textdomain(const char *);
+static char *null_libintl_bindtextdomain(const char *, const char *);
+static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
 
 static HINSTANCE hLibintlDLL = 0;
-char* (*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
-char* (*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
-char* (*dyn_libintl_bindtextdomain)(const char *, const char *)
+char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
 						= null_libintl_bindtextdomain;
+char *(*dyn_libintl_bind_textdomain_codeset)(const char *, const char *)
+				       = null_libintl_bind_textdomain_codeset;
 
     int
 dyn_libintl_init(char *libname)
@@ -287,6 +290,15 @@
 	    return 0;
 	}
     }
+
+    /* The bind_textdomain_codeset() function is optional. */
+    (FARPROC)dyn_libintl_bind_textdomain_codeset =
+					  (FARPROC)GetProcAddress(hLibintlDLL,
+						   "bind_textdomain_codeset");
+    if (dyn_libintl_bind_textdomain_codeset == NULL)
+	dyn_libintl_bind_textdomain_codeset =
+					 null_libintl_bind_textdomain_codeset;
+
     return 1;
 }
 
@@ -299,6 +311,7 @@
     dyn_libintl_gettext		= null_libintl_gettext;
     dyn_libintl_textdomain	= null_libintl_textdomain;
     dyn_libintl_bindtextdomain	= null_libintl_bindtextdomain;
+    dyn_libintl_bind_textdomain_codeset = null_libintl_bind_textdomain_codeset;
 }
 
     static char *
@@ -314,6 +327,13 @@
 }
 
     static char *
+null_libintl_bind_textdomain_codeset(const char *domainname,
+							  const char *codeset)
+{
+    return NULL;
+}
+
+    static char *
 null_libintl_textdomain(const char *domainname)
 {
     return NULL;
diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro
index b3a2d2d..b6f3b7a 100644
--- a/src/proto/ex_docmd.pro
+++ b/src/proto/ex_docmd.pro
@@ -34,6 +34,7 @@
 void do_sleep __ARGS((long msec));
 FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode));
 void update_topline_cursor __ARGS((void));
+void exec_normal_cmd __ARGS((char_u *cmd, int remap, int silent));
 char_u *eval_vars __ARGS((char_u *src, int *usedlen, linenr_T *lnump, char_u **errormsg, char_u *srcstart));
 char_u *expand_sfile __ARGS((char_u *arg));
 int put_eol __ARGS((FILE *fd));
diff --git a/src/proto/os_unix.pro b/src/proto/os_unix.pro
index 9a3908b..6018c8f 100644
--- a/src/proto/os_unix.pro
+++ b/src/proto/os_unix.pro
@@ -11,6 +11,7 @@
 void mch_suspend __ARGS((void));
 void mch_init __ARGS((void));
 void reset_signals __ARGS((void));
+int handle_sighup __ARGS((int when));
 int mch_check_win __ARGS((int argc, char **argv));
 int mch_input_isatty __ARGS((void));
 int mch_can_restore_title __ARGS((void));
diff --git a/src/proto/term.pro b/src/proto/term.pro
index 16924ba..3215b0e 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -40,6 +40,7 @@
 void scroll_start __ARGS((void));
 void cursor_on __ARGS((void));
 void cursor_off __ARGS((void));
+void term_cursor_shape __ARGS((void));
 void scroll_region_set __ARGS((win_T *wp, int off));
 void scroll_region_reset __ARGS((void));
 void clear_termcodes __ARGS((void));
diff --git a/src/screen.c b/src/screen.c
index 68f6da1..88b17d4 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -110,8 +110,8 @@
     int		attr;	/* attributes to be used for a match */
     int		attr_cur; /* attributes currently active in win_line() */
     linenr_T	first_lnum;	/* first lnum to search for multi-line pat */
-    char_u	*startp; /* in win_line() points to char where HL starts */
-    char_u	*endp;	 /* in win_line() points to char where HL ends */
+    colnr_T	startcol; /* in win_line() points to char where HL starts */
+    colnr_T	endcol;	 /* in win_line() points to char where HL ends */
 } match_T;
 
 static match_T search_hl;	/* used for 'hlsearch' highlight matching */
@@ -944,8 +944,8 @@
 
 	/* When a change starts above w_topline and the end is below
 	 * w_topline, start redrawing at w_topline.
-	 * If the end of the change is above w_topline: do like no changes was
-	 * maded, but redraw the first line to find changes in syntax. */
+	 * If the end of the change is above w_topline: do like no change was
+	 * made, but redraw the first line to find changes in syntax. */
 	if (mod_top != 0 && mod_top < wp->w_topline)
 	{
 	    if (mod_bot > wp->w_topline)
@@ -955,6 +955,11 @@
 		top_end = 1;
 #endif
 	}
+
+	/* When line numbers are displayed need to redraw all lines below
+	 * inserted/deleted lines. */
+	if (mod_top != 0 && buf->b_mod_xlines != 0 && wp->w_p_nu)
+	    mod_bot = MAXLNUM;
     }
 
     /*
@@ -1625,12 +1630,6 @@
 			}
 		    }
 		}
-
-		/* When inserting or deleting lines and 'number' is set:
-		 * Redraw all lines below the change to update the line
-		 * numbers. */
-		if (buf->b_mod_xlines != 0 && wp->w_p_nu)
-		    bot_start = 0;
 	    }
 
 #ifdef FEAT_FOLDING
@@ -2642,6 +2641,8 @@
 		    fromcol = -10;
 		    tocol = MAXCOL;
 		}
+		else if (bot->col == MAXCOL)
+		    tocol = MAXCOL;
 		else
 		{
 		    pos = *bot;
@@ -2852,8 +2853,8 @@
     shl = &search_hl;
     for (;;)
     {
-	shl->startp = NULL;
-	shl->endp = NULL;
+	shl->startcol = MAXCOL;
+	shl->endcol = MAXCOL;
 	shl->attr_cur = 0;
 	if (shl->rm.regprog != NULL)
 	{
@@ -2868,25 +2869,25 @@
 	    if (shl->lnum != 0 && shl->lnum <= lnum)
 	    {
 		if (shl->lnum == lnum)
-		    shl->startp = line + shl->rm.startpos[0].col;
+		    shl->startcol = shl->rm.startpos[0].col;
 		else
-		    shl->startp = line;
+		    shl->startcol = 0;
 		if (lnum == shl->lnum + shl->rm.endpos[0].lnum
 						  - shl->rm.startpos[0].lnum)
-		    shl->endp = line + shl->rm.endpos[0].col;
+		    shl->endcol = shl->rm.endpos[0].col;
 		else
-		    shl->endp = line + MAXCOL;
+		    shl->endcol = MAXCOL;
 		/* Highlight one character for an empty match. */
-		if (shl->startp == shl->endp)
+		if (shl->startcol == shl->endcol)
 		{
 #ifdef FEAT_MBYTE
-		    if (has_mbyte && *shl->endp != NUL)
-			shl->endp += (*mb_ptr2len_check)(shl->endp);
+		    if (has_mbyte && line[shl->endcol] != NUL)
+			shl->endcol += (*mb_ptr2len_check)(line + shl->endcol);
 		    else
 #endif
-			++shl->endp;
+			++shl->endcol;
 		}
-		if (shl->startp < ptr)  /* match at leftcol */
+		if ((long)shl->startcol < v)  /* match at leftcol */
 		{
 		    shl->attr_cur = shl->attr;
 		    search_attr = shl->attr;
@@ -3150,22 +3151,22 @@
 		 * Do this first for search_hl, then for match_hl, so that
 		 * ":match" overrules 'hlsearch'.
 		 */
+		v = (long)(ptr - line);
 		shl = &search_hl;
 		for (;;)
 		{
 		    while (shl->rm.regprog != NULL)
 		    {
-			if (shl->startp != NULL
-				&& ptr >= shl->startp
-				&& ptr < shl->endp)
+			if (shl->startcol != MAXCOL
+				&& v >= (long)shl->startcol
+				&& v < (long)shl->endcol)
 			{
 			    shl->attr_cur = shl->attr;
 			}
-			else if (ptr == shl->endp)
+			else if (v == (long)shl->endcol)
 			{
 			    shl->attr_cur = 0;
 
-			    v = (long)(ptr - line);
 			    next_search_hl(wp, shl, lnum, (colnr_T)v);
 
 			    /* Need to get the line again, a multi-line regexp
@@ -3175,23 +3176,23 @@
 
 			    if (shl->lnum == lnum)
 			    {
-				shl->startp = line + shl->rm.startpos[0].col;
+				shl->startcol = shl->rm.startpos[0].col;
 				if (shl->rm.endpos[0].lnum == 0)
-				    shl->endp = line + shl->rm.endpos[0].col;
+				    shl->endcol = shl->rm.endpos[0].col;
 				else
-				    shl->endp = line + MAXCOL;
+				    shl->endcol = MAXCOL;
 
-				if (shl->startp == shl->endp)
+				if (shl->startcol == shl->endcol)
 				{
 				    /* highlight empty match, try again after
 				     * it */
 #ifdef FEAT_MBYTE
 				    if (has_mbyte)
-					shl->endp +=
-					       (*mb_ptr2len_check)(shl->endp);
+					shl->endcol += (*mb_ptr2len_check)(line
+							       + shl->endcol);
 				    else
 #endif
-					++shl->endp;
+					++shl->endcol;
 				}
 
 				/* Loop to check if the match starts at the
@@ -3635,8 +3636,22 @@
 			c = ' ';
 		    }
 		}
-		else if (c == NUL && wp->w_p_list && lcs_eol_one > 0)
+		else if (c == NUL
+			&& ((wp->w_p_list && lcs_eol > 0)
+			    || ((fromcol >= 0 || fromcol_prev >= 0)
+				&& tocol > vcol
+				&& VIsual_mode != Ctrl_V
+				&& (
+# ifdef FEAT_RIGHTLEFT
+				    wp->w_p_rl ? (col >= 0) :
+# endif
+				    (col < W_WIDTH(wp)))
+				&& !(noinvcur
+				    && (colnr_T)vcol == wp->w_virtcol)))
+			&& lcs_eol_one >= 0)
 		{
+		    /* Display a '$' after the line or highlight an extra
+		     * character if the line break is included. */
 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
 		    /* For a diff line the highlighting continues after the
 		     * "$". */
@@ -3667,7 +3682,10 @@
 			    c_extra = NUL;
 			}
 		    }
-		    c = lcs_eol;
+		    if (wp->w_p_list)
+			c = lcs_eol;
+		    else
+			c = ' ';
 		    lcs_eol_one = -1;
 		    --ptr;	    /* put it back at the NUL */
 		    if (area_attr == 0 && search_attr == 0)
@@ -3847,8 +3865,8 @@
 		    && ((area_attr != 0 && vcol == fromcol)
 #ifdef FEAT_SEARCH_EXTRA
 			/* highlight 'hlsearch' match at end of line */
-			|| ptr - 1 == search_hl.startp
-			|| ptr - 1 == match_hl.startp
+			|| (ptr - line) - 1 == (long)search_hl.startcol
+			|| (ptr - line) - 1 == (long)match_hl.startcol
 #endif
 		       ))
 	    {
@@ -3885,7 +3903,7 @@
 #ifdef FEAT_SEARCH_EXTRA
 		if (area_attr == 0)
 		{
-		    if (ptr - 1 == match_hl.startp)
+		    if ((ptr - line) - 1 == (long)match_hl.startcol)
 			char_attr = match_hl.attr;
 		    else
 			char_attr = search_hl.attr;
diff --git a/src/search.c b/src/search.c
index 4513ea1..6a915e1 100644
--- a/src/search.c
+++ b/src/search.c
@@ -4031,7 +4031,7 @@
 
 #ifdef RISCOS
     /* UnixLib knows best how to munge c file names - turn munging back on. */
-    __riscosify_control = __RISCOSIFY_LONG_TRUNCATE;
+    int __riscosify_control = 0;
 #endif
 
     if (type != CHECK_PATH && type != FIND_DEFINE
diff --git a/src/syntax.c b/src/syntax.c
index 4956aec..0c706c8 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -2339,6 +2339,10 @@
 		cur_si->si_h_endpos = cur_si->si_eoe_pos;
 		cur_si->si_flags |= HL_MATCH;
 		update_si_attr(current_state.ga_len - 1);
+
+		/* what matches next may be different now, clear it */
+		next_match_idx = 0;
+		next_match_col = MAXCOL;
 		break;
 	    }
 	    else
@@ -2439,6 +2443,8 @@
 	{
 	    sip->si_attr = CUR_STATE(idx - 1).si_attr;
 	    sip->si_trans_id = CUR_STATE(idx - 1).si_trans_id;
+	    sip->si_h_startpos = CUR_STATE(idx - 1).si_h_startpos;
+	    sip->si_h_endpos = CUR_STATE(idx - 1).si_h_endpos;
 	    if (sip->si_cont_list == NULL)
 	    {
 		sip->si_flags |= HL_TRANS_CONT;
@@ -5620,7 +5626,8 @@
     int		r;
 
     /* If spp has a "containedin" list and "cur_si" is in it, return TRUE. */
-    if (cur_si != NULL && ssp->cont_in_list != NULL)
+    if (cur_si != NULL && ssp->cont_in_list != NULL
+					    && !(cur_si->si_flags & HL_MATCH))
     {
 	/* Ignore transparent items without a contains argument.  Double check
 	 * that we don't go back past the first one. */
diff --git a/src/tag.c b/src/tag.c
index 1e6d5ac..b83eaf4 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -2382,7 +2382,15 @@
 	    ga_init2(&tag_fnames, (int)sizeof(char_u *), 10);
 	    do_in_runtimepath((char_u *)
 #ifdef FEAT_MULTI_LANG
+# ifdef VMS
+		    /* Functions decc$to_vms() and decc$translate_vms() crash
+		     * on some VMS systems with wildcards "??".  Seems ECO
+		     * patches do fix the problem in C RTL, but we can't use
+		     * an #ifdef for that. */
+		    "doc/tags doc/tags-*"
+# else
 		    "doc/tags doc/tags-??"
+# endif
 #else
 		    "doc/tags"
 #endif
diff --git a/src/term.c b/src/term.c
index 71b1911..a83f506 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1643,6 +1643,7 @@
 				{KS_CIS, "IS"}, {KS_CIE, "IE"},
 				{KS_TS, "ts"}, {KS_FS, "fs"},
 				{KS_CWP, "WP"}, {KS_CWS, "WS"},
+				{KS_CSI, "SI"}, {KS_CEI, "EI"},
 				{(enum SpecialKey)0, NULL}
 			    };
 
@@ -3400,6 +3401,31 @@
 }
 
 /*
+ * Set cursor shape to match Insert mode.
+ */
+    void
+term_cursor_shape()
+{
+    static int showing_insert_mode = MAYBE;
+
+    if (!full_screen || *T_CSI == NUL || *T_CEI == NUL)
+	return;
+
+    if (State & INSERT)
+    {
+	if (showing_insert_mode != TRUE)
+	    out_str(T_CSI);	    /* disable cursor */
+	showing_insert_mode = TRUE;
+    }
+    else
+    {
+	if (showing_insert_mode != FALSE)
+	    out_str(T_CEI);	    /* disable cursor */
+	showing_insert_mode = FALSE;
+    }
+}
+
+/*
  * Set scrolling region for window 'wp'.
  * The region starts 'off' lines from the start of the window.
  * Also set the vertical scroll region for a vertically split window.  Always
diff --git a/src/term.h b/src/term.h
index 17b1065..c400020 100644
--- a/src/term.h
+++ b/src/term.h
@@ -76,6 +76,8 @@
     KS_CWP,	/* set window position in pixels */
     KS_CWS,	/* set window size in characters */
     KS_CRV,	/* request version string */
+    KS_CSI,	/* start insert mode (bar cursor) */
+    KS_CEI,	/* end insert mode (block cursor) */
 #ifdef FEAT_VERTSPLIT
     KS_CSV,	/* scroll region vertical */
 #endif
@@ -148,6 +150,8 @@
 #define T_FS	(term_str(KS_FS))	/* set window title end */
 #define T_CWP	(term_str(KS_CWP))	/* window position */
 #define T_CWS	(term_str(KS_CWS))	/* window size */
+#define T_CSI	(term_str(KS_CSI))	/* start insert mode */
+#define T_CEI	(term_str(KS_CEI))	/* end insert mode */
 #define T_CRV	(term_str(KS_CRV))	/* request version string */
 #define T_OP	(term_str(KS_OP))	/* original color pair */
 
diff --git a/src/ui.c b/src/ui.c
index 47ff80e..3963bd5 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -176,7 +176,13 @@
 # ifdef FEAT_GUI
     else
 # endif
+    {
+	if (wtime == -1)
+	    handle_sighup(SIGHUP_UNBLOCK);  /* allow SIGHUP to kill us */
 	retval = mch_inchar(buf, maxlen, wtime, tb_change_cnt);
+	if (wtime == -1)
+	    handle_sighup(SIGHUP_BLOCK);    /* block SIGHUP */
+    }
 #endif
 
     ctrl_c_interrupts = TRUE;
@@ -1852,7 +1858,10 @@
 # ifdef FEAT_GUI
     if (gui.in_use)
 	gui_update_cursor_later();
+    else
 # endif
+	term_cursor_shape();
+
 # ifdef MCH_CURSOR_SHAPE
     mch_update_cursor();
 # endif
diff --git a/src/version.h b/src/version.h
index 67b47d5..e8f1078 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 (2004 Oct 4)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2004 Oct 4, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 9)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 9, compiled "
diff --git a/src/vim.h b/src/vim.h
index c68e1a7..cd283d2 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -434,9 +434,10 @@
 #  define FEAT_GETTEXT
 # endif
 /* These are in os_win32.c */
-extern char* (*dyn_libintl_gettext)(const char* msgid);
-extern char* (*dyn_libintl_bindtextdomain)(const char* domainname, const char* dirname);
-extern char* (*dyn_libintl_textdomain)(const char* domainname);
+extern char *(*dyn_libintl_gettext)(const char *msgid);
+extern char *(*dyn_libintl_bindtextdomain)(const char *domainname, const char *dirname);
+extern char *(*dyn_libintl_bind_textdomain_codeset)(const char *domainname, const char *codeset);
+extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #endif
 
 
@@ -448,7 +449,11 @@
 # ifdef DYNAMIC_GETTEXT
 #  define _(x) (*dyn_libintl_gettext)((char *)(x))
 #  define N_(x) x
-#  define bindtextdomain(domain,dir) (*dyn_libintl_bindtextdomain)(domain,dir)
+#  define bindtextdomain(domain, dir) (*dyn_libintl_bindtextdomain)((domain), (dir))
+#  define bind_textdomain_codeset(domain, codeset) (*dyn_libintl_bind_textdomain_codeset)((domain), (codeset))
+#  if !defined(HAVE_BIND_TEXTDOMAIN_CODESET)
+#   define HAVE_BIND_TEXTDOMAIN_CODESET 1
+#  endif
 #  define textdomain(domain) (*dyn_libintl_textdomain)(domain)
 # else
 #  include <libintl.h>
@@ -466,6 +471,10 @@
 #  undef bindtextdomain
 # endif
 # define bindtextdomain(x, y) /* empty */
+# ifdef bind_textdomain_codeset
+#  undef bind_textdomain_codeset
+# endif
+# define bind_textdomain_codeset(x, y) /* empty */
 # ifdef textdomain
 #  undef textdomain
 # endif
@@ -1834,4 +1843,12 @@
 # include <XSUB.h>
 #endif
 
+/* values for handle_sighup() */
+#define SIGHUP_RCV	1
+#define SIGHUP_BLOCK	2
+#define SIGHUP_UNBLOCK  3
+#ifndef UNIX
+# define handle_sighup(x) /* nothing */
+#endif
+
 #endif /* VIM__H */
diff --git a/src/window.c b/src/window.c
index 47da663..ad3222a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1924,7 +1924,11 @@
 	curbuf = curwin->w_buffer;
 	close_curwin = TRUE;
     }
-    if (p_ea)
+    if (p_ea
+#ifdef FEAT_VERTSPLIT
+	    && (*p_ead == 'b' || *p_ead == dir)
+#endif
+	    )
 	win_equal(curwin, TRUE,
 #ifdef FEAT_VERTSPLIT
 		dir
