aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/vim.c
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2018-04-08 09:51:22 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2018-07-21 13:20:37 +0200
commit989b585e105b4f343f639abf5daf820de19d4a26 (patch)
tree6ec6611413f4d996a5294dc06f9942d92ae6e194 /src/nvim/api/vim.c
parent696e24f311acbb0ccfa1818fb016f19f0497d950 (diff)
downloadrneovim-989b585e105b4f343f639abf5daf820de19d4a26.tar.gz
rneovim-989b585e105b4f343f639abf5daf820de19d4a26.tar.bz2
rneovim-989b585e105b4f343f639abf5daf820de19d4a26.zip
highlight: refactor to use stateful representation
This allows us to keep track of the source higlight groups, and not only the final combined highlights.
Diffstat (limited to 'src/nvim/api/vim.c')
-rw-r--r--src/nvim/api/vim.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 64d6d68c12..1ffae8ef43 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -1851,3 +1851,22 @@ Object nvim_get_proc(Integer pid, Error *err)
#endif
return rvobj;
}
+
+/// NB: if your UI doesn't use hlstate, this will not return hlstate first time
+Array nvim__inspect_cell(Integer row, Integer col, Error *err)
+{
+ Array ret = ARRAY_DICT_INIT;
+ if (row < 0 || row >= screen_Rows
+ || col < 0 || col >= screen_Columns) {
+ return ret;
+ }
+ size_t off = LineOffset[(size_t)row] + (size_t)col;
+ ADD(ret, STRING_OBJ(cstr_to_string((char *)ScreenLines[off])));
+ int attr = ScreenAttrs[off];
+ ADD(ret, DICTIONARY_OBJ(hl_get_attr_by_id(attr, true, err)));
+ // will not work first time
+ if (!highlight_use_hlstate()) {
+ ADD(ret, ARRAY_OBJ(hl_inspect(attr)));
+ }
+ return ret;
+}