summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/vim.c11
-rw-r--r--src/nvim/message.c7
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));