Merge #21580 cmdline issues with cmdheight=0

This commit is contained in:
Justin M. Keyes 2023-01-03 11:02:32 -05:00 committed by GitHub
commit 5e9508c702
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 6 deletions

View File

@ -3843,7 +3843,7 @@ void compute_cmdrow(void)
cmdline_row = wp->w_winrow + wp->w_height cmdline_row = wp->w_winrow + wp->w_height
+ wp->w_hsep_height + wp->w_status_height + global_stl_height(); + wp->w_hsep_height + wp->w_status_height + global_stl_height();
} }
if (cmdline_row == Rows) { if (cmdline_row == Rows && p_ch > 0) {
cmdline_row--; cmdline_row--;
} }
lines_left = cmdline_row; lines_left = cmdline_row;

View File

@ -2256,6 +2256,8 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, char *errbuf,
int minval = 0; int minval = 0;
if (value < minval) { if (value < minval) {
errmsg = e_positive; errmsg = e_positive;
} else {
p_ch_was_zero = value == 0;
} }
} else if (pp == &p_tm) { } else if (pp == &p_tm) {
if (value < 0) { if (value < 0) {

View File

@ -241,7 +241,7 @@ void ui_refresh(void)
} }
if (ext_widgets[kUIMessages]) { if (ext_widgets[kUIMessages]) {
p_ch = 0; set_option_value("cmdheight", 0L, NULL, 0);
command_height(); command_height();
} }
ui_mode_info_set(); ui_mode_info_set();

View File

@ -5765,8 +5765,8 @@ static void frame_setheight(frame_T *curfrp, int height)
if (height > ROWS_AVAIL) { if (height > ROWS_AVAIL) {
// If height is greater than the available space, try to create space for // If height is greater than the available space, try to create space for
// the frame by reducing 'cmdheight' if possible, while making sure // the frame by reducing 'cmdheight' if possible, while making sure
// `cmdheight` doesn't go below 1. // `cmdheight` doesn't go below 1 if it wasn't set to 0 explicitly.
height = (int)MIN((p_ch > 0 ? ROWS_AVAIL + (p_ch - 1) : ROWS_AVAIL), height); height = (int)MIN(ROWS_AVAIL + p_ch - !p_ch_was_zero, height);
} }
if (height > 0) { if (height > 0) {
frame_new_height(curfrp, height, false, false); frame_new_height(curfrp, height, false, false);
@ -6097,8 +6097,6 @@ void win_setminwidth(void)
/// Status line of dragwin is dragged "offset" lines down (negative is up). /// Status line of dragwin is dragged "offset" lines down (negative is up).
void win_drag_status_line(win_T *dragwin, int offset) void win_drag_status_line(win_T *dragwin, int offset)
{ {
static bool p_ch_was_zero = false;
// If the user explicitly set 'cmdheight' to zero, then allow for dragging // If the user explicitly set 'cmdheight' to zero, then allow for dragging
// the status line making it zero again. // the status line making it zero again.
if (p_ch == 0) { if (p_ch == 0) {

View File

@ -35,6 +35,8 @@
#define MIN_COLUMNS 12 // minimal columns for screen #define MIN_COLUMNS 12 // minimal columns for screen
#define MIN_LINES 2 // minimal lines for screen #define MIN_LINES 2 // minimal lines for screen
// Set to true if 'cmdheight' was explicitly set to 0.
EXTERN bool p_ch_was_zero INIT(= false);
#ifdef INCLUDE_GENERATED_DECLARATIONS #ifdef INCLUDE_GENERATED_DECLARATIONS
# include "window.h.generated.h" # include "window.h.generated.h"
#endif #endif

View File

@ -1364,4 +1364,40 @@ describe('cmdheight=0', function()
]]) ]])
assert_alive() assert_alive()
end) end)
it('can only be resized to 0 if set explicitly', function()
command('set laststatus=2')
command('resize +1')
screen:expect([[
^ |
{1:~ }|
{1:~ }|
{2:[No Name] }|
|
]])
command('set cmdheight=0')
command('resize -1')
command('resize +1')
screen:expect([[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{2:[No Name] }|
]])
end)
it("clears cmdline area when resized with external messages", function()
clear()
screen = new_screen({rgb=true, ext_messages=true})
command('set laststatus=2 cmdheight=0')
command('resize -1')
screen:expect([[
^ |
{1:~ }|
{1:~ }|
{3:[No Name] }|
|
]])
end)
end) end)