api: nvim_list_uis #8004

ref #7438
closes #4842
This commit is contained in:
geekodour
2018-02-16 14:10:40 +05:30
committed by Justin M. Keyes
parent 37b755ab47
commit 9f994bb699
3 changed files with 66 additions and 1 deletions

View File

@@ -35,6 +35,7 @@
#include "nvim/os/input.h"
#include "nvim/viml/parser/expressions.h"
#include "nvim/viml/parser/parser.h"
#include "nvim/ui.h"
#define LINE_BUFFER_SIZE 4096
@@ -1468,3 +1469,12 @@ Float nvim__id_float(Float flt)
{
return flt;
}
/// Gets a list of dictionaries representing attached UIs.
///
/// @return Array of UI dictionaries
Array nvim_list_uis(void)
FUNC_API_SINCE(4)
{
return ui_array();
}

View File

@@ -526,3 +526,19 @@ bool ui_is_external(UIExtension widget)
{
return ui_ext[widget];
}
Array ui_array(void)
{
Array all_uis = ARRAY_DICT_INIT;
for (size_t i = 0; i < ui_count; i++) {
Dictionary dic = ARRAY_DICT_INIT;
PUT(dic, "width", INTEGER_OBJ(uis[i]->width));
PUT(dic, "height", INTEGER_OBJ(uis[i]->height));
PUT(dic, "rgb", BOOLEAN_OBJ(uis[i]->rgb));
for (UIExtension j = 0; j < kUIExtCount; j++) {
PUT(dic, ui_ext_names[j], BOOLEAN_OBJ(uis[i]->ui_ext[j]));
}
ADD(all_uis, DICTIONARY_OBJ(dic));
}
return all_uis;
}