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