]> granicus.if.org Git - vim/commitdiff
patch 8.1.1469: no test for checking the cursor style response v8.1.1469
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Jun 2019 20:07:51 +0000 (22:07 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Jun 2019 20:07:51 +0000 (22:07 +0200)
Problem:    No test for checking the cursor style response.
Solution:   Add a simple test.  Also include the missing part of 8.1.1464.

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

index bcd2184f4fb58880c5ad74b1640cec5e5525edb4..541b35eae8057d038bbceff4c6f3b58de6b2aa51 100644 (file)
@@ -4015,7 +4015,8 @@ term_cursor_color(char_u *color)
 blink_state_is_inverted()
 {
 #ifdef FEAT_TERMRESPONSE
-    return rbm_status.tr_progress == STATUS_GOT && rcs_status.tr_progress == STATUS_GOT
+    return rbm_status.tr_progress == STATUS_GOT
+       && rcs_status.tr_progress == STATUS_GOT
                && initial_cursor_blink != initial_cursor_shape_blink;
 #else
     return FALSE;
@@ -5062,7 +5063,7 @@ check_termcode(
             * {lead}1$r<digit> q{tail}
             *
             * {lead} can be <Esc>P or DCS
-            * {tail} can be Esc>\ or STERM
+            * {tail} can be <Esc>\ or STERM
             *
             * Consume any code that starts with "{lead}.+r" or "{lead}.$r".
             */
@@ -5072,29 +5073,29 @@ check_termcode(
            {
                j = 1 + (tp[0] == ESC);
                if (len < j + 3)
-                   i = len; /* need more chars */
+                   i = len; // need more chars
                else if ((argp[1] != '+' && argp[1] != '$') || argp[2] != 'r')
-                 i = 0; /* no match */
+                   i = 0; // no match
                else if (argp[1] == '+')
-                 /* key code response */
-                 for (i = j; i < len; ++i)
-                 {
-                   if ((tp[i] == ESC && i + 1 < len && tp[i + 1] == '\\')
-                           || tp[i] == STERM)
+                   // key code response
+                   for (i = j; i < len; ++i)
                    {
-                       if (i - j >= 3)
-                           got_code_from_term(tp + j, i);
-                       key_name[0] = (int)KS_EXTRA;
-                       key_name[1] = (int)KE_IGNORE;
-                       slen = i + 1 + (tp[i] == ESC);
-                       break;
+                       if ((tp[i] == ESC && i + 1 < len && tp[i + 1] == '\\')
+                               || tp[i] == STERM)
+                       {
+                           if (i - j >= 3)
+                               got_code_from_term(tp + j, i);
+                           key_name[0] = (int)KS_EXTRA;
+                           key_name[1] = (int)KE_IGNORE;
+                           slen = i + 1 + (tp[i] == ESC);
+                           break;
+                       }
                    }
-                 }
                else
                {
-                   /* Probably the cursor shape response.  Make sure that "i"
-                    * is equal to "len" when there are not sufficient
-                    * characters. */
+                   // Probably the cursor shape response.  Make sure that "i"
+                   // is equal to "len" when there are not sufficient
+                   // characters.
                    for (i = j + 3; i < len; ++i)
                    {
                        if (i - j == 3 && !isdigit(tp[i]))
@@ -5110,13 +5111,13 @@ check_termcode(
                        {
                            int number = argp[3] - '0';
 
-                           /* 0, 1 = block blink, 2 = block
-                            * 3 = underline blink, 4 = underline
-                            * 5 = vertical bar blink, 6 = vertical bar */
+                           // 0, 1 = block blink, 2 = block
+                           // 3 = underline blink, 4 = underline
+                           // 5 = vertical bar blink, 6 = vertical bar
                            number = number == 0 ? 1 : number;
                            initial_cursor_shape = (number + 1) / 2;
-                           /* The blink flag is actually inverted, compared to
-                            * the value set with T_SH. */
+                           // The blink flag is actually inverted, compared to
+                           // the value set with T_SH.
                            initial_cursor_shape_blink =
                                                   (number & 1) ? FALSE : TRUE;
                            rcs_status.tr_progress = STATUS_GOT;
index aef9814afc61e70bc9336c692a40aa1e56090bef..64d754b31bcdc1db4803f141438c84861a9503fe 100644 (file)
@@ -624,3 +624,63 @@ func Test_xterm_mouse_click_in_fold_columns()
   let &mouse = save_mouse
   bwipe!
 endfunc
+
+" This only checks if the sequence is recognized.
+" TODO: check that the values were parsed properly
+func Test_term_rgb_response()
+  set t_RF=x
+  set t_RB=y
+
+  " response to t_RF, 4 digits
+  let red = 0x12
+  let green = 0x34
+  let blue = 0x56
+  let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termrfgresp)
+
+  " response to t_RF, 2 digits
+  let red = 0x78
+  let green = 0x9a
+  let blue = 0xbc
+  let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue)
+  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
+  let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termrbgresp)
+
+  " response to t_RB, 2 digits
+  let red = 0x87
+  let green = 0xa9
+  let blue = 0xcb
+  let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termrbgresp)
+  
+  set t_RF= t_RB=
+endfunc
+
+" This only checks if the sequence is recognized.
+" This must be last, because it has side effects to xterm properties.
+" TODO: check that the values were parsed properly
+func Test_xx_term_style_response()
+  " Termresponse is only parsed when t_RV is not empty.
+  set t_RV=x
+
+  " send the termresponse to trigger requesting the XT codes
+  let seq = "\<Esc>[>41;337;0c"
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termresponse)
+
+  let seq = "\<Esc>P1$r2 q\<Esc>\\"
+  call feedkeys(seq, 'Lx!')
+  call assert_equal(seq, v:termstyleresp)
+
+  set t_RV=
+endfunc
index 443a114a8f3eb2c211e14627773ed7fc3ba6115c..6317804fd60859fb201dcc9c4cc3479ed60ae62b 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1469,
 /**/
     1468,
 /**/