summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/proto/syntax.pro1
-rw-r--r--src/syntax.c18
-rw-r--r--src/terminal.c9
-rw-r--r--src/version.c2
4 files changed, 28 insertions, 2 deletions
diff --git a/src/proto/syntax.pro b/src/proto/syntax.pro
index cd2141868..be3425834 100644
--- a/src/proto/syntax.pro
+++ b/src/proto/syntax.pro
@@ -32,6 +32,7 @@ void hl_set_font_name(char_u *font_name);
void hl_set_bg_color_name(char_u *name);
void hl_set_fg_color_name(char_u *name);
int get_cterm_attr_idx(int attr, int fg, int bg);
+int get_tgc_attr_idx(int attr, guicolor_T fg, guicolor_T bg);
int get_gui_attr_idx(int attr, guicolor_T fg, guicolor_T bg);
void clear_hl_tables(void);
int hl_combine_attr(int char_attr, int prim_attr);
diff --git a/src/syntax.c b/src/syntax.c
index 6fdc2af2c..e445fba0e 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -8796,6 +8796,24 @@ get_cterm_attr_idx(int attr, int fg, int bg)
return get_attr_entry(&cterm_attr_table, &at_en);
}
+#if defined(FEAT_TERMGUICOLORS) || defined(PROTO)
+/*
+ * Get an attribute index for a 'termguicolors' entry.
+ * Uses an existing entry when possible or adds one when needed.
+ */
+ int
+get_tgc_attr_idx(int attr, guicolor_T fg, guicolor_T bg)
+{
+ attrentry_T at_en;
+
+ vim_memset(&at_en, 0, sizeof(attrentry_T));
+ at_en.ae_attr = attr;
+ at_en.ae_u.cterm.fg_rgb = fg;
+ at_en.ae_u.cterm.bg_rgb = bg;
+ return get_attr_entry(&cterm_attr_table, &at_en);
+}
+#endif
+
#if defined(FEAT_GUI) || defined(PROTO)
/*
* Get an attribute index for a cterm entry.
diff --git a/src/terminal.c b/src/terminal.c
index 95b16c946..3f1a91d15 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -33,7 +33,6 @@
* while, if the terminal window is visible, the screen contents is drawn.
*
* TODO:
- * - color for 'termguicolors'
* - cursor flickers when moving the cursor
* - set buffer options to be scratch, hidden, nomodifiable, etc.
* - set buffer name to command, add (1) to avoid duplicates.
@@ -731,8 +730,14 @@ cell2attr(VTermScreenCell *cell)
#ifdef FEAT_TERMGUICOLORS
if (p_tgc)
{
- /* TODO */
+ guicolor_T fg, bg;
+
+ fg = gui_get_rgb_color_cmn(cell->fg.red, cell->fg.green, cell->fg.blue);
+ bg = gui_get_rgb_color_cmn(cell->bg.red, cell->bg.green, cell->bg.blue);
+
+ return get_tgc_attr_idx(attr, fg, bg);
}
+ else
#endif
{
return get_cterm_attr_idx(attr, color2index(&cell->fg),
diff --git a/src/version.c b/src/version.c
index c1c68e358..00580c711 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 760,
+/**/
759,
/**/
758,