diff --git a/src/drawscreen.c b/src/drawscreen.c
index 3153d36..4e8ef4e 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -654,8 +654,8 @@
     int		off = 0;
     int		width;
 
-    // If 'ruler' off or messages area disabled, don't do anything
-    if (!p_ru || (wp->w_status_height == 0 && p_ch == 0))
+    // If 'ruler' off don't do anything
+    if (!p_ru)
 	return;
 
     /*
@@ -676,7 +676,7 @@
 	return;
 
 #ifdef FEAT_STL_OPT
-    if (*p_ruf && p_ch > 0)
+    if (*p_ruf)
     {
 	int	called_emsg_before = called_emsg;
 
@@ -1814,13 +1814,9 @@
 
 			    // Move the entries that were scrolled, disable
 			    // the entries for the lines to be redrawn.
-			    // Avoid using a wrong index when 'cmdheight' is
-			    // zero and wp->w_height == Rows.
 			    if ((wp->w_lines_valid += j) > wp->w_height)
 				wp->w_lines_valid = wp->w_height;
-			    for (idx = wp->w_lines_valid >= wp->w_height
-				    ? wp->w_height - 1 : wp->w_lines_valid;
-							   idx - j >= 0; idx--)
+			    for (idx = wp->w_lines_valid; idx - j >= 0; idx--)
 				wp->w_lines[idx] = wp->w_lines[idx - j];
 			    while (idx >= 0)
 				wp->w_lines[idx--].wl_valid = FALSE;
@@ -2420,8 +2416,7 @@
 			    if (wp->w_lines_valid > wp->w_height)
 				wp->w_lines_valid = wp->w_height;
 			    for (i = wp->w_lines_valid; i - j >= idx; --i)
-				if (i < Rows)
-				    wp->w_lines[i] = wp->w_lines[i - j];
+				wp->w_lines[i] = wp->w_lines[i - j];
 
 			    // The w_lines[] entries for inserted lines are
 			    // now invalid, but wl_size may be used above.
@@ -2502,8 +2497,7 @@
 	    // Past end of the window or end of the screen. Note that after
 	    // resizing wp->w_height may be end up too big. That's a problem
 	    // elsewhere, but prevent a crash here.
-	    if (row > wp->w_height
-		    || row + wp->w_winrow >= (p_ch > 0 ? Rows : Rows + 1))
+	    if (row > wp->w_height || row + wp->w_winrow >= Rows)
 	    {
 		// we may need the size of that too long line later on
 		if (dollar_vcol == -1)
@@ -2557,7 +2551,7 @@
 
 	// Safety check: if any of the wl_size values is wrong we might go over
 	// the end of w_lines[].
-	if (idx >= (p_ch > 0 ? Rows : Rows + 1))
+	if (idx >= Rows)
 	    break;
     }
 
@@ -2945,8 +2939,7 @@
     redraw_later(type);
     if (msg_scrolled
 	    || (State != MODE_NORMAL && State != MODE_NORMAL_BUSY)
-	    || exiting
-	    || p_ch == 0)
+	    || exiting)
 	return ret;
 
     // Allocate space to save the text displayed in the command line area.
diff --git a/src/eval.c b/src/eval.c
index cc2e1ff..2e8d938 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6832,17 +6832,18 @@
     if (eap->skip)
 	--emsg_skip;
 #ifdef HAS_MESSAGE_WINDOW
-    if (use_message_window() && eap->cmdidx != CMD_execute)
+    if (eap->cmdidx == CMD_echowindow)
     {
 	// show the message window now
 	ex_redraw(eap);
 
 	// do not overwrite messages
+	// TODO: only for message window
 	msg_didout = TRUE;
 	if (msg_col == 0)
 	    msg_col = 1;
+	in_echowindow = FALSE;
     }
-    in_echowindow = FALSE;
 #endif
     set_nextcmd(eap, arg);
 }
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 1cf090c..311b9b7 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -1011,7 +1011,6 @@
     if (addr_count == 0)		// :!
     {
 	// echo the command
-	dont_use_message_window();
 	msg_start();
 	msg_putchar(':');
 	msg_putchar('!');
@@ -3702,7 +3701,6 @@
     int		endcolumn = FALSE;	// cursor in last column when done
     pos_T	old_cursor = curwin->w_cursor;
     int		start_nsubs;
-    int		cmdheight0 = p_ch == 0;
 #ifdef FEAT_EVAL
     int		save_ma = 0;
     int		save_sandbox = 0;
@@ -4012,14 +4010,6 @@
 	}
     }
 
-    if (cmdheight0)
-    {
-	// If cmdheight is 0, cmdheight must be set to 1 when we enter command
-	// line.
-	set_option_value((char_u *)"ch", 1L, NULL, 0);
-	redraw_statuslines();
-    }
-
     /*
      * Check for a match on each line.
      */
@@ -4902,10 +4892,6 @@
 	changed_window_setting();
 #endif
 
-    // Restore cmdheight
-    if (cmdheight0)
-	set_option_value((char_u *)"ch", 0L, NULL, 0);
-
     vim_regfree(regmatch.regprog);
     vim_free(sub_copy);
 
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 1891d80..0d52f58 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -8370,14 +8370,9 @@
     // After drawing the statusline screen_attr may still be set.
     screen_stop_highlight();
 
-#ifdef HAS_MESSAGE_WINDOW
-    if (!use_message_window())  // append messages in the message window
-#endif
-    {
-	// Reset msg_didout, so that a message that's there is overwritten.
-	msg_didout = FALSE;
-	msg_col = 0;
-    }
+    // Reset msg_didout, so that a message that's there is overwritten.
+    msg_didout = FALSE;
+    msg_col = 0;
 
     // No need to wait after an intentional redraw.
     need_wait_return = FALSE;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 25073a8..d425b3e 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1591,25 +1591,6 @@
     int		did_save_ccline = FALSE;
     int		cmdline_type;
     int		wild_type;
-    int		cmdheight0 = p_ch == 0;
-
-    if (cmdheight0)
-    {
-	int  save_so = lastwin->w_p_so;
-
-	// If cmdheight is 0, cmdheight must be set to 1 when we enter the
-	// command line.  Set "made_cmdheight_nonzero" and reset 'scrolloff' to
-	// avoid scrolling the last window.
-	made_cmdheight_nonzero = TRUE;
-	lastwin->w_p_so = 0;
-	set_option_value((char_u *)"ch", 1L, NULL, 0);
-#ifdef HAS_MESSAGE_WINDOW
-	popup_hide_message_win();
-#endif
-	update_screen(UPD_VALID);                 // redraw the screen NOW
-	made_cmdheight_nonzero = FALSE;
-	lastwin->w_p_so = save_so;
-    }
 
     // one recursion level deeper
     ++depth;
@@ -2577,15 +2558,6 @@
     {
 	char_u *p = ccline.cmdbuff;
 
-	if (cmdheight0)
-	{
-	    made_cmdheight_nonzero = TRUE;
-	    set_option_value((char_u *)"ch", 0L, NULL, 0);
-	    // Redraw is needed for command line completion
-	    redraw_all_later(UPD_NOT_VALID);
-	    made_cmdheight_nonzero = FALSE;
-	}
-
 	--depth;
 	if (did_save_ccline)
 	    restore_cmdline(&save_ccline);
diff --git a/src/getchar.c b/src/getchar.c
index b598997..fee9191 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2096,10 +2096,6 @@
     --no_mapping;
     --allow_keys;
 
-    // redraw the screen after getchar()
-    if (p_ch == 0)
-	update_screen(UPD_NOT_VALID);
-
     set_vim_var_nr(VV_MOUSE_WIN, 0);
     set_vim_var_nr(VV_MOUSE_WINID, 0);
     set_vim_var_nr(VV_MOUSE_LNUM, 0);
diff --git a/src/globals.h b/src/globals.h
index f877af3..3d75e20 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1734,6 +1734,3 @@
 // While executing a regexp and set to OPTION_MAGIC_ON or OPTION_MAGIC_OFF this
 // overrules p_magic.  Otherwise set to OPTION_MAGIC_NOT_SET.
 EXTERN optmagic_T magic_overruled INIT(= OPTION_MAGIC_NOT_SET);
-
-// Set when 'cmdheight' is changed from zero to one temporarily.
-EXTERN int made_cmdheight_nonzero INIT(= FALSE);
diff --git a/src/highlight.c b/src/highlight.c
index 3a12312..95cdb46 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -1429,7 +1429,6 @@
     // If no argument, list current highlighting.
     if (!init && ends_excmd2(line - 1, line))
     {
-	dont_use_message_window();
 	for (i = 1; i <= highlight_ga.ga_len && !got_int; ++i)
 	    // TODO: only call when the group has attributes set
 	    highlight_list_one((int)i);
diff --git a/src/memline.c b/src/memline.c
index 6651cda..42cbad2 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -4640,7 +4640,6 @@
     stat_T	st;
     time_t	swap_mtime;
 
-    dont_use_message_window();
     ++no_wait_return;
     (void)emsg(_(e_attention));
     msg_puts(_("\nFound a swap file by the name \""));
diff --git a/src/message.c b/src/message.c
index 0c8280e..573f3ae 100644
--- a/src/message.c
+++ b/src/message.c
@@ -208,7 +208,7 @@
 	len = vim_strsize(s);
 	if (msg_scrolled != 0
 #ifdef HAS_MESSAGE_WINDOW
-		|| use_message_window()
+		|| in_echowindow
 #endif
 		)
 	    // Use all the columns.
@@ -751,7 +751,7 @@
     }
 
 #ifdef HAS_MESSAGE_WINDOW
-    if (!use_message_window())
+    if (!in_echowindow)
 #endif
 	emsg_on_display = TRUE;	    // remember there is an error message
 
@@ -966,7 +966,7 @@
     // negative.
     room = (int)(Rows - cmdline_row - 1) * Columns + sc_col - 1;
     if (room > 0 && (force || (shortmess(SHM_TRUNC) && !exmode_active))
-	    && (n = (int)STRLEN(s) - room) > 0 && p_ch > 0)
+	    && (n = (int)STRLEN(s) - room) > 0)
     {
 	if (has_mbyte)
 	{
@@ -1077,7 +1077,6 @@
     }
 
     msg_hist_off = TRUE;
-    dont_use_message_window();
 
     p = first_msg_hist;
     if (eap->addr_count != 0)
@@ -1430,35 +1429,6 @@
 #endif
 
 /*
- * Return TRUE when the message popup window should be used.
- */
-    int
-use_message_window(void)
-{
-#ifdef HAS_MESSAGE_WINDOW
-    // TRUE if there is no command line showing ('cmdheight' is zero and not
-    // already editing or showing a message) use a popup window for messages.
-    // Also when using ":echowindow".
-    return (p_ch == 0 && cmdline_row >= Rows) || in_echowindow;
-#else
-    return FALSE;
-#endif
-}
-
-/*
- * Do not use the message window for the next message(s).
- * Used when giving a prompt.
- */
-    void
-dont_use_message_window(void)
-{
-#ifdef HAS_MESSAGE_WINDOW
-    popup_hide_message_win();
-    cmdline_row = Rows - 1;
-#endif
-}
-
-/*
  * Prepare for outputting characters in the command line.
  */
     void
@@ -1473,7 +1443,7 @@
     }
 
 #ifdef FEAT_EVAL
-    if (need_clr_eos || use_message_window())
+    if (need_clr_eos || in_echowindow)
     {
 	// Halfway an ":echo" command and getting an (error) message: clear
 	// any text from the command.
@@ -1483,7 +1453,7 @@
 #endif
 
 #ifdef HAS_MESSAGE_WINDOW
-    if (use_message_window())
+    if (in_echowindow)
     {
 	if (popup_message_win_visible()
 		    && ((msg_col > 0 && (msg_scroll || !full_screen))
@@ -1510,7 +1480,7 @@
 #endif
 	    0;
     }
-    else if (msg_didout || use_message_window())
+    else if (msg_didout || in_echowindow)
     {
 	// start message on next line
 	msg_putchar('\n');
@@ -2259,7 +2229,6 @@
 #define PUT_BELOW 2		// add below "lnum"
 				//
 #ifdef HAS_MESSAGE_WINDOW
-
 /*
  * Put text "t_s" until "end" in the message window.
  * "where" specifies where to put the text.
@@ -2337,7 +2306,7 @@
     win_T	*msg_win = NULL;
     linenr_T    lnum = 1;
 
-    if (use_message_window())
+    if (in_echowindow)
     {
 	msg_win = popup_get_message_win();
 
@@ -2651,7 +2620,7 @@
 msg_scroll_up(void)
 {
 #ifdef HAS_MESSAGE_WINDOW
-    if (use_message_window())
+    if (in_echowindow)
 	return;
 #endif
 #ifdef FEAT_GUI
@@ -3687,7 +3656,7 @@
 		out_str(T_CE);	// clear to end of line
 	}
     }
-    else if (p_ch > 0)
+    else
     {
 #ifdef FEAT_RIGHTLEFT
 	if (cmdmsg_rl)
@@ -3748,7 +3717,7 @@
 {
     if (msg_row == Rows - 1 && msg_col >= sc_col
 #ifdef HAS_MESSAGE_WINDOW
-		&& !use_message_window()
+		&& !in_echowindow
 #endif
 	    )
     {
@@ -4090,7 +4059,6 @@
     }
 #endif
 
-    dont_use_message_window();
     oldState = State;
     State = MODE_CONFIRM;
     setmouse();
diff --git a/src/normal.c b/src/normal.c
index 926f504..fb2bced 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -1796,9 +1796,6 @@
 {
     int	    len;
 
-    if (p_ch == 0)
-	return;
-
     cursor_off();
 
     len = (int)STRLEN(showcmd_buf);
diff --git a/src/ops.c b/src/ops.c
index 0f7837e..4733976 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3260,11 +3260,6 @@
 	    // Don't shorten this message, the user asked for it.
 	    p = p_shm;
 	    p_shm = (char_u *)"";
-	    if (p_ch < 1)
-	    {
-		msg_start();
-		msg_scroll = TRUE;
-	    }
 	    msg((char *)IObuff);
 	    p_shm = p;
 	}
diff --git a/src/option.c b/src/option.c
index 9573351..5ce5218 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3555,7 +3555,7 @@
     // if p_ch changed value, change the command line height
     else if (pp == &p_ch)
     {
-	if (p_ch < 0)
+	if (p_ch < 1)
 	{
 	    errmsg = e_argument_must_be_positive;
 	    p_ch = 1;
diff --git a/src/popupwin.c b/src/popupwin.c
index 2f9df8d..8292dba 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -29,7 +29,7 @@
 };
 
 #ifdef HAS_MESSAGE_WINDOW
-// Window used for messages when 'winheight' is zero.
+// Window used for ":echowindow"
 static win_T *message_win = NULL;
 #endif
 
@@ -4529,16 +4529,6 @@
 	popup_hide(message_win);
 }
 
-/*
- * If the message window exists: close it.
- */
-    void
-popup_close_message_win(void)
-{
-    if (message_win != NULL)
-	popup_close(message_win->w_id, TRUE);
-}
-
 #endif
 
 /*
diff --git a/src/proto/message.pro b/src/proto/message.pro
index f0bd4f3..3f8a8fe 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -23,8 +23,6 @@
 void wait_return(int redraw);
 void set_keep_msg(char_u *s, int attr);
 void set_keep_msg_from_hist(void);
-int use_message_window(void);
-void dont_use_message_window(void);
 void msg_start(void);
 void msg_starthere(void);
 void msg_putchar(int c);
diff --git a/src/proto/popupwin.pro b/src/proto/popupwin.pro
index 4d669ef..dcc14de 100644
--- a/src/proto/popupwin.pro
+++ b/src/proto/popupwin.pro
@@ -67,7 +67,6 @@
 void popup_show_message_win(void);
 int popup_message_win_visible(void);
 void popup_hide_message_win(void);
-void popup_close_message_win(void);
 int popup_win_closed(win_T *win);
 void popup_set_title(win_T *wp);
 void popup_update_preview_title(void);
diff --git a/src/register.c b/src/register.c
index 6a9cb1e..ac1d6a3 100644
--- a/src/register.c
+++ b/src/register.c
@@ -371,7 +371,6 @@
 {
     char_u	    *p;
     static int	    regname;
-    static int	    changed_cmdheight = FALSE;
     yankreg_T	    *old_y_previous, *old_y_current;
     int		    retval;
 
@@ -386,15 +385,6 @@
 	    showmode();
 	    regname = c;
 	    retval = OK;
-
-	    if (p_ch < 1)
-	    {
-		// Enable macro indicator temporarily
-		set_option_value((char_u *)"ch", 1L, NULL, 0);
-		update_screen(UPD_VALID);
-
-		changed_cmdheight = TRUE;
-	    }
 	}
     }
     else			    // stop recording
@@ -422,13 +412,6 @@
 	    y_previous = old_y_previous;
 	    y_current = old_y_current;
 	}
-
-	if (changed_cmdheight)
-	{
-	    // Restore cmdheight
-	    set_option_value((char_u *)"ch", 0L, NULL, 0);
-	    redraw_all_later(UPD_CLEAR);
-	}
     }
     return retval;
 }
diff --git a/src/screen.c b/src/screen.c
index eb01fdb..12377d5 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -4228,7 +4228,7 @@
     int		nwr_save;
     int		sub_attr;
 
-    do_mode = p_smd && msg_silent == 0 && p_ch > 0
+    do_mode = p_smd && msg_silent == 0
 	    && ((State & MODE_INSERT)
 		|| restart_edit != NUL
 		|| VIsual_active);
@@ -4741,7 +4741,7 @@
     int
 messaging(void)
 {
-    return (!(p_lz && char_avail() && !KeyTyped)) && p_ch > 0;
+    return (!(p_lz && char_avail() && !KeyTyped));
 }
 
 /*
diff --git a/src/testdir/dumps/Test_cmdheight_zero_1.dump b/src/testdir/dumps/Test_cmdheight_zero_1.dump
deleted file mode 100644
index 6fd15a0..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_1.dump
+++ /dev/null
@@ -1,6 +0,0 @@
->s+0&#ffffff0|o|m|e| |t|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
diff --git a/src/testdir/dumps/Test_cmdheight_zero_2.dump b/src/testdir/dumps/Test_cmdheight_zero_2.dump
deleted file mode 100644
index d8c3aea..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_2.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#e0e0e08|o|m|e| >t+0&#ffffff0|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
diff --git a/src/testdir/dumps/Test_cmdheight_zero_3.dump b/src/testdir/dumps/Test_cmdheight_zero_3.dump
deleted file mode 100644
index ea83d3d..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_3.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|═+0#e000002&@74
-|m|e|s@1|a|g|e| |w|i|n|d|o|w| @60
diff --git a/src/testdir/dumps/Test_cmdheight_zero_4.dump b/src/testdir/dumps/Test_cmdheight_zero_4.dump
deleted file mode 100644
index a91d971..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_4.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|═+0#e000002&@74
-|T|y|p|e| @1|:|q|a|!| @1|a|n|d| |p|r|e|s@1| |<|E|n|t|e|r|>| |t|o| |a|b|a|n|d|o|n| |a|l@1| |c|h|a|n|g|e|s| |a|n|d| |e|x|i|t| |V|i|m| @9
diff --git a/src/testdir/dumps/Test_cmdheight_zero_5.dump b/src/testdir/dumps/Test_cmdheight_zero_5.dump
deleted file mode 100644
index dd64210..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_5.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|═+0#e000002&@74
-|"|X|s|o|m|e|T|e|x|t|"| |[|N|e|w|]| |1|L|,| |1|0|B| |w|r|i|t@1|e|n| @41
diff --git a/src/testdir/dumps/Test_cmdheight_zero_6.dump b/src/testdir/dumps/Test_cmdheight_zero_6.dump
deleted file mode 100644
index 7af84c9..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_6.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
diff --git a/src/testdir/dumps/Test_cmdheight_zero_7.dump b/src/testdir/dumps/Test_cmdheight_zero_7.dump
deleted file mode 100644
index 3c57623..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_7.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
-|~+0#4040ff13&| @73
-|~| @73
-|═+0#e000002&@74
-|s|o|m|e| |t|e|x|t| @65
-|s|o|m|e| |m|o|r|e| |t|e|x|t| @60
diff --git a/src/testdir/dumps/Test_cmdheight_zero_8.dump b/src/testdir/dumps/Test_cmdheight_zero_8.dump
deleted file mode 100644
index 6dbd42c..0000000
--- a/src/testdir/dumps/Test_cmdheight_zero_8.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
-|~+0#4040ff13&| @73
-|═+0#e000002&@74
-|s|o|m|e| |t|e|x|t| @65
-|s|o|m|e| |m|o|r|e| |t|e|x|t| @60
-|e|v|e|n| |m|o|r|e| |t|e|x|t| @60
diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim
index a552160..83f43f7 100644
--- a/src/testdir/gen_opt_test.vim
+++ b/src/testdir/gen_opt_test.vim
@@ -27,7 +27,7 @@
 " Two lists with values: values that work and values that fail.
 " When not listed, "othernum" or "otherstring" is used.
 let test_values = {
-      \ 'cmdheight': [[0, 1, 2, 10], [-1]],
+      \ 'cmdheight': [[1, 2, 10], [-1, 0]],
       \ 'cmdwinheight': [[1, 2, 10], [-1, 0]],
       \ 'columns': [[12, 80], [-1, 0, 10]],
       \ 'conceallevel': [[0, 1, 2, 3], [-1, 4, 99]],
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index 2c89748..6bdaedf 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -387,156 +387,6 @@
   call delete('b.txt')
 endfunc
 
-func Test_cmdheight_zero()
-  enew
-  set cmdheight=0
-  set showcmd
-  redraw!
-  let using_popupwin = has('timers') && has('popupwin')
-
-  echo 'test echo'
-  if using_popupwin
-    redraw
-    call assert_equal('test echo', Screenline(&lines))
-
-    " check that the popup is cleared when entering a command line
-    call feedkeys(':', 'xt')
-    redraw
-    call assert_equal('~', Screenline(&lines))
-  else
-    call assert_equal(116, screenchar(&lines, 1))
-  endif
-  redraw!
-
-  echomsg 'test echomsg'
-  if using_popupwin
-    redraw
-    call assert_equal('test echomsg', Screenline(&lines))
-  else
-    call assert_equal(116, screenchar(&lines, 1))
-  endif
-  redraw!
-
-  if !using_popupwin
-    call feedkeys(":ls\<CR>", "xt")
-    call assert_equal(':ls', Screenline(&lines))
-    redraw!
-  endif
-
-  let char = getchar(0)
-  call assert_match(char, 0)
-
-  " Check change/restore cmdheight when macro
-  call feedkeys("qa", "xt")
-  call assert_equal(1, &cmdheight)
-  call feedkeys("q", "xt")
-  call assert_equal(0, &cmdheight)
-
-  call setline(1, 'somestring')
-  call feedkeys("y", "n")
-  %s/somestring/otherstring/gc
-  call assert_equal('otherstring', getline(1))
-
-  call feedkeys("g\<C-g>", "xt")
-  if using_popupwin
-    redraw
-  endif
-  call assert_match(
-        \ 'Col 1 of 11; Line 1 of 1; Word 1 of 1',
-        \ Screenline(&lines))
-
-  " Check split behavior
-  for i in range(1, 10)
-    split
-  endfor
-  only
-  call assert_equal(0, &cmdheight)
-
-  " Check that pressing ":" should not scroll a window
-  " Check for what patch 9.0.0115 fixes
-  botright 10new
-  call setline(1, range(12))
-  7
-  call feedkeys(":\"\<C-R>=line('w0')\<CR>\<CR>", "xt")
-  call assert_equal('"1', @:)
-
-  bwipe!
-  bwipe!
-  set cmdheight&
-  set showcmd&
-  tabnew
-  tabonly
-
-  "redraw to hide the popup window
-  redraw
-endfunc
-
-func Test_cmdheight_zero_dump()
-  CheckScreendump
-
-  let lines =<< trim END
-      set cmdheight=0
-      set showmode
-      call setline(1, 'some text')
-      func ShowMessages()
-        echomsg 'some text'
-        sleep 100m
-        echomsg 'some more text'
-        sleep 2500m
-        echomsg 'even more text'
-      endfunc
-  END
-  call writefile(lines, 'XtestCmdheight')
-  let buf = RunVimInTerminal('-S XtestCmdheight', #{rows: 6})
-  " The "-- INSERT --" indicator should not be visible.
-  call term_sendkeys(buf, "i")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_1', {})
-
-  " The "-- VISUAL --" indicator should not be visible.
-  call term_sendkeys(buf, "\<Esc>vw")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_2', {})
-
-  " Echo'd text is in a popup window
-  call term_sendkeys(buf, "\<Esc>:echo 'message window'\<CR>")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_3', {})
-
-  " Message for CTRL-C is in the popup window
-  call term_sendkeys(buf, "\<C-C>")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_4', {})
-
-  " file write message is one line
-  call term_sendkeys(buf, ":w XsomeText\<CR>")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_5', {})
-
-  call term_sendkeys(buf, ":call popup_clear()\<CR>")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_6', {})
-
-  call term_sendkeys(buf, ":call ShowMessages()\<CR>")
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_7', {})
-  sleep 2
-  call VerifyScreenDump(buf, 'Test_cmdheight_zero_8', {})
-
-  " clean up
-  call StopVimInTerminal(buf)
-  call delete('XtestCmdheight')
-  call delete('XsomeText')
-endfunc
-
-func Test_cmdheight_zero_shell()
-  CheckUnix
-
-  set cmdheight=0
-  set nomore
-  call setline(1, 'foo!')
-  silent !echo <cWORD> > Xfile.out
-  call assert_equal(['foo!'], readfile('Xfile.out'))
-  call delete('Xfile.out')
-  redraw!
-
-  set more&
-  set cmdheight&
-endfunc
-
 func Test_echowindow()
   CheckScreendump
 
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 0fe0f11..04a5d10 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1501,12 +1501,9 @@
     call assert_equal(h0, winheight(0))
     call assert_equal(1, &cmdheight)
   endfor
-  " supports cmdheight=0
-  set cmdheight=0
   call assert_true(win_move_statusline(0, 1))
-  call assert_equal(h0 + 1, winheight(0))
-  call assert_equal(0, &cmdheight)
-  set cmdheight&
+  call assert_equal(h0, winheight(0))
+  call assert_equal(1, &cmdheight)
   " check win_move_statusline from bottom window on top window ID
   let id = win_getid(1)
   for offset in range(5)
diff --git a/src/version.c b/src/version.c
index 354a2e4..d886882 100644
--- a/src/version.c
+++ b/src/version.c
@@ -708,6 +708,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    340,
+/**/
     339,
 /**/
     338,
diff --git a/src/window.c b/src/window.c
index 7ea7b5b..65dec10 100644
--- a/src/window.c
+++ b/src/window.c
@@ -992,8 +992,6 @@
 	needed = wmh1 + STATUS_HEIGHT;
 	if (flags & WSP_ROOM)
 	    needed += p_wh - wmh1;
-	if (p_ch == 0)
-	    needed += 1;  // Adjust for cmdheight=0.
 	if (flags & (WSP_BOT | WSP_TOP))
 	{
 	    minheight = frame_minheight(topframe, NOWIN) + need_status;
@@ -5693,8 +5691,6 @@
     {
 	// topframe: can only change the command line height
 	if (height > ROWS_AVAIL)
-	    // If height is greater than the available space, try to create
-	    // space for the frame by reducing 'cmdheight' if possible.
 	    height = ROWS_AVAIL;
 	if (height > 0)
 	    frame_new_height(curfrp, height, FALSE, FALSE);
@@ -6026,7 +6022,7 @@
     while (p_wmh > 0)
     {
 	room = Rows - p_ch;
-	needed = min_rows();
+	needed = min_rows() - 1;  // 1 was added for the cmdline
 	if (room >= needed)
 	    break;
 	--p_wmh;
@@ -6076,12 +6072,6 @@
     int		row;
     int		up;	// if TRUE, drag status line up, otherwise down
     int		n;
-    static int	p_ch_was_zero = FALSE;
-
-    // If the user explicitly set 'cmdheight' to zero, then allow for dragging
-    // the status line making it zero again.
-    if (p_ch == 0)
-	p_ch_was_zero = TRUE;
 
     fr = dragwin->w_frame;
     curfr = fr;
@@ -6138,10 +6128,10 @@
 	 * Only dragging the last status line can reduce p_ch.
 	 */
 	room = Rows - cmdline_row;
-	if (curfr->fr_next != NULL)
-	    room -= p_ch;
-	else if (!p_ch_was_zero)
+	if (curfr->fr_next == NULL)
 	    --room;
+	else
+	    room -= p_ch;
 	if (room < 0)
 	    room = 0;
 	// sum up the room of frames below of the current one
@@ -6191,8 +6181,9 @@
     row = win_comp_pos();
     screen_fill(row, cmdline_row, 0, (int)Columns, ' ', ' ', 0);
     cmdline_row = row;
-    p_ch = MAX(Rows - cmdline_row, p_ch_was_zero ? 0 : 1);
+    p_ch = MAX(Rows - cmdline_row, 1);
     curtab->tp_ch_used = p_ch;
+
     redraw_all_later(UPD_SOME_VALID);
     showmode();
 }
@@ -6355,8 +6346,7 @@
 
     // There is no point in adjusting the scroll position when exiting.  Some
     // values might be invalid.
-    // Skip scroll_to_fraction() when 'cmdheight' was set to one from zero.
-    if (!exiting && !made_cmdheight_nonzero)
+    if (!exiting)
 	scroll_to_fraction(wp, prev_height);
 }
 
@@ -6603,11 +6593,6 @@
     // Recompute window positions.
     if (frp != lastwin->w_frame)
 	(void)win_comp_pos();
-
-#ifdef HAS_MESSAGE_WINDOW
-    if (p_ch > 0)
-	popup_close_message_win();
-#endif
 }
 
 /*
@@ -6743,8 +6728,7 @@
 	    total = n;
     }
     total += tabline_height();
-    if (p_ch > 0)
-	total += 1;		// count the room for the command line
+    total += 1;		// count the room for the command line
     return total;
 }
 
