Merge pull request #27872 from luukvbaal/cmdheight

fix(ui): don't force 'cmdheight' to zero with ext_messages
This commit is contained in:
bfredl 2024-04-21 09:31:24 +02:00 committed by GitHub
commit f42ab1dc48
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 19 additions and 22 deletions

View File

@ -777,9 +777,10 @@ This UI extension delegates presentation of messages and dialogs. Messages
that would otherwise render in the message/cmdline screen space, are emitted
as UI events.
Nvim will not allocate screen space for the cmdline or messages, and
'cmdheight' will be forced zero. Cmdline state is emitted as |ui-cmdline|
events, which the UI must handle.
Nvim will not allocate screen space for the cmdline or messages. 'cmdheight'
will be set to zero, but can be changed and used for the replacing cmdline or
message window. Cmdline state is emitted as |ui-cmdline| events, which the UI
must handle.
["msg_show", kind, content, replace_last] ~
Display a message to the user.

View File

@ -227,6 +227,11 @@ void ui_refresh(void)
if (i < kUIGlobalCount) {
ext_widgets[i] |= ui_cb_ext[i];
}
// Set 'cmdheight' to zero when ext_messages becomes active.
if (i == kUIMessages && !ui_ext[i] && ext_widgets[i]) {
set_option_value(kOptCmdheight, NUMBER_OPTVAL(0), 0);
command_height();
}
ui_ext[i] = ext_widgets[i];
if (i < kUIGlobalCount) {
ui_call_option_set(cstr_as_string(ui_ext_names[i]),
@ -241,10 +246,6 @@ void ui_refresh(void)
screen_resize(width, height);
p_lz = save_p_lz;
if (ext_widgets[kUIMessages]) {
set_option_value(kOptCmdheight, NUMBER_OPTVAL(0), 0);
command_height();
}
ui_mode_info_set();
pending_mode_update = true;
ui_cursor_shape();

View File

@ -5899,10 +5899,6 @@ static void frame_setheight(frame_T *curfrp, int height)
if (curfrp->fr_parent == NULL) {
// topframe: can only change the command line height
// Avoid doing so with external messages.
if (ui_has(kUIMessages)) {
return;
}
if (height > ROWS_AVAIL) {
// If height is greater than the available space, try to create space for
// the frame by reducing 'cmdheight' if possible, while making sure
@ -6241,12 +6237,6 @@ const char *did_set_winminwidth(optset_T *args FUNC_ATTR_UNUSED)
void win_drag_status_line(win_T *dragwin, int offset)
{
frame_T *fr = dragwin->w_frame;
// Avoid changing command line height with external messages.
if (fr->fr_next == NULL && ui_has(kUIMessages)) {
return;
}
frame_T *curfr = fr;
if (fr != topframe) { // more than one window
fr = fr->fr_parent;

View File

@ -1706,19 +1706,24 @@ describe('cmdheight=0', function()
]])
end)
it('cannot be resized at all with external messages', function()
it('can be resized with external messages', function()
clear()
screen = new_screen({ rgb = true, ext_messages = true })
command('set laststatus=2 mouse=a')
command('resize -1')
screen:expect([[
^ |
{1:~ }|*2
{3:[No Name] }|
|
]])
api.nvim_input_mouse('left', 'press', '', 0, 3, 10)
poke_eventloop()
api.nvim_input_mouse('left', 'drag', '', 0, 4, 10)
screen:expect([[
^ |
{1:~ }|*3
{3:[No Name] }|
]])
api.nvim_input_mouse('left', 'press', '', 0, 6, 10)
poke_eventloop()
api.nvim_input_mouse('left', 'drag', '', 0, 5, 10)
screen:expect_unchanged()
end)
end)