3838 * in tl_scrollback are no longer used.
3939 *
4040 * TODO:
41+ * - When using 'termguicolors' still use the 16 ANSI colors as-is. Helps for
42+ * a job that uses 16 colors while Vim is using > 256.
4143 * - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
4244 * Higashi, 2017 Sep 19)
4345 * - Shift-Tab does not work.
4850 * - When closing gvim with an active terminal buffer, the dialog suggests
4951 * saving the buffer. Should say something else. (Manas Thakur, #2215)
5052 * Also: #2223
51- * - implement term_setsize()
5253 * - Termdebug does not work when Vim build with mzscheme. gdb hangs.
5354 * - MS-Windows GUI: WinBar has tearoff item
5455 * - Adding WinBar to terminal window doesn't display, text isn't shifted down.
5758 * - What to store in a session file? Shell at the prompt would be OK to
5859 * restore, but others may not. Open the window and let the user start the
5960 * command?
61+ * - implement term_setsize()
6062 * - add test for giving error for invalid 'termsize' value.
6163 * - support minimal size when 'termsize' is "rows*cols".
6264 * - support minimal size when 'termsize' is empty?
@@ -1707,7 +1709,7 @@ may_toggle_cursor(term_T *term)
17071709
17081710/*
17091711 * Reverse engineer the RGB value into a cterm color index.
1710- * First color is 1. Return 0 if no match found.
1712+ * First color is 1. Return 0 if no match found (default color) .
17111713 */
17121714 static int
17131715color2index (VTermColor * color , int fg , int * boldp )
@@ -1716,78 +1718,34 @@ color2index(VTermColor *color, int fg, int *boldp)
17161718 int blue = color -> blue ;
17171719 int green = color -> green ;
17181720
1719- /* The argument for lookup_color() is for the color_names[] table. */
1720- if (red == 0 )
1721+ if (color -> ansi_index != VTERM_ANSI_INDEX_NONE )
17211722 {
1722- if (green == 0 )
1723- {
1724- if (blue == 0 )
1725- return lookup_color (0 , fg , boldp ) + 1 ; /* black */
1726- if (blue == 224 )
1727- return lookup_color (1 , fg , boldp ) + 1 ; /* dark blue */
1728- }
1729- else if (green == 224 )
1723+ /* First 16 colors and default: use the ANSI index, because these
1724+ * colors can be redefined. */
1725+ if (t_colors >= 16 )
1726+ return color -> ansi_index ;
1727+ switch (color -> ansi_index )
17301728 {
1731- if (blue == 0 )
1732- return lookup_color (2 , fg , boldp ) + 1 ; /* dark green */
1733- if (blue == 224 )
1734- return lookup_color (3 , fg , boldp ) + 1 ; /* dark cyan */
1735- }
1736- }
1737- else if (red == 224 )
1738- {
1739- if (green == 0 )
1740- {
1741- if (blue == 0 )
1742- return lookup_color (4 , fg , boldp ) + 1 ; /* dark red */
1743- if (blue == 224 )
1744- return lookup_color (5 , fg , boldp ) + 1 ; /* dark magenta */
1745- }
1746- else if (green == 224 )
1747- {
1748- if (blue == 0 )
1749- return lookup_color (6 , fg , boldp ) + 1 ; /* dark yellow / brown */
1750- if (blue == 224 )
1751- return lookup_color (8 , fg , boldp ) + 1 ; /* white / light grey */
1752- }
1753- }
1754- else if (red == 128 )
1755- {
1756- if (green == 128 && blue == 128 )
1757- return lookup_color (12 , fg , boldp ) + 1 ; /* dark grey */
1758- }
1759- else if (red == 255 )
1760- {
1761- if (green == 64 )
1762- {
1763- if (blue == 64 )
1764- return lookup_color (20 , fg , boldp ) + 1 ; /* light red */
1765- if (blue == 255 )
1766- return lookup_color (22 , fg , boldp ) + 1 ; /* light magenta */
1767- }
1768- else if (green == 255 )
1769- {
1770- if (blue == 64 )
1771- return lookup_color (24 , fg , boldp ) + 1 ; /* yellow */
1772- if (blue == 255 )
1773- return lookup_color (26 , fg , boldp ) + 1 ; /* white */
1774- }
1775- }
1776- else if (red == 64 )
1777- {
1778- if (green == 64 )
1779- {
1780- if (blue == 255 )
1781- return lookup_color (14 , fg , boldp ) + 1 ; /* light blue */
1782- }
1783- else if (green == 255 )
1784- {
1785- if (blue == 64 )
1786- return lookup_color (16 , fg , boldp ) + 1 ; /* light green */
1787- if (blue == 255 )
1788- return lookup_color (18 , fg , boldp ) + 1 ; /* light cyan */
1729+ case 0 : return 0 ;
1730+ case 1 : return lookup_color ( 0 , fg , boldp ) + 1 ;
1731+ case 2 : return lookup_color ( 4 , fg , boldp ) + 1 ; /* dark red */
1732+ case 3 : return lookup_color ( 2 , fg , boldp ) + 1 ; /* dark green */
1733+ case 4 : return lookup_color ( 6 , fg , boldp ) + 1 ; /* brown */
1734+ case 5 : return lookup_color ( 1 , fg , boldp ) + 1 ; /* dark blue*/
1735+ case 6 : return lookup_color ( 5 , fg , boldp ) + 1 ; /* dark magenta */
1736+ case 7 : return lookup_color ( 3 , fg , boldp ) + 1 ; /* dark cyan */
1737+ case 8 : return lookup_color ( 8 , fg , boldp ) + 1 ; /* light grey */
1738+ case 9 : return lookup_color (12 , fg , boldp ) + 1 ; /* dark grey */
1739+ case 10 : return lookup_color (20 , fg , boldp ) + 1 ; /* red */
1740+ case 11 : return lookup_color (16 , fg , boldp ) + 1 ; /* green */
1741+ case 12 : return lookup_color (24 , fg , boldp ) + 1 ; /* yellow */
1742+ case 13 : return lookup_color (14 , fg , boldp ) + 1 ; /* blue */
1743+ case 14 : return lookup_color (22 , fg , boldp ) + 1 ; /* magenta */
1744+ case 15 : return lookup_color (18 , fg , boldp ) + 1 ; /* cyan */
1745+ case 16 : return lookup_color (26 , fg , boldp ) + 1 ; /* white */
17891746 }
17901747 }
1748+
17911749 if (t_colors >= 256 )
17921750 {
17931751 if (red == blue && red == green )
@@ -2447,23 +2405,23 @@ term_get_attr(buf_T *buf, linenr_T lnum, int col)
24472405}
24482406
24492407static VTermColor ansi_table [16 ] = {
2450- { 0 , 0 , 0 }, /* black */
2451- {224 , 0 , 0 }, /* dark red */
2452- { 0 , 224 , 0 }, /* dark green */
2453- {224 , 224 , 0 }, /* dark yellow / brown */
2454- { 0 , 0 , 224 }, /* dark blue */
2455- {224 , 0 , 224 }, /* dark magenta */
2456- { 0 , 224 , 224 }, /* dark cyan */
2457- {224 , 224 , 224 }, /* light grey */
2458-
2459- {128 , 128 , 128 }, /* dark grey */
2460- {255 , 64 , 64 }, /* light red */
2461- { 64 , 255 , 64 }, /* light green */
2462- {255 , 255 , 64 }, /* yellow */
2463- { 64 , 64 , 255 }, /* light blue */
2464- {255 , 64 , 255 }, /* light magenta */
2465- { 64 , 255 , 255 }, /* light cyan */
2466- {255 , 255 , 255 }, /* white */
2408+ { 0 , 0 , 0 , 1 }, /* black */
2409+ {224 , 0 , 0 , 2 }, /* dark red */
2410+ { 0 , 224 , 0 , 3 }, /* dark green */
2411+ {224 , 224 , 0 , 4 }, /* dark yellow / brown */
2412+ { 0 , 0 , 224 , 5 }, /* dark blue */
2413+ {224 , 0 , 224 , 6 }, /* dark magenta */
2414+ { 0 , 224 , 224 , 7 }, /* dark cyan */
2415+ {224 , 224 , 224 , 8 }, /* light grey */
2416+
2417+ {128 , 128 , 128 , 9 }, /* dark grey */
2418+ {255 , 64 , 64 , 10 }, /* light red */
2419+ { 64 , 255 , 64 , 11 }, /* light green */
2420+ {255 , 255 , 64 , 12 }, /* yellow */
2421+ { 64 , 64 , 255 , 13 }, /* light blue */
2422+ {255 , 64 , 255 , 14 }, /* light magenta */
2423+ { 64 , 255 , 255 , 15 }, /* light cyan */
2424+ {255 , 255 , 255 , 16 }, /* white */
24672425};
24682426
24692427static int cube_value [] = {
@@ -2549,7 +2507,7 @@ create_vterm(term_T *term, int rows, int cols)
25492507 /* The "Terminal" highlight group overrules the defaults. */
25502508 id = syn_name2id ((char_u * )"Terminal" );
25512509
2552- /* Use the actual color for the GUI and when 'guitermcolors ' is set. */
2510+ /* Use the actual color for the GUI and when 'termguicolors ' is set. */
25532511#if defined(FEAT_GUI ) || defined(FEAT_TERMGUICOLORS )
25542512 if (0
25552513# ifdef FEAT_GUI
0 commit comments