forked from aniani/vim
patch 8.0.1033: detecting background color does not work in screen
Problem: Detecting background color does not work in screen, even when it is working like an xterm. Solution: Make "screen.xterm" use termcap entries like an xterm. (Lubomir Rintel, closes #2048) When termresponse version is huge also recognize as not being an xterm.
This commit is contained in:
@@ -2280,6 +2280,7 @@ vim_is_xterm(char_u *name)
|
|||||||
|| STRNICMP(name, "kterm", 5) == 0
|
|| STRNICMP(name, "kterm", 5) == 0
|
||||||
|| STRNICMP(name, "mlterm", 6) == 0
|
|| STRNICMP(name, "mlterm", 6) == 0
|
||||||
|| STRNICMP(name, "rxvt", 4) == 0
|
|| STRNICMP(name, "rxvt", 4) == 0
|
||||||
|
|| STRNICMP(name, "screen.xterm", 12) == 0
|
||||||
|| STRCMP(name, "builtin_xterm") == 0);
|
|| STRCMP(name, "builtin_xterm") == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
24
src/term.c
24
src/term.c
@@ -4496,6 +4496,8 @@ check_termcode(
|
|||||||
/* eat it when at least one digit and ending in 'c' */
|
/* eat it when at least one digit and ending in 'c' */
|
||||||
if (*T_CRV != NUL && i > 2 + (tp[0] != CSI) && tp[i] == 'c')
|
if (*T_CRV != NUL && i > 2 + (tp[0] != CSI) && tp[i] == 'c')
|
||||||
{
|
{
|
||||||
|
int version = col;
|
||||||
|
|
||||||
LOG_TR("Received CRV response");
|
LOG_TR("Received CRV response");
|
||||||
crv_status = STATUS_GOT;
|
crv_status = STATUS_GOT;
|
||||||
# ifdef FEAT_AUTOCMD
|
# ifdef FEAT_AUTOCMD
|
||||||
@@ -4508,10 +4510,11 @@ check_termcode(
|
|||||||
switch_to_8bit();
|
switch_to_8bit();
|
||||||
|
|
||||||
/* rxvt sends its version number: "20703" is 2.7.3.
|
/* rxvt sends its version number: "20703" is 2.7.3.
|
||||||
|
* Screen sends 40500.
|
||||||
* Ignore it for when the user has set 'term' to xterm,
|
* Ignore it for when the user has set 'term' to xterm,
|
||||||
* even though it's an rxvt. */
|
* even though it's an rxvt. */
|
||||||
if (col > 20000)
|
if (version > 20000)
|
||||||
col = 0;
|
version = 0;
|
||||||
|
|
||||||
if (tp[1 + (tp[0] != CSI)] == '>' && semicols == 2)
|
if (tp[1 + (tp[0] != CSI)] == '>' && semicols == 2)
|
||||||
{
|
{
|
||||||
@@ -4522,19 +4525,19 @@ check_termcode(
|
|||||||
if (!option_was_set((char_u *)"ttym"))
|
if (!option_was_set((char_u *)"ttym"))
|
||||||
{
|
{
|
||||||
# ifdef TTYM_SGR
|
# ifdef TTYM_SGR
|
||||||
if (col >= 277)
|
if (version >= 277)
|
||||||
set_option_value((char_u *)"ttym", 0L,
|
set_option_value((char_u *)"ttym", 0L,
|
||||||
(char_u *)"sgr", 0);
|
(char_u *)"sgr", 0);
|
||||||
else
|
else
|
||||||
# endif
|
# endif
|
||||||
/* if xterm version >= 95 use mouse dragging */
|
/* if xterm version >= 95 use mouse dragging */
|
||||||
if (col >= 95)
|
if (version >= 95)
|
||||||
set_option_value((char_u *)"ttym", 0L,
|
set_option_value((char_u *)"ttym", 0L,
|
||||||
(char_u *)"xterm2", 0);
|
(char_u *)"xterm2", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if xterm version >= 141 try to get termcap codes */
|
/* if xterm version >= 141 try to get termcap codes */
|
||||||
if (col >= 141)
|
if (version >= 141)
|
||||||
{
|
{
|
||||||
LOG_TR("Enable checking for XT codes");
|
LOG_TR("Enable checking for XT codes");
|
||||||
check_for_codes = TRUE;
|
check_for_codes = TRUE;
|
||||||
@@ -4543,7 +4546,7 @@ check_termcode(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* libvterm sends 0;100;0 */
|
/* libvterm sends 0;100;0 */
|
||||||
if (col == 100
|
if (version == 100
|
||||||
&& STRNCMP(tp + extra - 2, "0;100;0c", 8) == 0)
|
&& STRNCMP(tp + extra - 2, "0;100;0c", 8) == 0)
|
||||||
{
|
{
|
||||||
/* If run from Vim $COLORS is set to the number of
|
/* If run from Vim $COLORS is set to the number of
|
||||||
@@ -4558,24 +4561,25 @@ check_termcode(
|
|||||||
* compatible. */
|
* compatible. */
|
||||||
# ifdef MACOS
|
# ifdef MACOS
|
||||||
/* Mac Terminal.app sends 1;95;0 */
|
/* Mac Terminal.app sends 1;95;0 */
|
||||||
if (col == 95
|
if (version == 95
|
||||||
&& STRNCMP(tp + extra - 2, "1;95;0c", 7) == 0)
|
&& STRNCMP(tp + extra - 2, "1;95;0c", 7) == 0)
|
||||||
is_not_xterm = TRUE;
|
is_not_xterm = TRUE;
|
||||||
# endif
|
# endif
|
||||||
/* Gnome terminal sends 1;3801;0 or 1;4402;0.
|
/* Gnome terminal sends 1;3801;0 or 1;4402;0.
|
||||||
* xfce4-terminal sends 1;2802;0.
|
* xfce4-terminal sends 1;2802;0.
|
||||||
|
* screen sends 83;40500;0
|
||||||
* Assuming any version number over 2800 is not an
|
* Assuming any version number over 2800 is not an
|
||||||
* xterm. */
|
* xterm (without the limit for rxvt and screen). */
|
||||||
if (col >= 2800)
|
if (col >= 2800)
|
||||||
is_not_xterm = TRUE;
|
is_not_xterm = TRUE;
|
||||||
|
|
||||||
/* PuTTY sends 0;136;0 */
|
/* PuTTY sends 0;136;0 */
|
||||||
if (col == 136
|
if (version == 136
|
||||||
&& STRNCMP(tp + extra - 2, "0;136;0c", 8) == 0)
|
&& STRNCMP(tp + extra - 2, "0;136;0c", 8) == 0)
|
||||||
is_not_xterm = TRUE;
|
is_not_xterm = TRUE;
|
||||||
|
|
||||||
/* Konsole sends 0;115;0 */
|
/* Konsole sends 0;115;0 */
|
||||||
if (col == 115
|
if (version == 115
|
||||||
&& STRNCMP(tp + extra - 2, "0;115;0c", 8) == 0)
|
&& STRNCMP(tp + extra - 2, "0;115;0c", 8) == 0)
|
||||||
is_not_xterm = TRUE;
|
is_not_xterm = TRUE;
|
||||||
|
|
||||||
|
@@ -769,6 +769,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 */
|
||||||
|
/**/
|
||||||
|
1033,
|
||||||
/**/
|
/**/
|
||||||
1032,
|
1032,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user