diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-08-26 15:16:03 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-08-26 15:16:03 +0200 |
commit | 833e0e3c8ccd6047dd596c4ffd68cb0ab13b4e41 (patch) | |
tree | 4056396d60e5c6999dc7a58200180b1679c00f37 /src | |
parent | 753289f9bf71c0528f00d803a39d017184640e9d (diff) | |
download | vim-git-833e0e3c8ccd6047dd596c4ffd68cb0ab13b4e41.tar.gz |
patch 8.0.0996: Mac: t_RS is echoed on the screne in Terminal.appv8.0.0996
Problem: Mac: t_RS is echoed on the screne in Terminal.app. Even though
$TERM is set to "xterm-256colors" it cannot handle this xterm
escape sequence.
Solution: Recognize Terminal.app from the termresponse and skip sending t_RS
if it looks like Terminal.app.
Diffstat (limited to 'src')
-rw-r--r-- | src/term.c | 54 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 36 insertions, 20 deletions
diff --git a/src/term.c b/src/term.c index 9e8bc3bba..716c89cf8 100644 --- a/src/term.c +++ b/src/term.c @@ -1360,6 +1360,9 @@ static int need_gather = FALSE; /* need to fill termleader[] */ static char_u termleader[256 + 1]; /* for check_termcode() */ #ifdef FEAT_TERMRESPONSE static int check_for_codes = FALSE; /* check for key code response */ +# ifdef MACOS +static int is_terminal_app = FALSE; /* recognized Terminal.app */ +# endif #endif static struct builtin_term * @@ -3497,8 +3500,6 @@ may_req_ambiguous_char_width(void) void may_req_bg_color(void) { - int done = FALSE; - if (can_get_termresponse() && starting == 0) { /* Only request background if t_RB is set and 'background' wasn't @@ -3510,27 +3511,13 @@ may_req_bg_color(void) LOG_TR("Sending BG request"); out_str(T_RBG); rbg_status = STATUS_SENT; - done = TRUE; - } - /* Only request the cursor shape if t_SH and t_RS are set. */ - if (rcm_status == STATUS_GET - && *T_CSH != NUL - && *T_CRS != NUL) - { - LOG_TR("Sending cursor shape request"); - out_str(T_CRS); - rcm_status = STATUS_SENT; - done = TRUE; + /* check for the characters now, otherwise they might be eaten by + * get_keystroke() */ + out_flush(); + (void)vpeekc_nomap(); } } - if (done) - { - /* check for the characters now, otherwise they might be eaten by - * get_keystroke() */ - out_flush(); - (void)vpeekc_nomap(); - } } # ifdef DEBUG_TERMRESPONSE @@ -4531,6 +4518,33 @@ check_termcode( if (mch_getenv((char_u *)"COLORS") == NULL) may_adjust_color_count(256); } + +# ifdef MACOS + /* Mac Terminal.app sends 1;95;0 */ + if (col == 95 + && STRNCMP(tp + extra - 2, ">1;95;0c", 9) == 0) + { + /* Terminal.app sets $TERM to "xterm-256colors", + * but it's not fully xterm compatible. */ + is_terminal_app = TRUE; + } +# endif + + /* Only request the cursor style if t_SH and t_RS are + * set. Not for Terminal.app, it can't handle t_RS, it + * echoes the characters to the screen. */ + if (rcm_status == STATUS_GET +# ifdef MACOS + && !is_terminal_app +# endif + && *T_CSH != NUL + && *T_CRS != NUL) + { + LOG_TR("Sending cursor style request"); + out_str(T_CRS); + rcm_status = STATUS_SENT; + out_flush(); + } } # ifdef FEAT_EVAL set_vim_var_string(VV_TERMRESPONSE, tp, i + 1); diff --git a/src/version.c b/src/version.c index 9ce38f03a..430ac8bc7 100644 --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 996, +/**/ 995, /**/ 994, |