patch 8.2.4852: ANSI color index to RGB value not correct
Problem: ANSI color index to RGB value not correct.
Solution: Convert the cterm index to ANSI index. (closes #10321,
closes #9836))
diff --git a/src/term.c b/src/term.c
index ee8be7f..769105e 100644
--- a/src/term.c
+++ b/src/term.c
@@ -6761,26 +6761,33 @@
};
static char_u ansi_table[16][4] = {
-// R G B idx
- { 0, 0, 0, 1}, // black
- {224, 0, 0, 2}, // dark red
- { 0, 224, 0, 3}, // dark green
- {224, 224, 0, 4}, // dark yellow / brown
- { 0, 0, 224, 5}, // dark blue
- {224, 0, 224, 6}, // dark magenta
- { 0, 224, 224, 7}, // dark cyan
- {224, 224, 224, 8}, // light grey
+// R G B
+ { 0, 0, 0}, // black
+ {224, 0, 0}, // dark red
+ { 0, 224, 0}, // dark green
+ {224, 224, 0}, // dark yellow / brown
+ { 0, 0, 224}, // dark blue
+ {224, 0, 224}, // dark magenta
+ { 0, 224, 224}, // dark cyan
+ {224, 224, 224}, // light grey
- {128, 128, 128, 9}, // dark grey
- {255, 64, 64, 10}, // light red
- { 64, 255, 64, 11}, // light green
- {255, 255, 64, 12}, // yellow
- { 64, 64, 255, 13}, // light blue
- {255, 64, 255, 14}, // light magenta
- { 64, 255, 255, 15}, // light cyan
- {255, 255, 255, 16}, // white
+ {128, 128, 128}, // dark grey
+ {255, 64, 64}, // light red
+ { 64, 255, 64}, // light green
+ {255, 255, 64}, // yellow
+ { 64, 64, 255}, // light blue
+ {255, 64, 255}, // light magenta
+ { 64, 255, 255}, // light cyan
+ {255, 255, 255}, // white
};
+#if defined(MSWIN)
+// Mapping between cterm indices < 16 and their counterpart in the ANSI palette.
+static const char_u cterm_ansi_idx[] = {
+ 0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15
+};
+#endif
+
#define ANSI_INDEX_NONE 0
void
@@ -6790,10 +6797,15 @@
if (nr < 16)
{
- *r = ansi_table[nr][0];
- *g = ansi_table[nr][1];
- *b = ansi_table[nr][2];
- *ansi_idx = ansi_table[nr][3];
+#if defined(MSWIN)
+ idx = cterm_ansi_idx[nr];
+#else
+ idx = nr;
+#endif
+ *r = ansi_table[idx][0];
+ *g = ansi_table[idx][1];
+ *b = ansi_table[idx][2];
+ *ansi_idx = idx + 1;
}
else if (nr < 232)
{
diff --git a/src/version.c b/src/version.c
index 7b36e62..b03e661 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4852,
+/**/
4851,
/**/
4850,