diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-04 08:59:11 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-04 08:59:11 +0800 |
commit | 7c8c1550737b34fabb3e4cecbc6b6bf3581b2235 (patch) | |
tree | a38e081773f61f33df2fca85417f578ba92260e0 /src | |
parent | eb1da498d6af79b7856418d7df51ce584c621340 (diff) | |
download | rneovim-7c8c1550737b34fabb3e4cecbc6b6bf3581b2235.tar.gz rneovim-7c8c1550737b34fabb3e4cecbc6b6bf3581b2235.tar.bz2 rneovim-7c8c1550737b34fabb3e4cecbc6b6bf3581b2235.zip |
fix(api): avoid double hit-enter prompt with nvim_err_writeln (#22879)
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/vim.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 9812313b7b..343c3b6e40 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -737,7 +737,7 @@ error: void nvim_out_write(String str) FUNC_API_SINCE(1) { - write_msg(str, false); + write_msg(str, false, false); } /// Writes a message to the Vim error buffer. Does not append "\n", the @@ -747,7 +747,7 @@ void nvim_out_write(String str) void nvim_err_write(String str) FUNC_API_SINCE(1) { - write_msg(str, true); + write_msg(str, true, false); } /// Writes a message to the Vim error buffer. Appends "\n", so the buffer is @@ -758,8 +758,7 @@ void nvim_err_write(String str) void nvim_err_writeln(String str) FUNC_API_SINCE(1) { - nvim_err_write(str); - nvim_err_write((String) { .data = "\n", .size = 1 }); + write_msg(str, true, true); } /// Gets the current list of buffer handles @@ -1672,23 +1671,24 @@ theend: /// /// @param message Message to write /// @param to_err true: message is an error (uses `emsg` instead of `msg`) -static void write_msg(String message, bool to_err) +/// @param writeln Append a trailing newline +static void write_msg(String message, bool to_err, bool writeln) { static StringBuilder out_line_buf = KV_INITIAL_VALUE; static StringBuilder err_line_buf = KV_INITIAL_VALUE; -#define PUSH_CHAR(i, line_buf, msg) \ +#define PUSH_CHAR(c, line_buf, msg) \ if (kv_max(line_buf) == 0) { \ kv_resize(line_buf, LINE_BUFFER_MIN_SIZE); \ } \ - if (message.data[i] == NL) { \ + if (c == NL) { \ kv_push(line_buf, NUL); \ msg(line_buf.items); \ kv_drop(line_buf, kv_size(line_buf)); \ kv_resize(line_buf, LINE_BUFFER_MIN_SIZE); \ - continue; \ - } \ - kv_push(line_buf, message.data[i]); + } else { \ + kv_push(line_buf, c); \ + } no_wait_return++; for (uint32_t i = 0; i < message.size; i++) { @@ -1696,9 +1696,16 @@ static void write_msg(String message, bool to_err) break; } if (to_err) { - PUSH_CHAR(i, err_line_buf, emsg); + PUSH_CHAR(message.data[i], err_line_buf, emsg); + } else { + PUSH_CHAR(message.data[i], out_line_buf, msg); + } + } + if (writeln) { + if (to_err) { + PUSH_CHAR(NL, err_line_buf, emsg); } else { - PUSH_CHAR(i, out_line_buf, msg); + PUSH_CHAR(NL, out_line_buf, msg); } } no_wait_return--; |