diff src/term.c @ 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 ce04ebdf26b8
children 73e6ed2f69a2
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)
 			    {