1" Tests for decoding escape sequences sent by the terminal. 2 3" This only works for Unix in a terminal 4source check.vim 5CheckNotGui 6CheckUnix 7 8source shared.vim 9 10" xterm2 and sgr always work, urxvt is optional. 11let s:ttymouse_values = ['xterm2', 'sgr'] 12if has('mouse_urxvt') 13 call add(s:ttymouse_values, 'urxvt') 14endif 15 16" dec doesn't support all the functionality 17if has('mouse_dec') 18 let s:ttymouse_dec = ['dec'] 19else 20 let s:ttymouse_dec = [] 21endif 22 23" netterm only supports left click 24if has('mouse_netterm') 25 let s:ttymouse_netterm = ['netterm'] 26else 27 let s:ttymouse_netterm = [] 28endif 29 30" Helper function to emit a terminal escape code. 31func TerminalEscapeCode(code, row, col, m) 32 if &ttymouse ==# 'xterm2' 33 " need to use byte encoding here. 34 let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) 35 if has('iconv') 36 let bytes = str->iconv('utf-8', 'latin1') 37 else 38 " Hopefully the numbers are not too big. 39 let bytes = str 40 endif 41 call feedkeys("\<Esc>[M" .. bytes, 'Lx!') 42 elseif &ttymouse ==# 'sgr' 43 call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m), 'Lx!') 44 elseif &ttymouse ==# 'urxvt' 45 call feedkeys(printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row), 'Lx!') 46 endif 47endfunc 48 49func DecEscapeCode(code, down, row, col) 50 call feedkeys(printf("\<Esc>[%d;%d;%d;%d&w", a:code, a:down, a:row, a:col), 'Lx!') 51endfunc 52 53func NettermEscapeCode(row, col) 54 call feedkeys(printf("\<Esc>}%d,%d\r", a:row, a:col), 'Lx!') 55endfunc 56 57func MouseLeftClick(row, col) 58 if &ttymouse ==# 'dec' 59 call DecEscapeCode(2, 4, a:row, a:col) 60 elseif &ttymouse ==# 'netterm' 61 call NettermEscapeCode(a:row, a:col) 62 else 63 call TerminalEscapeCode(0, a:row, a:col, 'M') 64 endif 65endfunc 66 67func MouseMiddleClick(row, col) 68 if &ttymouse ==# 'dec' 69 call DecEscapeCode(4, 2, a:row, a:col) 70 else 71 call TerminalEscapeCode(1, a:row, a:col, 'M') 72 endif 73endfunc 74 75func MouseCtrlLeftClick(row, col) 76 let ctrl = 0x10 77 call TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M') 78endfunc 79 80func MouseCtrlRightClick(row, col) 81 let ctrl = 0x10 82 call TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M') 83endfunc 84 85func MouseLeftRelease(row, col) 86 if &ttymouse ==# 'dec' 87 call DecEscapeCode(3, 0, a:row, a:col) 88 elseif &ttymouse ==# 'netterm' 89 " send nothing 90 else 91 call TerminalEscapeCode(3, a:row, a:col, 'm') 92 endif 93endfunc 94 95func MouseMiddleRelease(row, col) 96 if &ttymouse ==# 'dec' 97 call DecEscapeCode(5, 0, a:row, a:col) 98 else 99 call TerminalEscapeCode(3, a:row, a:col, 'm') 100 endif 101endfunc 102 103func MouseRightRelease(row, col) 104 call TerminalEscapeCode(3, a:row, a:col, 'm') 105endfunc 106 107func MouseLeftDrag(row, col) 108 if &ttymouse ==# 'dec' 109 call DecEscapeCode(1, 4, a:row, a:col) 110 else 111 call TerminalEscapeCode(0x20, a:row, a:col, 'M') 112 endif 113endfunc 114 115func MouseWheelUp(row, col) 116 call TerminalEscapeCode(0x40, a:row, a:col, 'M') 117endfunc 118 119func MouseWheelDown(row, col) 120 call TerminalEscapeCode(0x41, a:row, a:col, 'M') 121endfunc 122 123func Test_term_mouse_left_click() 124 new 125 let save_mouse = &mouse 126 let save_term = &term 127 let save_ttymouse = &ttymouse 128 call test_override('no_query_mouse', 1) 129 set mouse=a term=xterm 130 call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 131 132 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 133 let msg = 'ttymouse=' .. ttymouse_val 134 exe 'set ttymouse=' .. ttymouse_val 135 go 136 call assert_equal([0, 1, 1, 0], getpos('.'), msg) 137 let row = 2 138 let col = 6 139 call MouseLeftClick(row, col) 140 call MouseLeftRelease(row, col) 141 call assert_equal([0, 2, 6, 0], getpos('.'), msg) 142 endfor 143 144 let &mouse = save_mouse 145 let &term = save_term 146 let &ttymouse = save_ttymouse 147 call test_override('no_query_mouse', 0) 148 bwipe! 149endfunc 150 151" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 152func Test_xterm_mouse_ctrl_click() 153 let save_mouse = &mouse 154 let save_term = &term 155 let save_ttymouse = &ttymouse 156 set mouse=a term=xterm 157 158 for ttymouse_val in s:ttymouse_values 159 let msg = 'ttymouse=' .. ttymouse_val 160 exe 'set ttymouse=' .. ttymouse_val 161 help 162 /usr_02.txt 163 norm! zt 164 let row = 1 165 let col = 1 166 call MouseCtrlLeftClick(row, col) 167 call MouseLeftRelease(row, col) 168 call assert_match('usr_02.txt$', bufname('%'), msg) 169 call assert_equal('*usr_02.txt*', expand('<cWORD>')) 170 171 call MouseCtrlRightClick(row, col) 172 call MouseRightRelease(row, col) 173 call assert_match('help.txt$', bufname('%'), msg) 174 call assert_equal('|usr_02.txt|', expand('<cWORD>')) 175 176 helpclose 177 endfor 178 179 let &mouse = save_mouse 180 let &term = save_term 181 let &ttymouse = save_ttymouse 182endfunc 183 184func Test_term_mouse_middle_click() 185 CheckFeature clipboard_working 186 187 new 188 let save_mouse = &mouse 189 let save_term = &term 190 let save_ttymouse = &ttymouse 191 call test_override('no_query_mouse', 1) 192 let save_quotestar = @* 193 let @* = 'abc' 194 set mouse=a term=xterm 195 196 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 197 let msg = 'ttymouse=' .. ttymouse_val 198 exe 'set ttymouse=' .. ttymouse_val 199 call setline(1, ['123456789', '123456789']) 200 201 " Middle-click in the middle of the line pastes text where clicked. 202 let row = 1 203 let col = 6 204 call MouseMiddleClick(row, col) 205 call MouseMiddleRelease(row, col) 206 call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 207 208 " Middle-click beyond end of the line pastes text at the end of the line. 209 let col = 20 210 call MouseMiddleClick(row, col) 211 call MouseMiddleRelease(row, col) 212 call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 213 214 " Middle-click beyond the last line pastes in the last line. 215 let row = 5 216 let col = 3 217 call MouseMiddleClick(row, col) 218 call MouseMiddleRelease(row, col) 219 call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 220 endfor 221 222 let &mouse = save_mouse 223 let &term = save_term 224 let &ttymouse = save_ttymouse 225 call test_override('no_query_mouse', 0) 226 let @* = save_quotestar 227 bwipe! 228endfunc 229 230" TODO: for unclear reasons this test fails if it comes after 231" Test_xterm_mouse_ctrl_click() 232func Test_1xterm_mouse_wheel() 233 new 234 let save_mouse = &mouse 235 let save_term = &term 236 let save_ttymouse = &ttymouse 237 set mouse=a term=xterm 238 call setline(1, range(1, 100)) 239 240 for ttymouse_val in s:ttymouse_values 241 let msg = 'ttymouse=' .. ttymouse_val 242 exe 'set ttymouse=' .. ttymouse_val 243 go 244 call assert_equal(1, line('w0'), msg) 245 call assert_equal([0, 1, 1, 0], getpos('.'), msg) 246 247 call MouseWheelDown(1, 1) 248 call assert_equal(4, line('w0'), msg) 249 call assert_equal([0, 4, 1, 0], getpos('.'), msg) 250 251 call MouseWheelDown(1, 1) 252 call assert_equal(7, line('w0'), msg) 253 call assert_equal([0, 7, 1, 0], getpos('.'), msg) 254 255 call MouseWheelUp(1, 1) 256 call assert_equal(4, line('w0'), msg) 257 call assert_equal([0, 7, 1, 0], getpos('.'), msg) 258 259 call MouseWheelUp(1, 1) 260 call assert_equal(1, line('w0'), msg) 261 call assert_equal([0, 7, 1, 0], getpos('.'), msg) 262 endfor 263 264 let &mouse = save_mouse 265 let &term = save_term 266 let &ttymouse = save_ttymouse 267 bwipe! 268endfunc 269 270func Test_term_mouse_drag_window_separator() 271 let save_mouse = &mouse 272 let save_term = &term 273 let save_ttymouse = &ttymouse 274 call test_override('no_query_mouse', 1) 275 set mouse=a term=xterm 276 277 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 278 let msg = 'ttymouse=' .. ttymouse_val 279 exe 'set ttymouse=' .. ttymouse_val 280 281 " Split horizontally and test dragging the horizontal window separator. 282 split 283 let rowseparator = winheight(0) + 1 284 let row = rowseparator 285 let col = 1 286 287 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 288 if ttymouse_val !=# 'xterm2' || row <= 223 289 call MouseLeftClick(row, col) 290 let row -= 1 291 call MouseLeftDrag(row, col) 292 call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 293 let row += 1 294 call MouseLeftDrag(row, col) 295 call assert_equal(rowseparator, winheight(0) + 1, msg) 296 call MouseLeftRelease(row, col) 297 call assert_equal(rowseparator, winheight(0) + 1, msg) 298 endif 299 bwipe! 300 301 " Split vertically and test dragging the vertical window separator. 302 vsplit 303 let colseparator = winwidth(0) + 1 304 let row = 1 305 let col = colseparator 306 307 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 308 if ttymouse_val !=# 'xterm2' || col <= 223 309 call MouseLeftClick(row, col) 310 let col -= 1 311 call MouseLeftDrag(row, col) 312 call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 313 let col += 1 314 call MouseLeftDrag(row, col) 315 call assert_equal(colseparator, winwidth(0) + 1, msg) 316 call MouseLeftRelease(row, col) 317 call assert_equal(colseparator, winwidth(0) + 1, msg) 318 endif 319 bwipe! 320 endfor 321 322 let &mouse = save_mouse 323 let &term = save_term 324 let &ttymouse = save_ttymouse 325 call test_override('no_query_mouse', 0) 326endfunc 327 328func Test_term_mouse_drag_statusline() 329 let save_mouse = &mouse 330 let save_term = &term 331 let save_ttymouse = &ttymouse 332 call test_override('no_query_mouse', 1) 333 let save_laststatus = &laststatus 334 set mouse=a term=xterm laststatus=2 335 336 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 337 let msg = 'ttymouse=' .. ttymouse_val 338 exe 'set ttymouse=' .. ttymouse_val 339 340 call assert_equal(1, &cmdheight, msg) 341 let rowstatusline = winheight(0) + 1 342 let row = rowstatusline 343 let col = 1 344 345 if ttymouse_val ==# 'xterm2' && row > 223 346 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 347 continue 348 endif 349 350 call MouseLeftClick(row, col) 351 let row -= 1 352 call MouseLeftDrag(row, col) 353 call assert_equal(2, &cmdheight, msg) 354 call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 355 let row += 1 356 call MouseLeftDrag(row, col) 357 call assert_equal(1, &cmdheight, msg) 358 call assert_equal(rowstatusline, winheight(0) + 1, msg) 359 call MouseLeftRelease(row, col) 360 call assert_equal(1, &cmdheight, msg) 361 call assert_equal(rowstatusline, winheight(0) + 1, msg) 362 endfor 363 364 let &mouse = save_mouse 365 let &term = save_term 366 let &ttymouse = save_ttymouse 367 call test_override('no_query_mouse', 0) 368 let &laststatus = save_laststatus 369endfunc 370 371func Test_term_mouse_click_tab() 372 let save_mouse = &mouse 373 let save_term = &term 374 let save_ttymouse = &ttymouse 375 call test_override('no_query_mouse', 1) 376 set mouse=a term=xterm 377 let row = 1 378 379 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 380 let msg = 'ttymouse=' .. ttymouse_val 381 exe 'set ttymouse=' .. ttymouse_val 382 e Xfoo 383 tabnew Xbar 384 385 let a = split(execute(':tabs'), "\n") 386 call assert_equal(['Tab page 1', 387 \ ' Xfoo', 388 \ 'Tab page 2', 389 \ '> Xbar'], a, msg) 390 391 " Test clicking on tab names in the tabline at the top. 392 let col = 2 393 redraw 394 call MouseLeftClick(row, col) 395 call MouseLeftRelease(row, col) 396 let a = split(execute(':tabs'), "\n") 397 call assert_equal(['Tab page 1', 398 \ '> Xfoo', 399 \ 'Tab page 2', 400 \ ' Xbar'], a, msg) 401 402 let col = 9 403 call MouseLeftClick(row, col) 404 call MouseLeftRelease(row, col) 405 let a = split(execute(':tabs'), "\n") 406 call assert_equal(['Tab page 1', 407 \ ' Xfoo', 408 \ 'Tab page 2', 409 \ '> Xbar'], a, msg) 410 411 %bwipe! 412 endfor 413 414 let &mouse = save_mouse 415 let &term = save_term 416 let &ttymouse = save_ttymouse 417 call test_override('no_query_mouse', 0) 418endfunc 419 420func Test_term_mouse_click_X_to_close_tab() 421 let save_mouse = &mouse 422 let save_term = &term 423 let save_ttymouse = &ttymouse 424 call test_override('no_query_mouse', 1) 425 set mouse=a term=xterm 426 let row = 1 427 let col = &columns 428 429 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 430 if ttymouse_val ==# 'xterm2' && col > 223 431 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 432 continue 433 endif 434 let msg = 'ttymouse=' .. ttymouse_val 435 exe 'set ttymouse=' .. ttymouse_val 436 e Xtab1 437 tabnew Xtab2 438 tabnew Xtab3 439 tabn 2 440 441 let a = split(execute(':tabs'), "\n") 442 call assert_equal(['Tab page 1', 443 \ ' Xtab1', 444 \ 'Tab page 2', 445 \ '> Xtab2', 446 \ 'Tab page 3', 447 \ ' Xtab3'], a, msg) 448 449 " Click on "X" in tabline to close current tab i.e. Xtab2. 450 redraw 451 call MouseLeftClick(row, col) 452 call MouseLeftRelease(row, col) 453 let a = split(execute(':tabs'), "\n") 454 call assert_equal(['Tab page 1', 455 \ ' Xtab1', 456 \ 'Tab page 2', 457 \ '> Xtab3'], a, msg) 458 459 %bwipe! 460 endfor 461 462 let &mouse = save_mouse 463 let &term = save_term 464 let &ttymouse = save_ttymouse 465 call test_override('no_query_mouse', 0) 466endfunc 467 468func Test_term_mouse_drag_to_move_tab() 469 let save_mouse = &mouse 470 let save_term = &term 471 let save_ttymouse = &ttymouse 472 call test_override('no_query_mouse', 1) 473 " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 474 set mouse=a term=xterm mousetime=1 475 let row = 1 476 477 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 478 let msg = 'ttymouse=' .. ttymouse_val 479 exe 'set ttymouse=' .. ttymouse_val 480 e Xtab1 481 tabnew Xtab2 482 483 let a = split(execute(':tabs'), "\n") 484 call assert_equal(['Tab page 1', 485 \ ' Xtab1', 486 \ 'Tab page 2', 487 \ '> Xtab2'], a, msg) 488 redraw 489 490 " Click in tab2 and drag it to tab1. 491 " Check getcharmod() to verify that click is not 492 " interpreted as a spurious double-click. 493 call MouseLeftClick(row, 10) 494 call assert_equal(0, getcharmod(), msg) 495 for col in [9, 8, 7, 6] 496 call MouseLeftDrag(row, col) 497 endfor 498 call MouseLeftRelease(row, col) 499 let a = split(execute(':tabs'), "\n") 500 call assert_equal(['Tab page 1', 501 \ '> Xtab2', 502 \ 'Tab page 2', 503 \ ' Xtab1'], a, msg) 504 505 " brief sleep to avoid causing a double-click 506 sleep 20m 507 %bwipe! 508 endfor 509 510 let &mouse = save_mouse 511 let &term = save_term 512 let &ttymouse = save_ttymouse 513 call test_override('no_query_mouse', 0) 514 set mousetime& 515endfunc 516 517func Test_term_mouse_double_click_to_create_tab() 518 let save_mouse = &mouse 519 let save_term = &term 520 let save_ttymouse = &ttymouse 521 call test_override('no_query_mouse', 1) 522 " Set 'mousetime' to a small value, so that double-click works but we don't 523 " have to wait long to avoid a triple-click. 524 set mouse=a term=xterm mousetime=100 525 let row = 1 526 let col = 10 527 528 let round = 0 529 for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 530 let msg = 'ttymouse=' .. ttymouse_val 531 exe 'set ttymouse=' .. ttymouse_val 532 e Xtab1 533 tabnew Xtab2 534 535 if round > 0 536 " We need to sleep, or else the first MouseLeftClick() will be 537 " interpreted as a spurious triple-click. 538 sleep 100m 539 endif 540 let round += 1 541 542 let a = split(execute(':tabs'), "\n") 543 call assert_equal(['Tab page 1', 544 \ ' Xtab1', 545 \ 'Tab page 2', 546 \ '> Xtab2'], a, msg) 547 548 redraw 549 call MouseLeftClick(row, col) 550 " Check getcharmod() to verify that first click is not 551 " interpreted as a spurious double-click. 552 call assert_equal(0, getcharmod(), msg) 553 call MouseLeftRelease(row, col) 554 call MouseLeftClick(row, col) 555 call assert_equal(32, getcharmod(), msg) " double-click 556 call MouseLeftRelease(row, col) 557 let a = split(execute(':tabs'), "\n") 558 call assert_equal(['Tab page 1', 559 \ ' Xtab1', 560 \ 'Tab page 2', 561 \ '> [No Name]', 562 \ 'Tab page 3', 563 \ ' Xtab2'], a, msg) 564 565 %bwipe! 566 endfor 567 568 let &mouse = save_mouse 569 let &term = save_term 570 let &ttymouse = save_ttymouse 571 call test_override('no_query_mouse', 0) 572 set mousetime& 573endfunc 574 575func Test_xterm_mouse_click_in_fold_columns() 576 new 577 let save_mouse = &mouse 578 let save_term = &term 579 let save_ttymouse = &ttymouse 580 let save_foldcolumn = &foldcolumn 581 set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 582 583 " Create 2 nested folds. 584 call setline(1, range(1, 7)) 585 2,6fold 586 norm! zR 587 4,5fold 588 call assert_equal([-1, -1, -1, 4, 4, -1, -1], 589 \ map(range(1, 7), 'foldclosed(v:val)')) 590 591 " Click in "+" of inner fold in foldcolumn should open it. 592 redraw 593 let row = 4 594 let col = 2 595 call MouseLeftClick(row, col) 596 call MouseLeftRelease(row, col) 597 call assert_equal([-1, -1, -1, -1, -1, -1, -1], 598 \ map(range(1, 7), 'foldclosed(v:val)')) 599 600 " Click in "-" of outer fold in foldcolumn should close it. 601 redraw 602 let row = 2 603 let col = 1 604 call MouseLeftClick(row, col) 605 call MouseLeftRelease(row, col) 606 call assert_equal([-1, 2, 2, 2, 2, 2, -1], 607 \ map(range(1, 7), 'foldclosed(v:val)')) 608 norm! zR 609 610 " Click in "|" of inner fold in foldcolumn should close it. 611 redraw 612 let row = 5 613 let col = 2 614 call MouseLeftClick(row, col) 615 call MouseLeftRelease(row, col) 616 call assert_equal([-1, -1, -1, 4, 4, -1, -1], 617 \ map(range(1, 7), 'foldclosed(v:val)')) 618 619 let &foldcolumn = save_foldcolumn 620 let &ttymouse = save_ttymouse 621 let &term = save_term 622 let &mouse = save_mouse 623 bwipe! 624endfunc 625 626" This only checks if the sequence is recognized. 627func Test_term_rgb_response() 628 set t_RF=x 629 set t_RB=y 630 631 " response to t_RF, 4 digits 632 let red = 0x12 633 let green = 0x34 634 let blue = 0x56 635 let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 636 call feedkeys(seq, 'Lx!') 637 call assert_equal(seq, v:termrfgresp) 638 639 " response to t_RF, 2 digits 640 let red = 0x78 641 let green = 0x9a 642 let blue = 0xbc 643 let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 644 call feedkeys(seq, 'Lx!') 645 call assert_equal(seq, v:termrfgresp) 646 647 " response to t_RB, 4 digits, dark 648 set background=light 649 eval 'background'->test_option_not_set() 650 let red = 0x29 651 let green = 0x4a 652 let blue = 0x6b 653 let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 654 call feedkeys(seq, 'Lx!') 655 call assert_equal(seq, v:termrbgresp) 656 call assert_equal('dark', &background) 657 658 " response to t_RB, 4 digits, light 659 set background=dark 660 call test_option_not_set('background') 661 let red = 0x81 662 let green = 0x63 663 let blue = 0x65 664 let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 665 call feedkeys(seq, 'Lx!') 666 call assert_equal(seq, v:termrbgresp) 667 call assert_equal('light', &background) 668 669 " response to t_RB, 2 digits, dark 670 set background=light 671 call test_option_not_set('background') 672 let red = 0x47 673 let green = 0x59 674 let blue = 0x5b 675 let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 676 call feedkeys(seq, 'Lx!') 677 call assert_equal(seq, v:termrbgresp) 678 call assert_equal('dark', &background) 679 680 " response to t_RB, 2 digits, light 681 set background=dark 682 call test_option_not_set('background') 683 let red = 0x83 684 let green = 0xa4 685 let blue = 0xc2 686 let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 687 call feedkeys(seq, 'Lx!') 688 call assert_equal(seq, v:termrbgresp) 689 call assert_equal('light', &background) 690 691 set t_RF= t_RB= 692endfunc 693 694" This only checks if the sequence is recognized. 695" This must be last, because it has side effects to xterm properties. 696" TODO: check that the values were parsed properly 697func Test_xx_term_style_response() 698 " Termresponse is only parsed when t_RV is not empty. 699 set t_RV=x 700 701 " send the termresponse to trigger requesting the XT codes 702 let seq = "\<Esc>[>41;337;0c" 703 call feedkeys(seq, 'Lx!') 704 call assert_equal(seq, v:termresponse) 705 706 let seq = "\<Esc>P1$r2 q\<Esc>\\" 707 call feedkeys(seq, 'Lx!') 708 call assert_equal(seq, v:termstyleresp) 709 710 set t_RV= 711endfunc 712 713func Test_get_termcode() 714 let k1 = &t_k1 715 set t_k1= 716 set t_k1& 717 call assert_equal(k1, &t_k1) 718 719 " use external termcap first 720 set nottybuiltin 721 set t_k1= 722 set t_k1& 723 " when using external termcap may get something else, but it must not be 724 " empty, since we would fallback to the builtin one. 725 call assert_notequal('', &t_k1) 726 727 if &term =~ 'xterm' 728 " use internal termcap first 729 let term_save = &term 730 let &term = 'builtin_' .. &term 731 set t_k1= 732 set t_k1& 733 call assert_equal(k1, &t_k1) 734 let &term = term_save 735 endif 736 737 set ttybuiltin 738endfunc 739