aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/option.c2
-rw-r--r--src/nvim/window.c15
-rw-r--r--src/nvim/window.h3
3 files changed, 10 insertions, 10 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 824c9988f4..551ea0be20 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -2872,8 +2872,6 @@ static const char *validate_num_option(OptIndex opt_idx, OptInt *newval, char *e
case kOptCmdheight:
if (value < 0) {
return e_positive;
- } else {
- p_ch_was_zero = value == 0;
}
break;
case kOptHistory:
diff --git a/src/nvim/window.c b/src/nvim/window.c
index d459a046ca..8c8df72590 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -3500,6 +3500,10 @@ static bool is_bottom_win(win_T *wp)
return true;
}
+// 'cmdheight' value explicitly set by the user: window commands are allowed to
+// resize the topframe to values higher than this minimum, but not lower.
+static OptInt min_set_ch = 1;
+
/// Set a new height for a frame. Recursively sets the height for contained
/// frames and windows. Caller must take care of positions.
///
@@ -3512,11 +3516,11 @@ void frame_new_height(frame_T *topfrp, int height, bool topfirst, bool wfh, bool
{
if (topfrp->fr_parent == NULL && set_ch) {
// topframe: update the command line height, with side effects.
- OptInt new_ch = MAX(!p_ch_was_zero, p_ch + topfrp->fr_height - height);
+ OptInt new_ch = MAX(min_set_ch, p_ch + topfrp->fr_height - height);
if (new_ch != p_ch) {
- const bool was_zero = p_ch_was_zero;
+ const OptInt save_ch = min_set_ch;
set_option_value(kOptCmdheight, NUMBER_OPTVAL(new_ch), 0);
- p_ch_was_zero = was_zero;
+ min_set_ch = save_ch;
}
height = (int)MIN(ROWS_AVAIL, height);
}
@@ -6247,7 +6251,7 @@ void win_drag_status_line(win_T *dragwin, int offset)
room = Rows - cmdline_row;
if (curfr->fr_next != NULL) {
room -= (int)p_ch + global_stl_height();
- } else if (!p_ch_was_zero) {
+ } else if (min_set_ch > 0) {
room--;
}
room = MAX(room, 0);
@@ -6750,7 +6754,7 @@ void command_height(void)
old_p_ch += h;
frp = frp->fr_prev;
}
- if (p_ch < old_p_ch && command_frame_height) {
+ if (p_ch < old_p_ch && command_frame_height && frp != NULL) {
frame_add_height(frp, (int)(old_p_ch - p_ch));
}
@@ -6774,6 +6778,7 @@ void command_height(void)
// GUI starts up, we can't be sure in what order things happen. And when
// p_ch was changed in another tab page.
curtab->tp_ch_used = p_ch;
+ min_set_ch = p_ch;
}
// Resize frame "frp" to be "n" lines higher (negative for less high).
diff --git a/src/nvim/window.h b/src/nvim/window.h
index 9618ff1c2a..b5808d3451 100644
--- a/src/nvim/window.h
+++ b/src/nvim/window.h
@@ -35,9 +35,6 @@ enum {
EXTERN int tabpage_move_disallowed INIT( = 0); ///< moving tabpages around disallowed
-/// Set to true if 'cmdheight' was explicitly set to 0.
-EXTERN bool p_ch_was_zero INIT( = false);
-
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "window.h.generated.h"
#endif