static void remote_ui_hl_attr_define(UI *ui, Integer id, HlAttrs rgb_attrs, HlAttrs cterm_attrs, Array info) { if (!ui->ui_ext[kUILinegrid]) { return; } Array args = ARRAY_DICT_INIT; ADD(args, INTEGER_OBJ(id)); ADD(args, DICTIONARY_OBJ(hlattrs2dict(rgb_attrs, true))); ADD(args, DICTIONARY_OBJ(hlattrs2dict(cterm_attrs, false))); if (ui->ui_ext[kUIHlState]) { ADD(args, ARRAY_OBJ(copy_array(info))); } else { ADD(args, ARRAY_OBJ((Array)ARRAY_DICT_INIT)); } push_call(ui, "hl_attr_define", args); }
static void remote_ui_highlight_set(UI *ui, int id) { Array args = ARRAY_DICT_INIT; UIData *data = ui->data; if (data->hl_id == id) { return; } data->hl_id = id; Dictionary hl = hlattrs2dict(syn_attr2entry(id), ui->rgb); ADD(args, DICTIONARY_OBJ(hl)); push_call(ui, "highlight_set", args); }
static Array translate_contents(UI *ui, Array contents) { Array new_contents = ARRAY_DICT_INIT; for (size_t i = 0; i < contents.size; i++) { Array item = contents.items[i].data.array; Array new_item = ARRAY_DICT_INIT; int attr = (int)item.items[0].data.integer; if (attr) { Dictionary rgb_attrs = hlattrs2dict(syn_attr2entry(attr), ui->rgb); ADD(new_item, DICTIONARY_OBJ(rgb_attrs)); } else { ADD(new_item, DICTIONARY_OBJ((Dictionary)ARRAY_DICT_INIT)); } ADD(new_item, copy_object(item.items[1])); ADD(new_contents, ARRAY_OBJ(new_item)); } return new_contents; }
static void remote_ui_cmdline_show(UI *ui, Array args) { Array new_args = ARRAY_DICT_INIT; Array contents = args.items[0].data.array; Array new_contents = ARRAY_DICT_INIT; for (size_t i = 0; i < contents.size; i++) { Array item = contents.items[i].data.array; Array new_item = ARRAY_DICT_INIT; int attr = (int)item.items[0].data.integer; if (attr) { Dictionary rgb_attrs = hlattrs2dict(syn_attr2entry(attr), ui->rgb); ADD(new_item, DICTIONARY_OBJ(rgb_attrs)); } else { ADD(new_item, DICTIONARY_OBJ((Dictionary)ARRAY_DICT_INIT)); } ADD(new_item, copy_object(item.items[1])); ADD(new_contents, ARRAY_OBJ(new_item)); } ADD(new_args, ARRAY_OBJ(new_contents)); for (size_t i = 1; i < args.size; i++) { ADD(new_args, copy_object(args.items[i])); } push_call(ui, "cmdline_show", new_args); }