mirror of
https://github.com/neovim/neovim.git
synced 2025-10-05 09:26:30 +00:00
fix(api): return both link and attributes with nvim_get_hl (#22824)
Problem: No way to get the actual highlight attributes for a linked group through |nvim_get_hl()| (not the attributes from the link target). Solution: Return the actual attributes as well as the link target name.
This commit is contained in:
@@ -797,9 +797,9 @@ void set_hl_group(int id, HlAttrs attrs, Dict(highlight) *dict, int link_id)
|
||||
}
|
||||
|
||||
HlGroup *g = &hl_table[idx];
|
||||
g->sg_cleared = false;
|
||||
|
||||
if (link_id > 0) {
|
||||
g->sg_cleared = false;
|
||||
g->sg_link = link_id;
|
||||
g->sg_script_ctx = current_sctx;
|
||||
g->sg_script_ctx.sc_lnum += SOURCING_LNUM;
|
||||
@@ -809,11 +809,10 @@ void set_hl_group(int id, HlAttrs attrs, Dict(highlight) *dict, int link_id)
|
||||
g->sg_deflink_sctx = current_sctx;
|
||||
g->sg_deflink_sctx.sc_lnum += SOURCING_LNUM;
|
||||
}
|
||||
goto update;
|
||||
} else {
|
||||
g->sg_link = 0;
|
||||
}
|
||||
|
||||
g->sg_cleared = false;
|
||||
g->sg_link = 0;
|
||||
g->sg_gui = attrs.rgb_ae_attr;
|
||||
|
||||
g->sg_rgb_fg = attrs.rgb_fg_color;
|
||||
@@ -865,7 +864,6 @@ void set_hl_group(int id, HlAttrs attrs, Dict(highlight) *dict, int link_id)
|
||||
}
|
||||
}
|
||||
|
||||
update:
|
||||
if (!updating_screen) {
|
||||
redraw_all_later(UPD_NOT_VALID);
|
||||
}
|
||||
@@ -1533,17 +1531,15 @@ static bool hlgroup2dict(Dictionary *hl, NS ns_id, int hl_id, Arena *arena)
|
||||
}
|
||||
HlAttrs attr =
|
||||
syn_attr2entry(ns_id == 0 ? sgp->sg_attr : ns_get_hl(&ns_id, hl_id, false, sgp->sg_set));
|
||||
*hl = arena_dict(arena, HLATTRS_DICT_SIZE + 1);
|
||||
if (link > 0) {
|
||||
*hl = arena_dict(arena, 1);
|
||||
PUT_C(*hl, "link", STRING_OBJ(cstr_as_string(hl_table[link - 1].sg_name)));
|
||||
} else {
|
||||
*hl = arena_dict(arena, HLATTRS_DICT_SIZE);
|
||||
Dictionary hl_cterm = arena_dict(arena, HLATTRS_DICT_SIZE);
|
||||
hlattrs2dict(hl, NULL, attr, true, true);
|
||||
hlattrs2dict(hl, &hl_cterm, attr, false, true);
|
||||
if (kv_size(hl_cterm)) {
|
||||
PUT_C(*hl, "cterm", DICTIONARY_OBJ(hl_cterm));
|
||||
}
|
||||
}
|
||||
Dictionary hl_cterm = arena_dict(arena, HLATTRS_DICT_SIZE);
|
||||
hlattrs2dict(hl, NULL, attr, true, true);
|
||||
hlattrs2dict(hl, &hl_cterm, attr, false, true);
|
||||
if (kv_size(hl_cterm)) {
|
||||
PUT_C(*hl, "cterm", DICTIONARY_OBJ(hl_cterm));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user