From 10a03e83e357f118be90a11d8b281d8459718b86 Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Sat, 28 Jun 2025 19:37:21 +0200 Subject: [PATCH] fix(messages): only msg_clear for UPD_CLEAR #34688 Problem: "msg_clear" is emitted after resizing the screen and during startup. Solution: Only emit "msg_clear" when `redraw_type == UPD_CLEAR`. --- src/nvim/drawscreen.c | 6 +++--- test/functional/ui/messages2_spec.lua | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c index a4275de9c6..3a990aac86 100644 --- a/src/nvim/drawscreen.c +++ b/src/nvim/drawscreen.c @@ -264,9 +264,6 @@ void screenclear(void) msg_grid_invalid = false; clear_cmdline = true; } - if (ui_has(kUIMessages)) { - ui_call_msg_clear(); - } } /// Unlike cmdline "one_key" prompts, the message part of the prompt is not stored @@ -570,6 +567,9 @@ int update_screen(void) screenclear(); // will reset clear_cmdline // and set UPD_NOT_VALID for each window cmdline_screen_cleared(); // clear external cmdline state + if (ui_has(kUIMessages)) { + ui_call_msg_clear(); + } type = UPD_NOT_VALID; // must_redraw may be set indirectly, avoid another redraw later must_redraw = 0; diff --git a/test/functional/ui/messages2_spec.lua b/test/functional/ui/messages2_spec.lua index 65c8afed3c..97118775b9 100644 --- a/test/functional/ui/messages2_spec.lua +++ b/test/functional/ui/messages2_spec.lua @@ -160,5 +160,14 @@ describe('messages2', function() ]]) command('echo ""') screen:expect_unchanged() + -- Or a screen resize + screen:try_resize(screen._width, screen._height - 1) + screen:expect([[ + ^ | + {1:~ }|*9 + {1:~ }┌───┐| + {1:~ }│{4:foo}│| + {1:~ }└───┘| + ]]) end) end)