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 6777f279765SBram Moolenaar " brief sleep to avoid causing a double-click 6787f279765SBram Moolenaar sleep 20m 679e3e3828fSBram Moolenaar %bwipe! 680e3e3828fSBram Moolenaar endfor 681e3e3828fSBram Moolenaar 682e3e3828fSBram Moolenaar let &mouse = save_mouse 683e3e3828fSBram Moolenaar let &term = save_term 684e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 68592fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 686e3e3828fSBram Moolenaar set mousetime& 687e3e3828fSBram Moolenaarendfunc 688e3e3828fSBram Moolenaar 68992fd599eSBram Moolenaarfunc Test_term_mouse_double_click_to_create_tab() 690e3e3828fSBram Moolenaar let save_mouse = &mouse 691e3e3828fSBram Moolenaar let save_term = &term 692e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 69392fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 694e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 695e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 696e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=100 697e3e3828fSBram Moolenaar let row = 1 698e3e3828fSBram Moolenaar let col = 10 699e3e3828fSBram Moolenaar 700d0621d85SBram Moolenaar let round = 0 70192fd599eSBram Moolenaar for ttymouse_val in s:ttymouse_values + s:ttymouse_dec 7024945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7031ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 704e3e3828fSBram Moolenaar e Xtab1 705e3e3828fSBram Moolenaar tabnew Xtab2 706e3e3828fSBram Moolenaar 707d0621d85SBram Moolenaar if round > 0 708d0621d85SBram Moolenaar " We need to sleep, or else the first MouseLeftClick() will be 709d0621d85SBram Moolenaar " interpreted as a spurious triple-click. 710d0621d85SBram Moolenaar sleep 100m 711d0621d85SBram Moolenaar endif 712d0621d85SBram Moolenaar let round += 1 713d0621d85SBram Moolenaar 714e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 715e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 716e3e3828fSBram Moolenaar \ ' Xtab1', 717e3e3828fSBram Moolenaar \ 'Tab page 2', 7184945219bSBram Moolenaar \ '> Xtab2'], a, msg) 719e3e3828fSBram Moolenaar 720e3e3828fSBram Moolenaar redraw 721e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 722e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 723e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 7244945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 725e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 726e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 7274945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 728e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 729e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 730e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 731e3e3828fSBram Moolenaar \ ' Xtab1', 732e3e3828fSBram Moolenaar \ 'Tab page 2', 733e3e3828fSBram Moolenaar \ '> [No Name]', 734e3e3828fSBram Moolenaar \ 'Tab page 3', 7354945219bSBram Moolenaar \ ' Xtab2'], a, msg) 736e3e3828fSBram 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 747696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 748696d6377SBram Moolenaar new 749696d6377SBram Moolenaar let save_mouse = &mouse 750696d6377SBram Moolenaar let save_term = &term 751696d6377SBram Moolenaar let save_ttymouse = &ttymouse 752696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 7532b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 754696d6377SBram Moolenaar 755696d6377SBram Moolenaar " Create 2 nested folds. 756696d6377SBram Moolenaar call setline(1, range(1, 7)) 757696d6377SBram Moolenaar 2,6fold 758696d6377SBram Moolenaar norm! zR 759696d6377SBram Moolenaar 4,5fold 760696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 761696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 762696d6377SBram Moolenaar 763696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 764696d6377SBram Moolenaar redraw 765696d6377SBram Moolenaar let row = 4 766696d6377SBram Moolenaar let col = 2 767696d6377SBram Moolenaar call MouseLeftClick(row, col) 768696d6377SBram Moolenaar call MouseLeftRelease(row, col) 769696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 770696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 771696d6377SBram Moolenaar 772696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 773696d6377SBram Moolenaar redraw 774696d6377SBram Moolenaar let row = 2 775696d6377SBram Moolenaar let col = 1 776696d6377SBram Moolenaar call MouseLeftClick(row, col) 777696d6377SBram Moolenaar call MouseLeftRelease(row, col) 778696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 779696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 780696d6377SBram Moolenaar norm! zR 781696d6377SBram Moolenaar 782696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 783696d6377SBram Moolenaar redraw 784696d6377SBram Moolenaar let row = 5 785696d6377SBram Moolenaar let col = 2 786696d6377SBram Moolenaar call MouseLeftClick(row, col) 787696d6377SBram Moolenaar call MouseLeftRelease(row, col) 788696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 789696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 790696d6377SBram Moolenaar 791696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 792696d6377SBram Moolenaar let &ttymouse = save_ttymouse 793696d6377SBram Moolenaar let &term = save_term 794696d6377SBram Moolenaar let &mouse = save_mouse 795696d6377SBram Moolenaar bwipe! 796696d6377SBram Moolenaarendfunc 79766761db1SBram Moolenaar 79866761db1SBram Moolenaar" This only checks if the sequence is recognized. 79966761db1SBram Moolenaarfunc Test_term_rgb_response() 80066761db1SBram Moolenaar set t_RF=x 80166761db1SBram Moolenaar set t_RB=y 80266761db1SBram Moolenaar 80366761db1SBram Moolenaar " response to t_RF, 4 digits 80466761db1SBram Moolenaar let red = 0x12 80566761db1SBram Moolenaar let green = 0x34 80666761db1SBram Moolenaar let blue = 0x56 80766761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 80866761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 80966761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 81066761db1SBram Moolenaar 81166761db1SBram Moolenaar " response to t_RF, 2 digits 81266761db1SBram Moolenaar let red = 0x78 81366761db1SBram Moolenaar let green = 0x9a 81466761db1SBram Moolenaar let blue = 0xbc 81566761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 81666761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 81766761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 81866761db1SBram Moolenaar 81932e19770SBram Moolenaar " response to t_RB, 4 digits, dark 82032e19770SBram Moolenaar set background=light 821ce90e36fSBram Moolenaar eval 'background'->test_option_not_set() 82232e19770SBram Moolenaar let red = 0x29 82332e19770SBram Moolenaar let green = 0x4a 82432e19770SBram Moolenaar let blue = 0x6b 82532e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 82632e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 82732e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 82832e19770SBram Moolenaar call assert_equal('dark', &background) 82932e19770SBram Moolenaar 83032e19770SBram Moolenaar " response to t_RB, 4 digits, light 83132e19770SBram Moolenaar set background=dark 83232e19770SBram Moolenaar call test_option_not_set('background') 83332e19770SBram Moolenaar let red = 0x81 83432e19770SBram Moolenaar let green = 0x63 83566761db1SBram Moolenaar let blue = 0x65 83666761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 83766761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 83866761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 83932e19770SBram Moolenaar call assert_equal('light', &background) 84066761db1SBram Moolenaar 84132e19770SBram Moolenaar " response to t_RB, 2 digits, dark 84232e19770SBram Moolenaar set background=light 84332e19770SBram Moolenaar call test_option_not_set('background') 84432e19770SBram Moolenaar let red = 0x47 84532e19770SBram Moolenaar let green = 0x59 84632e19770SBram Moolenaar let blue = 0x5b 84766761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 84866761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 84966761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 85032e19770SBram Moolenaar call assert_equal('dark', &background) 85132e19770SBram Moolenaar 85232e19770SBram Moolenaar " response to t_RB, 2 digits, light 85332e19770SBram Moolenaar set background=dark 85432e19770SBram Moolenaar call test_option_not_set('background') 85532e19770SBram Moolenaar let red = 0x83 85632e19770SBram Moolenaar let green = 0xa4 85732e19770SBram Moolenaar let blue = 0xc2 85832e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 85932e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 86032e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 86132e19770SBram Moolenaar call assert_equal('light', &background) 86266761db1SBram Moolenaar 86366761db1SBram Moolenaar set t_RF= t_RB= 86466761db1SBram Moolenaarendfunc 86566761db1SBram Moolenaar 86666761db1SBram Moolenaar" This only checks if the sequence is recognized. 8671a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 8681a4cbb19SBram Moolenaar" properties. 8691a4cbb19SBram Moolenaarfunc Test_xx01_term_style_response() 87066761db1SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 87166761db1SBram Moolenaar set t_RV=x 87266761db1SBram Moolenaar 87366761db1SBram Moolenaar " send the termresponse to trigger requesting the XT codes 87466761db1SBram Moolenaar let seq = "\<Esc>[>41;337;0c" 87566761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 87666761db1SBram Moolenaar call assert_equal(seq, v:termresponse) 87766761db1SBram Moolenaar 87866761db1SBram Moolenaar let seq = "\<Esc>P1$r2 q\<Esc>\\" 87966761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 88066761db1SBram Moolenaar call assert_equal(seq, v:termstyleresp) 88166761db1SBram Moolenaar 88266761db1SBram Moolenaar set t_RV= 88366761db1SBram Moolenaarendfunc 884de6dbb45SBram Moolenaar 8851a4cbb19SBram Moolenaar" This checks the libvterm version response. 8861a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 8871a4cbb19SBram Moolenaar" properties. 8881a4cbb19SBram Moolenaarfunc Test_xx02_libvterm_response() 8891a4cbb19SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 8901a4cbb19SBram Moolenaar set t_RV=x 89103b00476SBram Moolenaar 8921a4cbb19SBram Moolenaar set ttymouse=xterm 8931a4cbb19SBram Moolenaar call test_option_not_set('ttymouse') 8941a4cbb19SBram Moolenaar let seq = "\<Esc>[>0;100;0c" 8951a4cbb19SBram Moolenaar call feedkeys(seq, 'Lx!') 8961a4cbb19SBram Moolenaar call assert_equal(seq, v:termresponse) 8971a4cbb19SBram Moolenaar call assert_equal('sgr', &ttymouse) 8981a4cbb19SBram Moolenaar 8991a4cbb19SBram Moolenaar set t_RV= 9001a4cbb19SBram Moolenaarendfunc 9011a4cbb19SBram Moolenaar 90203b00476SBram Moolenaar" This checks the xterm version response. 90303b00476SBram Moolenaar" This must be after other tests, because it has side effects to xterm 90403b00476SBram Moolenaar" properties. 90503b00476SBram Moolenaarfunc Test_xx03_xterm_response() 90603b00476SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 90703b00476SBram Moolenaar set t_RV=x 90803b00476SBram Moolenaar 909*3cea8a9aSBram Moolenaar " Do Terminal.app first to check that is_mac_terminal is reset. 910*3cea8a9aSBram Moolenaar set ttymouse=xterm 911*3cea8a9aSBram Moolenaar call test_option_not_set('ttymouse') 912*3cea8a9aSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 913*3cea8a9aSBram Moolenaar call feedkeys(seq, 'Lx!') 914*3cea8a9aSBram Moolenaar call assert_equal(seq, v:termresponse) 915*3cea8a9aSBram Moolenaar call assert_equal('sgr', &ttymouse) 916*3cea8a9aSBram Moolenaar 91703b00476SBram Moolenaar " xterm < 95: "xterm" (actually unmodified) 918*3cea8a9aSBram Moolenaar set t_RV= 919*3cea8a9aSBram Moolenaar set term=xterm 920*3cea8a9aSBram Moolenaar set t_RV=x 92103b00476SBram Moolenaar set ttymouse=xterm 92203b00476SBram Moolenaar call test_option_not_set('ttymouse') 92303b00476SBram Moolenaar let seq = "\<Esc>[>0;94;0c" 92403b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 92503b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 92603b00476SBram Moolenaar call assert_equal('xterm', &ttymouse) 92703b00476SBram Moolenaar 92803b00476SBram Moolenaar " xterm >= 95 < 277 "xterm2" 92903b00476SBram Moolenaar set ttymouse=xterm 93003b00476SBram Moolenaar call test_option_not_set('ttymouse') 93103b00476SBram Moolenaar let seq = "\<Esc>[>0;267;0c" 93203b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 93303b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 93403b00476SBram Moolenaar call assert_equal('xterm2', &ttymouse) 93503b00476SBram Moolenaar 93603b00476SBram Moolenaar " xterm >= 277: "sgr" 93703b00476SBram Moolenaar set ttymouse=xterm 93803b00476SBram Moolenaar call test_option_not_set('ttymouse') 93903b00476SBram Moolenaar let seq = "\<Esc>[>0;277;0c" 94003b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 94103b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 94203b00476SBram Moolenaar call assert_equal('sgr', &ttymouse) 94303b00476SBram Moolenaar 94403b00476SBram Moolenaar set t_RV= 94503b00476SBram Moolenaarendfunc 94603b00476SBram Moolenaar 94703b00476SBram Moolenaar" TODO: check other terminals response 94803b00476SBram Moolenaar 949de6dbb45SBram Moolenaarfunc Test_get_termcode() 950eb66328bSBram Moolenaar try 951de6dbb45SBram Moolenaar let k1 = &t_k1 952eb66328bSBram Moolenaar catch /E113/ 953eb66328bSBram Moolenaar throw 'Skipped: Unable to query termcodes' 954eb66328bSBram Moolenaar endtry 955de6dbb45SBram Moolenaar set t_k1= 956de6dbb45SBram Moolenaar set t_k1& 957de6dbb45SBram Moolenaar call assert_equal(k1, &t_k1) 9589aeb3363SBram Moolenaar 9599aeb3363SBram Moolenaar " use external termcap first 9609aeb3363SBram Moolenaar set nottybuiltin 9619aeb3363SBram Moolenaar set t_k1= 9629aeb3363SBram Moolenaar set t_k1& 9639aeb3363SBram Moolenaar " when using external termcap may get something else, but it must not be 9649aeb3363SBram Moolenaar " empty, since we would fallback to the builtin one. 9659aeb3363SBram Moolenaar call assert_notequal('', &t_k1) 9669aeb3363SBram Moolenaar 9679aeb3363SBram Moolenaar if &term =~ 'xterm' 9689aeb3363SBram Moolenaar " use internal termcap first 9699aeb3363SBram Moolenaar let term_save = &term 9709aeb3363SBram Moolenaar let &term = 'builtin_' .. &term 9719aeb3363SBram Moolenaar set t_k1= 9729aeb3363SBram Moolenaar set t_k1& 9739aeb3363SBram Moolenaar call assert_equal(k1, &t_k1) 9749aeb3363SBram Moolenaar let &term = term_save 9759aeb3363SBram Moolenaar endif 9769aeb3363SBram Moolenaar 9779aeb3363SBram Moolenaar set ttybuiltin 978de6dbb45SBram Moolenaarendfunc 97918a79a68SBram Moolenaar 98018a79a68SBram Moolenaarfunc GetEscCodeCSI27(key, modifier) 98118a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 98218a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 98318a79a68SBram Moolenaar return "\<Esc>[27;" .. mod .. ';' .. key .. '~' 98418a79a68SBram Moolenaarendfunc 98518a79a68SBram Moolenaar 98618a79a68SBram Moolenaarfunc GetEscCodeCSIu(key, modifier) 98718a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 98818a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 98918a79a68SBram Moolenaar return "\<Esc>[" .. key .. ';' .. mod .. 'u' 99018a79a68SBram Moolenaarendfunc 99118a79a68SBram Moolenaar 99218a79a68SBram Moolenaar" This checks the CSI sequences when in modifyOtherKeys mode. 99318a79a68SBram Moolenaar" The mode doesn't need to be enabled, the codes are always detected. 99418a79a68SBram Moolenaarfunc RunTest_modifyOtherKeys(func) 99518a79a68SBram Moolenaar new 996459fd785SBram Moolenaar set timeoutlen=10 99718a79a68SBram Moolenaar 99818a79a68SBram Moolenaar " Shift-X is send as 'X' with the shift modifier 99918a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 2) .. "\<Esc>", 'Lx!') 100018a79a68SBram Moolenaar call assert_equal('X', getline(1)) 100118a79a68SBram Moolenaar 100218a79a68SBram Moolenaar " Ctrl-i is Tab 100318a79a68SBram Moolenaar call setline(1, '') 100418a79a68SBram Moolenaar call feedkeys('a' .. a:func('i', 5) .. "\<Esc>", 'Lx!') 100518a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 100618a79a68SBram Moolenaar 100718a79a68SBram Moolenaar " Ctrl-I is also Tab 100818a79a68SBram Moolenaar call setline(1, '') 100918a79a68SBram Moolenaar call feedkeys('a' .. a:func('I', 5) .. "\<Esc>", 'Lx!') 101018a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 101118a79a68SBram Moolenaar 101218a79a68SBram Moolenaar " Alt-x is ø 101318a79a68SBram Moolenaar call setline(1, '') 101418a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 3) .. "\<Esc>", 'Lx!') 101518a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 101618a79a68SBram Moolenaar 101718a79a68SBram Moolenaar " Meta-x is also ø 101818a79a68SBram Moolenaar call setline(1, '') 101918a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 9) .. "\<Esc>", 'Lx!') 102018a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 102118a79a68SBram Moolenaar 102218a79a68SBram Moolenaar " Alt-X is Ø 102318a79a68SBram Moolenaar call setline(1, '') 102418a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 3) .. "\<Esc>", 'Lx!') 102518a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 102618a79a68SBram Moolenaar 102718a79a68SBram Moolenaar " Meta-X is ø 102818a79a68SBram Moolenaar call setline(1, '') 102918a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 9) .. "\<Esc>", 'Lx!') 103018a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 103118a79a68SBram Moolenaar 103218a79a68SBram Moolenaar bwipe! 103318a79a68SBram Moolenaar set timeoutlen& 103418a79a68SBram Moolenaarendfunc 103518a79a68SBram Moolenaar 1036459fd785SBram Moolenaarfunc Test_modifyOtherKeys_basic() 103718a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSI27')) 103818a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSIu')) 103918a79a68SBram Moolenaarendfunc 1040d1e2f398SBram Moolenaar 1041d1e2f398SBram Moolenaarfunc RunTest_mapping_shift(key, func) 1042d1e2f398SBram Moolenaar call setline(1, '') 1043d1e2f398SBram Moolenaar if a:key == '|' 1044d1e2f398SBram Moolenaar exe 'inoremap \| xyz' 1045d1e2f398SBram Moolenaar else 1046d1e2f398SBram Moolenaar exe 'inoremap ' .. a:key .. ' xyz' 1047d1e2f398SBram Moolenaar endif 1048d1e2f398SBram Moolenaar call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!') 1049d1e2f398SBram Moolenaar call assert_equal("xyz", getline(1)) 1050d1e2f398SBram Moolenaar if a:key == '|' 1051d1e2f398SBram Moolenaar exe 'iunmap \|' 1052d1e2f398SBram Moolenaar else 1053d1e2f398SBram Moolenaar exe 'iunmap ' .. a:key 1054d1e2f398SBram Moolenaar endif 1055d1e2f398SBram Moolenaarendfunc 1056d1e2f398SBram Moolenaar 1057d1e2f398SBram Moolenaarfunc RunTest_mapping_works_with_shift(func) 1058d1e2f398SBram Moolenaar new 1059459fd785SBram Moolenaar set timeoutlen=10 1060d1e2f398SBram Moolenaar 1061d1e2f398SBram Moolenaar call RunTest_mapping_shift('@', a:func) 1062d1e2f398SBram Moolenaar call RunTest_mapping_shift('A', a:func) 1063d1e2f398SBram Moolenaar call RunTest_mapping_shift('Z', a:func) 1064d1e2f398SBram Moolenaar call RunTest_mapping_shift('^', a:func) 1065d1e2f398SBram Moolenaar call RunTest_mapping_shift('_', a:func) 1066d1e2f398SBram Moolenaar call RunTest_mapping_shift('{', a:func) 1067d1e2f398SBram Moolenaar call RunTest_mapping_shift('|', a:func) 1068d1e2f398SBram Moolenaar call RunTest_mapping_shift('}', a:func) 1069d1e2f398SBram Moolenaar call RunTest_mapping_shift('~', a:func) 1070d1e2f398SBram Moolenaar 1071d1e2f398SBram Moolenaar bwipe! 1072d1e2f398SBram Moolenaar set timeoutlen& 1073d1e2f398SBram Moolenaarendfunc 1074d1e2f398SBram Moolenaar 1075459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_plain() 1076d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27')) 1077d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu')) 1078d1e2f398SBram Moolenaarendfunc 1079459fd785SBram Moolenaar 1080459fd785SBram Moolenaarfunc RunTest_mapping_mods(map, key, func, code) 1081459fd785SBram Moolenaar call setline(1, '') 1082459fd785SBram Moolenaar exe 'inoremap ' .. a:map .. ' xyz' 1083459fd785SBram Moolenaar call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!') 1084459fd785SBram Moolenaar call assert_equal("xyz", getline(1)) 1085459fd785SBram Moolenaar exe 'iunmap ' .. a:map 1086459fd785SBram Moolenaarendfunc 1087459fd785SBram Moolenaar 1088459fd785SBram Moolenaarfunc RunTest_mapping_works_with_mods(func, mods, code) 1089459fd785SBram Moolenaar new 1090459fd785SBram Moolenaar set timeoutlen=10 1091459fd785SBram Moolenaar 1092459fd785SBram Moolenaar if a:mods !~ 'S' 1093459fd785SBram Moolenaar " Shift by itself has no effect 1094459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-@>', '@', a:func, a:code) 1095459fd785SBram Moolenaar endif 1096459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-A>', 'A', a:func, a:code) 1097459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-Z>', 'Z', a:func, a:code) 1098459fd785SBram Moolenaar if a:mods !~ 'S' 1099459fd785SBram Moolenaar " with Shift code is always upper case 1100459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'a', a:func, a:code) 1101459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'z', a:func, a:code) 1102459fd785SBram Moolenaar endif 1103459fd785SBram Moolenaar if a:mods != 'A' 1104459fd785SBram Moolenaar " with Alt code is not in upper case 1105459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'A', a:func, a:code) 1106459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'Z', a:func, a:code) 1107459fd785SBram Moolenaar endif 1108459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-á>', 'á', a:func, a:code) 1109459fd785SBram Moolenaar if a:mods !~ 'S' 1110459fd785SBram Moolenaar " Shift by itself has no effect 1111459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-^>', '^', a:func, a:code) 1112459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-_>', '_', a:func, a:code) 1113459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-{>', '{', a:func, a:code) 1114459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-\|>', '|', a:func, a:code) 1115459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-}>', '}', a:func, a:code) 1116459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-~>', '~', a:func, a:code) 1117459fd785SBram Moolenaar endif 1118459fd785SBram Moolenaar 1119459fd785SBram Moolenaar bwipe! 1120459fd785SBram Moolenaar set timeoutlen& 1121459fd785SBram Moolenaarendfunc 1122459fd785SBram Moolenaar 1123459fd785SBram Moolenaarfunc Test_mapping_works_with_shift() 1124459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S', 2) 1125459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S', 2) 1126459fd785SBram Moolenaarendfunc 1127459fd785SBram Moolenaar 1128459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl() 1129459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C', 5) 1130459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C', 5) 1131459fd785SBram Moolenaarendfunc 1132459fd785SBram Moolenaar 1133459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl() 1134459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S', 6) 1135459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S', 6) 1136459fd785SBram Moolenaarendfunc 1137459fd785SBram Moolenaar 1138459fd785SBram Moolenaar" Below we also test the "u" code with Alt, This works, but libvterm would not 1139459fd785SBram Moolenaar" send the Alt key like this but by prefixing an Esc. 1140459fd785SBram Moolenaar 1141459fd785SBram Moolenaarfunc Test_mapping_works_with_alt() 1142459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'A', 3) 1143459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'A', 3) 1144459fd785SBram Moolenaarendfunc 1145459fd785SBram Moolenaar 1146459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_alt() 1147459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S-A', 4) 1148459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S-A', 4) 1149459fd785SBram Moolenaarendfunc 1150459fd785SBram Moolenaar 1151459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl_alt() 1152459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-A', 7) 1153459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-A', 7) 1154459fd785SBram Moolenaarendfunc 1155459fd785SBram Moolenaar 1156459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl_alt() 1157459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S-A', 8) 1158459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S-A', 8) 1159459fd785SBram Moolenaarendfunc 1160