From f1dcde6cba3b2d69787f852a379ae2f7bc91c53d Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Thu, 5 Feb 2026 14:37:20 +0100 Subject: [PATCH] fix(messages): single msg_show event for :global command #37728 Problem: "first" parameter added in 912388f5 for grouping printed lines in a single event is ineffective for the :global command. Solution: Only set the message kind for the first printed line during a :global command. --- src/nvim/ex_cmds.c | 6 +++++- test/functional/ui/messages_spec.lua | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index ced6ab3d7d..e07fccb13c 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -1676,6 +1676,8 @@ void print_line_no_prefix(linenr_T lnum, bool use_number, bool list) msg_prt_line(ml_get(lnum), list); } +static bool global_need_msg_kind = false; // Start new message only once during :global. + /// Print a text line. Also in silent mode ("ex -s"). void print_line(linenr_T lnum, bool use_number, bool list, bool first) { @@ -1688,9 +1690,10 @@ void print_line(linenr_T lnum, bool use_number, bool list, bool first) silent_mode = false; info_message = true; // use stdout, not stderr - if (first) { + if ((!global_busy || global_need_msg_kind) && first) { msg_start(); msg_ext_set_kind("list_cmd"); + global_need_msg_kind = false; } else if (!save_silent) { msg_putchar('\n'); // don't want trailing newline with regular messaging } @@ -4764,6 +4767,7 @@ void global_exe(char *cmd) sub_nsubs = 0; sub_nlines = 0; + global_need_msg_kind = true; global_need_beginline = false; global_busy = 1; old_lcount = curbuf->b_ml.ml_line_count; diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index dbc84e9c11..9b73295581 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -468,6 +468,20 @@ describe('ui/ext_messages', function() messages = { { content = { { 'line 1\nline ' } }, kind = 'list_cmd' } }, }) + -- single message for :global command #37726 + feed(':g/line') + screen:expect({ + grid = [[ + line 1 | + ^line | + {1:~ }|*3 + ]], + messages = { + { content = { { '\n' } }, kind = '' }, + { content = { { 'line 1\nline ' } }, kind = 'list_cmd' }, + }, + }) + command('command Foo Bar') feed(':command') screen:expect({