patch 8.0.0791: terminal colors depend on the system
Problem: Terminal colors depend on the system.
Solution: Use the highlight color lookup tables.
diff --git a/src/terminal.c b/src/terminal.c
index d12df36..2ddbb26 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -33,6 +33,7 @@
* while, if the terminal window is visible, the screen contents is drawn.
*
* TODO:
+ * - if 'term' starts witth "xterm" use it for $TERM.
* - To set BS correctly, check get_stty(); Pass the fd of the pty.
* - include functions from #1871
* - do not store terminal buffer in viminfo. Or prefix term:// ?
@@ -755,27 +756,28 @@
* First color is 1. Return 0 if no match found.
*/
static int
-color2index(VTermColor *color)
+color2index(VTermColor *color, int foreground)
{
int red = color->red;
int blue = color->blue;
int green = color->green;
+ /* The argument for lookup_color() is for the color_names[] table. */
if (red == 0)
{
if (green == 0)
{
if (blue == 0)
- return 1; /* black */
+ return lookup_color(0, foreground) + 1; /* black */
if (blue == 224)
- return 5; /* blue */
+ return lookup_color(1, foreground) + 1; /* dark blue */
}
else if (green == 224)
{
if (blue == 0)
- return 3; /* green */
+ return lookup_color(2, foreground) + 1; /* dark green */
if (blue == 224)
- return 7; /* cyan */
+ return lookup_color(3, foreground) + 1; /* dark cyan */
}
}
else if (red == 224)
@@ -783,38 +785,38 @@
if (green == 0)
{
if (blue == 0)
- return 2; /* red */
+ return lookup_color(4, foreground) + 1; /* dark red */
if (blue == 224)
- return 6; /* magenta */
+ return lookup_color(5, foreground) + 1; /* dark magenta */
}
else if (green == 224)
{
if (blue == 0)
- return 4; /* yellow */
+ return lookup_color(6, foreground) + 1; /* dark yellow / brown */
if (blue == 224)
- return 8; /* white */
+ return lookup_color(8, foreground) + 1; /* white / light grey */
}
}
else if (red == 128)
{
if (green == 128 && blue == 128)
- return 9; /* high intensity black */
+ return lookup_color(12, foreground) + 1; /* high intensity black / dark grey */
}
else if (red == 255)
{
if (green == 64)
{
if (blue == 64)
- return 10; /* high intensity red */
+ return lookup_color(20, foreground) + 1; /* light red */
if (blue == 255)
- return 14; /* high intensity magenta */
+ return lookup_color(22, foreground) + 1; /* light magenta */
}
else if (green == 255)
{
if (blue == 64)
- return 12; /* high intensity yellow */
+ return lookup_color(24, foreground) + 1; /* yellow */
if (blue == 255)
- return 16; /* high intensity white */
+ return lookup_color(26, foreground) + 1; /* white */
}
}
else if (red == 64)
@@ -822,14 +824,14 @@
if (green == 64)
{
if (blue == 255)
- return 13; /* high intensity blue */
+ return lookup_color(14, foreground) + 1; /* light blue */
}
else if (green == 255)
{
if (blue == 64)
- return 11; /* high intensity green */
+ return lookup_color(16, foreground) + 1; /* light green */
if (blue == 255)
- return 15; /* high intensity cyan */
+ return lookup_color(18, foreground) + 1; /* light cyan */
}
}
if (t_colors >= 256)
@@ -902,8 +904,8 @@
else
#endif
{
- return get_cterm_attr_idx(attr, color2index(&cell->fg),
- color2index(&cell->bg));
+ return get_cterm_attr_idx(attr, color2index(&cell->fg, TRUE),
+ color2index(&cell->bg, FALSE));
}
return 0;
}