forked from aniani/vim
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))
This commit is contained in:
54
src/term.c
54
src/term.c
@@ -6761,26 +6761,33 @@ static int grey_ramp[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static char_u ansi_table[16][4] = {
|
static char_u ansi_table[16][4] = {
|
||||||
// R G B idx
|
// R G B
|
||||||
{ 0, 0, 0, 1}, // black
|
{ 0, 0, 0}, // black
|
||||||
{224, 0, 0, 2}, // dark red
|
{224, 0, 0}, // dark red
|
||||||
{ 0, 224, 0, 3}, // dark green
|
{ 0, 224, 0}, // dark green
|
||||||
{224, 224, 0, 4}, // dark yellow / brown
|
{224, 224, 0}, // dark yellow / brown
|
||||||
{ 0, 0, 224, 5}, // dark blue
|
{ 0, 0, 224}, // dark blue
|
||||||
{224, 0, 224, 6}, // dark magenta
|
{224, 0, 224}, // dark magenta
|
||||||
{ 0, 224, 224, 7}, // dark cyan
|
{ 0, 224, 224}, // dark cyan
|
||||||
{224, 224, 224, 8}, // light grey
|
{224, 224, 224}, // light grey
|
||||||
|
|
||||||
{128, 128, 128, 9}, // dark grey
|
{128, 128, 128}, // dark grey
|
||||||
{255, 64, 64, 10}, // light red
|
{255, 64, 64}, // light red
|
||||||
{ 64, 255, 64, 11}, // light green
|
{ 64, 255, 64}, // light green
|
||||||
{255, 255, 64, 12}, // yellow
|
{255, 255, 64}, // yellow
|
||||||
{ 64, 64, 255, 13}, // light blue
|
{ 64, 64, 255}, // light blue
|
||||||
{255, 64, 255, 14}, // light magenta
|
{255, 64, 255}, // light magenta
|
||||||
{ 64, 255, 255, 15}, // light cyan
|
{ 64, 255, 255}, // light cyan
|
||||||
{255, 255, 255, 16}, // white
|
{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
|
#define ANSI_INDEX_NONE 0
|
||||||
|
|
||||||
void
|
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)
|
if (nr < 16)
|
||||||
{
|
{
|
||||||
*r = ansi_table[nr][0];
|
#if defined(MSWIN)
|
||||||
*g = ansi_table[nr][1];
|
idx = cterm_ansi_idx[nr];
|
||||||
*b = ansi_table[nr][2];
|
#else
|
||||||
*ansi_idx = ansi_table[nr][3];
|
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)
|
else if (nr < 232)
|
||||||
{
|
{
|
||||||
|
@@ -746,6 +746,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4852,
|
||||||
/**/
|
/**/
|
||||||
4851,
|
4851,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user