diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-06-05 22:07:51 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-06-05 22:07:51 +0200 |
commit | 66761db11d321d60d4692947e90de9030301f6ee (patch) | |
tree | 1f212b77de9d722ce6f4945dc9b8beea964d5390 | |
parent | d0380dc7820828cb7faa06138d4e86a63c1d755d (diff) | |
download | vim-git-66761db11d321d60d4692947e90de9030301f6ee.tar.gz |
patch 8.1.1469: no test for checking the cursor style responsev8.1.1469
Problem: No test for checking the cursor style response.
Solution: Add a simple test. Also include the missing part of 8.1.1464.
-rw-r--r-- | src/term.c | 49 | ||||
-rw-r--r-- | src/testdir/test_termcodes.vim | 60 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 87 insertions, 24 deletions
diff --git a/src/term.c b/src/term.c index bcd2184f4..541b35eae 100644 --- a/src/term.c +++ b/src/term.c @@ -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; diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim index aef9814af..64d754b31 100644 --- a/src/testdir/test_termcodes.vim +++ b/src/testdir/test_termcodes.vim @@ -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 diff --git a/src/version.c b/src/version.c index 443a114a8..6317804fd 100644 --- 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 */ /**/ + 1469, +/**/ 1468, /**/ 1467, |