feat(ui): "append" parameter for "msg_show" UI events

Problem:  Consecutive "msg_show" events stemming from an `:echon`
          command are supposed to be appended without a newline, this
          information is not encoded in the "msg_show" event.
Solution: Add an "append" parameter to the "msg_show" event that is set
          to true to indicate the message should not start on a new line.
Considered alternative: Emit a newline for the common case instead at the
start of a new message. That way UIs can more closely follow the logic
as it is implemented for the message grid currently. This would be a
breaking change. The "append" parameter seems OK.
This commit is contained in:
Luuk van Baal
2025-05-23 13:03:28 +02:00
committed by luukvbaal
parent 7c2b4a0eaf
commit abb40ecedd
9 changed files with 44 additions and 62 deletions

View File

@ -160,7 +160,7 @@ void wildmenu_select(Integer selected)
void wildmenu_hide(void)
FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY;
void msg_show(String kind, Array content, Boolean replace_last, Boolean history)
void msg_show(String kind, Array content, Boolean replace_last, Boolean history, Boolean append)
FUNC_API_SINCE(6) FUNC_API_FAST FUNC_API_REMOTE_ONLY;
void msg_clear(void)
FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY;

View File

@ -7863,6 +7863,7 @@ void ex_echo(exarg_T *eap)
char *tofree = encode_tv2echo(&rettv, NULL);
if (*tofree != NUL) {
msg_ext_set_kind("echo");
msg_ext_append = eap->cmdidx == CMD_echon;
msg_multiline(cstr_as_string(tofree), echo_hl_id, true, false, &need_clear);
}
xfree(tofree);

View File

@ -3185,7 +3185,8 @@ void msg_ext_ui_flush(void)
msg_ext_emit_chunk();
if (msg_ext_chunks->size > 0) {
Array *tofree = msg_ext_init_chunks();
ui_call_msg_show(cstr_as_string(msg_ext_kind), *tofree, msg_ext_overwrite, msg_ext_history);
ui_call_msg_show(cstr_as_string(msg_ext_kind), *tofree, msg_ext_overwrite, msg_ext_history,
msg_ext_append);
if (msg_ext_history || strequal(msg_ext_kind, "return_prompt")) {
api_free_array(*tofree);
} else {
@ -3205,6 +3206,7 @@ void msg_ext_ui_flush(void)
}
msg_ext_overwrite = false;
msg_ext_history = false;
msg_ext_append = false;
msg_ext_kind = NULL;
}
}

View File

@ -33,6 +33,8 @@ extern MessageHistoryEntry *msg_hist_last;
EXTERN bool msg_ext_need_clear INIT( = false);
// Set to true to force grouping a set of message chunks into a single `cmdline_show` event.
EXTERN bool msg_ext_skip_flush INIT( = false);
// Set to true when message should be appended to previous message line.
EXTERN bool msg_ext_append INIT( = false);
/// allocated grid for messages. Used unless ext_messages is active.
/// See also the description at msg_scroll_flush()