diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/api/vim.c | 11 | ||||
| -rw-r--r-- | src/nvim/message.c | 7 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 9adc4914a8..ce9018a218 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -824,7 +824,7 @@ void nvim_set_vvar(String name, Object value, Error *err) /// instead of creating a new message. /// - kind (`string?`) Decides the |ui-messages| kind in the emitted message. Set "progress" /// to emit a |progress-message|. -/// - percent (`integer?`) |progress-message| percentage. +/// - percent (`integer?`) |progress-message| percentage, or nil to signal "unknown progress". /// - source (`string?`) |progress-message| source. /// - status (`string?`) |progress-message| status: /// - "success": Process completed successfully. @@ -857,7 +857,7 @@ Union(Integer, String) nvim_echo(ArrayOf(Tuple(String, *HLGroupID)) chunks, Bool bool needs_clear = !history; VALIDATE(is_progress - || (opts->status.size == 0 && opts->title.size == 0 && opts->percent == 0 + || (opts->status.size == 0 && opts->title.size == 0 && !HAS_KEY(opts, echo_opts, percent) && opts->data.size == 0 && opts->source.size == 0), "Conflict: title/source/status/percent/data not allowed with kind='%s'", kind, { @@ -872,7 +872,8 @@ Union(Integer, String) nvim_echo(ArrayOf(Tuple(String, *HLGroupID)) chunks, Bool goto error; }); - VALIDATE_RANGE(!is_progress || (opts->percent >= 0 && opts->percent <= 100), + VALIDATE_RANGE(!is_progress || !HAS_KEY(opts, echo_opts, percent) + || (opts->percent >= 0 && opts->percent <= 100), "percent", { goto error; }); @@ -888,8 +889,8 @@ Union(Integer, String) nvim_echo(ArrayOf(Tuple(String, *HLGroupID)) chunks, Bool }); MessageData msg_data = { .title = opts->title, .status = opts->status, - .percent = opts->percent, .data = opts->data, - .source = opts->source }; + .percent = HAS_KEY(opts, echo_opts, percent) ? opts->percent : -1, + .data = opts->data, .source = opts->source }; const bool save_nwr = need_wait_return; const int save_lines_left = lines_left; diff --git a/src/nvim/message.c b/src/nvim/message.c index 1d7c24ce02..5b5a6ba2f8 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -337,7 +337,7 @@ static HlMessage format_progress_message(HlMessage hl_msg, MessageData *msg_data ((HlMessageChunk){ .text = copy_string(msg_data->title, NULL), .hl_id = hl_id })); kv_push(updated_msg, ((HlMessageChunk){ .text = cstr_to_string(": "), .hl_id = 0 })); } - if (msg_data->percent > 0) { + if (msg_data->percent >= 0) { char percent_buf[10]; vim_snprintf(percent_buf, sizeof(percent_buf), "%3ld%% ", (long)msg_data->percent); String percent = cstr_to_string(percent_buf); @@ -1173,7 +1173,10 @@ void do_autocmd_progress(MsgID msg_id, HlMessage msg, MessageData *msg_data) PUT_C(data, "id", OBJECT_OBJ(msg_id)); PUT_C(data, "text", ARRAY_OBJ(messages)); if (msg_data != NULL) { - PUT_C(data, "percent", INTEGER_OBJ(msg_data->percent)); + if (msg_data->percent >= 0) { + // If percent=nil we omit it, it means "indeterminate progress". #39029 + PUT_C(data, "percent", INTEGER_OBJ(msg_data->percent)); + } PUT_C(data, "source", STRING_OBJ(msg_data->source)); PUT_C(data, "status", STRING_OBJ(msg_data->status)); PUT_C(data, "title", STRING_OBJ(msg_data->title)); |
