neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 7fcdb0541f0d801904a509a0f9514bbe0091032b
parent 2b421d518faec9e1b0a6d1c46026d2f13f4fb73f
Author: Justin M. Keyes <justinkz@gmail.com>
Date:   Thu,  4 Sep 2025 17:38:52 -0400

Merge #35628 fix(progress): msg-id, memoryleak


Diffstat:
Msrc/nvim/message.c | 8+++++++-
Mtest/functional/ui/messages_spec.lua | 37+++++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/src/nvim/message.c b/src/nvim/message.c @@ -352,6 +352,7 @@ MsgID msg_multihl(MsgID id, HlMessage hl_msg, const char *kind, bool history, bo msg_start(); msg_clr_eos(); bool need_clear = false; + bool hl_msg_updated = false; msg_ext_history = history; if (kind != NULL) { msg_ext_set_kind(kind); @@ -368,12 +369,14 @@ MsgID msg_multihl(MsgID id, HlMessage hl_msg, const char *kind, bool history, bo msg_id_next = id.data.integer + 1; } } + msg_ext_id = id; // progress message are special displayed as "title: percent% msg" if (strequal(kind, "progress") && msg_data) { HlMessage formated_message = format_progress_message(hl_msg, msg_data); if (formated_message.items != hl_msg.items) { *needs_msg_clear = true; + hl_msg_updated = true; hl_msg = formated_message; } } @@ -396,6 +399,10 @@ MsgID msg_multihl(MsgID id, HlMessage hl_msg, const char *kind, bool history, bo is_multihl = false; no_wait_return--; msg_end(); + + if (hl_msg_updated && !(history && kv_size(hl_msg))) { + hl_msg_free(hl_msg); + } return id; } @@ -1161,7 +1168,6 @@ static void msg_hist_add_multihl(MsgID msg_id, HlMessage msg, bool temp, Message msg_hist_last = entry; msg_ext_history = true; - msg_ext_id = msg_id; msg_hist_clear(msg_hist_max); } diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua @@ -3640,4 +3640,41 @@ describe('progress-message', function() {6:TestSuit}: {19: 10% }test-message | ]]) end) + + it('works with history off', function() + api.nvim_echo({ { 'test-message' } }, false, { + kind = 'progress', + title = 'TestSuit', + percent = 10, + status = 'running', + }) + + screen:expect({ + grid = [[ + ^ | + {1:~ }|*4 + ]], + messages = { + { + content = { + { 'TestSuit', 6, 'MoreMsg' }, + { ': ' }, + { ' 10% ', 19, 'WarningMsg' }, + { 'test-message' }, + }, + id = 1, + kind = 'progress', + }, + }, + }) + + assert_progress_autocmd({ + text = { 'test-message' }, + percent = 10, + status = 'running', + title = 'TestSuit', + id = 1, + data = {}, + }, 'progress autocmd receives progress messages') + end) end)