changeset 16926:bcc25f1a264d v8.1.1464

patch 8.1.1464: only 4-digit rgb termresponse is recognized commit https://github.com/vim/vim/commit/cea254f5a793bf447d6ea2eb926cba38e73adece Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jun 4 21:41:28 2019 +0200 patch 8.1.1464: only 4-digit rgb termresponse is recognized Problem: Only 4-digit rgb termresponse is recognized. Solution: Also recognize 2-digit rgb response. (closes https://github.com/vim/vim/issues/4486)
author Bram Moolenaar <Bram@vim.org>
date Tue, 04 Jun 2019 21:45:05 +0200
parents fe06c620ee5c
children 5dea77fedbb2
files src/term.c src/version.c
diffstat 2 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/term.c
+++ b/src/term.c
@@ -4962,6 +4962,7 @@ check_termcode(
 	    /* Check for fore/background color response from the terminal:
 	     *
 	     *       {lead}{code};rgb:{rrrr}/{gggg}/{bbbb}{tail}
+	     * or    {lead}{code};rgb:{rr}/{gg}/{bb}{tail}
 	     *
 	     * {code} is 10 for foreground, 11 for background
 	     * {lead} can be <Esc>] or OSC
@@ -4985,14 +4986,19 @@ check_termcode(
 			: (tp[i] == ESC && i + 1 < len && tp[i + 1] == '\\')))
 		    {
 			int is_bg = argp[1] == '1';
-
-			if (i - j >= 21 && STRNCMP(tp + j + 3, "rgb:", 4) == 0
-			    && tp[j + 11] == '/' && tp[j + 16] == '/')
+			int is_4digit = i - j >= 21 && tp[j + 11] == '/'
+							  && tp[j + 16] == '/';
+
+			if (i - j >= 14 && STRNCMP(tp + j + 3, "rgb:", 4) == 0
+			    && (is_4digit
+				   || (tp[j + 9] == '/' && tp[i + 12 == '/'])))
 			{
 # ifdef FEAT_TERMINAL
-			    int rval = hexhex2nr(tp + j + 7);
-			    int gval = hexhex2nr(tp + j + 12);
-			    int bval = hexhex2nr(tp + j + 17);
+			    int rval, gval, bval;
+
+			    rval = hexhex2nr(tp + j + 7);
+			    gval = hexhex2nr(tp + j + (is_4digit ? 12 : 10));
+			    bval = hexhex2nr(tp + j + (is_4digit ? 17 : 13));
 # endif
 			    if (is_bg)
 			    {
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1464,
+/**/
     1463,
 /**/
     1462,