mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
terminal: enable pass through indexed colors to TUI
This commit is contained in:
parent
eb509dc7c5
commit
08fe10010a
@ -611,6 +611,14 @@ Dictionary hlattrs2dict(HlAttrs ae, bool use_rgb)
|
||||
}
|
||||
|
||||
if (use_rgb) {
|
||||
if (mask & HL_FG_INDEXED) {
|
||||
PUT(hl, "fg_indexed", BOOLEAN_OBJ(true));
|
||||
}
|
||||
|
||||
if (mask & HL_BG_INDEXED) {
|
||||
PUT(hl, "bg_indexed", BOOLEAN_OBJ(true));
|
||||
}
|
||||
|
||||
if (ae.rgb_fg_color != -1) {
|
||||
PUT(hl, "foreground", INTEGER_OBJ(ae.rgb_fg_color));
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ typedef enum {
|
||||
HL_STANDOUT = 0x20,
|
||||
HL_STRIKETHROUGH = 0x40,
|
||||
HL_NOCOMBINE = 0x80,
|
||||
HL_BG_INDEXED = 0x0100,
|
||||
HL_FG_INDEXED = 0x0200,
|
||||
} HlAttrFlags;
|
||||
|
||||
/// Stores a complete highlighting entry, including colors and attributes
|
||||
|
@ -598,16 +598,19 @@ void terminal_get_line_attributes(Terminal *term, win_T *wp, int linenr,
|
||||
int vt_fg = fg_default ? -1 : get_rgb(state, cell.fg);
|
||||
int vt_bg = bg_default ? -1 : get_rgb(state, cell.bg);
|
||||
|
||||
int vt_fg_idx = ((!fg_default && VTERM_COLOR_IS_INDEXED(&cell.fg))
|
||||
? cell.fg.indexed.idx + 1 : 0);
|
||||
int vt_bg_idx = ((!bg_default && VTERM_COLOR_IS_INDEXED(&cell.bg))
|
||||
? cell.bg.indexed.idx + 1 : 0);
|
||||
bool fg_indexed = VTERM_COLOR_IS_INDEXED(&cell.fg);
|
||||
bool bg_indexed = VTERM_COLOR_IS_INDEXED(&cell.bg);
|
||||
|
||||
int vt_fg_idx = ((!fg_default && fg_indexed) ? cell.fg.indexed.idx + 1 : 0);
|
||||
int vt_bg_idx = ((!bg_default && bg_indexed) ? cell.bg.indexed.idx + 1 : 0);
|
||||
|
||||
int hl_attrs = (cell.attrs.bold ? HL_BOLD : 0)
|
||||
| (cell.attrs.italic ? HL_ITALIC : 0)
|
||||
| (cell.attrs.reverse ? HL_INVERSE : 0)
|
||||
| (cell.attrs.underline ? HL_UNDERLINE : 0)
|
||||
| (cell.attrs.strike ? HL_STRIKETHROUGH: 0);
|
||||
| (fg_indexed ? HL_FG_INDEXED : 0)
|
||||
| (bg_indexed ? HL_BG_INDEXED : 0);
|
||||
|
||||
int attr_id = 0;
|
||||
|
||||
|
@ -586,16 +586,27 @@ static void update_attrs(UI *ui, int attr_id)
|
||||
}
|
||||
|
||||
int fg, bg;
|
||||
if (ui->rgb) {
|
||||
fg = (attrs.rgb_fg_color != -1) ? attrs.rgb_fg_color : data->clear_attrs.rgb_fg_color;
|
||||
if (ui->rgb && !(attr & HL_FG_INDEXED)) {
|
||||
fg = ((attrs.rgb_fg_color != -1)
|
||||
? attrs.rgb_fg_color : data->clear_attrs.rgb_fg_color);
|
||||
if (fg != -1) {
|
||||
UNIBI_SET_NUM_VAR(data->params[0], (fg >> 16) & 0xff); // red
|
||||
UNIBI_SET_NUM_VAR(data->params[1], (fg >> 8) & 0xff); // green
|
||||
UNIBI_SET_NUM_VAR(data->params[2], fg & 0xff); // blue
|
||||
unibi_out_ext(ui, data->unibi_ext.set_rgb_foreground);
|
||||
}
|
||||
} else {
|
||||
fg = (attrs.cterm_fg_color
|
||||
? attrs.cterm_fg_color - 1 : (data->clear_attrs.cterm_fg_color - 1));
|
||||
if (fg != -1) {
|
||||
UNIBI_SET_NUM_VAR(data->params[0], fg);
|
||||
unibi_out(ui, unibi_set_a_foreground);
|
||||
}
|
||||
}
|
||||
|
||||
bg = (attrs.rgb_bg_color != -1) ? attrs.rgb_bg_color : data->clear_attrs.rgb_bg_color;
|
||||
if (ui->rgb && !(attr & HL_BG_INDEXED)) {
|
||||
bg = ((attrs.rgb_bg_color != -1)
|
||||
? attrs.rgb_bg_color : data->clear_attrs.rgb_bg_color);
|
||||
if (bg != -1) {
|
||||
UNIBI_SET_NUM_VAR(data->params[0], (bg >> 16) & 0xff); // red
|
||||
UNIBI_SET_NUM_VAR(data->params[1], (bg >> 8) & 0xff); // green
|
||||
@ -603,19 +614,15 @@ static void update_attrs(UI *ui, int attr_id)
|
||||
unibi_out_ext(ui, data->unibi_ext.set_rgb_background);
|
||||
}
|
||||
} else {
|
||||
fg = attrs.cterm_fg_color ? attrs.cterm_fg_color - 1 : (data->clear_attrs.cterm_fg_color - 1);
|
||||
if (fg != -1) {
|
||||
UNIBI_SET_NUM_VAR(data->params[0], fg);
|
||||
unibi_out(ui, unibi_set_a_foreground);
|
||||
}
|
||||
|
||||
bg = attrs.cterm_bg_color ? attrs.cterm_bg_color - 1 : (data->clear_attrs.cterm_bg_color - 1);
|
||||
bg = (attrs.cterm_bg_color
|
||||
? attrs.cterm_bg_color - 1 : (data->clear_attrs.cterm_bg_color - 1));
|
||||
if (bg != -1) {
|
||||
UNIBI_SET_NUM_VAR(data->params[0], bg);
|
||||
unibi_out(ui, unibi_set_a_background);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
data->default_attr = fg == -1 && bg == -1
|
||||
&& !bold && !italic && !underline && !undercurl && !reverse && !standout
|
||||
&& !strikethrough;
|
||||
|
Loading…
Reference in New Issue
Block a user