# HG changeset patch # User Bram Moolenaar # Date 1651423504 -7200 # Node ID 3f4e1326a003236c2375ba3e0e017a2f18506fc2 # Parent c68977e0006ed40110e7a7ffdbd254c07e708050 patch 8.2.4852: ANSI color index to RGB value not correct Commit: https://github.com/vim/vim/commit/d2a46624300c5d02be69d0e4df12296ec9011d9e Author: LemonBoy Date: Sun May 1 17:43:33 2022 +0100 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 https://github.com/vim/vim/issues/10321, closes #9836)) diff --git a/src/term.c b/src/term.c --- a/src/term.c +++ b/src/term.c @@ -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_ 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 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4852, +/**/ 4851, /**/ 4850,