# HG changeset patch # User Bram Moolenaar # Date 1559768407 -7200 # Node ID 1c264ca8f2e857b10ac16e7c409947d91b6f86b2 # Parent 6c0df0338d74d201314e8c311bd745e4778c1266 patch 8.1.1471: 'background' not correctly set for 2-digit rgb termresponse commit https://github.com/vim/vim/commit/32e1977012912cd5d7bc762dd41197bc3f1a1370 Author: Bram Moolenaar Date: Wed Jun 5 22:57:04 2019 +0200 patch 8.1.1471: 'background' not correctly set for 2-digit rgb termresponse Problem: 'background' not correctly set for 2-digit rgb termresponse. Solution: Adjust what digit to use. (closes https://github.com/vim/vim/issues/4495) diff --git a/src/term.c b/src/term.c --- a/src/term.c +++ b/src/term.c @@ -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); } diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim --- a/src/testdir/test_termcodes.vim +++ b/src/testdir/test_termcodes.vim @@ -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 + " 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("\]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, 4 digits, light + set background=dark + call test_option_not_set('background') + let red = 0x81 + let green = 0x63 let blue = 0x65 let seq = printf("\]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 - let red = 0x87 - let green = 0xa9 - let blue = 0xcb + " 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("\]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("\]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 diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 1471, +/**/ 1470, /**/ 1469,