]> granicus.if.org Git - vim/commitdiff
patch 8.2.4852: ANSI color index to RGB value not correct v8.2.4852
authorLemonBoy <thatlemon@gmail.com>
Sun, 1 May 2022 16:43:33 +0000 (17:43 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 1 May 2022 16:43:33 +0000 (17:43 +0100)
Problem:    ANSI color index to RGB value not correct.
Solution:   Convert the cterm index to ANSI index. (closes #10321,
            closes #9836))

src/term.c
src/version.c

index ee8be7f8fcb3cea16fb7b468289d9f83424996fd..769105e4c84e98f1c9df604749f7f6a7e85c0d04 100644 (file)
@@ -6761,26 +6761,33 @@ static int grey_ramp[] = {
 };
 
 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
-
-  {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
+//   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}, // 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 @@ cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx)
 
     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)
     {
index 7b36e622e5a68168c66a2b51ce613167dc50d11f..b03e66129ca03850283bd3a5cd40f606d31e18ff 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4852,
 /**/
     4851,
 /**/