diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2025-01-14 17:23:11 +0100 |
---|---|---|
committer | Luuk van Baal <luukvbaal@gmail.com> | 2025-01-15 10:51:55 +0100 |
commit | d55b17e2b4e061fd8b330f928785a217c99c9d11 (patch) | |
tree | eabbcd7fc8cf408daf49f4614d3ee7c7ff6a8bc1 | |
parent | 5bae80899d9d29d80c129ca92cde75a1583b5efe (diff) | |
download | rneovim-d55b17e2b4e061fd8b330f928785a217c99c9d11.tar.gz rneovim-d55b17e2b4e061fd8b330f928785a217c99c9d11.tar.bz2 rneovim-d55b17e2b4e061fd8b330f928785a217c99c9d11.zip |
fix(messages): verbose kind for nvim_echo()
Problem: No "verbose" kind for nvim_echo() opts->verbose.
Solution: Pass NULL "kind" to indicate no new kind.
-rw-r--r-- | src/nvim/api/vim.c | 3 | ||||
-rw-r--r-- | src/nvim/message.c | 12 | ||||
-rw-r--r-- | test/functional/ui/messages_spec.lua | 29 |
3 files changed, 29 insertions, 15 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index faf6c0567c..950c70026b 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -772,7 +772,8 @@ void nvim_echo(Array chunks, Boolean history, Dict(echo_opts) *opts, Error *err) verbose_enter(); } - msg_multihl(hl_msg, opts->err ? "echoerr" : history ? "echomsg" : "echo", history, opts->err); + char *kind = opts->verbose ? NULL : opts->err ? "echoerr" : history ? "echomsg" : "echo"; + msg_multihl(hl_msg, kind, history, opts->err); if (opts->verbose) { verbose_leave(); diff --git a/src/nvim/message.c b/src/nvim/message.c index f87eba27d0..5423446ef9 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -296,6 +296,12 @@ void msg_multiline(String str, int hl_id, bool check_int, bool hist, bool *need_ // Avoid starting a new message for each chunk and adding message to history in msg_keep(). static bool is_multihl = false; +/// Print message chunks, each with their own highlight ID. +/// +/// @param hl_msg Message chunks +/// @param kind Message kind (can be NULL to avoid setting kind) +/// @param history Whether to add message to history +/// @param err Whether to print message as an error void msg_multihl(HlMessage hl_msg, const char *kind, bool history, bool err) { no_wait_return++; @@ -303,7 +309,9 @@ void msg_multihl(HlMessage hl_msg, const char *kind, bool history, bool err) msg_clr_eos(); bool need_clear = false; msg_ext_history = history; - msg_ext_set_kind(kind); + if (kind != NULL) { + msg_ext_set_kind(kind); + } is_multihl = true; for (uint32_t i = 0; i < kv_size(hl_msg); i++) { HlMessageChunk chunk = kv_A(hl_msg, i); @@ -312,7 +320,7 @@ void msg_multihl(HlMessage hl_msg, const char *kind, bool history, bool err) } else { msg_multiline(chunk.text, chunk.hl_id, true, false, &need_clear); } - assert(!ui_has(kUIMessages) || msg_ext_kind == kind); + assert(!ui_has(kUIMessages) || kind == NULL || msg_ext_kind == kind); } if (history && kv_size(hl_msg)) { add_msg_hist_multihl(NULL, 0, 0, true, hl_msg); diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index 4d53daa9d6..b70bd0e808 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -319,9 +319,7 @@ describe('ui/ext_messages', function() -- kind=echoerr for nvim_echo() err feed(':call nvim_echo([["Error"], ["Message", "Special"]], 1, #{ err:1 })<CR>') screen:expect({ - cmdline = { { - abort = false, - } }, + cmdline = { { abort = false } }, messages = { { content = { { 'Error', 9, 6 }, { 'Message', 16, 99 } }, @@ -331,12 +329,23 @@ describe('ui/ext_messages', function() }, }) + -- kind=verbose for nvim_echo() verbose + feed(':call nvim_echo([["Verbose Message"]], 1, #{ verbose:1 })<CR>') + screen:expect({ + cmdline = { { abort = false } }, + messages = { + { + content = { { 'Verbose Message' } }, + history = true, + kind = 'verbose', + }, + }, + }) + -- kind=verbose for :verbose messages feed(':1verbose filter Diff[AC] hi<CR>') screen:expect({ - cmdline = { { - abort = false, - } }, + cmdline = { { abort = false } }, messages = { { content = { @@ -387,9 +396,7 @@ describe('ui/ext_messages', function() or '{ echo stdout; echo stderr >&2; exit 3; }' feed(('<CR>:!%s<CR>'):format(cmd)) screen:expect({ - cmdline = { { - abort = false, - } }, + cmdline = { { abort = false } }, messages = { { content = { { (':!%s\r\n[No write since last change]\n'):format(cmd) } }, @@ -1126,9 +1133,7 @@ describe('ui/ext_messages', function() ^ | {1:~ }|*4 ]], - cmdline = { { - abort = false, - } }, + cmdline = { { abort = false } }, }) eq(0, eval('&cmdheight')) end) |