]> granicus.if.org Git - vim/commitdiff
patch 8.1.1471: 'background' not correctly set for 2-digit rgb termresponse v8.1.1471
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Jun 2019 20:57:04 +0000 (22:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Jun 2019 20:57:04 +0000 (22:57 +0200)
Problem:    'background' not correctly set for 2-digit rgb termresponse.
Solution:   Adjust what digit to use. (closes #4495)

src/term.c
src/testdir/test_termcodes.vim
src/version.c

index 541b35eae8057d038bbceff4c6f3b58de6b2aa51..8d6a98e5c03be0a118a9381ebfc17fc3e6f0743f 100644 (file)
@@ -4994,17 +4994,20 @@ check_termcode(
                            && (is_4digit
                                   || (tp[j + 9] == '/' && tp[i + 12 == '/'])))
                        {
+                           char_u *tp_r = tp + j + 7;
+                           char_u *tp_g = tp + j + (is_4digit ? 12 : 10);
+                           char_u *tp_b = tp + j + (is_4digit ? 17 : 13);
 # ifdef FEAT_TERMINAL
                            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));
+                           rval = hexhex2nr(tp_r);
+                           gval = hexhex2nr(tp_b);
+                           bval = hexhex2nr(tp_g);
 # endif
                            if (is_bg)
                            {
-                               char *newval = (3 * '6' < tp[j+7] + tp[j+12]
-                                               + tp[j+17]) ? "light" : "dark";
+                               char *new_bg_val = (3 * '6' < *tp_r + *tp_g +
+                                                    *tp_b) ? "light" : "dark";
 
                                LOG_TR(("Received RBG response: %s", tp));
                                rbg_status.tr_progress = STATUS_GOT;
@@ -5014,11 +5017,11 @@ check_termcode(
                                bg_b = bval;
 # endif
                                if (!option_was_set((char_u *)"bg")
-                                                 && STRCMP(p_bg, newval) != 0)
+                                             && STRCMP(p_bg, new_bg_val) != 0)
                                {
                                    /* value differs, apply it */
                                    set_option_value((char_u *)"bg", 0L,
-                                                         (char_u *)newval, 0);
+                                                     (char_u *)new_bg_val, 0);
                                    reset_option_was_set((char_u *)"bg");
                                    redraw_asap(CLEAR);
                                }
index 64d754b31bcdc1db4803f141438c84861a9503fe..d182761dddbb08f6cd04a558f5996332ac874c8a 100644 (file)
@@ -647,21 +647,49 @@ func Test_term_rgb_response()
   call feedkeys(seq, 'Lx!')
   call assert_equal(seq, v:termrfgresp)
 
-  " response to t_RB, 4 digits
-  let red = 0x21
-  let green = 0x43
-  let blue = 0x65
+  " response to t_RB, 4 digits, dark
+  set background=light
+  call test_option_not_set('background')
+  let red = 0x29
+  let green = 0x4a
+  let blue = 0x6b
   let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
   call feedkeys(seq, 'Lx!')
   call assert_equal(seq, v:termrbgresp)
+  call assert_equal('dark', &background)
 
-  " response to t_RB, 2 digits
-  let red = 0x87
-  let green = 0xa9
-  let blue = 0xcb
+  " response to t_RB, 4 digits, light
+  set background=dark
+  call test_option_not_set('background')
+  let red = 0x81
+  let green = 0x63
+  let blue = 0x65
+  let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termrbgresp)
+  call assert_equal('light', &background)
+
+  " response to t_RB, 2 digits, dark
+  set background=light
+  call test_option_not_set('background')
+  let red = 0x47
+  let green = 0x59
+  let blue = 0x5b
+  let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termrbgresp)
+  call assert_equal('dark', &background)
+  
+  " response to t_RB, 2 digits, light
+  set background=dark
+  call test_option_not_set('background')
+  let red = 0x83
+  let green = 0xa4
+  let blue = 0xc2
   let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
   call feedkeys(seq, 'Lx!')
   call assert_equal(seq, v:termrbgresp)
+  call assert_equal('light', &background)
   
   set t_RF= t_RB=
 endfunc
index b7d58e9d87970c6e4d5a5ffea61afd2e1eae0d6f..366e56b748f706fda230d7d767522343ae195edb 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1471,
 /**/
     1470,
 /**/