diff --git a/src/window.c b/src/window.c
index 237a795..5f9d5fe 100644
--- a/src/window.c
+++ b/src/window.c
@@ -40,7 +40,7 @@
 static void frame_fix_height(win_T *wp);
 static int frame_minheight(frame_T *topfrp, win_T *next_curwin);
 static int may_open_tabpage(void);
-static void win_enter_ext(win_T *wp, int flags);
+static int win_enter_ext(win_T *wp, int flags);
 static void win_free(win_T *wp, tabpage_T *tp);
 static int win_unlisted(win_T *wp);
 static void win_append(win_T *after, win_T *wp);
@@ -73,6 +73,7 @@
 #define WEE_TRIGGER_NEW_AUTOCMDS	0x04
 #define WEE_TRIGGER_ENTER_AUTOCMDS	0x08
 #define WEE_TRIGGER_LEAVE_AUTOCMDS	0x10
+#define WEE_ALLOW_PARSE_MESSAGES	0x20
 
 static char *m_onlyone = N_("Already only one window");
 
@@ -1338,8 +1339,8 @@
     /*
      * make the new window the current window
      */
-    win_enter_ext(wp, WEE_TRIGGER_NEW_AUTOCMDS | WEE_TRIGGER_ENTER_AUTOCMDS
-						 | WEE_TRIGGER_LEAVE_AUTOCMDS);
+    (void)win_enter_ext(wp, WEE_TRIGGER_NEW_AUTOCMDS
+		    | WEE_TRIGGER_ENTER_AUTOCMDS | WEE_TRIGGER_LEAVE_AUTOCMDS);
     if (flags & WSP_VERT)
 	p_wiw = i;
     else
@@ -2483,6 +2484,7 @@
 #ifdef FEAT_DIFF
     int		had_diffmode = win->w_p_diff;
 #endif
+    int		did_decrement = FALSE;
 
 #if defined(FEAT_TERMINAL) && defined(FEAT_PROP_POPUP)
     // Can close a popup window with a terminal if the job has finished.
@@ -2661,8 +2663,11 @@
 	win_comp_pos();
     if (close_curwin)
     {
-	win_enter_ext(wp, WEE_CURWIN_INVALID | WEE_TRIGGER_ENTER_AUTOCMDS
-						 | WEE_TRIGGER_LEAVE_AUTOCMDS);
+	// Pass WEE_ALLOW_PARSE_MESSAGES to decrement dont_parse_messages
+	// before autocommands.
+	did_decrement = win_enter_ext(wp,
+		WEE_CURWIN_INVALID | WEE_TRIGGER_ENTER_AUTOCMDS
+		      | WEE_TRIGGER_LEAVE_AUTOCMDS | WEE_ALLOW_PARSE_MESSAGES);
 	if (other_buffer)
 	    // careful: after this wp and win may be invalid!
 	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
@@ -2670,7 +2675,8 @@
 
     --split_disallowed;
 #ifdef MESSAGE_QUEUE
-    --dont_parse_messages;
+    if (!did_decrement)
+	--dont_parse_messages;
 #endif
 
     /*
@@ -4188,7 +4194,7 @@
     // We would like doing the TabEnter event first, but we don't have a
     // valid current window yet, which may break some commands.
     // This triggers autocommands, thus may make "tp" invalid.
-    win_enter_ext(tp->tp_curwin, WEE_CURWIN_INVALID
+    (void)win_enter_ext(tp->tp_curwin, WEE_CURWIN_INVALID
 		  | (trigger_enter_autocmds ? WEE_TRIGGER_ENTER_AUTOCMDS : 0)
 		  | (trigger_leave_autocmds ? WEE_TRIGGER_LEAVE_AUTOCMDS : 0));
     prevwin = next_prevwin;
@@ -4476,7 +4482,7 @@
 #endif
 }
 
-#if defined(FEAT_PERL) || defined(PROTO)
+#if defined(FEAT_PERL) || defined(FEAT_LUA) || defined(PROTO)
 /*
  * Find window number "winnr" (counting top to bottom).
  */
@@ -4689,7 +4695,7 @@
     void
 win_enter(win_T *wp, int undo_sync)
 {
-    win_enter_ext(wp, (undo_sync ? WEE_UNDO_SYNC : 0)
+    (void)win_enter_ext(wp, (undo_sync ? WEE_UNDO_SYNC : 0)
 		    | WEE_TRIGGER_ENTER_AUTOCMDS | WEE_TRIGGER_LEAVE_AUTOCMDS);
 }
 
@@ -4697,15 +4703,17 @@
  * Make window "wp" the current window.
  * Can be called with "flags" containing WEE_CURWIN_INVALID, which means that
  * curwin has just been closed and isn't valid.
+ * Returns TRUE when dont_parse_messages was decremented.
  */
-    static void
+    static int
 win_enter_ext(win_T *wp, int flags)
 {
     int		other_buffer = FALSE;
     int		curwin_invalid = (flags & WEE_CURWIN_INVALID);
+    int		did_decrement = FALSE;
 
     if (wp == curwin && !curwin_invalid)	// nothing to do
-	return;
+	return FALSE;
 
 #ifdef FEAT_JOB_CHANNEL
     if (!curwin_invalid)
@@ -4722,15 +4730,15 @@
 	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
 	    other_buffer = TRUE;
 	    if (!win_valid(wp))
-		return;
+		return FALSE;
 	}
 	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
 	if (!win_valid(wp))
-	    return;
+	    return FALSE;
 #ifdef FEAT_EVAL
 	// autocmds may abort script processing
 	if (aborting())
-	    return;
+	    return FALSE;
 #endif
     }
 
@@ -4757,6 +4765,16 @@
 	curwin->w_cursor.coladd = 0;
     changed_line_abv_curs();	// assume cursor position needs updating
 
+    // Now it is OK to parse messages again, which may be needed in
+    // autocommands.
+#ifdef MESSAGE_QUEUE
+    if (flags & WEE_ALLOW_PARSE_MESSAGES)
+    {
+	--dont_parse_messages;
+	did_decrement = TRUE;
+    }
+#endif
+
     if (curwin->w_localdir != NULL || curtab->tp_localdir != NULL)
     {
 	char_u	*dirname;
@@ -4832,6 +4850,8 @@
 
     // Change directories when the 'acd' option is set.
     DO_AUTOCHDIR;
+
+    return did_decrement;
 }
 
 
