summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-08-26 15:16:03 +0200
committerBram Moolenaar <Bram@vim.org>2017-08-26 15:16:03 +0200
commit833e0e3c8ccd6047dd596c4ffd68cb0ab13b4e41 (patch)
tree4056396d60e5c6999dc7a58200180b1679c00f37
parent753289f9bf71c0528f00d803a39d017184640e9d (diff)
downloadvim-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.
-rw-r--r--src/term.c54
-rw-r--r--src/version.c2
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,