mirror of
https://github.com/neovim/neovim.git
synced 2025-09-30 23:18:33 +00:00
feat(api): add nvim_get_hl (#22693)
Problem: no way of getting all highlight group definitions in a namespace. Solution: add `nvim_get_hl()`, deprecate `nvim_get_hl_by_name()` and `nvim_get_hl_by_id()`.
This commit is contained in:
@@ -10,11 +10,14 @@
|
||||
#include "nvim/api/extmark.h"
|
||||
#include "nvim/api/private/defs.h"
|
||||
#include "nvim/api/private/helpers.h"
|
||||
#include "nvim/api/private/validate.h"
|
||||
#include "nvim/api/vimscript.h"
|
||||
#include "nvim/buffer_defs.h"
|
||||
#include "nvim/decoration.h"
|
||||
#include "nvim/extmark.h"
|
||||
#include "nvim/globals.h"
|
||||
#include "nvim/highlight.h"
|
||||
#include "nvim/highlight_group.h"
|
||||
#include "nvim/lua/executor.h"
|
||||
#include "nvim/memory.h"
|
||||
#include "nvim/pos.h"
|
||||
@@ -159,6 +162,49 @@ Integer nvim_buf_set_virtual_text(Buffer buffer, Integer src_id, Integer line, A
|
||||
return src_id;
|
||||
}
|
||||
|
||||
/// Gets a highlight definition by id. |hlID()|
|
||||
///
|
||||
/// @deprecated use |nvim_get_hl()| instead
|
||||
///
|
||||
/// @param hl_id Highlight id as returned by |hlID()|
|
||||
/// @param rgb Export RGB colors
|
||||
/// @param[out] err Error details, if any
|
||||
/// @return Highlight definition map
|
||||
/// @see nvim_get_hl_by_name
|
||||
Dictionary nvim_get_hl_by_id(Integer hl_id, Boolean rgb, Arena *arena, Error *err)
|
||||
FUNC_API_SINCE(3)
|
||||
FUNC_API_DEPRECATED_SINCE(9)
|
||||
{
|
||||
Dictionary dic = ARRAY_DICT_INIT;
|
||||
VALIDATE_INT((syn_get_final_id((int)hl_id) != 0), "highlight id", hl_id, {
|
||||
return dic;
|
||||
});
|
||||
int attrcode = syn_id2attr((int)hl_id);
|
||||
return hl_get_attr_by_id(attrcode, rgb, arena, err);
|
||||
}
|
||||
|
||||
/// Gets a highlight definition by name.
|
||||
///
|
||||
/// @deprecated use |nvim_get_hl()| instead
|
||||
///
|
||||
/// @param name Highlight group name
|
||||
/// @param rgb Export RGB colors
|
||||
/// @param[out] err Error details, if any
|
||||
/// @return Highlight definition map
|
||||
/// @see nvim_get_hl_by_id
|
||||
Dictionary nvim_get_hl_by_name(String name, Boolean rgb, Arena *arena, Error *err)
|
||||
FUNC_API_SINCE(3)
|
||||
FUNC_API_DEPRECATED_SINCE(9)
|
||||
{
|
||||
Dictionary result = ARRAY_DICT_INIT;
|
||||
int id = syn_name2id(name.data);
|
||||
|
||||
VALIDATE_S((id != 0), "highlight name", name.data, {
|
||||
return result;
|
||||
});
|
||||
return nvim_get_hl_by_id(id, rgb, arena, err);
|
||||
}
|
||||
|
||||
/// Inserts a sequence of lines to a buffer at a certain index
|
||||
///
|
||||
/// @deprecated use nvim_buf_set_lines(buffer, lnum, lnum, true, lines)
|
||||
|
@@ -145,6 +145,11 @@ return {
|
||||
"altfont";
|
||||
"nocombine";
|
||||
}};
|
||||
{ 'get_highlight', {
|
||||
"id";
|
||||
"name";
|
||||
"link";
|
||||
}};
|
||||
-- Autocmds
|
||||
{ 'clear_autocmds', {
|
||||
"buffer";
|
||||
|
@@ -727,8 +727,8 @@ void remote_ui_hl_attr_define(UI *ui, Integer id, HlAttrs rgb_attrs, HlAttrs cte
|
||||
ADD_C(args, INTEGER_OBJ(id));
|
||||
MAXSIZE_TEMP_DICT(rgb, HLATTRS_DICT_SIZE);
|
||||
MAXSIZE_TEMP_DICT(cterm, HLATTRS_DICT_SIZE);
|
||||
hlattrs2dict(&rgb, rgb_attrs, true);
|
||||
hlattrs2dict(&cterm, rgb_attrs, false);
|
||||
hlattrs2dict(&rgb, rgb_attrs, true, false);
|
||||
hlattrs2dict(&cterm, rgb_attrs, false, false);
|
||||
ADD_C(args, DICTIONARY_OBJ(rgb));
|
||||
ADD_C(args, DICTIONARY_OBJ(cterm));
|
||||
|
||||
@@ -751,7 +751,7 @@ void remote_ui_highlight_set(UI *ui, int id)
|
||||
}
|
||||
data->hl_id = id;
|
||||
MAXSIZE_TEMP_DICT(dict, HLATTRS_DICT_SIZE);
|
||||
hlattrs2dict(&dict, syn_attr2entry(id), ui->rgb);
|
||||
hlattrs2dict(&dict, syn_attr2entry(id), ui->rgb, false);
|
||||
ADD_C(args, DICTIONARY_OBJ(dict));
|
||||
push_call(ui, "highlight_set", args);
|
||||
}
|
||||
@@ -950,7 +950,7 @@ static Array translate_contents(UI *ui, Array contents, Arena *arena)
|
||||
int attr = (int)item.items[0].data.integer;
|
||||
if (attr) {
|
||||
Dictionary rgb_attrs = arena_dict(arena, HLATTRS_DICT_SIZE);
|
||||
hlattrs2dict(&rgb_attrs, syn_attr2entry(attr), ui->rgb);
|
||||
hlattrs2dict(&rgb_attrs, syn_attr2entry(attr), ui->rgb, false);
|
||||
ADD(new_item, DICTIONARY_OBJ(rgb_attrs));
|
||||
} else {
|
||||
ADD(new_item, DICTIONARY_OBJ((Dictionary)ARRAY_DICT_INIT));
|
||||
|
@@ -74,42 +74,6 @@
|
||||
# include "api/vim.c.generated.h"
|
||||
#endif
|
||||
|
||||
/// Gets a highlight definition by name.
|
||||
///
|
||||
/// @param name Highlight group name
|
||||
/// @param rgb Export RGB colors
|
||||
/// @param[out] err Error details, if any
|
||||
/// @return Highlight definition map
|
||||
/// @see nvim_get_hl_by_id
|
||||
Dictionary nvim_get_hl_by_name(String name, Boolean rgb, Arena *arena, Error *err)
|
||||
FUNC_API_SINCE(3)
|
||||
{
|
||||
Dictionary result = ARRAY_DICT_INIT;
|
||||
int id = syn_name2id(name.data);
|
||||
|
||||
VALIDATE_S((id != 0), "highlight name", name.data, {
|
||||
return result;
|
||||
});
|
||||
return nvim_get_hl_by_id(id, rgb, arena, err);
|
||||
}
|
||||
|
||||
/// Gets a highlight definition by id. |hlID()|
|
||||
/// @param hl_id Highlight id as returned by |hlID()|
|
||||
/// @param rgb Export RGB colors
|
||||
/// @param[out] err Error details, if any
|
||||
/// @return Highlight definition map
|
||||
/// @see nvim_get_hl_by_name
|
||||
Dictionary nvim_get_hl_by_id(Integer hl_id, Boolean rgb, Arena *arena, Error *err)
|
||||
FUNC_API_SINCE(3)
|
||||
{
|
||||
Dictionary dic = ARRAY_DICT_INIT;
|
||||
VALIDATE_INT((syn_get_final_id((int)hl_id) != 0), "highlight id", hl_id, {
|
||||
return dic;
|
||||
});
|
||||
int attrcode = syn_id2attr((int)hl_id);
|
||||
return hl_get_attr_by_id(attrcode, rgb, arena, err);
|
||||
}
|
||||
|
||||
/// Gets a highlight group by name
|
||||
///
|
||||
/// similar to |hlID()|, but allocates a new ID if not present.
|
||||
@@ -119,12 +83,22 @@ Integer nvim_get_hl_id_by_name(String name)
|
||||
return syn_check_group(name.data, name.size);
|
||||
}
|
||||
|
||||
Dictionary nvim__get_hl_defs(Integer ns_id, Arena *arena, Error *err)
|
||||
/// Gets all or specific highlight groups in a namespace.
|
||||
///
|
||||
/// @param ns_id Get highlight groups for namespace ns_id |nvim_get_namespaces()|.
|
||||
/// Use 0 to get global highlight groups |:highlight|.
|
||||
/// @param opts Options dict:
|
||||
/// - name: (string) Get a highlight definition by name.
|
||||
/// - id: (integer) Get a highlight definition by id.
|
||||
/// - link: (boolean, default true) Show linked group name instead of effective definition |:hi-link|.
|
||||
///
|
||||
/// @param[out] err Error details, if any.
|
||||
/// @return Highlight groups as a map from group name to a highlight definition map as in |nvim_set_hl()|,
|
||||
/// or only a single highlight definition map if requested by name or id.
|
||||
Dictionary nvim_get_hl(Integer ns_id, Dict(get_highlight) *opts, Arena *arena, Error *err)
|
||||
FUNC_API_SINCE(11)
|
||||
{
|
||||
if (ns_id == 0) {
|
||||
return get_global_hl_defs(arena);
|
||||
}
|
||||
abort();
|
||||
return ns_get_hl_defs((NS)ns_id, opts, arena, err);
|
||||
}
|
||||
|
||||
/// Sets a highlight group.
|
||||
|
Reference in New Issue
Block a user