forked from aniani/vim
		
	patch 9.0.1111: termcap entries for RGB colors are not set automatically
Problem: Termcap entries for RGB colors are not set automatically. Solution: Always set the termcap entries when +termguicolors is enabled.
This commit is contained in:
		
							
								
								
									
										49
									
								
								src/term.c
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								src/term.c
									
									
									
									
									
								
							| @@ -476,12 +476,6 @@ static tcap_entry_T builtin_xterm[] = { | |||||||
|     {(int)KS_RFG,	"\033]10;?\007"}, |     {(int)KS_RFG,	"\033]10;?\007"}, | ||||||
|     {(int)KS_RBG,	"\033]11;?\007"}, |     {(int)KS_RBG,	"\033]11;?\007"}, | ||||||
|     {(int)KS_U7,	"\033[6n"}, |     {(int)KS_U7,	"\033[6n"}, | ||||||
| #  ifdef FEAT_TERMGUICOLORS |  | ||||||
|     // These are printf strings, not terminal codes. |  | ||||||
|     {(int)KS_8F,	"\033[38;2;%lu;%lu;%lum"}, |  | ||||||
|     {(int)KS_8B,	"\033[48;2;%lu;%lu;%lum"}, |  | ||||||
|     {(int)KS_8U,	"\033[58;2;%lu;%lu;%lum"}, |  | ||||||
| #  endif |  | ||||||
|     {(int)KS_CAU,	"\033[58;5;%dm"}, |     {(int)KS_CAU,	"\033[58;5;%dm"}, | ||||||
|     {(int)KS_CBE,	"\033[?2004h"}, |     {(int)KS_CBE,	"\033[?2004h"}, | ||||||
|     {(int)KS_CBD,	"\033[?2004l"}, |     {(int)KS_CBD,	"\033[?2004l"}, | ||||||
| @@ -627,6 +621,20 @@ static tcap_entry_T builtin_kitty[] = { | |||||||
|     {(int)KS_NAME,	NULL}  // end marker |     {(int)KS_NAME,	NULL}  // end marker | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | #ifdef FEAT_TERMGUICOLORS | ||||||
|  | /* | ||||||
|  |  * Additions for using the RGB colors | ||||||
|  |  */ | ||||||
|  | static tcap_entry_T builtin_rgb[] = { | ||||||
|  |     // These are printf strings, not terminal codes. | ||||||
|  |     {(int)KS_8F,	"\033[38;2;%lu;%lu;%lum"}, | ||||||
|  |     {(int)KS_8B,	"\033[48;2;%lu;%lu;%lum"}, | ||||||
|  |     {(int)KS_8U,	"\033[58;2;%lu;%lu;%lum"}, | ||||||
|  |  | ||||||
|  |     {(int)KS_NAME,	NULL}  // end marker | ||||||
|  | }; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * iris-ansi for Silicon Graphics machines. |  * iris-ansi for Silicon Graphics machines. | ||||||
|  */ |  */ | ||||||
| @@ -892,10 +900,6 @@ static tcap_entry_T builtin_win32[] = { | |||||||
| #  else | #  else | ||||||
|     {(int)KS_CS,	"\033|%i%d;%dr"}, // scroll region |     {(int)KS_CS,	"\033|%i%d;%dr"}, // scroll region | ||||||
| #  endif | #  endif | ||||||
| #  ifdef FEAT_TERMGUICOLORS |  | ||||||
|     {(int)KS_8F,	"\033|38;2;%lu;%lu;%lum"}, |  | ||||||
|     {(int)KS_8B,	"\033|48;2;%lu;%lu;%lum"}, |  | ||||||
| #  endif |  | ||||||
|  |  | ||||||
|     {K_UP,		"\316H"}, |     {K_UP,		"\316H"}, | ||||||
|     {K_DOWN,		"\316P"}, |     {K_DOWN,		"\316P"}, | ||||||
| @@ -1674,6 +1678,15 @@ static char *(key_names[]) = | |||||||
| }; | }; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Return TRUE if "term_strings[idx]" was not set. | ||||||
|  |  */ | ||||||
|  |     static int | ||||||
|  | term_strings_not_set(enum SpecialKey idx) | ||||||
|  | { | ||||||
|  |     return TERM_STR(idx) == NULL || TERM_STR(idx) == empty_option; | ||||||
|  | } | ||||||
|  |  | ||||||
| #ifdef HAVE_TGETENT | #ifdef HAVE_TGETENT | ||||||
| /* | /* | ||||||
|  * Get the termcap entries we need with tgetstr(), tgetflag() and tgetnum(). |  * Get the termcap entries we need with tgetstr(), tgetflag() and tgetnum(). | ||||||
| @@ -1730,8 +1743,7 @@ get_term_entries(int *height, int *width) | |||||||
|      */ |      */ | ||||||
|     for (i = 0; string_names[i].name != NULL; ++i) |     for (i = 0; string_names[i].name != NULL; ++i) | ||||||
|     { |     { | ||||||
| 	if (TERM_STR(string_names[i].dest) == NULL | 	if (term_strings_not_set(string_names[i].dest)) | ||||||
| 			     || TERM_STR(string_names[i].dest) == empty_option) |  | ||||||
| 	{ | 	{ | ||||||
| 	    TERM_STR(string_names[i].dest) = TGETSTR(string_names[i].name, &tp); | 	    TERM_STR(string_names[i].dest) = TGETSTR(string_names[i].name, &tp); | ||||||
| #ifdef FEAT_EVAL | #ifdef FEAT_EVAL | ||||||
| @@ -1778,7 +1790,7 @@ get_term_entries(int *height, int *width) | |||||||
|     /* |     /* | ||||||
|      * Get number of colors (if not done already). |      * Get number of colors (if not done already). | ||||||
|      */ |      */ | ||||||
|     if (TERM_STR(KS_CCO) == NULL || TERM_STR(KS_CCO) == empty_option) |     if (term_strings_not_set(KS_CCO)) | ||||||
|     { |     { | ||||||
| 	set_color_count(tgetnum("Co")); | 	set_color_count(tgetnum("Co")); | ||||||
| #ifdef FEAT_EVAL | #ifdef FEAT_EVAL | ||||||
| @@ -2069,6 +2081,17 @@ set_termname(char_u *term) | |||||||
| 	    apply_builtin_tcap(term, builtin_kitty, TRUE); | 	    apply_builtin_tcap(term, builtin_kitty, TRUE); | ||||||
| 	else if (kpc == KEYPROTOCOL_MOK2) | 	else if (kpc == KEYPROTOCOL_MOK2) | ||||||
| 	    apply_builtin_tcap(term, builtin_mok2, TRUE); | 	    apply_builtin_tcap(term, builtin_mok2, TRUE); | ||||||
|  |  | ||||||
|  | #ifdef FEAT_TERMGUICOLORS | ||||||
|  | 	// There is no good way to detect that the terminal supports RGB | ||||||
|  | 	// colors.  Since these termcap entries are non-standard anyway and | ||||||
|  | 	// only used when the user sets 'termguicolors' we might as well add | ||||||
|  | 	// them.  But not when one of them was alredy set. | ||||||
|  | 	if (term_strings_not_set(KS_8F) | ||||||
|  | 		&& term_strings_not_set(KS_8B) | ||||||
|  | 		&& term_strings_not_set(KS_8U)) | ||||||
|  | 	    apply_builtin_tcap(term, builtin_rgb, TRUE); | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   | |||||||
| @@ -695,6 +695,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 */ | ||||||
|  | /**/ | ||||||
|  |     1111, | ||||||
| /**/ | /**/ | ||||||
|     1110, |     1110, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user