Skip to content

Commit

Permalink
patch 8.0.1033: detecting background color does not work in screen
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
brammool committed Sep 1, 2017
1 parent 9ac9dfa commit 995e4af
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
1 change: 1 addition & 0 deletions src/os_unix.c
Expand Up @@ -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);
} }


Expand Down
24 changes: 14 additions & 10 deletions src/term.c
Expand Up @@ -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
Expand All @@ -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)
{ {
Expand All @@ -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;
Expand All @@ -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
Expand All @@ -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;


Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -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,
/**/ /**/
Expand Down

0 comments on commit 995e4af

Please sign in to comment.