1905dd905SBram Moolenaar" Tests for decoding escape sequences sent by the terminal. 2905dd905SBram Moolenaar 3905dd905SBram Moolenaar" This only works for Unix in a terminal 48c5a278fSBram Moolenaarsource check.vim 58c5a278fSBram MoolenaarCheckNotGui 68c5a278fSBram MoolenaarCheckUnix 7905dd905SBram Moolenaar 8564344acSBram Moolenaarsource shared.vim 9564344acSBram Moolenaar 10d0621d85SBram Moolenaar" xterm2 and sgr always work, urxvt is optional. 1192fd599eSBram Moolenaarlet s:ttymouse_values = ['xterm2', 'sgr'] 12d0621d85SBram Moolenaarif has('mouse_urxvt') 1392fd599eSBram Moolenaar call add(s:ttymouse_values, 'urxvt') 1492fd599eSBram Moolenaarendif 1592fd599eSBram Moolenaar 1692fd599eSBram Moolenaar" dec doesn't support all the functionality 1792fd599eSBram Moolenaarif has('mouse_dec') 1892fd599eSBram Moolenaar let s:ttymouse_dec = ['dec'] 1992fd599eSBram Moolenaarelse 2092fd599eSBram Moolenaar let s:ttymouse_dec = [] 21d0621d85SBram Moolenaarendif 22d0621d85SBram Moolenaar 23d788543aSBram Moolenaar" netterm only supports left click 24d788543aSBram Moolenaarif has('mouse_netterm') 25d788543aSBram Moolenaar let s:ttymouse_netterm = ['netterm'] 26d788543aSBram Moolenaarelse 27d788543aSBram Moolenaar let s:ttymouse_netterm = [] 28d788543aSBram Moolenaarendif 29d788543aSBram Moolenaar 303fbd2d7cSBram Moolenaar" Helper function to emit a terminal escape code. 31d0621d85SBram Moolenaarfunc TerminalEscapeCode(code, row, col, m) 322b00b9b0SBram Moolenaar if &ttymouse ==# 'xterm2' 333fbd2d7cSBram Moolenaar " need to use byte encoding here. 34d0621d85SBram Moolenaar let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) 353fbd2d7cSBram Moolenaar if has('iconv') 36f9f24ce7SBram Moolenaar let bytes = str->iconv('utf-8', 'latin1') 373fbd2d7cSBram Moolenaar else 383fbd2d7cSBram Moolenaar " Hopefully the numbers are not too big. 393fbd2d7cSBram Moolenaar let bytes = str 403fbd2d7cSBram Moolenaar endif 413fbd2d7cSBram Moolenaar call feedkeys("\<Esc>[M" .. bytes, 'Lx!') 423fbd2d7cSBram Moolenaar elseif &ttymouse ==# 'sgr' 43d0621d85SBram Moolenaar call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m), 'Lx!') 44d0621d85SBram Moolenaar elseif &ttymouse ==# 'urxvt' 45d0621d85SBram Moolenaar call feedkeys(printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row), 'Lx!') 463fbd2d7cSBram Moolenaar endif 473fbd2d7cSBram Moolenaarendfunc 483fbd2d7cSBram Moolenaar 4992fd599eSBram Moolenaarfunc DecEscapeCode(code, down, row, col) 5092fd599eSBram Moolenaar call feedkeys(printf("\<Esc>[%d;%d;%d;%d&w", a:code, a:down, a:row, a:col), 'Lx!') 5192fd599eSBram Moolenaarendfunc 5292fd599eSBram Moolenaar 53d788543aSBram Moolenaarfunc NettermEscapeCode(row, col) 54d788543aSBram Moolenaar call feedkeys(printf("\<Esc>}%d,%d\r", a:row, a:col), 'Lx!') 55d788543aSBram Moolenaarendfunc 56d788543aSBram Moolenaar 573fbd2d7cSBram Moolenaarfunc MouseLeftClick(row, col) 5892fd599eSBram Moolenaar if &ttymouse ==# 'dec' 5992fd599eSBram Moolenaar call DecEscapeCode(2, 4, a:row, a:col) 60d788543aSBram Moolenaar elseif &ttymouse ==# 'netterm' 61d788543aSBram Moolenaar call NettermEscapeCode(a:row, a:col) 6292fd599eSBram Moolenaar else 63d0621d85SBram Moolenaar call TerminalEscapeCode(0, a:row, a:col, 'M') 6492fd599eSBram Moolenaar endif 653fbd2d7cSBram Moolenaarendfunc 663fbd2d7cSBram Moolenaar 67c1b8160bSBram Moolenaarfunc MouseMiddleClick(row, col) 6892fd599eSBram Moolenaar if &ttymouse ==# 'dec' 6992fd599eSBram Moolenaar call DecEscapeCode(4, 2, a:row, a:col) 7092fd599eSBram Moolenaar else 71d0621d85SBram Moolenaar call TerminalEscapeCode(1, a:row, a:col, 'M') 7292fd599eSBram Moolenaar endif 73c1b8160bSBram Moolenaarendfunc 74c1b8160bSBram Moolenaar 756aa7523bSBram Moolenaarfunc MouseRightClick(row, col) 766aa7523bSBram Moolenaar if &ttymouse ==# 'dec' 776aa7523bSBram Moolenaar call DecEscapeCode(6, 1, a:row, a:col) 786aa7523bSBram Moolenaar else 796aa7523bSBram Moolenaar call TerminalEscapeCode(2, a:row, a:col, 'M') 806aa7523bSBram Moolenaar endif 816aa7523bSBram Moolenaarendfunc 826aa7523bSBram Moolenaar 831ee36d6fSBram Moolenaarfunc MouseCtrlLeftClick(row, col) 841ee36d6fSBram Moolenaar let ctrl = 0x10 85d0621d85SBram Moolenaar call TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M') 861ee36d6fSBram Moolenaarendfunc 871ee36d6fSBram Moolenaar 881ee36d6fSBram Moolenaarfunc MouseCtrlRightClick(row, col) 891ee36d6fSBram Moolenaar let ctrl = 0x10 90d0621d85SBram Moolenaar call TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M') 911ee36d6fSBram Moolenaarendfunc 921ee36d6fSBram Moolenaar 933fbd2d7cSBram Moolenaarfunc MouseLeftRelease(row, col) 9492fd599eSBram Moolenaar if &ttymouse ==# 'dec' 9592fd599eSBram Moolenaar call DecEscapeCode(3, 0, a:row, a:col) 96d788543aSBram Moolenaar elseif &ttymouse ==# 'netterm' 97d788543aSBram Moolenaar " send nothing 9892fd599eSBram Moolenaar else 99d0621d85SBram Moolenaar call TerminalEscapeCode(3, a:row, a:col, 'm') 10092fd599eSBram Moolenaar endif 1013fbd2d7cSBram Moolenaarendfunc 1023fbd2d7cSBram Moolenaar 103c1b8160bSBram Moolenaarfunc MouseMiddleRelease(row, col) 10492fd599eSBram Moolenaar if &ttymouse ==# 'dec' 10592fd599eSBram Moolenaar call DecEscapeCode(5, 0, a:row, a:col) 10692fd599eSBram Moolenaar else 107d0621d85SBram Moolenaar call TerminalEscapeCode(3, a:row, a:col, 'm') 10892fd599eSBram Moolenaar endif 109c1b8160bSBram Moolenaarendfunc 110c1b8160bSBram Moolenaar 1111ee36d6fSBram Moolenaarfunc MouseRightRelease(row, col) 1126aa7523bSBram Moolenaar if &ttymouse ==# 'dec' 1136aa7523bSBram Moolenaar call DecEscapeCode(7, 0, a:row, a:col) 1146aa7523bSBram Moolenaar else 115d0621d85SBram Moolenaar call TerminalEscapeCode(3, a:row, a:col, 'm') 1166aa7523bSBram Moolenaar endif 1171ee36d6fSBram Moolenaarendfunc 1181ee36d6fSBram Moolenaar 1193fbd2d7cSBram Moolenaarfunc MouseLeftDrag(row, col) 12092fd599eSBram Moolenaar if &ttymouse ==# 'dec' 12192fd599eSBram Moolenaar call DecEscapeCode(1, 4, a:row, a:col) 12292fd599eSBram Moolenaar else 123d0621d85SBram Moolenaar call TerminalEscapeCode(0x20, a:row, a:col, 'M') 12492fd599eSBram Moolenaar endif 1253fbd2d7cSBram Moolenaarendfunc 1263fbd2d7cSBram Moolenaar 1273fbd2d7cSBram Moolenaarfunc MouseWheelUp(row, col) 128d0621d85SBram Moolenaar call TerminalEscapeCode(0x40, a:row, a:col, 'M') 1293fbd2d7cSBram Moolenaarendfunc 1303fbd2d7cSBram Moolenaar 1313fbd2d7cSBram Moolenaarfunc MouseWheelDown(row, col) 132d0621d85SBram Moolenaar call TerminalEscapeCode(0x41, a:row, a:col, 'M') 1333fbd2d7cSBram Moolenaarendfunc 1343fbd2d7cSBram Moolenaar 13592fd599eSBram Moolenaarfunc Test_term_mouse_left_click() 136905dd905SBram Moolenaar new 137905dd905SBram Moolenaar let save_mouse = &mouse 138905dd905SBram Moolenaar let save_term = &term 139905dd905SBram Moolenaar let save_ttymouse = &ttymouse 14092fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 1413fbd2d7cSBram Moolenaar set mouse=a term=xterm 142905dd905SBram Moolenaar call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 143905dd905SBram Moolenaar 144d788543aSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 1454945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1461ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1473fbd2d7cSBram Moolenaar go 1484945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 1493fbd2d7cSBram Moolenaar let row = 2 1503fbd2d7cSBram Moolenaar let col = 6 1513fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1523fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1534945219bSBram Moolenaar call assert_equal([0, 2, 6, 0], getpos('.'), msg) 1543fbd2d7cSBram Moolenaar endfor 155905dd905SBram Moolenaar 156905dd905SBram Moolenaar let &mouse = save_mouse 157905dd905SBram Moolenaar let &term = save_term 158905dd905SBram Moolenaar let &ttymouse = save_ttymouse 15992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 160905dd905SBram Moolenaar bwipe! 161905dd905SBram Moolenaarendfunc 162905dd905SBram Moolenaar 1636aa7523bSBram Moolenaarfunc Test_xterm_mouse_right_click_extends_visual() 1646aa7523bSBram Moolenaar if has('mac') 1656aa7523bSBram Moolenaar throw "Skipped: test right click in visual mode does not work on macOs (why?)" 1666aa7523bSBram Moolenaar endif 1676aa7523bSBram Moolenaar let save_mouse = &mouse 1686aa7523bSBram Moolenaar let save_term = &term 1696aa7523bSBram Moolenaar let save_ttymouse = &ttymouse 1706aa7523bSBram Moolenaar call test_override('no_query_mouse', 1) 1716aa7523bSBram Moolenaar set mouse=a term=xterm 1726aa7523bSBram Moolenaar 1736aa7523bSBram Moolenaar for visual_mode in ["v", "V", "\<C-V>"] 1746aa7523bSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 1756aa7523bSBram Moolenaar let msg = 'visual=' .. visual_mode .. ' ttymouse=' .. ttymouse_val 1766aa7523bSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1776aa7523bSBram Moolenaar 1786aa7523bSBram Moolenaar call setline(1, repeat([repeat('-', 7)], 7)) 1796aa7523bSBram Moolenaar call MouseLeftClick(4, 4) 1806aa7523bSBram Moolenaar call MouseLeftRelease(4, 4) 1816aa7523bSBram Moolenaar exe "norm! " .. visual_mode 1826aa7523bSBram Moolenaar 1836aa7523bSBram Moolenaar " Right click extends top left of visual area. 1846aa7523bSBram Moolenaar call MouseRightClick(2, 2) 1856aa7523bSBram Moolenaar call MouseRightRelease(2, 2) 1866aa7523bSBram Moolenaar 1876aa7523bSBram Moolenaar " Right click extends bottom bottom right of visual area. 1886aa7523bSBram Moolenaar call MouseRightClick(6, 6) 1896aa7523bSBram Moolenaar call MouseRightRelease(6, 6) 1906aa7523bSBram Moolenaar norm! r1gv 1916aa7523bSBram Moolenaar 1926aa7523bSBram Moolenaar " Right click shrinks top left of visual area. 1936aa7523bSBram Moolenaar call MouseRightClick(3, 3) 1946aa7523bSBram Moolenaar call MouseRightRelease(3, 3) 1956aa7523bSBram Moolenaar 1966aa7523bSBram Moolenaar " Right click shrinks bottom right of visual area. 1976aa7523bSBram Moolenaar call MouseRightClick(5, 5) 1986aa7523bSBram Moolenaar call MouseRightRelease(5, 5) 1996aa7523bSBram Moolenaar norm! r2 2006aa7523bSBram Moolenaar 2016aa7523bSBram Moolenaar if visual_mode ==# 'v' 2026aa7523bSBram Moolenaar call assert_equal(['-------', 2036aa7523bSBram Moolenaar \ '-111111', 2046aa7523bSBram Moolenaar \ '1122222', 2056aa7523bSBram Moolenaar \ '2222222', 2066aa7523bSBram Moolenaar \ '2222211', 2076aa7523bSBram Moolenaar \ '111111-', 2086aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 2096aa7523bSBram Moolenaar elseif visual_mode ==# 'V' 2106aa7523bSBram Moolenaar call assert_equal(['-------', 2116aa7523bSBram Moolenaar \ '1111111', 2126aa7523bSBram Moolenaar \ '2222222', 2136aa7523bSBram Moolenaar \ '2222222', 2146aa7523bSBram Moolenaar \ '2222222', 2156aa7523bSBram Moolenaar \ '1111111', 2166aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 2176aa7523bSBram Moolenaar else 2186aa7523bSBram Moolenaar call assert_equal(['-------', 2196aa7523bSBram Moolenaar \ '-11111-', 2206aa7523bSBram Moolenaar \ '-12221-', 2216aa7523bSBram Moolenaar \ '-12221-', 2226aa7523bSBram Moolenaar \ '-12221-', 2236aa7523bSBram Moolenaar \ '-11111-', 2246aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 2256aa7523bSBram Moolenaar endif 2266aa7523bSBram Moolenaar endfor 2276aa7523bSBram Moolenaar endfor 2286aa7523bSBram Moolenaar 2296aa7523bSBram Moolenaar let &mouse = save_mouse 2306aa7523bSBram Moolenaar let &term = save_term 2316aa7523bSBram Moolenaar let &ttymouse = save_ttymouse 2326aa7523bSBram Moolenaar call test_override('no_query_mouse', 0) 2336aa7523bSBram Moolenaar bwipe! 2346aa7523bSBram Moolenaarendfunc 2356aa7523bSBram Moolenaar 2361ee36d6fSBram Moolenaar" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 2371ee36d6fSBram Moolenaarfunc Test_xterm_mouse_ctrl_click() 2381ee36d6fSBram Moolenaar let save_mouse = &mouse 2391ee36d6fSBram Moolenaar let save_term = &term 2401ee36d6fSBram Moolenaar let save_ttymouse = &ttymouse 2411ee36d6fSBram Moolenaar set mouse=a term=xterm 2421ee36d6fSBram Moolenaar 24392fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values 2441ee36d6fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 2451ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 2461ee36d6fSBram Moolenaar help 2471ee36d6fSBram Moolenaar /usr_02.txt 2481ee36d6fSBram Moolenaar norm! zt 2491ee36d6fSBram Moolenaar let row = 1 2501ee36d6fSBram Moolenaar let col = 1 2511ee36d6fSBram Moolenaar call MouseCtrlLeftClick(row, col) 2521ee36d6fSBram Moolenaar call MouseLeftRelease(row, col) 2531ee36d6fSBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 254b4367b7fSBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 2551ee36d6fSBram Moolenaar 2561ee36d6fSBram Moolenaar call MouseCtrlRightClick(row, col) 25792fd599eSBram Moolenaar call MouseRightRelease(row, col) 2581ee36d6fSBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 259b4367b7fSBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) 2601ee36d6fSBram Moolenaar 2611ee36d6fSBram Moolenaar helpclose 2621ee36d6fSBram Moolenaar endfor 2631ee36d6fSBram Moolenaar 2641ee36d6fSBram Moolenaar let &mouse = save_mouse 2651ee36d6fSBram Moolenaar let &term = save_term 2661ee36d6fSBram Moolenaar let &ttymouse = save_ttymouse 2671ee36d6fSBram Moolenaarendfunc 2681ee36d6fSBram Moolenaar 26992fd599eSBram Moolenaarfunc Test_term_mouse_middle_click() 27052992feaSBram Moolenaar CheckFeature clipboard_working 271564344acSBram Moolenaar 272c1b8160bSBram Moolenaar new 273c1b8160bSBram Moolenaar let save_mouse = &mouse 274c1b8160bSBram Moolenaar let save_term = &term 275c1b8160bSBram Moolenaar let save_ttymouse = &ttymouse 27692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 277c1b8160bSBram Moolenaar let save_quotestar = @* 278c1b8160bSBram Moolenaar let @* = 'abc' 279c1b8160bSBram Moolenaar set mouse=a term=xterm 280c1b8160bSBram Moolenaar 28192fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 282c1b8160bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 2831ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 284c1b8160bSBram Moolenaar call setline(1, ['123456789', '123456789']) 285c1b8160bSBram Moolenaar 286c1b8160bSBram Moolenaar " Middle-click in the middle of the line pastes text where clicked. 287c1b8160bSBram Moolenaar let row = 1 288c1b8160bSBram Moolenaar let col = 6 289c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 290c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 291c1b8160bSBram Moolenaar call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 292c1b8160bSBram Moolenaar 293c1b8160bSBram Moolenaar " Middle-click beyond end of the line pastes text at the end of the line. 294c1b8160bSBram Moolenaar let col = 20 295c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 296c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 297c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 298c1b8160bSBram Moolenaar 299c1b8160bSBram Moolenaar " Middle-click beyond the last line pastes in the last line. 300c1b8160bSBram Moolenaar let row = 5 301c1b8160bSBram Moolenaar let col = 3 302c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 303c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 304c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 305c1b8160bSBram Moolenaar endfor 306c1b8160bSBram Moolenaar 307c1b8160bSBram Moolenaar let &mouse = save_mouse 308c1b8160bSBram Moolenaar let &term = save_term 309c1b8160bSBram Moolenaar let &ttymouse = save_ttymouse 31092fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 311c1b8160bSBram Moolenaar let @* = save_quotestar 312c1b8160bSBram Moolenaar bwipe! 313c1b8160bSBram Moolenaarendfunc 314c1b8160bSBram Moolenaar 31592fd599eSBram Moolenaar" TODO: for unclear reasons this test fails if it comes after 31692fd599eSBram Moolenaar" Test_xterm_mouse_ctrl_click() 31792fd599eSBram Moolenaarfunc Test_1xterm_mouse_wheel() 318049736faSBram Moolenaar new 319049736faSBram Moolenaar let save_mouse = &mouse 320049736faSBram Moolenaar let save_term = &term 321049736faSBram Moolenaar let save_ttymouse = &ttymouse 3223fbd2d7cSBram Moolenaar set mouse=a term=xterm 323049736faSBram Moolenaar call setline(1, range(1, 100)) 324049736faSBram Moolenaar 32592fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values 3264945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 3271ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 328049736faSBram Moolenaar go 3294945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 3304945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 3313fbd2d7cSBram Moolenaar 3323fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 3334945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 3344945219bSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.'), msg) 3353fbd2d7cSBram Moolenaar 3363fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 3374945219bSBram Moolenaar call assert_equal(7, line('w0'), msg) 3384945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 339049736faSBram Moolenaar 3403fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 3414945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 3424945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 3433fbd2d7cSBram Moolenaar 3443fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 3454945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 3464945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 3473fbd2d7cSBram Moolenaar endfor 348049736faSBram Moolenaar 349049736faSBram Moolenaar let &mouse = save_mouse 350049736faSBram Moolenaar let &term = save_term 351049736faSBram Moolenaar let &ttymouse = save_ttymouse 352049736faSBram Moolenaar bwipe! 353049736faSBram Moolenaarendfunc 3543fb01a53SBram Moolenaar 355b4367b7fSBram Moolenaar" Test that dragging beyond the window (at the bottom and at the top) 356b4367b7fSBram Moolenaar" scrolls window content by the number of of lines beyond the window. 357b4367b7fSBram Moolenaarfunc Test_term_mouse_drag_beyond_window() 358b4367b7fSBram Moolenaar let save_mouse = &mouse 359b4367b7fSBram Moolenaar let save_term = &term 360b4367b7fSBram Moolenaar let save_ttymouse = &ttymouse 361b4367b7fSBram Moolenaar call test_override('no_query_mouse', 1) 362b4367b7fSBram Moolenaar set mouse=a term=xterm 363b4367b7fSBram Moolenaar let col = 1 364b4367b7fSBram Moolenaar call setline(1, range(1, 100)) 365b4367b7fSBram Moolenaar 366b4367b7fSBram Moolenaar " Split into 3 windows, and go into the middle window 367b4367b7fSBram Moolenaar " so we test dragging mouse below and above the window. 368b4367b7fSBram Moolenaar 2split 369b4367b7fSBram Moolenaar wincmd j 370b4367b7fSBram Moolenaar 2split 371b4367b7fSBram Moolenaar 372b4367b7fSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 373b4367b7fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 374b4367b7fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 375b4367b7fSBram Moolenaar 376b4367b7fSBram Moolenaar " Line #10 at the top. 377b4367b7fSBram Moolenaar norm! 10zt 378b4367b7fSBram Moolenaar redraw 379b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 380b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 381b4367b7fSBram Moolenaar 382b4367b7fSBram Moolenaar let row = 4 383b4367b7fSBram Moolenaar call MouseLeftClick(row, col) 384b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 385b4367b7fSBram Moolenaar 386b4367b7fSBram Moolenaar " Drag downwards. We're still in the window so topline should 387b4367b7fSBram Moolenaar " not change yet. 388b4367b7fSBram Moolenaar let row += 1 389b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 390b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 391b4367b7fSBram Moolenaar 392b4367b7fSBram Moolenaar " We now leave the window at the bottom, so the window content should 393b4367b7fSBram Moolenaar " scroll by 1 line, then 2 lines (etc) as we drag further away. 394b4367b7fSBram Moolenaar let row += 1 395b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 396b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 397b4367b7fSBram Moolenaar 398b4367b7fSBram Moolenaar let row += 1 399b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 400b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 401b4367b7fSBram Moolenaar 402b4367b7fSBram Moolenaar " Now drag upwards. 403b4367b7fSBram Moolenaar let row -= 1 404b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 405b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 406b4367b7fSBram Moolenaar 407b4367b7fSBram Moolenaar " We're now back in the window so the topline should not change. 408b4367b7fSBram Moolenaar let row -= 1 409b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 410b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 411b4367b7fSBram Moolenaar 412b4367b7fSBram Moolenaar let row -= 1 413b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 414b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 415b4367b7fSBram Moolenaar 416b4367b7fSBram Moolenaar " We now leave the window at the top so the window content should 417b4367b7fSBram Moolenaar " scroll by 1 line, then 2, then 3 (etc) in the opposite direction. 418b4367b7fSBram Moolenaar let row -= 1 419b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 420b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 421b4367b7fSBram Moolenaar 422b4367b7fSBram Moolenaar let row -= 1 423b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 424b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 425b4367b7fSBram Moolenaar 426b4367b7fSBram Moolenaar let row -= 1 427b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 428b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 429b4367b7fSBram Moolenaar 430b4367b7fSBram Moolenaar call MouseLeftRelease(row, col) 431b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 432b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 433b4367b7fSBram Moolenaar endfor 434b4367b7fSBram Moolenaar 435b4367b7fSBram Moolenaar let &mouse = save_mouse 436b4367b7fSBram Moolenaar let &term = save_term 437b4367b7fSBram Moolenaar let &ttymouse = save_ttymouse 438b4367b7fSBram Moolenaar call test_override('no_query_mouse', 0) 439b4367b7fSBram Moolenaar bwipe! 440b4367b7fSBram Moolenaarendfunc 441b4367b7fSBram Moolenaar 44292fd599eSBram Moolenaarfunc Test_term_mouse_drag_window_separator() 4433fb01a53SBram Moolenaar let save_mouse = &mouse 4443fb01a53SBram Moolenaar let save_term = &term 4453fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 44692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 4473fbd2d7cSBram Moolenaar set mouse=a term=xterm 4483fbd2d7cSBram Moolenaar 44992fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 4504945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4511ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 4523fb01a53SBram Moolenaar 4533fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 4543fb01a53SBram Moolenaar split 4553fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 4563fb01a53SBram Moolenaar let row = rowseparator 4573fb01a53SBram Moolenaar let col = 1 458c8b3ddabSBram Moolenaar 4592b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 4602b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 4613fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 4623fb01a53SBram Moolenaar let row -= 1 4633fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 4644945219bSBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 4653fb01a53SBram Moolenaar let row += 1 4663fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 4674945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 4683fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 4694945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 47039f76c6aSBram Moolenaar endif 4713fb01a53SBram Moolenaar bwipe! 4723fb01a53SBram Moolenaar 4733fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 4743fb01a53SBram Moolenaar vsplit 4753fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 4763fb01a53SBram Moolenaar let row = 1 4773fb01a53SBram Moolenaar let col = colseparator 47839f76c6aSBram Moolenaar 4792b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 4802b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || col <= 223 4813fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 4823fb01a53SBram Moolenaar let col -= 1 4833fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 4844945219bSBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 4853fb01a53SBram Moolenaar let col += 1 4863fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 4874945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 4883fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 4894945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 49039f76c6aSBram Moolenaar endif 4913fb01a53SBram Moolenaar bwipe! 4923fbd2d7cSBram Moolenaar endfor 4933fbd2d7cSBram Moolenaar 4943fbd2d7cSBram Moolenaar let &mouse = save_mouse 4953fbd2d7cSBram Moolenaar let &term = save_term 4963fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 49792fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 4983fbd2d7cSBram Moolenaarendfunc 4993fbd2d7cSBram Moolenaar 50092fd599eSBram Moolenaarfunc Test_term_mouse_drag_statusline() 5013fbd2d7cSBram Moolenaar let save_mouse = &mouse 5023fbd2d7cSBram Moolenaar let save_term = &term 5033fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 50492fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 505ca57ab54SBram Moolenaar let save_laststatus = &laststatus 506ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 5073fbd2d7cSBram Moolenaar 50892fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 5094945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5101ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 5113fbd2d7cSBram Moolenaar 5124945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 5133fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 5143fbd2d7cSBram Moolenaar let row = rowstatusline 5153fbd2d7cSBram Moolenaar let col = 1 516c8b3ddabSBram Moolenaar 5172b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && row > 223 5182b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 519c8b3ddabSBram Moolenaar continue 520c8b3ddabSBram Moolenaar endif 521c8b3ddabSBram Moolenaar 5223fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5233fbd2d7cSBram Moolenaar let row -= 1 5243fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5254945219bSBram Moolenaar call assert_equal(2, &cmdheight, msg) 5264945219bSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 5273fbd2d7cSBram Moolenaar let row += 1 5283fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5294945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 5304945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 5313fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5324945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 5334945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 5343fbd2d7cSBram Moolenaar endfor 5353fbd2d7cSBram Moolenaar 5363fb01a53SBram Moolenaar let &mouse = save_mouse 5373fb01a53SBram Moolenaar let &term = save_term 5383fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 53992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 540ca57ab54SBram Moolenaar let &laststatus = save_laststatus 541ca57ab54SBram Moolenaarendfunc 542ca57ab54SBram Moolenaar 54392fd599eSBram Moolenaarfunc Test_term_mouse_click_tab() 544ca57ab54SBram Moolenaar let save_mouse = &mouse 545ca57ab54SBram Moolenaar let save_term = &term 546ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 54792fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 548ca57ab54SBram Moolenaar set mouse=a term=xterm 549ca57ab54SBram Moolenaar let row = 1 550ca57ab54SBram Moolenaar 551d788543aSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 5524945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5531ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 554ca57ab54SBram Moolenaar e Xfoo 555ca57ab54SBram Moolenaar tabnew Xbar 556ca57ab54SBram Moolenaar 557ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 558ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 559ca57ab54SBram Moolenaar \ ' Xfoo', 560ca57ab54SBram Moolenaar \ 'Tab page 2', 5614945219bSBram Moolenaar \ '> Xbar'], a, msg) 562ca57ab54SBram Moolenaar 563ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 564ca57ab54SBram Moolenaar let col = 2 56539f76c6aSBram Moolenaar redraw 566ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 567ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 568ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 569ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 570ca57ab54SBram Moolenaar \ '> Xfoo', 571ca57ab54SBram Moolenaar \ 'Tab page 2', 5724945219bSBram Moolenaar \ ' Xbar'], a, msg) 573ca57ab54SBram Moolenaar 574ca57ab54SBram Moolenaar let col = 9 575ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 576ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 577ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 578ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 579ca57ab54SBram Moolenaar \ ' Xfoo', 580ca57ab54SBram Moolenaar \ 'Tab page 2', 5814945219bSBram Moolenaar \ '> Xbar'], a, msg) 582ca57ab54SBram Moolenaar 583ca57ab54SBram Moolenaar %bwipe! 584ca57ab54SBram Moolenaar endfor 585ca57ab54SBram Moolenaar 586ca57ab54SBram Moolenaar let &mouse = save_mouse 587ca57ab54SBram Moolenaar let &term = save_term 588ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 58992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 5903fb01a53SBram Moolenaarendfunc 59139f76c6aSBram Moolenaar 59292fd599eSBram Moolenaarfunc Test_term_mouse_click_X_to_close_tab() 59339f76c6aSBram Moolenaar let save_mouse = &mouse 59439f76c6aSBram Moolenaar let save_term = &term 59539f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 59692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 59739f76c6aSBram Moolenaar set mouse=a term=xterm 59839f76c6aSBram Moolenaar let row = 1 59939f76c6aSBram Moolenaar let col = &columns 60039f76c6aSBram Moolenaar 601d788543aSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec + s:ttymouse_netterm 6022b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && col > 223 6032b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 60439f76c6aSBram Moolenaar continue 60539f76c6aSBram Moolenaar endif 6064945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6071ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 60839f76c6aSBram Moolenaar e Xtab1 60939f76c6aSBram Moolenaar tabnew Xtab2 61039f76c6aSBram Moolenaar tabnew Xtab3 61139f76c6aSBram Moolenaar tabn 2 61239f76c6aSBram Moolenaar 61339f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 61439f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 61539f76c6aSBram Moolenaar \ ' Xtab1', 61639f76c6aSBram Moolenaar \ 'Tab page 2', 61739f76c6aSBram Moolenaar \ '> Xtab2', 61839f76c6aSBram Moolenaar \ 'Tab page 3', 6194945219bSBram Moolenaar \ ' Xtab3'], a, msg) 62039f76c6aSBram Moolenaar 62139f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 62239f76c6aSBram Moolenaar redraw 62339f76c6aSBram Moolenaar call MouseLeftClick(row, col) 62439f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 62539f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 62639f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 62739f76c6aSBram Moolenaar \ ' Xtab1', 62839f76c6aSBram Moolenaar \ 'Tab page 2', 6294945219bSBram Moolenaar \ '> Xtab3'], a, msg) 63039f76c6aSBram Moolenaar 63139f76c6aSBram Moolenaar %bwipe! 63239f76c6aSBram Moolenaar endfor 63339f76c6aSBram Moolenaar 63439f76c6aSBram Moolenaar let &mouse = save_mouse 63539f76c6aSBram Moolenaar let &term = save_term 63639f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 63792fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 63839f76c6aSBram Moolenaarendfunc 639e3e3828fSBram Moolenaar 64092fd599eSBram Moolenaarfunc Test_term_mouse_drag_to_move_tab() 641e3e3828fSBram Moolenaar let save_mouse = &mouse 642e3e3828fSBram Moolenaar let save_term = &term 643e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 64492fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 645e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 646e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 647e3e3828fSBram Moolenaar let row = 1 648e3e3828fSBram Moolenaar 64992fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 6504945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6511ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 652e3e3828fSBram Moolenaar e Xtab1 653e3e3828fSBram Moolenaar tabnew Xtab2 654e3e3828fSBram Moolenaar 655e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 656e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 657e3e3828fSBram Moolenaar \ ' Xtab1', 658e3e3828fSBram Moolenaar \ 'Tab page 2', 6594945219bSBram Moolenaar \ '> Xtab2'], a, msg) 660e3e3828fSBram Moolenaar redraw 661e3e3828fSBram Moolenaar 662e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 663e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 664e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 665e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 6664945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 667e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 668e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 669e3e3828fSBram Moolenaar endfor 670e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 671e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 672e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 673e3e3828fSBram Moolenaar \ '> Xtab2', 674e3e3828fSBram Moolenaar \ 'Tab page 2', 6754945219bSBram Moolenaar \ ' Xtab1'], a, msg) 676e3e3828fSBram Moolenaar 677f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 678f36a2c7eSBram Moolenaar " interpreted as unwanted double-click. 679f36a2c7eSBram Moolenaar call MouseLeftClick(row, 11) 680f36a2c7eSBram Moolenaar call MouseLeftRelease(row, 11) 681f36a2c7eSBram Moolenaar 682e3e3828fSBram Moolenaar %bwipe! 683e3e3828fSBram Moolenaar endfor 684e3e3828fSBram Moolenaar 685e3e3828fSBram Moolenaar let &mouse = save_mouse 686e3e3828fSBram Moolenaar let &term = save_term 687e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 68892fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 689e3e3828fSBram Moolenaar set mousetime& 690e3e3828fSBram Moolenaarendfunc 691e3e3828fSBram Moolenaar 69292fd599eSBram Moolenaarfunc Test_term_mouse_double_click_to_create_tab() 693e3e3828fSBram Moolenaar let save_mouse = &mouse 694e3e3828fSBram Moolenaar let save_term = &term 695e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 69692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 697e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 698e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 699f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 700e3e3828fSBram Moolenaar let row = 1 701e3e3828fSBram Moolenaar let col = 10 702e3e3828fSBram Moolenaar 70392fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 7044945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7051ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 706e3e3828fSBram Moolenaar e Xtab1 707e3e3828fSBram Moolenaar tabnew Xtab2 708e3e3828fSBram Moolenaar 709e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 710e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 711e3e3828fSBram Moolenaar \ ' Xtab1', 712e3e3828fSBram Moolenaar \ 'Tab page 2', 7134945219bSBram Moolenaar \ '> Xtab2'], a, msg) 714e3e3828fSBram Moolenaar 715e3e3828fSBram Moolenaar redraw 716e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 717e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 718e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 7194945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 720e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 721e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 7224945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 723e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 724e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 725e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 726e3e3828fSBram Moolenaar \ ' Xtab1', 727e3e3828fSBram Moolenaar \ 'Tab page 2', 728e3e3828fSBram Moolenaar \ '> [No Name]', 729e3e3828fSBram Moolenaar \ 'Tab page 3', 7304945219bSBram Moolenaar \ ' Xtab2'], a, msg) 731e3e3828fSBram Moolenaar 732f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 733f36a2c7eSBram Moolenaar " interpreted as unwanted double click. 734f36a2c7eSBram Moolenaar call MouseLeftClick(row, col + 1) 735f36a2c7eSBram Moolenaar call MouseLeftRelease(row, col + 1) 736f36a2c7eSBram Moolenaar 737e3e3828fSBram Moolenaar %bwipe! 738e3e3828fSBram Moolenaar endfor 739e3e3828fSBram Moolenaar 740e3e3828fSBram Moolenaar let &mouse = save_mouse 741e3e3828fSBram Moolenaar let &term = save_term 742e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 74392fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 744e3e3828fSBram Moolenaar set mousetime& 745e3e3828fSBram Moolenaarendfunc 746696d6377SBram Moolenaar 747f36a2c7eSBram Moolenaar" Test double/triple/quadruple click in normal mode to visually select. 748f36a2c7eSBram Moolenaarfunc Test_term_mouse_multiple_clicks_to_visually_select() 749f36a2c7eSBram Moolenaar let save_mouse = &mouse 750f36a2c7eSBram Moolenaar let save_term = &term 751f36a2c7eSBram Moolenaar let save_ttymouse = &ttymouse 752f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 1) 753f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 754f36a2c7eSBram Moolenaar new 755f36a2c7eSBram Moolenaar 756f36a2c7eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 757f36a2c7eSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 758f36a2c7eSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 759f36a2c7eSBram Moolenaar call setline(1, ['foo [foo bar] foo', 'foo']) 760f36a2c7eSBram Moolenaar 761f36a2c7eSBram Moolenaar " Double-click on word should visually select the word. 762f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 763f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 764f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 765f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 766f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 767f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 768f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 769f36a2c7eSBram Moolenaar norm! r1 770f36a2c7eSBram Moolenaar call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg) 771f36a2c7eSBram Moolenaar 772f36a2c7eSBram Moolenaar " Double-click on opening square bracket should visually 773f36a2c7eSBram Moolenaar " select the whole [foo bar]. 774f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 775f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 776f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 777f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 778f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 779f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 780f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 781f36a2c7eSBram Moolenaar norm! r2 782f36a2c7eSBram Moolenaar call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg) 783f36a2c7eSBram Moolenaar 784f36a2c7eSBram Moolenaar " Triple-click should visually select the whole line. 785f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 786f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 787f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 788f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 789f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 790f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 791f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 792f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 793f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 794f36a2c7eSBram Moolenaar call assert_equal('V', mode(), msg) 795f36a2c7eSBram Moolenaar norm! r3 796f36a2c7eSBram Moolenaar call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg) 797f36a2c7eSBram Moolenaar 798f36a2c7eSBram Moolenaar " Quadruple-click should start visual block select. 799f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 800f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 801f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 802f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 803f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 804f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 805f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 806f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 807f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 808f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 809f36a2c7eSBram Moolenaar call assert_equal(96, getcharmod(), msg) " quadruple-click 810f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 811f36a2c7eSBram Moolenaar call assert_equal("\<c-v>", mode(), msg) 812f36a2c7eSBram Moolenaar norm! r4 813f36a2c7eSBram Moolenaar call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg) 814f36a2c7eSBram Moolenaar endfor 815f36a2c7eSBram Moolenaar 816f36a2c7eSBram Moolenaar let &mouse = save_mouse 817f36a2c7eSBram Moolenaar let &term = save_term 818f36a2c7eSBram Moolenaar let &ttymouse = save_ttymouse 819f36a2c7eSBram Moolenaar set mousetime& 820f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 0) 821f36a2c7eSBram Moolenaar bwipe! 822f36a2c7eSBram Moolenaarendfunc 823f36a2c7eSBram Moolenaar 824696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 825696d6377SBram Moolenaar new 826696d6377SBram Moolenaar let save_mouse = &mouse 827696d6377SBram Moolenaar let save_term = &term 828696d6377SBram Moolenaar let save_ttymouse = &ttymouse 829696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 8302b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 831696d6377SBram Moolenaar 832696d6377SBram Moolenaar " Create 2 nested folds. 833696d6377SBram Moolenaar call setline(1, range(1, 7)) 834696d6377SBram Moolenaar 2,6fold 835696d6377SBram Moolenaar norm! zR 836696d6377SBram Moolenaar 4,5fold 837696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 838696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 839696d6377SBram Moolenaar 840696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 841696d6377SBram Moolenaar redraw 842696d6377SBram Moolenaar let row = 4 843696d6377SBram Moolenaar let col = 2 844696d6377SBram Moolenaar call MouseLeftClick(row, col) 845696d6377SBram Moolenaar call MouseLeftRelease(row, col) 846696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 847696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 848696d6377SBram Moolenaar 849696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 850696d6377SBram Moolenaar redraw 851696d6377SBram Moolenaar let row = 2 852696d6377SBram Moolenaar let col = 1 853696d6377SBram Moolenaar call MouseLeftClick(row, col) 854696d6377SBram Moolenaar call MouseLeftRelease(row, col) 855696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 856696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 857696d6377SBram Moolenaar norm! zR 858696d6377SBram Moolenaar 859696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 860696d6377SBram Moolenaar redraw 861696d6377SBram Moolenaar let row = 5 862696d6377SBram Moolenaar let col = 2 863696d6377SBram Moolenaar call MouseLeftClick(row, col) 864696d6377SBram Moolenaar call MouseLeftRelease(row, col) 865696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 866696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 867696d6377SBram Moolenaar 868696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 869696d6377SBram Moolenaar let &ttymouse = save_ttymouse 870696d6377SBram Moolenaar let &term = save_term 871696d6377SBram Moolenaar let &mouse = save_mouse 872696d6377SBram Moolenaar bwipe! 873696d6377SBram Moolenaarendfunc 87466761db1SBram Moolenaar 87566761db1SBram Moolenaar" This only checks if the sequence is recognized. 87666761db1SBram Moolenaarfunc Test_term_rgb_response() 87766761db1SBram Moolenaar set t_RF=x 87866761db1SBram Moolenaar set t_RB=y 87966761db1SBram Moolenaar 88066761db1SBram Moolenaar " response to t_RF, 4 digits 88166761db1SBram Moolenaar let red = 0x12 88266761db1SBram Moolenaar let green = 0x34 88366761db1SBram Moolenaar let blue = 0x56 88466761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 88566761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 88666761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 88766761db1SBram Moolenaar 88866761db1SBram Moolenaar " response to t_RF, 2 digits 88966761db1SBram Moolenaar let red = 0x78 89066761db1SBram Moolenaar let green = 0x9a 89166761db1SBram Moolenaar let blue = 0xbc 89266761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 89366761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 89466761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 89566761db1SBram Moolenaar 89632e19770SBram Moolenaar " response to t_RB, 4 digits, dark 89732e19770SBram Moolenaar set background=light 898ce90e36fSBram Moolenaar eval 'background'->test_option_not_set() 89932e19770SBram Moolenaar let red = 0x29 90032e19770SBram Moolenaar let green = 0x4a 90132e19770SBram Moolenaar let blue = 0x6b 90232e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 90332e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 90432e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 90532e19770SBram Moolenaar call assert_equal('dark', &background) 90632e19770SBram Moolenaar 90732e19770SBram Moolenaar " response to t_RB, 4 digits, light 90832e19770SBram Moolenaar set background=dark 90932e19770SBram Moolenaar call test_option_not_set('background') 91032e19770SBram Moolenaar let red = 0x81 91132e19770SBram Moolenaar let green = 0x63 91266761db1SBram Moolenaar let blue = 0x65 91366761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 91466761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 91566761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 91632e19770SBram Moolenaar call assert_equal('light', &background) 91766761db1SBram Moolenaar 91832e19770SBram Moolenaar " response to t_RB, 2 digits, dark 91932e19770SBram Moolenaar set background=light 92032e19770SBram Moolenaar call test_option_not_set('background') 92132e19770SBram Moolenaar let red = 0x47 92232e19770SBram Moolenaar let green = 0x59 92332e19770SBram Moolenaar let blue = 0x5b 92466761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 92566761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 92666761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 92732e19770SBram Moolenaar call assert_equal('dark', &background) 92832e19770SBram Moolenaar 92932e19770SBram Moolenaar " response to t_RB, 2 digits, light 93032e19770SBram Moolenaar set background=dark 93132e19770SBram Moolenaar call test_option_not_set('background') 93232e19770SBram Moolenaar let red = 0x83 93332e19770SBram Moolenaar let green = 0xa4 93432e19770SBram Moolenaar let blue = 0xc2 93532e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 93632e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 93732e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 93832e19770SBram Moolenaar call assert_equal('light', &background) 93966761db1SBram Moolenaar 94066761db1SBram Moolenaar set t_RF= t_RB= 94166761db1SBram Moolenaarendfunc 94266761db1SBram Moolenaar 94366761db1SBram Moolenaar" This only checks if the sequence is recognized. 9441a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 9451a4cbb19SBram Moolenaar" properties. 9461a4cbb19SBram Moolenaarfunc Test_xx01_term_style_response() 94766761db1SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 94866761db1SBram Moolenaar set t_RV=x 94966761db1SBram Moolenaar 95066761db1SBram Moolenaar " send the termresponse to trigger requesting the XT codes 95166761db1SBram Moolenaar let seq = "\<Esc>[>41;337;0c" 95266761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 95366761db1SBram Moolenaar call assert_equal(seq, v:termresponse) 95466761db1SBram Moolenaar 95566761db1SBram Moolenaar let seq = "\<Esc>P1$r2 q\<Esc>\\" 95666761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 95766761db1SBram Moolenaar call assert_equal(seq, v:termstyleresp) 95866761db1SBram Moolenaar 95966761db1SBram Moolenaar set t_RV= 96066761db1SBram Moolenaarendfunc 961de6dbb45SBram Moolenaar 96289577b3bSBram Moolenaar" This checks the iTerm2 version response. 96389577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 96489577b3bSBram Moolenaar" properties. 96589577b3bSBram Moolenaarfunc Test_xx02_iTerm2_response() 96689577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 96789577b3bSBram Moolenaar set t_RV=x 96889577b3bSBram Moolenaar 96989577b3bSBram Moolenaar " Old versions of iTerm2 used a different style term response. 97089577b3bSBram Moolenaar set ttymouse=xterm 97189577b3bSBram Moolenaar call test_option_not_set('ttymouse') 97289577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;c" 97389577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 97489577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 97589577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 97689577b3bSBram Moolenaar 97789577b3bSBram Moolenaar set ttymouse=xterm 97889577b3bSBram Moolenaar call test_option_not_set('ttymouse') 97989577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;0c" 98089577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 98189577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 98289577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 98389577b3bSBram Moolenaar 98489577b3bSBram Moolenaar set t_RV= 98589577b3bSBram Moolenaarendfunc 98689577b3bSBram Moolenaar 9871a4cbb19SBram Moolenaar" This checks the libvterm version response. 9881a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 9891a4cbb19SBram Moolenaar" properties. 99089577b3bSBram Moolenaarfunc Test_xx03_libvterm_response() 9911a4cbb19SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 9921a4cbb19SBram Moolenaar set t_RV=x 99303b00476SBram Moolenaar 9941a4cbb19SBram Moolenaar set ttymouse=xterm 9951a4cbb19SBram Moolenaar call test_option_not_set('ttymouse') 9961a4cbb19SBram Moolenaar let seq = "\<Esc>[>0;100;0c" 9971a4cbb19SBram Moolenaar call feedkeys(seq, 'Lx!') 9981a4cbb19SBram Moolenaar call assert_equal(seq, v:termresponse) 9991a4cbb19SBram Moolenaar call assert_equal('sgr', &ttymouse) 10001a4cbb19SBram Moolenaar 10011a4cbb19SBram Moolenaar set t_RV= 10021a4cbb19SBram Moolenaarendfunc 10031a4cbb19SBram Moolenaar 100489577b3bSBram Moolenaar" This checks the Mac Terminal.app version response. 100589577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 100689577b3bSBram Moolenaar" properties. 100789577b3bSBram Moolenaarfunc Test_xx04_Mac_Terminal_response() 100889577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 100989577b3bSBram Moolenaar set t_RV=x 101089577b3bSBram Moolenaar 101189577b3bSBram Moolenaar set ttymouse=xterm 101289577b3bSBram Moolenaar call test_option_not_set('ttymouse') 101389577b3bSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 101489577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 101589577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 101689577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 101789577b3bSBram Moolenaar 101889577b3bSBram Moolenaar " Reset is_not_xterm and is_mac_terminal. 101989577b3bSBram Moolenaar set t_RV= 102089577b3bSBram Moolenaar set term=xterm 102189577b3bSBram Moolenaar set t_RV=x 102289577b3bSBram Moolenaarendfunc 102389577b3bSBram Moolenaar 102489577b3bSBram Moolenaar" This checks the mintty version response. 102589577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 102689577b3bSBram Moolenaar" properties. 102789577b3bSBram Moolenaarfunc Test_xx05_mintty_response() 102889577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 102989577b3bSBram Moolenaar set t_RV=x 103089577b3bSBram Moolenaar 103189577b3bSBram Moolenaar set ttymouse=xterm 103289577b3bSBram Moolenaar call test_option_not_set('ttymouse') 103389577b3bSBram Moolenaar let seq = "\<Esc>[>77;20905;0c" 103489577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 103589577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 103689577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 103789577b3bSBram Moolenaar 103889577b3bSBram Moolenaar set t_RV= 103989577b3bSBram Moolenaarendfunc 104089577b3bSBram Moolenaar 104189577b3bSBram Moolenaar" This checks the screen version response. 104289577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 104389577b3bSBram Moolenaar" properties. 104489577b3bSBram Moolenaarfunc Test_xx06_screen_response() 104589577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 104689577b3bSBram Moolenaar set t_RV=x 104789577b3bSBram Moolenaar 104889577b3bSBram Moolenaar " Old versions of screen don't support SGR mouse mode. 104989577b3bSBram Moolenaar set ttymouse=xterm 105089577b3bSBram Moolenaar call test_option_not_set('ttymouse') 105189577b3bSBram Moolenaar let seq = "\<Esc>[>83;40500;0c" 105289577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 105389577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 105489577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 105589577b3bSBram Moolenaar 105689577b3bSBram Moolenaar " screen supports SGR mouse mode starting in version 4.7. 105789577b3bSBram Moolenaar set ttymouse=xterm 105889577b3bSBram Moolenaar call test_option_not_set('ttymouse') 105989577b3bSBram Moolenaar let seq = "\<Esc>[>83;40700;0c" 106089577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 106189577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 106289577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 106389577b3bSBram Moolenaar 106489577b3bSBram Moolenaar set t_RV= 106589577b3bSBram Moolenaarendfunc 106689577b3bSBram Moolenaar 106703b00476SBram Moolenaar" This checks the xterm version response. 106803b00476SBram Moolenaar" This must be after other tests, because it has side effects to xterm 106903b00476SBram Moolenaar" properties. 107089577b3bSBram Moolenaarfunc Test_xx07_xterm_response() 107103b00476SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 107203b00476SBram Moolenaar set t_RV=x 107303b00476SBram Moolenaar 10743cea8a9aSBram Moolenaar " Do Terminal.app first to check that is_mac_terminal is reset. 10753cea8a9aSBram Moolenaar set ttymouse=xterm 10763cea8a9aSBram Moolenaar call test_option_not_set('ttymouse') 10773cea8a9aSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 10783cea8a9aSBram Moolenaar call feedkeys(seq, 'Lx!') 10793cea8a9aSBram Moolenaar call assert_equal(seq, v:termresponse) 10803cea8a9aSBram Moolenaar call assert_equal('sgr', &ttymouse) 10813cea8a9aSBram Moolenaar 108203b00476SBram Moolenaar " xterm < 95: "xterm" (actually unmodified) 10833cea8a9aSBram Moolenaar set t_RV= 10843cea8a9aSBram Moolenaar set term=xterm 10853cea8a9aSBram Moolenaar set t_RV=x 108603b00476SBram Moolenaar set ttymouse=xterm 108703b00476SBram Moolenaar call test_option_not_set('ttymouse') 108803b00476SBram Moolenaar let seq = "\<Esc>[>0;94;0c" 108903b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 109003b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 109103b00476SBram Moolenaar call assert_equal('xterm', &ttymouse) 109203b00476SBram Moolenaar 109303b00476SBram Moolenaar " xterm >= 95 < 277 "xterm2" 109403b00476SBram Moolenaar set ttymouse=xterm 109503b00476SBram Moolenaar call test_option_not_set('ttymouse') 109603b00476SBram Moolenaar let seq = "\<Esc>[>0;267;0c" 109703b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 109803b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 109903b00476SBram Moolenaar call assert_equal('xterm2', &ttymouse) 110003b00476SBram Moolenaar 110103b00476SBram Moolenaar " xterm >= 277: "sgr" 110203b00476SBram Moolenaar set ttymouse=xterm 110303b00476SBram Moolenaar call test_option_not_set('ttymouse') 110403b00476SBram Moolenaar let seq = "\<Esc>[>0;277;0c" 110503b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 110603b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 110703b00476SBram Moolenaar call assert_equal('sgr', &ttymouse) 110803b00476SBram Moolenaar 110903b00476SBram Moolenaar set t_RV= 111003b00476SBram Moolenaarendfunc 111103b00476SBram Moolenaar 1112de6dbb45SBram Moolenaarfunc Test_get_termcode() 1113eb66328bSBram Moolenaar try 1114de6dbb45SBram Moolenaar let k1 = &t_k1 1115eb66328bSBram Moolenaar catch /E113/ 1116eb66328bSBram Moolenaar throw 'Skipped: Unable to query termcodes' 1117eb66328bSBram Moolenaar endtry 1118de6dbb45SBram Moolenaar set t_k1= 1119de6dbb45SBram Moolenaar set t_k1& 1120de6dbb45SBram Moolenaar call assert_equal(k1, &t_k1) 11219aeb3363SBram Moolenaar 11229aeb3363SBram Moolenaar " use external termcap first 11239aeb3363SBram Moolenaar set nottybuiltin 11249aeb3363SBram Moolenaar set t_k1= 11259aeb3363SBram Moolenaar set t_k1& 11269aeb3363SBram Moolenaar " when using external termcap may get something else, but it must not be 11279aeb3363SBram Moolenaar " empty, since we would fallback to the builtin one. 11289aeb3363SBram Moolenaar call assert_notequal('', &t_k1) 11299aeb3363SBram Moolenaar 11309aeb3363SBram Moolenaar if &term =~ 'xterm' 11319aeb3363SBram Moolenaar " use internal termcap first 11329aeb3363SBram Moolenaar let term_save = &term 11339aeb3363SBram Moolenaar let &term = 'builtin_' .. &term 11349aeb3363SBram Moolenaar set t_k1= 11359aeb3363SBram Moolenaar set t_k1& 11369aeb3363SBram Moolenaar call assert_equal(k1, &t_k1) 11379aeb3363SBram Moolenaar let &term = term_save 11389aeb3363SBram Moolenaar endif 11399aeb3363SBram Moolenaar 11409aeb3363SBram Moolenaar set ttybuiltin 1141de6dbb45SBram Moolenaarendfunc 114218a79a68SBram Moolenaar 114318a79a68SBram Moolenaarfunc GetEscCodeCSI27(key, modifier) 114418a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 114518a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 114618a79a68SBram Moolenaar return "\<Esc>[27;" .. mod .. ';' .. key .. '~' 114718a79a68SBram Moolenaarendfunc 114818a79a68SBram Moolenaar 114918a79a68SBram Moolenaarfunc GetEscCodeCSIu(key, modifier) 115018a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 115118a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 115218a79a68SBram Moolenaar return "\<Esc>[" .. key .. ';' .. mod .. 'u' 115318a79a68SBram Moolenaarendfunc 115418a79a68SBram Moolenaar 115518a79a68SBram Moolenaar" This checks the CSI sequences when in modifyOtherKeys mode. 115618a79a68SBram Moolenaar" The mode doesn't need to be enabled, the codes are always detected. 115718a79a68SBram Moolenaarfunc RunTest_modifyOtherKeys(func) 115818a79a68SBram Moolenaar new 1159459fd785SBram Moolenaar set timeoutlen=10 116018a79a68SBram Moolenaar 116118a79a68SBram Moolenaar " Shift-X is send as 'X' with the shift modifier 116218a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 2) .. "\<Esc>", 'Lx!') 116318a79a68SBram Moolenaar call assert_equal('X', getline(1)) 116418a79a68SBram Moolenaar 116518a79a68SBram Moolenaar " Ctrl-i is Tab 116618a79a68SBram Moolenaar call setline(1, '') 116718a79a68SBram Moolenaar call feedkeys('a' .. a:func('i', 5) .. "\<Esc>", 'Lx!') 116818a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 116918a79a68SBram Moolenaar 117018a79a68SBram Moolenaar " Ctrl-I is also Tab 117118a79a68SBram Moolenaar call setline(1, '') 117218a79a68SBram Moolenaar call feedkeys('a' .. a:func('I', 5) .. "\<Esc>", 'Lx!') 117318a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 117418a79a68SBram Moolenaar 117518a79a68SBram Moolenaar " Alt-x is ø 117618a79a68SBram Moolenaar call setline(1, '') 117718a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 3) .. "\<Esc>", 'Lx!') 117818a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 117918a79a68SBram Moolenaar 118018a79a68SBram Moolenaar " Meta-x is also ø 118118a79a68SBram Moolenaar call setline(1, '') 118218a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 9) .. "\<Esc>", 'Lx!') 118318a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 118418a79a68SBram Moolenaar 118518a79a68SBram Moolenaar " Alt-X is Ø 118618a79a68SBram Moolenaar call setline(1, '') 118718a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 3) .. "\<Esc>", 'Lx!') 118818a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 118918a79a68SBram Moolenaar 119018a79a68SBram Moolenaar " Meta-X is ø 119118a79a68SBram Moolenaar call setline(1, '') 119218a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 9) .. "\<Esc>", 'Lx!') 119318a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 119418a79a68SBram Moolenaar 1195828ffd59SBram Moolenaar " Ctrl-6 is Ctrl-^ 1196828ffd59SBram Moolenaar split aaa 1197828ffd59SBram Moolenaar edit bbb 1198828ffd59SBram Moolenaar call feedkeys(a:func('6', 5), 'Lx!') 1199828ffd59SBram Moolenaar call assert_equal("aaa", bufname()) 1200828ffd59SBram Moolenaar bwipe aaa 1201828ffd59SBram Moolenaar bwipe bbb 1202828ffd59SBram Moolenaar 120318a79a68SBram Moolenaar bwipe! 120418a79a68SBram Moolenaar set timeoutlen& 120518a79a68SBram Moolenaarendfunc 120618a79a68SBram Moolenaar 1207459fd785SBram Moolenaarfunc Test_modifyOtherKeys_basic() 120818a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSI27')) 120918a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSIu')) 121018a79a68SBram Moolenaarendfunc 1211d1e2f398SBram Moolenaar 121238571a04SBram Moolenaarfunc Test_modifyOtherKeys_no_mapping() 121338571a04SBram Moolenaar set timeoutlen=10 121438571a04SBram Moolenaar 121538571a04SBram Moolenaar let @a = 'aaa' 121638571a04SBram Moolenaar call feedkeys(":let x = '" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a'\<CR>", 'Lx!') 121738571a04SBram Moolenaar call assert_equal("let x = 'aaa'", @:) 121838571a04SBram Moolenaar 121938571a04SBram Moolenaar new 122038571a04SBram Moolenaar call feedkeys("a" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a\<Esc>", 'Lx!') 122138571a04SBram Moolenaar call assert_equal("aaa", getline(1)) 122238571a04SBram Moolenaar bwipe! 122338571a04SBram Moolenaar 122438571a04SBram Moolenaar new 122538571a04SBram Moolenaar call feedkeys("axx\<CR>yy" .. GetEscCodeCSI27('G', 5) .. GetEscCodeCSI27('K', 5) .. "a\<Esc>", 'Lx!') 122638571a04SBram Moolenaar call assert_equal("axx", getline(1)) 122738571a04SBram Moolenaar call assert_equal("yy", getline(2)) 122838571a04SBram Moolenaar bwipe! 122938571a04SBram Moolenaar 123038571a04SBram Moolenaar set timeoutlen& 123138571a04SBram Moolenaarendfunc 123238571a04SBram Moolenaar 1233d1e2f398SBram Moolenaarfunc RunTest_mapping_shift(key, func) 1234d1e2f398SBram Moolenaar call setline(1, '') 1235d1e2f398SBram Moolenaar if a:key == '|' 1236d1e2f398SBram Moolenaar exe 'inoremap \| xyz' 1237d1e2f398SBram Moolenaar else 1238d1e2f398SBram Moolenaar exe 'inoremap ' .. a:key .. ' xyz' 1239d1e2f398SBram Moolenaar endif 1240d1e2f398SBram Moolenaar call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!') 1241d1e2f398SBram Moolenaar call assert_equal("xyz", getline(1)) 1242d1e2f398SBram Moolenaar if a:key == '|' 1243d1e2f398SBram Moolenaar exe 'iunmap \|' 1244d1e2f398SBram Moolenaar else 1245d1e2f398SBram Moolenaar exe 'iunmap ' .. a:key 1246d1e2f398SBram Moolenaar endif 1247d1e2f398SBram Moolenaarendfunc 1248d1e2f398SBram Moolenaar 1249d1e2f398SBram Moolenaarfunc RunTest_mapping_works_with_shift(func) 1250d1e2f398SBram Moolenaar new 1251459fd785SBram Moolenaar set timeoutlen=10 1252d1e2f398SBram Moolenaar 1253d1e2f398SBram Moolenaar call RunTest_mapping_shift('@', a:func) 1254d1e2f398SBram Moolenaar call RunTest_mapping_shift('A', a:func) 1255d1e2f398SBram Moolenaar call RunTest_mapping_shift('Z', a:func) 1256d1e2f398SBram Moolenaar call RunTest_mapping_shift('^', a:func) 1257d1e2f398SBram Moolenaar call RunTest_mapping_shift('_', a:func) 1258d1e2f398SBram Moolenaar call RunTest_mapping_shift('{', a:func) 1259d1e2f398SBram Moolenaar call RunTest_mapping_shift('|', a:func) 1260d1e2f398SBram Moolenaar call RunTest_mapping_shift('}', a:func) 1261d1e2f398SBram Moolenaar call RunTest_mapping_shift('~', a:func) 1262d1e2f398SBram Moolenaar 1263d1e2f398SBram Moolenaar bwipe! 1264d1e2f398SBram Moolenaar set timeoutlen& 1265d1e2f398SBram Moolenaarendfunc 1266d1e2f398SBram Moolenaar 1267459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_plain() 1268d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27')) 1269d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu')) 1270d1e2f398SBram Moolenaarendfunc 1271459fd785SBram Moolenaar 1272459fd785SBram Moolenaarfunc RunTest_mapping_mods(map, key, func, code) 1273459fd785SBram Moolenaar call setline(1, '') 1274459fd785SBram Moolenaar exe 'inoremap ' .. a:map .. ' xyz' 1275459fd785SBram Moolenaar call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!') 1276459fd785SBram Moolenaar call assert_equal("xyz", getline(1)) 1277459fd785SBram Moolenaar exe 'iunmap ' .. a:map 1278459fd785SBram Moolenaarendfunc 1279459fd785SBram Moolenaar 1280459fd785SBram Moolenaarfunc RunTest_mapping_works_with_mods(func, mods, code) 1281459fd785SBram Moolenaar new 1282459fd785SBram Moolenaar set timeoutlen=10 1283459fd785SBram Moolenaar 1284459fd785SBram Moolenaar if a:mods !~ 'S' 1285459fd785SBram Moolenaar " Shift by itself has no effect 1286459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-@>', '@', a:func, a:code) 1287459fd785SBram Moolenaar endif 1288459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-A>', 'A', a:func, a:code) 1289459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-Z>', 'Z', a:func, a:code) 1290459fd785SBram Moolenaar if a:mods !~ 'S' 1291459fd785SBram Moolenaar " with Shift code is always upper case 1292459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'a', a:func, a:code) 1293459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'z', a:func, a:code) 1294459fd785SBram Moolenaar endif 1295459fd785SBram Moolenaar if a:mods != 'A' 1296459fd785SBram Moolenaar " with Alt code is not in upper case 1297459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'A', a:func, a:code) 1298459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'Z', a:func, a:code) 1299459fd785SBram Moolenaar endif 1300459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-á>', 'á', a:func, a:code) 1301459fd785SBram Moolenaar if a:mods !~ 'S' 1302459fd785SBram Moolenaar " Shift by itself has no effect 1303459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-^>', '^', a:func, a:code) 1304459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-_>', '_', a:func, a:code) 1305459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-{>', '{', a:func, a:code) 1306459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-\|>', '|', a:func, a:code) 1307459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-}>', '}', a:func, a:code) 1308459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-~>', '~', a:func, a:code) 1309459fd785SBram Moolenaar endif 1310459fd785SBram Moolenaar 1311459fd785SBram Moolenaar bwipe! 1312459fd785SBram Moolenaar set timeoutlen& 1313459fd785SBram Moolenaarendfunc 1314459fd785SBram Moolenaar 1315459fd785SBram Moolenaarfunc Test_mapping_works_with_shift() 1316459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S', 2) 1317459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S', 2) 1318459fd785SBram Moolenaarendfunc 1319459fd785SBram Moolenaar 1320459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl() 1321459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C', 5) 1322459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C', 5) 1323459fd785SBram Moolenaarendfunc 1324459fd785SBram Moolenaar 1325459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl() 1326459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S', 6) 1327459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S', 6) 1328459fd785SBram Moolenaarendfunc 1329459fd785SBram Moolenaar 1330459fd785SBram Moolenaar" Below we also test the "u" code with Alt, This works, but libvterm would not 1331459fd785SBram Moolenaar" send the Alt key like this but by prefixing an Esc. 1332459fd785SBram Moolenaar 1333459fd785SBram Moolenaarfunc Test_mapping_works_with_alt() 1334459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'A', 3) 1335459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'A', 3) 1336459fd785SBram Moolenaarendfunc 1337459fd785SBram Moolenaar 1338459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_alt() 1339459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S-A', 4) 1340459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S-A', 4) 1341459fd785SBram Moolenaarendfunc 1342459fd785SBram Moolenaar 1343459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl_alt() 1344459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-A', 7) 1345459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-A', 7) 1346459fd785SBram Moolenaarendfunc 1347459fd785SBram Moolenaar 1348459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl_alt() 1349459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S-A', 8) 1350459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S-A', 8) 1351459fd785SBram Moolenaarendfunc 1352*fc4ea2a7SBram Moolenaar 1353*fc4ea2a7SBram Moolenaarfunc Test_insert_literal() 1354*fc4ea2a7SBram Moolenaar set timeoutlen=10 1355*fc4ea2a7SBram Moolenaar new 1356*fc4ea2a7SBram Moolenaar " CTRL-V CTRL-X inserts a ^X 1357*fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 1358*fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 1359*fc4ea2a7SBram Moolenaar 1360*fc4ea2a7SBram Moolenaar call setline(1, '') 1361*fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 1362*fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 1363*fc4ea2a7SBram Moolenaar 1364*fc4ea2a7SBram Moolenaar " CTRL-SHIFT-V CTRL-X inserts escape sequencd 1365*fc4ea2a7SBram Moolenaar call setline(1, '') 1366*fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 1367*fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[88;5u", getline(1)) 1368*fc4ea2a7SBram Moolenaar 1369*fc4ea2a7SBram Moolenaar call setline(1, '') 1370*fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 1371*fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[27;5;88~", getline(1)) 1372*fc4ea2a7SBram Moolenaar 1373*fc4ea2a7SBram Moolenaar bwipe! 1374*fc4ea2a7SBram Moolenaar set timeoutlen& 1375*fc4ea2a7SBram Moolenaarendfunc 1376*fc4ea2a7SBram Moolenaar 1377*fc4ea2a7SBram Moolenaarfunc Test_cmdline_literal() 1378*fc4ea2a7SBram Moolenaar set timeoutlen=10 1379*fc4ea2a7SBram Moolenaar 1380*fc4ea2a7SBram Moolenaar " CTRL-V CTRL-Y inserts a ^Y 1381*fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1382*fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 1383*fc4ea2a7SBram Moolenaar 1384*fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1385*fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 1386*fc4ea2a7SBram Moolenaar 1387*fc4ea2a7SBram Moolenaar " CTRL-SHIFT-V CTRL-Y inserts escape sequencd 1388*fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1389*fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[89;5u", @:) 1390*fc4ea2a7SBram Moolenaar 1391*fc4ea2a7SBram Moolenaar call setline(1, '') 1392*fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1393*fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[27;5;89~", @:) 1394*fc4ea2a7SBram Moolenaar 1395*fc4ea2a7SBram Moolenaar set timeoutlen& 1396*fc4ea2a7SBram Moolenaarendfunc 1397