diff src/term.c @ 6893:31a14cb3a8e3 v7.4.766

patch 7.4.766 Problem: Background color check does not work on Tera Term. Solution: Also recognize ST as a termination character. (Hirohito Higashi)
author Bram Moolenaar <bram@vim.org>
date Fri, 03 Jul 2015 13:05:50 +0200
parents ce209c5103a3
children 2ce6b77a49de
line wrap: on
line diff
--- a/src/term.c
+++ b/src/term.c
@@ -4264,7 +4264,9 @@ check_termcode(max_offset, buf, bufsize,
 	     *
 	     * - Background color response:
 	     *       <Esc>]11;rgb:{rrrr}/{gggg}/{bbbb}\007
-	     *   The final byte must be '\007'.
+	     *   Or
+	     *       <Esc>]11;rgb:{rrrr}/{gggg}/{bbbb}ST
+	     *   The final byte must be '\007' or ST(0x9c or ESC\).
 	     */
 	    char_u *argp = tp[0] == CSI ? tp + 1 : tp + 2;
 
@@ -4408,12 +4410,15 @@ check_termcode(max_offset, buf, bufsize,
 		    key_name[1] = (int)KE_IGNORE;
 		    slen = i + 1;
 		}
-		else if (*T_RBG != NUL && len >= 24 - (tp[0] == CSI)
+		else if (*T_RBG != NUL
+			&& len >= 24 - (tp[0] == CSI)
+			&& len >= 24 - (tp[0] == CSI) + (argp[21] == ESC)
 			&& argp[0] == '1' && argp[1] == '1'
 			&& argp[2] == ';' && argp[3] == 'r' && argp[4] == 'g'
 			&& argp[5] == 'b' && argp[6] == ':'
 			&& argp[11] == '/' && argp[16] == '/'
-			&& argp[21] == '\007')
+			&& (argp[21] == '\007' || argp[21] == STERM
+			    || (argp[21] == ESC && argp[22] == '\\')))
 		{
 		    LOG_TR("Received RBG");
 		    rbg_status = RBG_GOT;
@@ -4427,7 +4432,7 @@ check_termcode(max_offset, buf, bufsize,
 		    }
 		    key_name[0] = (int)KS_EXTRA;
 		    key_name[1] = (int)KE_IGNORE;
-		    slen = 24;
+		    slen = 24 - (tp[0] == CSI) + (argp[21] == ESC);
 		}
 	    }