mirror of
https://github.com/neovim/neovim.git
synced 2025-09-14 07:18:17 +00:00
Merge #7082 'api: nvim_get_hl_by_name/by_id'
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
#include "nvim/ui.h"
|
||||
#include "nvim/os/os.h"
|
||||
#include "nvim/os/time.h"
|
||||
#include "nvim/api/private/helpers.h"
|
||||
|
||||
static bool did_syntax_onoff = false;
|
||||
|
||||
@@ -6644,7 +6645,6 @@ do_highlight(char_u *line, int forceit, int init) {
|
||||
syn_unadd_group();
|
||||
} else {
|
||||
if (is_normal_group) {
|
||||
HL_TABLE()[idx].sg_attr = 0;
|
||||
// Need to update all groups, because they might be using "bg" and/or
|
||||
// "fg", which have been changed now.
|
||||
highlight_attr_set_all();
|
||||
@@ -6879,6 +6879,7 @@ int hl_combine_attr(int char_attr, int prim_attr)
|
||||
|
||||
/// \note this function does not apply exclusively to cterm attr contrary
|
||||
/// to what its name implies
|
||||
/// \warn don't call it with attr 0 (i.e., the null attribute)
|
||||
attrentry_T *syn_cterm_attr2entry(int attr)
|
||||
{
|
||||
attr -= ATTR_OFF;
|
||||
@@ -7123,22 +7124,15 @@ syn_list_header(int did_header, int outlen, int id)
|
||||
return newline;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the attribute numbers for a highlight group.
|
||||
* Called after one of the attributes has changed.
|
||||
*/
|
||||
static void
|
||||
set_hl_attr (
|
||||
int idx /* index in array */
|
||||
)
|
||||
/// Set the attribute numbers for a highlight group.
|
||||
/// Called after one of the attributes has changed.
|
||||
/// @param idx corrected highlight index
|
||||
static void
|
||||
set_hl_attr(int idx)
|
||||
{
|
||||
attrentry_T at_en = ATTRENTRY_INIT;
|
||||
struct hl_group *sgp = HL_TABLE() + idx;
|
||||
|
||||
// The "Normal" group doesn't need an attribute number
|
||||
if (sgp->sg_name_u != NULL && STRCMP(sgp->sg_name_u, "NORMAL") == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
at_en.cterm_ae_attr = sgp->sg_cterm;
|
||||
at_en.cterm_fg_color = sgp->sg_cterm_fg;
|
||||
@@ -8247,6 +8241,32 @@ RgbValue name_to_color(const uint8_t *name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// Retrieves attribute description from its id
|
||||
///
|
||||
/// @param attr_id attribute id
|
||||
Dictionary hl_get_attr_by_id(Integer attr_id, Boolean rgb, Error *err)
|
||||
{
|
||||
HlAttrs attrs = HLATTRS_INIT;
|
||||
Dictionary dic = ARRAY_DICT_INIT;
|
||||
|
||||
if (attr_id == 0) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
attrentry_T *aep = syn_cterm_attr2entry((int)attr_id);
|
||||
if (!aep) {
|
||||
api_set_error(err, kErrorTypeException,
|
||||
"Invalid attribute id %d", attr_id);
|
||||
return dic;
|
||||
}
|
||||
|
||||
attrs = attrentry2hlattrs(aep, rgb);
|
||||
|
||||
end:
|
||||
return hlattrs2dict(attrs);
|
||||
}
|
||||
|
||||
|
||||
/**************************************
|
||||
* End of Highlighting stuff *
|
||||
**************************************/
|
||||
|
Reference in New Issue
Block a user