diff options
Diffstat (limited to 'src/nvim/api/ui.c')
-rw-r--r-- | src/nvim/api/ui.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 7e45abb897..9ff2a529ae 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -109,6 +109,7 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, UI *ui = xcalloc(1, sizeof(UI)); ui->width = (int)width; ui->height = (int)height; + ui->pum_height = 0; ui->rgb = true; ui->override = false; ui->grid_resize = remote_ui_grid_resize; @@ -313,6 +314,38 @@ void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, ui_grid_resize((handle_T)grid, (int)width, (int)height, err); } +/// Tell Nvim the number of element displayed in popumenu. The amount of +/// movement by <PageUp> or <PageDown> is determined by the value set by this. +/// +/// If the ext_popupmenu option is false or the height is 0 or less, fails +/// with error. +/// +/// @param channel_id +/// @param height The popupmenu height. +/// @param[out] err Error details, if any +void nvim_ui_pum_set_height(uint64_t channel_id, Integer height, Error *err) + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY +{ + if (!pmap_has(uint64_t)(connected_uis, channel_id)) { + api_set_error(err, kErrorTypeException, + "UI not attached to channel: %" PRId64, channel_id); + return; + } + + if (height <= 0) { + api_set_error(err, kErrorTypeValidation, "Expected pum height > 0"); + return; + } + + UI *ui = pmap_get(uint64_t)(connected_uis, channel_id); + if (!ui->ui_ext[kUIPopupmenu]) { + api_set_error(err, kErrorTypeValidation, + "It must support the ext_popupmenu option"); + return; + } + ui->pum_height = (int)height; +} + /// Pushes data into UI.UIData, to be consumed later by remote_ui_flush(). static void push_call(UI *ui, const char *name, Array args) { |