diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2023-02-23 18:29:36 +0100 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2023-02-27 19:50:59 +0100 |
commit | 7f424e2b65779c59fc0cac3cc7508ba2ec07f200 (patch) | |
tree | 60c2609c51ea9f5708c379972c38d7da32a6faa1 /src | |
parent | f64098a2df774c79dd454f63ac491570cdcaf2b2 (diff) | |
download | rneovim-7f424e2b65779c59fc0cac3cc7508ba2ec07f200.tar.gz rneovim-7f424e2b65779c59fc0cac3cc7508ba2ec07f200.tar.bz2 rneovim-7f424e2b65779c59fc0cac3cc7508ba2ec07f200.zip |
feat(api): more fields in nvim_list_uis
Problem:
nvim_list_uis does not report all ":help ui-option" fields.
Solution:
Store ":help ui-option" fields on the `UI` object and update ui_array.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/ui.c | 16 | ||||
-rw-r--r-- | src/nvim/ui.c | 9 | ||||
-rw-r--r-- | src/nvim/ui.h | 8 | ||||
-rw-r--r-- | src/nvim/ui_client.c | 2 |
4 files changed, 29 insertions, 6 deletions
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index f6dee066dc..00fd2781ff 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -113,6 +113,10 @@ void remote_ui_disconnect(uint64_t channel_id) kv_destroy(data->call_buf); pmap_del(uint64_t)(&connected_uis, channel_id); ui_detach_impl(ui, channel_id); + + // Destroy `ui`. + XFREE_CLEAR(ui->term_name); + XFREE_CLEAR(ui->term_background); xfree(ui); } @@ -163,15 +167,9 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, Dictiona UI *ui = xcalloc(1, sizeof(UI)); ui->width = (int)width; ui->height = (int)height; - ui->pum_nlines = 0; - ui->pum_pos = false; - ui->pum_width = 0.0; - ui->pum_height = 0.0; ui->pum_row = -1.0; ui->pum_col = -1.0; ui->rgb = true; - ui->override = false; - CLEAR_FIELD(ui->ui_ext); for (size_t i = 0; i < options.size; i++) { @@ -320,6 +318,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, Error *e return; }); set_tty_option("term", string_to_cstr(value.data.string)); + ui->term_name = string_to_cstr(value.data.string); return; } @@ -328,6 +327,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, Error *e return; }); t_colors = (int)value.data.integer; + ui->term_colors = (int)value.data.integer; return; } @@ -336,6 +336,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, Error *e return; }); set_tty_background(value.data.string.data); + ui->term_background = string_to_cstr(value.data.string); return; } @@ -351,6 +352,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, Error *e }); stdin_fd = (int)value.data.integer; + ui->stdin_fd = (int)value.data.integer; return; } @@ -359,6 +361,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, Error *e return; }); stdin_isatty = value.data.boolean; + ui->stdin_tty = value.data.boolean; return; } @@ -367,6 +370,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, Error *e return; }); stdout_isatty = value.data.boolean; + ui->stdout_tty = value.data.boolean; return; } diff --git a/src/nvim/ui.c b/src/nvim/ui.c index 73545441d3..6c95579b47 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -598,6 +598,15 @@ Array ui_array(void) PUT(info, "height", INTEGER_OBJ(ui->height)); PUT(info, "rgb", BOOLEAN_OBJ(ui->rgb)); PUT(info, "override", BOOLEAN_OBJ(ui->override)); + + // TUI fields. + PUT(info, "term_name", STRING_OBJ(cstr_to_string(ui->term_name))); + PUT(info, "term_background", STRING_OBJ(cstr_to_string(ui->term_background))); + PUT(info, "term_colors", INTEGER_OBJ(ui->term_colors)); + PUT(info, "stdin_fd", INTEGER_OBJ(ui->stdin_fd)); + PUT(info, "stdin_tty", BOOLEAN_OBJ(ui->stdin_tty)); + PUT(info, "stdout_tty", BOOLEAN_OBJ(ui->stdout_tty)); + for (UIExtension j = 0; j < kUIExtCount; j++) { if (ui_ext_names[j][0] != '_' || ui->ui_ext[j]) { PUT(info, ui_ext_names[j], BOOLEAN_OBJ(ui->ui_ext[j])); diff --git a/src/nvim/ui.h b/src/nvim/ui.h index e83f93eb07..c1377f56b4 100644 --- a/src/nvim/ui.h +++ b/src/nvim/ui.h @@ -103,6 +103,14 @@ struct ui_t { double pum_height; double pum_width; + // TUI fields. + char *term_name; + char *term_background; + int term_colors; + int stdin_fd; + bool stdin_tty; + bool stdout_tty; + // TODO(bfredl): integrate into struct! UIData data[1]; }; diff --git a/src/nvim/ui_client.c b/src/nvim/ui_client.c index 8262293ec5..25ff63ea2d 100644 --- a/src/nvim/ui_client.c +++ b/src/nvim/ui_client.c @@ -1,6 +1,8 @@ // This is an open source non-commercial project. Dear PVS-Studio, please check // it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +/// Nvim's own UI client, which attaches to a child or remote Nvim server. + #include <stdbool.h> #include <stdint.h> #include <stdlib.h> |