diff options
| author | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:17:51 -0500 | 
|---|---|---|
| committer | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:17:51 -0500 | 
| commit | ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f (patch) | |
| tree | 92de2079e80f5f289dd87a54af123cb7d90c3058 /src/nvim/api/ui.c | |
| parent | 78bc52ea5397c092d01cd08296fe1dc85d998329 (diff) | |
| parent | ef4feab0e75be19c5f41d70a001db980b72090f5 (diff) | |
| download | rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.tar.gz rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.tar.bz2 rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.zip  | |
Merge branch 'master' into s-dash-stdin
Diffstat (limited to 'src/nvim/api/ui.c')
| -rw-r--r-- | src/nvim/api/ui.c | 53 | 
1 files changed, 28 insertions, 25 deletions
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index a9eaccfac5..4cd2657561 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -43,10 +43,10 @@ void remote_ui_disconnect(uint64_t channel_id)      return;    }    UIData *data = ui->data; -  // destroy pending screen updates -  api_free_array(data->buffer); +  api_free_array(data->buffer);  // Destroy pending screen updates.    pmap_del(uint64_t)(connected_uis, channel_id);    xfree(ui->data); +  ui->data = NULL;  // Flag UI as "stopped".    ui_detach_impl(ui);    xfree(ui);  } @@ -56,7 +56,8 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,    FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY  {    if (pmap_has(uint64_t)(connected_uis, channel_id)) { -    api_set_error(err, kErrorTypeException, "UI already attached for channel"); +    api_set_error(err, kErrorTypeException, +                  "UI already attached to channel: %" PRId64, channel_id);      return;    } @@ -86,6 +87,7 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,    ui->put = remote_ui_put;    ui->bell = remote_ui_bell;    ui->visual_bell = remote_ui_visual_bell; +  ui->default_colors_set = remote_ui_default_colors_set;    ui->update_fg = remote_ui_update_fg;    ui->update_bg = remote_ui_update_bg;    ui->update_sp = remote_ui_update_sp; @@ -93,6 +95,7 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,    ui->suspend = remote_ui_suspend;    ui->set_title = remote_ui_set_title;    ui->set_icon = remote_ui_set_icon; +  ui->option_set = remote_ui_option_set;    ui->event = remote_ui_event;    memset(ui->ui_ext, 0, sizeof(ui->ui_ext)); @@ -128,7 +131,8 @@ void nvim_ui_detach(uint64_t channel_id, Error *err)    FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY  {    if (!pmap_has(uint64_t)(connected_uis, channel_id)) { -    api_set_error(err, kErrorTypeException, "UI is not attached for channel"); +    api_set_error(err, kErrorTypeException, +                  "UI not attached to channel: %" PRId64, channel_id);      return;    }    remote_ui_disconnect(channel_id); @@ -140,7 +144,8 @@ void nvim_ui_try_resize(uint64_t channel_id, Integer width,    FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY  {    if (!pmap_has(uint64_t)(connected_uis, channel_id)) { -    api_set_error(err, kErrorTypeException, "UI is not attached for channel"); +    api_set_error(err, kErrorTypeException, +                  "UI not attached to channel: %" PRId64, channel_id);      return;    } @@ -161,7 +166,8 @@ void nvim_ui_set_option(uint64_t channel_id, String name,    FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY  {    if (!pmap_has(uint64_t)(connected_uis, channel_id)) { -    api_set_error(error, kErrorTypeException, "UI is not attached for channel"); +    api_set_error(error, kErrorTypeException, +                  "UI not attached to channel: %" PRId64, channel_id);      return;    }    UI *ui = pmap_get(uint64_t)(connected_uis, channel_id); @@ -174,18 +180,6 @@ void nvim_ui_set_option(uint64_t channel_id, String name,  static void ui_set_option(UI *ui, String name, Object value, Error *error)  { -#define UI_EXT_OPTION(o, e) \ -  do { \ -    if (strequal(name.data, #o)) { \ -      if (value.type != kObjectTypeBoolean) { \ -        api_set_error(error, kErrorTypeValidation, #o " must be a Boolean"); \ -        return; \ -      } \ -      ui->ui_ext[(e)] = value.data.boolean; \ -      return; \ -    } \ -  } while (0) -    if (strequal(name.data, "rgb")) {      if (value.type != kObjectTypeBoolean) {        api_set_error(error, kErrorTypeValidation, "rgb must be a Boolean"); @@ -195,13 +189,21 @@ static void ui_set_option(UI *ui, String name, Object value, Error *error)      return;    } -  UI_EXT_OPTION(ext_cmdline, kUICmdline); -  UI_EXT_OPTION(ext_popupmenu, kUIPopupmenu); -  UI_EXT_OPTION(ext_tabline, kUITabline); -  UI_EXT_OPTION(ext_wildmenu, kUIWildmenu); +  for (UIExtension i = 0; i < kUIExtCount; i++) { +    if (strequal(name.data, ui_ext_names[i])) { +      if (value.type != kObjectTypeBoolean) { +        snprintf((char *)IObuff, IOSIZE, "%s must be a Boolean", +                 ui_ext_names[i]); +        api_set_error(error, kErrorTypeValidation, (char *)IObuff); +        return; +      } +      ui->ui_ext[i] = value.data.boolean; +      return; +    } +  }    if (strequal(name.data, "popupmenu_external")) { -    // LEGACY: Deprecated option, use `ui_ext` instead. +    // LEGACY: Deprecated option, use `ext_cmdline` instead.      if (value.type != kObjectTypeBoolean) {        api_set_error(error, kErrorTypeValidation,                      "popupmenu_external must be a Boolean"); @@ -211,7 +213,8 @@ static void ui_set_option(UI *ui, String name, Object value, Error *error)      return;    } -  api_set_error(error, kErrorTypeValidation, "No such ui option"); +  api_set_error(error, kErrorTypeValidation, "No such UI option: %s", +                name.data);  #undef UI_EXT_OPTION  } @@ -242,7 +245,7 @@ static void push_call(UI *ui, char *name, Array args)  static void remote_ui_highlight_set(UI *ui, HlAttrs attrs)  {    Array args = ARRAY_DICT_INIT; -  Dictionary hl = hlattrs2dict(attrs); +  Dictionary hl = hlattrs2dict(&attrs, ui->rgb);    ADD(args, DICTIONARY_OBJ(hl));    push_call(ui, "highlight_set", args);  | 
