Skip to content

Commit

Permalink
patch 8.2.4852: ANSI color index to RGB value not correct
Browse files Browse the repository at this point in the history
Problem:    ANSI color index to RGB value not correct.
Solution:   Convert the cterm index to ANSI index. (closes #10321,
            closes #9836))
  • Loading branch information
LemonBoy authored and brammool committed May 1, 2022
1 parent b4011af commit d2a4662
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 22 deletions.
56 changes: 34 additions & 22 deletions src/term.c
Expand Up @@ -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
Expand All @@ -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)
{
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -746,6 +746,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4852,
/**/
4851,
/**/
Expand Down

0 comments on commit d2a4662

Please sign in to comment.