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 9515545e1SBram Moolenaarsource mouse.vim 10ecd34bf5SBram Moolenaarsource view_util.vim 11e46a2ed0SBram Moolenaarsource term_util.vim 123fbd2d7cSBram Moolenaar 1392fd599eSBram Moolenaarfunc Test_term_mouse_left_click() 14905dd905SBram Moolenaar new 15905dd905SBram Moolenaar let save_mouse = &mouse 16905dd905SBram Moolenaar let save_term = &term 17905dd905SBram Moolenaar let save_ttymouse = &ttymouse 1892fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 193fbd2d7cSBram Moolenaar set mouse=a term=xterm 20905dd905SBram Moolenaar call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 21905dd905SBram Moolenaar 22515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 234945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 241ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 253fbd2d7cSBram Moolenaar go 264945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 273fbd2d7cSBram Moolenaar let row = 2 283fbd2d7cSBram Moolenaar let col = 6 293fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 303fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 314945219bSBram Moolenaar call assert_equal([0, 2, 6, 0], getpos('.'), msg) 323fbd2d7cSBram Moolenaar endfor 33905dd905SBram Moolenaar 34905dd905SBram Moolenaar let &mouse = save_mouse 35905dd905SBram Moolenaar let &term = save_term 36905dd905SBram Moolenaar let &ttymouse = save_ttymouse 3792fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 38905dd905SBram Moolenaar bwipe! 39905dd905SBram Moolenaarendfunc 40905dd905SBram Moolenaar 416aa7523bSBram Moolenaarfunc Test_xterm_mouse_right_click_extends_visual() 426aa7523bSBram Moolenaar if has('mac') 436aa7523bSBram Moolenaar throw "Skipped: test right click in visual mode does not work on macOs (why?)" 446aa7523bSBram Moolenaar endif 456aa7523bSBram Moolenaar let save_mouse = &mouse 466aa7523bSBram Moolenaar let save_term = &term 476aa7523bSBram Moolenaar let save_ttymouse = &ttymouse 486aa7523bSBram Moolenaar call test_override('no_query_mouse', 1) 496aa7523bSBram Moolenaar set mouse=a term=xterm 506aa7523bSBram Moolenaar 516aa7523bSBram Moolenaar for visual_mode in ["v", "V", "\<C-V>"] 52515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 536aa7523bSBram Moolenaar let msg = 'visual=' .. visual_mode .. ' ttymouse=' .. ttymouse_val 546aa7523bSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 556aa7523bSBram Moolenaar 566aa7523bSBram Moolenaar call setline(1, repeat([repeat('-', 7)], 7)) 576aa7523bSBram Moolenaar call MouseLeftClick(4, 4) 586aa7523bSBram Moolenaar call MouseLeftRelease(4, 4) 596aa7523bSBram Moolenaar exe "norm! " .. visual_mode 606aa7523bSBram Moolenaar 616aa7523bSBram Moolenaar " Right click extends top left of visual area. 626aa7523bSBram Moolenaar call MouseRightClick(2, 2) 636aa7523bSBram Moolenaar call MouseRightRelease(2, 2) 646aa7523bSBram Moolenaar 65f19f8d1aSBram Moolenaar " Right click extends bottom right of visual area. 666aa7523bSBram Moolenaar call MouseRightClick(6, 6) 676aa7523bSBram Moolenaar call MouseRightRelease(6, 6) 686aa7523bSBram Moolenaar norm! r1gv 696aa7523bSBram Moolenaar 706aa7523bSBram Moolenaar " Right click shrinks top left of visual area. 716aa7523bSBram Moolenaar call MouseRightClick(3, 3) 726aa7523bSBram Moolenaar call MouseRightRelease(3, 3) 736aa7523bSBram Moolenaar 746aa7523bSBram Moolenaar " Right click shrinks bottom right of visual area. 756aa7523bSBram Moolenaar call MouseRightClick(5, 5) 766aa7523bSBram Moolenaar call MouseRightRelease(5, 5) 776aa7523bSBram Moolenaar norm! r2 786aa7523bSBram Moolenaar 796aa7523bSBram Moolenaar if visual_mode ==# 'v' 806aa7523bSBram Moolenaar call assert_equal(['-------', 816aa7523bSBram Moolenaar \ '-111111', 826aa7523bSBram Moolenaar \ '1122222', 836aa7523bSBram Moolenaar \ '2222222', 846aa7523bSBram Moolenaar \ '2222211', 856aa7523bSBram Moolenaar \ '111111-', 866aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 876aa7523bSBram Moolenaar elseif visual_mode ==# 'V' 886aa7523bSBram Moolenaar call assert_equal(['-------', 896aa7523bSBram Moolenaar \ '1111111', 906aa7523bSBram Moolenaar \ '2222222', 916aa7523bSBram Moolenaar \ '2222222', 926aa7523bSBram Moolenaar \ '2222222', 936aa7523bSBram Moolenaar \ '1111111', 946aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 956aa7523bSBram Moolenaar else 966aa7523bSBram Moolenaar call assert_equal(['-------', 976aa7523bSBram Moolenaar \ '-11111-', 986aa7523bSBram Moolenaar \ '-12221-', 996aa7523bSBram Moolenaar \ '-12221-', 1006aa7523bSBram Moolenaar \ '-12221-', 1016aa7523bSBram Moolenaar \ '-11111-', 1026aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 1036aa7523bSBram Moolenaar endif 1046aa7523bSBram Moolenaar endfor 1056aa7523bSBram Moolenaar endfor 1066aa7523bSBram Moolenaar 1076aa7523bSBram Moolenaar let &mouse = save_mouse 1086aa7523bSBram Moolenaar let &term = save_term 1096aa7523bSBram Moolenaar let &ttymouse = save_ttymouse 1106aa7523bSBram Moolenaar call test_override('no_query_mouse', 0) 1116aa7523bSBram Moolenaar bwipe! 1126aa7523bSBram Moolenaarendfunc 1136aa7523bSBram Moolenaar 1141ee36d6fSBram Moolenaar" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 115297bec07SBram Moolenaar" Also test for g<LeftMouse> and g<RightMouse>. 116297bec07SBram Moolenaarfunc Test_xterm_mouse_tagjump() 1171ee36d6fSBram Moolenaar let save_mouse = &mouse 1181ee36d6fSBram Moolenaar let save_term = &term 1191ee36d6fSBram Moolenaar let save_ttymouse = &ttymouse 1201ee36d6fSBram Moolenaar set mouse=a term=xterm 1211ee36d6fSBram Moolenaar 122515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 1231ee36d6fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1241ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1251ee36d6fSBram Moolenaar help 1261ee36d6fSBram Moolenaar /usr_02.txt 1271ee36d6fSBram Moolenaar norm! zt 128297bec07SBram Moolenaar 129297bec07SBram Moolenaar " CTRL-left click to jump to a tag 1301ee36d6fSBram Moolenaar let row = 1 1311ee36d6fSBram Moolenaar let col = 1 1321ee36d6fSBram Moolenaar call MouseCtrlLeftClick(row, col) 1331ee36d6fSBram Moolenaar call MouseLeftRelease(row, col) 1341ee36d6fSBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 135b4367b7fSBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 1361ee36d6fSBram Moolenaar 137297bec07SBram Moolenaar " CTRL-right click to pop a tag 1381ee36d6fSBram Moolenaar call MouseCtrlRightClick(row, col) 13992fd599eSBram Moolenaar call MouseRightRelease(row, col) 1401ee36d6fSBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 141b4367b7fSBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) 1421ee36d6fSBram Moolenaar 143297bec07SBram Moolenaar " Jump to a tag 144297bec07SBram Moolenaar exe "normal \<C-]>" 145297bec07SBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 146297bec07SBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 147297bec07SBram Moolenaar 148297bec07SBram Moolenaar " Use CTRL-right click in insert mode to pop the tag 149297bec07SBram Moolenaar new 150297bec07SBram Moolenaar let str = 'iHello' .. MouseCtrlRightClickCode(row, col) 151297bec07SBram Moolenaar \ .. MouseRightReleaseCode(row, col) .. "\<C-C>" 1522764d06aSBram Moolenaar call assert_fails('call feedkeys(str, "Lx!")', 'E37:', msg) 153297bec07SBram Moolenaar close! 154297bec07SBram Moolenaar 155297bec07SBram Moolenaar " CTRL-right click with a count 156297bec07SBram Moolenaar let str = "4" .. MouseCtrlRightClickCode(row, col) 157297bec07SBram Moolenaar \ .. MouseRightReleaseCode(row, col) 1582764d06aSBram Moolenaar call assert_fails('call feedkeys(str, "Lx!")', 'E555:', msg) 159297bec07SBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 160297bec07SBram Moolenaar call assert_equal(1, line('.'), msg) 161297bec07SBram Moolenaar 162297bec07SBram Moolenaar " g<LeftMouse> to jump to a tag 163297bec07SBram Moolenaar /usr_02.txt 164297bec07SBram Moolenaar norm! zt 165297bec07SBram Moolenaar call test_setmouse(row, col) 166297bec07SBram Moolenaar exe "normal g\<LeftMouse>" 167297bec07SBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 168297bec07SBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 169297bec07SBram Moolenaar 170297bec07SBram Moolenaar " g<RightMouse> to pop to a tag 171297bec07SBram Moolenaar call test_setmouse(row, col) 172297bec07SBram Moolenaar exe "normal g\<RightMouse>" 173297bec07SBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 174297bec07SBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) 175297bec07SBram Moolenaar 176297bec07SBram Moolenaar %bw! 1771ee36d6fSBram Moolenaar endfor 1781ee36d6fSBram Moolenaar 1791ee36d6fSBram Moolenaar let &mouse = save_mouse 1801ee36d6fSBram Moolenaar let &term = save_term 1811ee36d6fSBram Moolenaar let &ttymouse = save_ttymouse 1821ee36d6fSBram Moolenaarendfunc 1831ee36d6fSBram Moolenaar 18492fd599eSBram Moolenaarfunc Test_term_mouse_middle_click() 18552992feaSBram Moolenaar CheckFeature clipboard_working 186564344acSBram Moolenaar 187c1b8160bSBram Moolenaar new 188c1b8160bSBram Moolenaar let save_mouse = &mouse 189c1b8160bSBram Moolenaar let save_term = &term 190c1b8160bSBram Moolenaar let save_ttymouse = &ttymouse 19192fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 192c1b8160bSBram Moolenaar let save_quotestar = @* 193297bec07SBram Moolenaar let save_quoteplus = @+ 194c1b8160bSBram Moolenaar set mouse=a term=xterm 195c1b8160bSBram Moolenaar 196515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 197c1b8160bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1981ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 199c1b8160bSBram Moolenaar call setline(1, ['123456789', '123456789']) 200297bec07SBram Moolenaar let @* = 'abc' 201c1b8160bSBram Moolenaar 202c1b8160bSBram Moolenaar " Middle-click in the middle of the line pastes text where clicked. 203c1b8160bSBram Moolenaar let row = 1 204c1b8160bSBram Moolenaar let col = 6 205c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 206c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 207c1b8160bSBram Moolenaar call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 208c1b8160bSBram Moolenaar 209c1b8160bSBram Moolenaar " Middle-click beyond end of the line pastes text at the end of the line. 210c1b8160bSBram Moolenaar let col = 20 211c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 212c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 213c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 214c1b8160bSBram Moolenaar 215c1b8160bSBram Moolenaar " Middle-click beyond the last line pastes in the last line. 216c1b8160bSBram Moolenaar let row = 5 217c1b8160bSBram Moolenaar let col = 3 218c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 219c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 220c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 221297bec07SBram Moolenaar 222297bec07SBram Moolenaar " Middle mouse click in operator pending mode beeps 223297bec07SBram Moolenaar call assert_beeps('exe "normal c\<MiddleMouse>"') 224297bec07SBram Moolenaar 225297bec07SBram Moolenaar " Clicking middle mouse in visual mode, yanks the selection and pastes the 226297bec07SBram Moolenaar " clipboard contents 227297bec07SBram Moolenaar let save_clipboard = &clipboard 228297bec07SBram Moolenaar set clipboard= 229297bec07SBram Moolenaar let @" = '' 230297bec07SBram Moolenaar call cursor(1, 1) 231297bec07SBram Moolenaar call feedkeys("v3l" .. 232297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7), 'Lx!') 233297bec07SBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3abc456789'], 234297bec07SBram Moolenaar \ getline(1, '$'), msg) 2352764d06aSBram Moolenaar call assert_equal('1234', @", msg) 236297bec07SBram Moolenaar let &clipboard = save_clipboard 237297bec07SBram Moolenaar 238297bec07SBram Moolenaar " Clicking middle mouse in select mode, replaces the selected text with 239297bec07SBram Moolenaar " the clipboard contents 240297bec07SBram Moolenaar let @+ = 'xyz' 241297bec07SBram Moolenaar call cursor(1, 3) 242297bec07SBram Moolenaar exe "normal gh\<Right>\<Right>\<MiddleMouse>" 243297bec07SBram Moolenaar call assert_equal(['12xyzabc6789abc', '12abc3abc456789'], 244297bec07SBram Moolenaar \ getline(1, '$'), msg) 2452764d06aSBram Moolenaar 2462764d06aSBram Moolenaar " Prefixing middle click with [ or ] fixes the indent after pasting. 2472764d06aSBram Moolenaar %d 2482764d06aSBram Moolenaar call setline(1, " one two") 2492764d06aSBram Moolenaar call setreg('r', 'red blue', 'l') 2502764d06aSBram Moolenaar call test_setmouse(1, 5) 2512764d06aSBram Moolenaar exe "normal \"r[\<MiddleMouse>" 2522764d06aSBram Moolenaar call assert_equal(' red blue', getline(1), msg) 2532764d06aSBram Moolenaar call test_setmouse(2, 5) 2542764d06aSBram Moolenaar exe "normal \"r]\<MiddleMouse>" 2552764d06aSBram Moolenaar call assert_equal(' red blue', getline(3), msg) 2562764d06aSBram Moolenaar %d 257c1b8160bSBram Moolenaar endfor 258c1b8160bSBram Moolenaar 259c1b8160bSBram Moolenaar let &mouse = save_mouse 260c1b8160bSBram Moolenaar let &term = save_term 261c1b8160bSBram Moolenaar let &ttymouse = save_ttymouse 26292fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 263c1b8160bSBram Moolenaar let @* = save_quotestar 264297bec07SBram Moolenaar let @+ = save_quotestar 265c1b8160bSBram Moolenaar bwipe! 266c1b8160bSBram Moolenaarendfunc 267c1b8160bSBram Moolenaar 268297bec07SBram Moolenaar" If clipboard is not working, then clicking the middle mouse button in visual 269297bec07SBram Moolenaar" mode, will copy and paste the selected text. 270297bec07SBram Moolenaarfunc Test_term_mouse_middle_click_no_clipboard() 271297bec07SBram Moolenaar if has('clipboard_working') 272297bec07SBram Moolenaar throw 'Skipped: clipboard support works' 273297bec07SBram Moolenaar endif 274297bec07SBram Moolenaar new 275297bec07SBram Moolenaar let save_mouse = &mouse 276297bec07SBram Moolenaar let save_term = &term 277297bec07SBram Moolenaar let save_ttymouse = &ttymouse 278297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 279297bec07SBram Moolenaar set mouse=a term=xterm 280297bec07SBram Moolenaar 281297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 282297bec07SBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 283297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 284297bec07SBram Moolenaar call setline(1, ['123456789', '123456789']) 285297bec07SBram Moolenaar 286297bec07SBram Moolenaar " Clicking middle mouse in visual mode, yanks the selection and pastes it 287297bec07SBram Moolenaar call cursor(1, 1) 288297bec07SBram Moolenaar call feedkeys("v3l" .. 289297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7), 'Lx!') 290297bec07SBram Moolenaar call assert_equal(['123456789', '1234561234789'], 291297bec07SBram Moolenaar \ getline(1, '$'), msg) 292297bec07SBram Moolenaar endfor 293297bec07SBram Moolenaar 294297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 295297bec07SBram Moolenaar let &ttymouse = save_ttymouse 296297bec07SBram Moolenaar let &term = save_term 297297bec07SBram Moolenaar let &mouse = save_mouse 298297bec07SBram Moolenaar close! 299297bec07SBram Moolenaarendfunc 300297bec07SBram Moolenaar 301297bec07SBram Moolenaarfunc Test_term_mouse_middle_click_insert_mode() 302297bec07SBram Moolenaar CheckFeature clipboard_working 303297bec07SBram Moolenaar 304297bec07SBram Moolenaar new 305297bec07SBram Moolenaar let save_mouse = &mouse 306297bec07SBram Moolenaar let save_term = &term 307297bec07SBram Moolenaar let save_ttymouse = &ttymouse 308297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 309297bec07SBram Moolenaar set mouse=a term=xterm 310297bec07SBram Moolenaar 311297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 312297bec07SBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 313297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 314297bec07SBram Moolenaar call setline(1, ['123456789', '123456789']) 315297bec07SBram Moolenaar let @* = 'abc' 316297bec07SBram Moolenaar 317297bec07SBram Moolenaar " Middle-click in inesrt mode doesn't move the cursor but inserts the 318297bec07SBram Moolenaar " contents of aregister 319297bec07SBram Moolenaar call cursor(1, 4) 320297bec07SBram Moolenaar call feedkeys('i' .. 321297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7) .. 322297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 323297bec07SBram Moolenaar call assert_equal(['123abc456789', '123456789'], 324297bec07SBram Moolenaar \ getline(1, '$'), msg) 3252764d06aSBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')], msg) 326297bec07SBram Moolenaar 327297bec07SBram Moolenaar " Middle-click in replace mode 328297bec07SBram Moolenaar call cursor(1, 1) 329297bec07SBram Moolenaar call feedkeys('$R' .. 330297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7) .. 331297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 332297bec07SBram Moolenaar call assert_equal(['123abc45678abc', '123456789'], 333297bec07SBram Moolenaar \ getline(1, '$'), msg) 3342764d06aSBram Moolenaar call assert_equal([1, 14], [line('.'), col('.')], msg) 335297bec07SBram Moolenaar endfor 336297bec07SBram Moolenaar 337297bec07SBram Moolenaar let &mouse = save_mouse 338297bec07SBram Moolenaar let &term = save_term 339297bec07SBram Moolenaar let &ttymouse = save_ttymouse 340297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 341297bec07SBram Moolenaar close! 342297bec07SBram Moolenaarendfunc 343297bec07SBram Moolenaar 344297bec07SBram Moolenaar" Test for switching window using mouse in insert mode 345297bec07SBram Moolenaarfunc Test_term_mouse_switch_win_insert_mode() 346297bec07SBram Moolenaar 5new 347297bec07SBram Moolenaar let save_mouse = &mouse 348297bec07SBram Moolenaar let save_term = &term 349297bec07SBram Moolenaar let save_ttymouse = &ttymouse 350297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 351297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 352297bec07SBram Moolenaar 353297bec07SBram Moolenaar call feedkeys('ivim' .. 354297bec07SBram Moolenaar \ MouseLeftClickCode(8, 6) .. MouseLeftReleaseCode(8, 6) .. 355297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 356297bec07SBram Moolenaar call assert_equal(2, winnr()) 357297bec07SBram Moolenaar wincmd w 358297bec07SBram Moolenaar call assert_equal('n', mode()) 359297bec07SBram Moolenaar call assert_equal(['vim'], getline(1, '$')) 360297bec07SBram Moolenaar 361297bec07SBram Moolenaar let &mouse = save_mouse 362297bec07SBram Moolenaar let &term = save_term 363297bec07SBram Moolenaar let &ttymouse = save_ttymouse 364297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 365297bec07SBram Moolenaar close! 366297bec07SBram Moolenaarendfunc 367297bec07SBram Moolenaar 368297bec07SBram Moolenaar" Test for using the mouse to increaes the height of the cmdline window 369297bec07SBram Moolenaarfunc Test_mouse_cmdwin_resize() 370297bec07SBram Moolenaar let save_mouse = &mouse 371297bec07SBram Moolenaar let save_term = &term 372297bec07SBram Moolenaar let save_ttymouse = &ttymouse 373297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 374297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 375297bec07SBram Moolenaar 5new 376297bec07SBram Moolenaar redraw! 377297bec07SBram Moolenaar 378297bec07SBram Moolenaar let h = 0 379297bec07SBram Moolenaar let row = &lines - &cmdwinheight - 2 380297bec07SBram Moolenaar call feedkeys("q:" .. 381297bec07SBram Moolenaar \ MouseLeftClickCode(row, 1) .. 382297bec07SBram Moolenaar \ MouseLeftDragCode(row - 1, 1) .. 383297bec07SBram Moolenaar \ MouseLeftReleaseCode(row - 2, 1) .. 384297bec07SBram Moolenaar \ "alet h = \<C-R>=winheight(0)\<CR>\<CR>", 'Lx!') 385297bec07SBram Moolenaar call assert_equal(&cmdwinheight + 2, h) 386297bec07SBram Moolenaar 387297bec07SBram Moolenaar let &mouse = save_mouse 388297bec07SBram Moolenaar let &term = save_term 389297bec07SBram Moolenaar let &ttymouse = save_ttymouse 390297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 391297bec07SBram Moolenaar close! 392297bec07SBram Moolenaarendfunc 393297bec07SBram Moolenaar 39492fd599eSBram Moolenaar" TODO: for unclear reasons this test fails if it comes after 39592fd599eSBram Moolenaar" Test_xterm_mouse_ctrl_click() 39692fd599eSBram Moolenaarfunc Test_1xterm_mouse_wheel() 397049736faSBram Moolenaar new 398049736faSBram Moolenaar let save_mouse = &mouse 399049736faSBram Moolenaar let save_term = &term 400d58d4f90SBram Moolenaar let save_wrap = &wrap 401049736faSBram Moolenaar let save_ttymouse = &ttymouse 402d58d4f90SBram Moolenaar set mouse=a term=xterm nowrap 403d58d4f90SBram Moolenaar call setline(1, range(100000000000000, 100000000000100)) 404049736faSBram Moolenaar 405515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 4064945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4071ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 408049736faSBram Moolenaar go 4094945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 4104945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 4113fbd2d7cSBram Moolenaar 4123fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 4134945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 4144945219bSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.'), msg) 4153fbd2d7cSBram Moolenaar 4163fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 4174945219bSBram Moolenaar call assert_equal(7, line('w0'), msg) 4184945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 419049736faSBram Moolenaar 4203fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 4214945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 4224945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 4233fbd2d7cSBram Moolenaar 4243fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 4254945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 4264945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 427d58d4f90SBram Moolenaar 428d58d4f90SBram Moolenaar if has('gui') 429d58d4f90SBram Moolenaar " Horizontal wheel scrolling currently only works when vim is 430d58d4f90SBram Moolenaar " compiled with gui enabled. 431d58d4f90SBram Moolenaar call MouseWheelRight(1, 1) 432d58d4f90SBram Moolenaar call assert_equal(7, 1 + virtcol(".") - wincol(), msg) 433d58d4f90SBram Moolenaar call assert_equal([0, 7, 7, 0], getpos('.'), msg) 434d58d4f90SBram Moolenaar 435d58d4f90SBram Moolenaar call MouseWheelRight(1, 1) 436d58d4f90SBram Moolenaar call assert_equal(13, 1 + virtcol(".") - wincol(), msg) 437d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 438d58d4f90SBram Moolenaar 439d58d4f90SBram Moolenaar call MouseWheelLeft(1, 1) 440d58d4f90SBram Moolenaar call assert_equal(7, 1 + virtcol(".") - wincol(), msg) 441d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 442d58d4f90SBram Moolenaar 443d58d4f90SBram Moolenaar call MouseWheelLeft(1, 1) 444d58d4f90SBram Moolenaar call assert_equal(1, 1 + virtcol(".") - wincol(), msg) 445d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 446d58d4f90SBram Moolenaar endif 4473fbd2d7cSBram Moolenaar endfor 448049736faSBram Moolenaar 449049736faSBram Moolenaar let &mouse = save_mouse 450049736faSBram Moolenaar let &term = save_term 451d58d4f90SBram Moolenaar let &wrap = save_wrap 452049736faSBram Moolenaar let &ttymouse = save_ttymouse 453049736faSBram Moolenaar bwipe! 454049736faSBram Moolenaarendfunc 4553fb01a53SBram Moolenaar 456b4367b7fSBram Moolenaar" Test that dragging beyond the window (at the bottom and at the top) 457f19f8d1aSBram Moolenaar" scrolls window content by the number of lines beyond the window. 458b4367b7fSBram Moolenaarfunc Test_term_mouse_drag_beyond_window() 459b4367b7fSBram Moolenaar let save_mouse = &mouse 460b4367b7fSBram Moolenaar let save_term = &term 461b4367b7fSBram Moolenaar let save_ttymouse = &ttymouse 462b4367b7fSBram Moolenaar call test_override('no_query_mouse', 1) 463b4367b7fSBram Moolenaar set mouse=a term=xterm 464b4367b7fSBram Moolenaar let col = 1 465b4367b7fSBram Moolenaar call setline(1, range(1, 100)) 466b4367b7fSBram Moolenaar 467b4367b7fSBram Moolenaar " Split into 3 windows, and go into the middle window 468b4367b7fSBram Moolenaar " so we test dragging mouse below and above the window. 469b4367b7fSBram Moolenaar 2split 470b4367b7fSBram Moolenaar wincmd j 471b4367b7fSBram Moolenaar 2split 472b4367b7fSBram Moolenaar 473515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 474b4367b7fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 475b4367b7fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 476b4367b7fSBram Moolenaar 477b4367b7fSBram Moolenaar " Line #10 at the top. 478b4367b7fSBram Moolenaar norm! 10zt 479b4367b7fSBram Moolenaar redraw 480b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 481b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 482b4367b7fSBram Moolenaar 483b4367b7fSBram Moolenaar let row = 4 484b4367b7fSBram Moolenaar call MouseLeftClick(row, col) 485b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 486b4367b7fSBram Moolenaar 487b4367b7fSBram Moolenaar " Drag downwards. We're still in the window so topline should 488b4367b7fSBram Moolenaar " not change yet. 489b4367b7fSBram Moolenaar let row += 1 490b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 491b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 492b4367b7fSBram Moolenaar 493b4367b7fSBram Moolenaar " We now leave the window at the bottom, so the window content should 494b4367b7fSBram Moolenaar " scroll by 1 line, then 2 lines (etc) as we drag further away. 495b4367b7fSBram Moolenaar let row += 1 496b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 497b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 498b4367b7fSBram Moolenaar 499b4367b7fSBram Moolenaar let row += 1 500b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 501b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 502b4367b7fSBram Moolenaar 503b4367b7fSBram Moolenaar " Now drag upwards. 504b4367b7fSBram Moolenaar let row -= 1 505b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 506b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 507b4367b7fSBram Moolenaar 508b4367b7fSBram Moolenaar " We're now back in the window so the topline should not change. 509b4367b7fSBram Moolenaar let row -= 1 510b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 511b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 512b4367b7fSBram Moolenaar 513b4367b7fSBram Moolenaar let row -= 1 514b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 515b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 516b4367b7fSBram Moolenaar 517b4367b7fSBram Moolenaar " We now leave the window at the top so the window content should 518b4367b7fSBram Moolenaar " scroll by 1 line, then 2, then 3 (etc) in the opposite direction. 519b4367b7fSBram Moolenaar let row -= 1 520b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 521b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 522b4367b7fSBram Moolenaar 523b4367b7fSBram Moolenaar let row -= 1 524b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 525b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 526b4367b7fSBram Moolenaar 527b4367b7fSBram Moolenaar let row -= 1 528b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 529b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 530b4367b7fSBram Moolenaar 531b4367b7fSBram Moolenaar call MouseLeftRelease(row, col) 532b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 533b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 534b4367b7fSBram Moolenaar endfor 535b4367b7fSBram Moolenaar 536b4367b7fSBram Moolenaar let &mouse = save_mouse 537b4367b7fSBram Moolenaar let &term = save_term 538b4367b7fSBram Moolenaar let &ttymouse = save_ttymouse 539b4367b7fSBram Moolenaar call test_override('no_query_mouse', 0) 540b4367b7fSBram Moolenaar bwipe! 541b4367b7fSBram Moolenaarendfunc 542b4367b7fSBram Moolenaar 54392fd599eSBram Moolenaarfunc Test_term_mouse_drag_window_separator() 5443fb01a53SBram Moolenaar let save_mouse = &mouse 5453fb01a53SBram Moolenaar let save_term = &term 5463fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 54792fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 5483fbd2d7cSBram Moolenaar set mouse=a term=xterm 5493fbd2d7cSBram Moolenaar 550515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 5514945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5521ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 5533fb01a53SBram Moolenaar 5543fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 5553fb01a53SBram Moolenaar split 5563fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 5573fb01a53SBram Moolenaar let row = rowseparator 5583fb01a53SBram Moolenaar let col = 1 559c8b3ddabSBram Moolenaar 5602b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 5612b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 5623fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5633fb01a53SBram Moolenaar let row -= 1 5643fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5654945219bSBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 5663fb01a53SBram Moolenaar let row += 1 5673fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5684945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 5693fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5704945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 57139f76c6aSBram Moolenaar endif 5723fb01a53SBram Moolenaar bwipe! 5733fb01a53SBram Moolenaar 5743fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 5753fb01a53SBram Moolenaar vsplit 5763fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 5773fb01a53SBram Moolenaar let row = 1 5783fb01a53SBram Moolenaar let col = colseparator 57939f76c6aSBram Moolenaar 5802b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 5812b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || col <= 223 5823fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5833fb01a53SBram Moolenaar let col -= 1 5843fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5854945219bSBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 5863fb01a53SBram Moolenaar let col += 1 5873fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5884945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 5893fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5904945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 59139f76c6aSBram Moolenaar endif 5923fb01a53SBram Moolenaar bwipe! 5933fbd2d7cSBram Moolenaar endfor 5943fbd2d7cSBram Moolenaar 5953fbd2d7cSBram Moolenaar let &mouse = save_mouse 5963fbd2d7cSBram Moolenaar let &term = save_term 5973fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 59892fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 5993fbd2d7cSBram Moolenaarendfunc 6003fbd2d7cSBram Moolenaar 60192fd599eSBram Moolenaarfunc Test_term_mouse_drag_statusline() 6023fbd2d7cSBram Moolenaar let save_mouse = &mouse 6033fbd2d7cSBram Moolenaar let save_term = &term 6043fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 60592fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 606ca57ab54SBram Moolenaar let save_laststatus = &laststatus 607ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 6083fbd2d7cSBram Moolenaar 609515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 6104945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6111ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 6123fbd2d7cSBram Moolenaar 6134945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6143fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 6153fbd2d7cSBram Moolenaar let row = rowstatusline 6163fbd2d7cSBram Moolenaar let col = 1 617c8b3ddabSBram Moolenaar 6182b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && row > 223 6192b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 620c8b3ddabSBram Moolenaar continue 621c8b3ddabSBram Moolenaar endif 622c8b3ddabSBram Moolenaar 6233fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 6243fbd2d7cSBram Moolenaar let row -= 1 6253fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 6264945219bSBram Moolenaar call assert_equal(2, &cmdheight, msg) 6274945219bSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 6283fbd2d7cSBram Moolenaar let row += 1 6293fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 6304945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6314945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 6323fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 6334945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6344945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 6353fbd2d7cSBram Moolenaar endfor 6363fbd2d7cSBram Moolenaar 6373fb01a53SBram Moolenaar let &mouse = save_mouse 6383fb01a53SBram Moolenaar let &term = save_term 6393fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 64092fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 641ca57ab54SBram Moolenaar let &laststatus = save_laststatus 642ca57ab54SBram Moolenaarendfunc 643ca57ab54SBram Moolenaar 64492fd599eSBram Moolenaarfunc Test_term_mouse_click_tab() 645ca57ab54SBram Moolenaar let save_mouse = &mouse 646ca57ab54SBram Moolenaar let save_term = &term 647ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 64892fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 649ca57ab54SBram Moolenaar set mouse=a term=xterm 650ca57ab54SBram Moolenaar let row = 1 651ca57ab54SBram Moolenaar 652515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 6534945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6541ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 655ca57ab54SBram Moolenaar e Xfoo 656ca57ab54SBram Moolenaar tabnew Xbar 657ca57ab54SBram Moolenaar 658ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 659ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 660ca57ab54SBram Moolenaar \ ' Xfoo', 661ca57ab54SBram Moolenaar \ 'Tab page 2', 6624945219bSBram Moolenaar \ '> Xbar'], a, msg) 663ca57ab54SBram Moolenaar 664ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 665ca57ab54SBram Moolenaar let col = 2 66639f76c6aSBram Moolenaar redraw 667ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 668ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 669ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 670ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 671ca57ab54SBram Moolenaar \ '> Xfoo', 672ca57ab54SBram Moolenaar \ 'Tab page 2', 6734945219bSBram Moolenaar \ ' Xbar'], a, msg) 674ca57ab54SBram Moolenaar 675ca57ab54SBram Moolenaar let col = 9 676ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 677ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 678ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 679ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 680ca57ab54SBram Moolenaar \ ' Xfoo', 681ca57ab54SBram Moolenaar \ 'Tab page 2', 6824945219bSBram Moolenaar \ '> Xbar'], a, msg) 683ca57ab54SBram Moolenaar 684ca57ab54SBram Moolenaar %bwipe! 685ca57ab54SBram Moolenaar endfor 686ca57ab54SBram Moolenaar 687ca57ab54SBram Moolenaar let &mouse = save_mouse 688ca57ab54SBram Moolenaar let &term = save_term 689ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 69092fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 6913fb01a53SBram Moolenaarendfunc 69239f76c6aSBram Moolenaar 69392fd599eSBram Moolenaarfunc Test_term_mouse_click_X_to_close_tab() 69439f76c6aSBram Moolenaar let save_mouse = &mouse 69539f76c6aSBram Moolenaar let save_term = &term 69639f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 69792fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 69839f76c6aSBram Moolenaar set mouse=a term=xterm 69939f76c6aSBram Moolenaar let row = 1 70039f76c6aSBram Moolenaar let col = &columns 70139f76c6aSBram Moolenaar 702515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 7032b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && col > 223 7042b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 70539f76c6aSBram Moolenaar continue 70639f76c6aSBram Moolenaar endif 7074945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7081ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 70939f76c6aSBram Moolenaar e Xtab1 71039f76c6aSBram Moolenaar tabnew Xtab2 71139f76c6aSBram Moolenaar tabnew Xtab3 71239f76c6aSBram Moolenaar tabn 2 71339f76c6aSBram Moolenaar 71439f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 71539f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 71639f76c6aSBram Moolenaar \ ' Xtab1', 71739f76c6aSBram Moolenaar \ 'Tab page 2', 71839f76c6aSBram Moolenaar \ '> Xtab2', 71939f76c6aSBram Moolenaar \ 'Tab page 3', 7204945219bSBram Moolenaar \ ' Xtab3'], a, msg) 72139f76c6aSBram Moolenaar 72239f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 72339f76c6aSBram Moolenaar redraw 72439f76c6aSBram Moolenaar call MouseLeftClick(row, col) 72539f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 72639f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 72739f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 72839f76c6aSBram Moolenaar \ ' Xtab1', 72939f76c6aSBram Moolenaar \ 'Tab page 2', 7304945219bSBram Moolenaar \ '> Xtab3'], a, msg) 73139f76c6aSBram Moolenaar 73239f76c6aSBram Moolenaar %bwipe! 73339f76c6aSBram Moolenaar endfor 73439f76c6aSBram Moolenaar 73539f76c6aSBram Moolenaar let &mouse = save_mouse 73639f76c6aSBram Moolenaar let &term = save_term 73739f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 73892fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 73939f76c6aSBram Moolenaarendfunc 740e3e3828fSBram Moolenaar 74192fd599eSBram Moolenaarfunc Test_term_mouse_drag_to_move_tab() 742e3e3828fSBram Moolenaar let save_mouse = &mouse 743e3e3828fSBram Moolenaar let save_term = &term 744e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 74592fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 746e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 747e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 748e3e3828fSBram Moolenaar let row = 1 749e3e3828fSBram Moolenaar 750515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 7514945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7521ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 753e3e3828fSBram Moolenaar e Xtab1 754e3e3828fSBram Moolenaar tabnew Xtab2 755e3e3828fSBram Moolenaar 756e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 757e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 758e3e3828fSBram Moolenaar \ ' Xtab1', 759e3e3828fSBram Moolenaar \ 'Tab page 2', 7604945219bSBram Moolenaar \ '> Xtab2'], a, msg) 761e3e3828fSBram Moolenaar redraw 762e3e3828fSBram Moolenaar 763e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 764e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 765e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 766e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 7674945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 768e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 769e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 770e3e3828fSBram Moolenaar endfor 771e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 772e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 773e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 774e3e3828fSBram Moolenaar \ '> Xtab2', 775e3e3828fSBram Moolenaar \ 'Tab page 2', 7764945219bSBram Moolenaar \ ' Xtab1'], a, msg) 777e3e3828fSBram Moolenaar 778f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 779f36a2c7eSBram Moolenaar " interpreted as unwanted double-click. 780f36a2c7eSBram Moolenaar call MouseLeftClick(row, 11) 781f36a2c7eSBram Moolenaar call MouseLeftRelease(row, 11) 782f36a2c7eSBram Moolenaar 783e3e3828fSBram Moolenaar %bwipe! 784e3e3828fSBram Moolenaar endfor 785e3e3828fSBram Moolenaar 786e3e3828fSBram Moolenaar let &mouse = save_mouse 787e3e3828fSBram Moolenaar let &term = save_term 788e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 78992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 790e3e3828fSBram Moolenaar set mousetime& 791e3e3828fSBram Moolenaarendfunc 792e3e3828fSBram Moolenaar 79392fd599eSBram Moolenaarfunc Test_term_mouse_double_click_to_create_tab() 794e3e3828fSBram Moolenaar let save_mouse = &mouse 795e3e3828fSBram Moolenaar let save_term = &term 796e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 79792fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 798e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 799e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 800f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 801e3e3828fSBram Moolenaar let row = 1 802e3e3828fSBram Moolenaar let col = 10 803e3e3828fSBram Moolenaar 804515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 8054945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 8061ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 807e3e3828fSBram Moolenaar e Xtab1 808e3e3828fSBram Moolenaar tabnew Xtab2 809e3e3828fSBram Moolenaar 810e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 811e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 812e3e3828fSBram Moolenaar \ ' Xtab1', 813e3e3828fSBram Moolenaar \ 'Tab page 2', 8144945219bSBram Moolenaar \ '> Xtab2'], a, msg) 815e3e3828fSBram Moolenaar 816e3e3828fSBram Moolenaar redraw 817e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 818e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 819e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 8204945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 821e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 822e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 8234945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 824e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 825e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 826e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 827e3e3828fSBram Moolenaar \ ' Xtab1', 828e3e3828fSBram Moolenaar \ 'Tab page 2', 829e3e3828fSBram Moolenaar \ '> [No Name]', 830e3e3828fSBram Moolenaar \ 'Tab page 3', 8314945219bSBram Moolenaar \ ' Xtab2'], a, msg) 832e3e3828fSBram Moolenaar 833f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 834f36a2c7eSBram Moolenaar " interpreted as unwanted double click. 835f36a2c7eSBram Moolenaar call MouseLeftClick(row, col + 1) 836f36a2c7eSBram Moolenaar call MouseLeftRelease(row, col + 1) 837f36a2c7eSBram Moolenaar 838e3e3828fSBram Moolenaar %bwipe! 839e3e3828fSBram Moolenaar endfor 840e3e3828fSBram Moolenaar 841e3e3828fSBram Moolenaar let &mouse = save_mouse 842e3e3828fSBram Moolenaar let &term = save_term 843e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 84492fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 845e3e3828fSBram Moolenaar set mousetime& 846e3e3828fSBram Moolenaarendfunc 847696d6377SBram Moolenaar 848f36a2c7eSBram Moolenaar" Test double/triple/quadruple click in normal mode to visually select. 849f36a2c7eSBram Moolenaarfunc Test_term_mouse_multiple_clicks_to_visually_select() 850f36a2c7eSBram Moolenaar let save_mouse = &mouse 851f36a2c7eSBram Moolenaar let save_term = &term 852f36a2c7eSBram Moolenaar let save_ttymouse = &ttymouse 853f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 1) 854f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 855f36a2c7eSBram Moolenaar new 856f36a2c7eSBram Moolenaar 857515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 858f36a2c7eSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 859f36a2c7eSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 860f36a2c7eSBram Moolenaar call setline(1, ['foo [foo bar] foo', 'foo']) 861f36a2c7eSBram Moolenaar 862f36a2c7eSBram Moolenaar " Double-click on word should visually select the word. 863f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 864f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 865f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 866f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 867f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 868f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 869f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 870f36a2c7eSBram Moolenaar norm! r1 871f36a2c7eSBram Moolenaar call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg) 872f36a2c7eSBram Moolenaar 873f36a2c7eSBram Moolenaar " Double-click on opening square bracket should visually 874f36a2c7eSBram Moolenaar " select the whole [foo bar]. 875f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 876f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 877f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 878f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 879f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 880f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 881f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 882f36a2c7eSBram Moolenaar norm! r2 883f36a2c7eSBram Moolenaar call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg) 884f36a2c7eSBram Moolenaar 885f36a2c7eSBram Moolenaar " Triple-click should visually select the whole line. 886f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 887f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 888f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 889f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 890f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 891f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 892f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 893f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 894f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 895f36a2c7eSBram Moolenaar call assert_equal('V', mode(), msg) 896f36a2c7eSBram Moolenaar norm! r3 897f36a2c7eSBram Moolenaar call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg) 898f36a2c7eSBram Moolenaar 899f36a2c7eSBram Moolenaar " Quadruple-click should start visual block select. 900f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 901f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 902f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 903f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 904f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 905f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 906f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 907f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 908f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 909f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 910f36a2c7eSBram Moolenaar call assert_equal(96, getcharmod(), msg) " quadruple-click 911f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 912f36a2c7eSBram Moolenaar call assert_equal("\<c-v>", mode(), msg) 913f36a2c7eSBram Moolenaar norm! r4 914f36a2c7eSBram Moolenaar call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg) 9152764d06aSBram Moolenaar 9162764d06aSBram Moolenaar " Double-click on a space character should visually select all the 9172764d06aSBram Moolenaar " consecutive space characters. 9182764d06aSBram Moolenaar %d 9192764d06aSBram Moolenaar call setline(1, ' one two') 9202764d06aSBram Moolenaar call MouseLeftClick(1, 2) 9212764d06aSBram Moolenaar call MouseLeftRelease(1, 2) 9222764d06aSBram Moolenaar call MouseLeftClick(1, 2) 9232764d06aSBram Moolenaar call MouseLeftRelease(1, 2) 9242764d06aSBram Moolenaar call assert_equal('v', mode(), msg) 9252764d06aSBram Moolenaar norm! r1 9262764d06aSBram Moolenaar call assert_equal(['1111one two'], getline(1, '$'), msg) 9272764d06aSBram Moolenaar 9282764d06aSBram Moolenaar " Double-click on a word with exclusive selection 9292764d06aSBram Moolenaar set selection=exclusive 9302764d06aSBram Moolenaar let @" = '' 9312764d06aSBram Moolenaar call MouseLeftClick(1, 10) 9322764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 9332764d06aSBram Moolenaar call MouseLeftClick(1, 10) 9342764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 9352764d06aSBram Moolenaar norm! y 9362764d06aSBram Moolenaar call assert_equal('two', @", msg) 9372764d06aSBram Moolenaar 9382764d06aSBram Moolenaar " Double click to select a block of text with exclusive selection 9392764d06aSBram Moolenaar %d 9402764d06aSBram Moolenaar call setline(1, 'one (two) three') 9412764d06aSBram Moolenaar call MouseLeftClick(1, 5) 9422764d06aSBram Moolenaar call MouseLeftRelease(1, 5) 9432764d06aSBram Moolenaar call MouseLeftClick(1, 5) 9442764d06aSBram Moolenaar call MouseLeftRelease(1, 5) 9452764d06aSBram Moolenaar norm! y 9462764d06aSBram Moolenaar call assert_equal(5, col("'<"), msg) 9472764d06aSBram Moolenaar call assert_equal(10, col("'>"), msg) 9482764d06aSBram Moolenaar 9492764d06aSBram Moolenaar call MouseLeftClick(1, 9) 9502764d06aSBram Moolenaar call MouseLeftRelease(1, 9) 9512764d06aSBram Moolenaar call MouseLeftClick(1, 9) 9522764d06aSBram Moolenaar call MouseLeftRelease(1, 9) 9532764d06aSBram Moolenaar norm! y 9542764d06aSBram Moolenaar call assert_equal(5, col("'<"), msg) 9552764d06aSBram Moolenaar call assert_equal(10, col("'>"), msg) 9562764d06aSBram Moolenaar set selection& 9572764d06aSBram Moolenaar 9582764d06aSBram Moolenaar " Click somewhere else so that the clicks above is not combined with the 9592764d06aSBram Moolenaar " clicks in the next iteration. 9602764d06aSBram Moolenaar call MouseRightClick(3, 10) 9612764d06aSBram Moolenaar call MouseRightRelease(3, 10) 962f36a2c7eSBram Moolenaar endfor 963f36a2c7eSBram Moolenaar 964f36a2c7eSBram Moolenaar let &mouse = save_mouse 965f36a2c7eSBram Moolenaar let &term = save_term 966f36a2c7eSBram Moolenaar let &ttymouse = save_ttymouse 967f36a2c7eSBram Moolenaar set mousetime& 968f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 0) 969f36a2c7eSBram Moolenaar bwipe! 970f36a2c7eSBram Moolenaarendfunc 971f36a2c7eSBram Moolenaar 9722764d06aSBram Moolenaar" Test for selecting text in visual blockwise mode using Alt-LeftClick 9732764d06aSBram Moolenaarfunc Test_mouse_alt_leftclick() 9742764d06aSBram Moolenaar let save_mouse = &mouse 9752764d06aSBram Moolenaar let save_term = &term 9762764d06aSBram Moolenaar let save_ttymouse = &ttymouse 9772764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 9782764d06aSBram Moolenaar set mouse=a term=xterm mousetime=200 9792764d06aSBram Moolenaar set mousemodel=popup 9802764d06aSBram Moolenaar new 9812764d06aSBram Moolenaar call setline(1, 'one (two) three') 9822764d06aSBram Moolenaar 9832764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values 9842764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 9852764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 9862764d06aSBram Moolenaar 9872764d06aSBram Moolenaar " Left click with the Alt modifier key should extend the selection in 9882764d06aSBram Moolenaar " blockwise visual mode. 9892764d06aSBram Moolenaar let @" = '' 9902764d06aSBram Moolenaar call MouseLeftClick(1, 3) 9912764d06aSBram Moolenaar call MouseLeftRelease(1, 3) 9922764d06aSBram Moolenaar call MouseAltLeftClick(1, 11) 9932764d06aSBram Moolenaar call MouseLeftRelease(1, 11) 9942764d06aSBram Moolenaar call assert_equal("\<C-V>", mode(), msg) 9952764d06aSBram Moolenaar normal! y 9962764d06aSBram Moolenaar call assert_equal('e (two) t', @") 9972764d06aSBram Moolenaar endfor 9982764d06aSBram Moolenaar 9992764d06aSBram Moolenaar let &mouse = save_mouse 10002764d06aSBram Moolenaar let &term = save_term 10012764d06aSBram Moolenaar let &ttymouse = save_ttymouse 10022764d06aSBram Moolenaar set mousetime& mousemodel& 10032764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 10042764d06aSBram Moolenaar close! 10052764d06aSBram Moolenaarendfunc 10062764d06aSBram Moolenaar 1007696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 1008696d6377SBram Moolenaar new 1009696d6377SBram Moolenaar let save_mouse = &mouse 1010696d6377SBram Moolenaar let save_term = &term 1011696d6377SBram Moolenaar let save_ttymouse = &ttymouse 1012696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 10132b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 1014696d6377SBram Moolenaar 1015696d6377SBram Moolenaar " Create 2 nested folds. 1016696d6377SBram Moolenaar call setline(1, range(1, 7)) 1017696d6377SBram Moolenaar 2,6fold 1018696d6377SBram Moolenaar norm! zR 1019696d6377SBram Moolenaar 4,5fold 1020696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 1021696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1022696d6377SBram Moolenaar 1023696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 1024696d6377SBram Moolenaar redraw 1025696d6377SBram Moolenaar let row = 4 1026696d6377SBram Moolenaar let col = 2 1027696d6377SBram Moolenaar call MouseLeftClick(row, col) 1028696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1029696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 1030696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1031696d6377SBram Moolenaar 1032696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 1033696d6377SBram Moolenaar redraw 1034696d6377SBram Moolenaar let row = 2 1035696d6377SBram Moolenaar let col = 1 1036696d6377SBram Moolenaar call MouseLeftClick(row, col) 1037696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1038696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 1039696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1040696d6377SBram Moolenaar norm! zR 1041696d6377SBram Moolenaar 1042696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 1043696d6377SBram Moolenaar redraw 1044696d6377SBram Moolenaar let row = 5 1045696d6377SBram Moolenaar let col = 2 1046696d6377SBram Moolenaar call MouseLeftClick(row, col) 1047696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1048696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 1049696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1050696d6377SBram Moolenaar 1051696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 1052696d6377SBram Moolenaar let &ttymouse = save_ttymouse 1053696d6377SBram Moolenaar let &term = save_term 1054696d6377SBram Moolenaar let &mouse = save_mouse 1055696d6377SBram Moolenaar bwipe! 1056696d6377SBram Moolenaarendfunc 105766761db1SBram Moolenaar 1058f19f8d1aSBram Moolenaar" Left or right click in Ex command line sets position of the cursor. 1059f19f8d1aSBram Moolenaarfunc Test_term_mouse_click_in_cmdline_to_set_pos() 1060f19f8d1aSBram Moolenaar let save_mouse = &mouse 1061f19f8d1aSBram Moolenaar let save_term = &term 1062f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 1063f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 1064f19f8d1aSBram Moolenaar set mouse=a term=xterm 1065f19f8d1aSBram Moolenaar let row = &lines 1066f19f8d1aSBram Moolenaar 1067515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 1068ab505b1aSBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 1069ab505b1aSBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 1070f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1071f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1072f19f8d1aSBram Moolenaar 1073ab505b1aSBram Moolenaar 1074f19f8d1aSBram Moolenaar call feedkeys(':"3456789' 1075f19f8d1aSBram Moolenaar \ .. MouseLeftClickCode(row, 7) 1076f19f8d1aSBram Moolenaar \ .. MouseLeftReleaseCode(row, 7) .. 'L' 1077f19f8d1aSBram Moolenaar \ .. MouseRightClickCode(row, 4) 1078f19f8d1aSBram Moolenaar \ .. MouseRightReleaseCode(row, 4) .. 'R' 1079f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 1080f19f8d1aSBram Moolenaar call assert_equal('"3R456L789', @:, msg) 1081ab505b1aSBram Moolenaar endif 1082f19f8d1aSBram Moolenaar endfor 1083f19f8d1aSBram Moolenaar 1084f19f8d1aSBram Moolenaar let &mouse = save_mouse 1085f19f8d1aSBram Moolenaar let &term = save_term 1086f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 1087f19f8d1aSBram Moolenaar set mousetime& 1088f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 1089f19f8d1aSBram Moolenaarendfunc 1090f19f8d1aSBram Moolenaar 1091f19f8d1aSBram Moolenaar" Middle click in command line pastes at position of cursor. 1092f19f8d1aSBram Moolenaarfunc Test_term_mouse_middle_click_in_cmdline_to_paste() 1093f19f8d1aSBram Moolenaar CheckFeature clipboard_working 1094f19f8d1aSBram Moolenaar let save_mouse = &mouse 1095f19f8d1aSBram Moolenaar let save_term = &term 1096f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 1097f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 1098f19f8d1aSBram Moolenaar set mouse=a term=xterm 1099f19f8d1aSBram Moolenaar let row = &lines 1100f19f8d1aSBram Moolenaar " Column values does not matter, paste is done at position of cursor. 1101f19f8d1aSBram Moolenaar let col = 1 1102f19f8d1aSBram Moolenaar let @* = 'paste' 1103f19f8d1aSBram Moolenaar 1104515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 1105f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1106f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1107f19f8d1aSBram Moolenaar 1108f19f8d1aSBram Moolenaar call feedkeys(":\"->" 1109f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 1110f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 1111f19f8d1aSBram Moolenaar \ .. "<-" 1112f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 1113f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 1114f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 1115f19f8d1aSBram Moolenaar call assert_equal('"->paste<-paste', @:, msg) 1116f19f8d1aSBram Moolenaar endfor 1117f19f8d1aSBram Moolenaar 1118f19f8d1aSBram Moolenaar let &mouse = save_mouse 1119f19f8d1aSBram Moolenaar let &term = save_term 1120f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 1121f19f8d1aSBram Moolenaar let @* = '' 1122f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 1123f19f8d1aSBram Moolenaarendfunc 1124f19f8d1aSBram Moolenaar 1125297bec07SBram Moolenaar" Test for making sure S-Middlemouse doesn't do anything 1126297bec07SBram Moolenaarfunc Test_term_mouse_shift_middle_click() 1127297bec07SBram Moolenaar new 1128297bec07SBram Moolenaar let save_mouse = &mouse 1129297bec07SBram Moolenaar let save_term = &term 1130297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1131297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1132297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 mousemodel= 1133297bec07SBram Moolenaar 1134297bec07SBram Moolenaar call test_setmouse(1, 1) 1135297bec07SBram Moolenaar exe "normal \<S-MiddleMouse>" 1136297bec07SBram Moolenaar call assert_equal([''], getline(1, '$')) 1137297bec07SBram Moolenaar call assert_equal(1, winnr()) 1138297bec07SBram Moolenaar 1139297bec07SBram Moolenaar let &mouse = save_mouse 1140297bec07SBram Moolenaar let &term = save_term 1141297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1142297bec07SBram Moolenaar set mousemodel& 1143297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1144297bec07SBram Moolenaar close! 1145297bec07SBram Moolenaarendfunc 1146297bec07SBram Moolenaar 1147297bec07SBram Moolenaar" Test for using mouse in visual mode 1148297bec07SBram Moolenaarfunc Test_term_mouse_visual_mode() 1149297bec07SBram Moolenaar new 1150297bec07SBram Moolenaar let save_mouse = &mouse 1151297bec07SBram Moolenaar let save_term = &term 1152297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1153297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1154297bec07SBram Moolenaar set term=xterm ttymouse=xterm2 1155297bec07SBram Moolenaar 1156297bec07SBram Moolenaar " If visual mode is not present in 'mouse', then left click should not 1157297bec07SBram Moolenaar " do anything in visal mode. 1158297bec07SBram Moolenaar call setline(1, ['one two three four']) 1159297bec07SBram Moolenaar set mouse=nci 1160297bec07SBram Moolenaar call cursor(1, 5) 1161297bec07SBram Moolenaar let @" = '' 1162297bec07SBram Moolenaar call feedkeys("ve" 1163297bec07SBram Moolenaar \ .. MouseLeftClickCode(1, 15) .. MouseLeftReleaseCode(1, 15) 1164297bec07SBram Moolenaar \ .. 'y', 'Lx!') 1165297bec07SBram Moolenaar call assert_equal(5, col('.')) 1166297bec07SBram Moolenaar call assert_equal('two', @") 1167297bec07SBram Moolenaar 1168297bec07SBram Moolenaar " Pressing right click in visual mode should change the visual selection 1169297bec07SBram Moolenaar " if 'mousemodel' doesn't contain popup. 1170297bec07SBram Moolenaar " Right click after the visual selection 1171297bec07SBram Moolenaar set mousemodel= 1172297bec07SBram Moolenaar set mouse=a 1173297bec07SBram Moolenaar call test_setmouse(1, 13) 1174297bec07SBram Moolenaar exe "normal 5|ve\<RightMouse>y" 1175297bec07SBram Moolenaar call assert_equal('two three', @") 1176297bec07SBram Moolenaar call assert_equal(5, col('.')) 1177297bec07SBram Moolenaar 1178297bec07SBram Moolenaar " Right click before the visual selection 1179297bec07SBram Moolenaar call test_setmouse(1, 9) 1180297bec07SBram Moolenaar exe "normal 15|ve\<RightMouse>y" 1181297bec07SBram Moolenaar call assert_equal('three four', @") 1182297bec07SBram Moolenaar call assert_equal(9, col('.')) 1183297bec07SBram Moolenaar 11842764d06aSBram Moolenaar " Right click inside the selection closer to the start of the selection 11852764d06aSBram Moolenaar call test_setmouse(1, 7) 11862764d06aSBram Moolenaar exe "normal 5|vee\<RightMouse>lly" 11872764d06aSBram Moolenaar call assert_equal('three', @") 11882764d06aSBram Moolenaar call assert_equal(9, col('.')) 11892764d06aSBram Moolenaar call assert_equal(9, col("'<")) 11902764d06aSBram Moolenaar call assert_equal(13, col("'>")) 11912764d06aSBram Moolenaar 11922764d06aSBram Moolenaar " Right click inside the selection closer to the end of the selection 11932764d06aSBram Moolenaar call test_setmouse(1, 11) 11942764d06aSBram Moolenaar exe "normal 5|vee\<RightMouse>ly" 11952764d06aSBram Moolenaar call assert_equal('two thre', @") 11962764d06aSBram Moolenaar call assert_equal(5, col('.')) 11972764d06aSBram Moolenaar call assert_equal(5, col("'<")) 11982764d06aSBram Moolenaar call assert_equal(12, col("'>")) 11992764d06aSBram Moolenaar 12002764d06aSBram Moolenaar " Multi-line selection. Right click inside thse selection. 12012764d06aSBram Moolenaar call setline(1, repeat(['aaaaaa'], 7)) 1202297bec07SBram Moolenaar call test_setmouse(3, 1) 1203297bec07SBram Moolenaar exe "normal ggVG\<RightMouse>y" 1204297bec07SBram Moolenaar call assert_equal(3, line("'<")) 12052764d06aSBram Moolenaar call test_setmouse(5, 1) 1206297bec07SBram Moolenaar exe "normal ggVG\<RightMouse>y" 12072764d06aSBram Moolenaar call assert_equal(5, line("'>")) 12082764d06aSBram Moolenaar 12092764d06aSBram Moolenaar " Click right in the middle line of the selection 12102764d06aSBram Moolenaar call test_setmouse(4, 3) 12112764d06aSBram Moolenaar exe "normal ggVG$\<RightMouse>y" 12122764d06aSBram Moolenaar call assert_equal(4, line("'<")) 12132764d06aSBram Moolenaar call test_setmouse(4, 4) 12142764d06aSBram Moolenaar exe "normal ggVG$\<RightMouse>y" 1215297bec07SBram Moolenaar call assert_equal(4, line("'>")) 1216297bec07SBram Moolenaar 1217297bec07SBram Moolenaar set mousemodel& 1218297bec07SBram Moolenaar let &mouse = save_mouse 1219297bec07SBram Moolenaar let &term = save_term 1220297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1221297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1222297bec07SBram Moolenaar close! 1223297bec07SBram Moolenaarendfunc 1224297bec07SBram Moolenaar 12250eabd4dcSBram Moolenaar" Test for displaying the popup menu using the right mouse click 1226297bec07SBram Moolenaarfunc Test_term_mouse_popup_menu() 12270eabd4dcSBram Moolenaar CheckFeature menu 12280eabd4dcSBram Moolenaar new 12290eabd4dcSBram Moolenaar call setline(1, 'popup menu test') 12300eabd4dcSBram Moolenaar let save_mouse = &mouse 12310eabd4dcSBram Moolenaar let save_term = &term 12320eabd4dcSBram Moolenaar let save_ttymouse = &ttymouse 12330eabd4dcSBram Moolenaar let save_mousemodel = &mousemodel 12340eabd4dcSBram Moolenaar call test_override('no_query_mouse', 1) 12350eabd4dcSBram Moolenaar set mouse=a term=xterm mousemodel=popup 12360eabd4dcSBram Moolenaar 12370eabd4dcSBram Moolenaar menu PopUp.foo :let g:menustr = 'foo'<CR> 12380eabd4dcSBram Moolenaar menu PopUp.bar :let g:menustr = 'bar'<CR> 12390eabd4dcSBram Moolenaar menu PopUp.baz :let g:menustr = 'baz'<CR> 12400eabd4dcSBram Moolenaar 1241515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 12422764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 12430eabd4dcSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 12440eabd4dcSBram Moolenaar let g:menustr = '' 12450eabd4dcSBram Moolenaar call feedkeys(MouseRightClickCode(1, 4) 12460eabd4dcSBram Moolenaar \ .. MouseRightReleaseCode(1, 4) .. "\<Down>\<Down>\<CR>", "x") 12472764d06aSBram Moolenaar call assert_equal('bar', g:menustr, msg) 12480eabd4dcSBram Moolenaar endfor 12490eabd4dcSBram Moolenaar 12500eabd4dcSBram Moolenaar unmenu PopUp 12510eabd4dcSBram Moolenaar let &mouse = save_mouse 12520eabd4dcSBram Moolenaar let &term = save_term 12530eabd4dcSBram Moolenaar let &ttymouse = save_ttymouse 12540eabd4dcSBram Moolenaar let &mousemodel = save_mousemodel 12550eabd4dcSBram Moolenaar call test_override('no_query_mouse', 0) 12560eabd4dcSBram Moolenaar close! 12570eabd4dcSBram Moolenaarendfunc 12580eabd4dcSBram Moolenaar 1259297bec07SBram Moolenaar" Test for 'mousemodel' set to popup_setpos to move the cursor where the popup 1260297bec07SBram Moolenaar" menu is displayed. 1261297bec07SBram Moolenaarfunc Test_term_mouse_popup_menu_setpos() 1262297bec07SBram Moolenaar CheckFeature menu 1263297bec07SBram Moolenaar 5new 1264297bec07SBram Moolenaar call setline(1, ['the dish ran away with the spoon', 1265297bec07SBram Moolenaar \ 'the cow jumped over the moon' ]) 1266297bec07SBram Moolenaar let save_mouse = &mouse 1267297bec07SBram Moolenaar let save_term = &term 1268297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1269297bec07SBram Moolenaar let save_mousemodel = &mousemodel 1270297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1271297bec07SBram Moolenaar set mouse=a term=xterm mousemodel=popup_setpos 1272297bec07SBram Moolenaar 1273297bec07SBram Moolenaar nmenu PopUp.foo :let g:menustr = 'foo'<CR> 1274297bec07SBram Moolenaar nmenu PopUp.bar :let g:menustr = 'bar'<CR> 1275297bec07SBram Moolenaar nmenu PopUp.baz :let g:menustr = 'baz'<CR> 1276297bec07SBram Moolenaar vmenu PopUp.foo y:<C-U>let g:menustr = 'foo'<CR> 1277297bec07SBram Moolenaar vmenu PopUp.bar y:<C-U>let g:menustr = 'bar'<CR> 1278297bec07SBram Moolenaar vmenu PopUp.baz y:<C-U>let g:menustr = 'baz'<CR> 1279297bec07SBram Moolenaar 1280297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values 12812764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1282297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1283297bec07SBram Moolenaar let g:menustr = '' 1284297bec07SBram Moolenaar call cursor(1, 1) 1285297bec07SBram Moolenaar call feedkeys(MouseRightClickCode(1, 5) 1286297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 5) .. "\<Down>\<Down>\<CR>", "x") 12872764d06aSBram Moolenaar call assert_equal('bar', g:menustr, msg) 12882764d06aSBram Moolenaar call assert_equal([1, 5], [line('.'), col('.')], msg) 1289297bec07SBram Moolenaar 1290297bec07SBram Moolenaar " Test for right click in visual mode inside the selection 1291297bec07SBram Moolenaar let @" = '' 1292297bec07SBram Moolenaar call cursor(1, 10) 1293297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 12) 1294297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 12) .. "\<Down>\<CR>", "x") 12952764d06aSBram Moolenaar call assert_equal([1, 10], [line('.'), col('.')], msg) 12962764d06aSBram Moolenaar call assert_equal('ran away', @", msg) 1297297bec07SBram Moolenaar 1298297bec07SBram Moolenaar " Test for right click in visual mode before the selection 1299297bec07SBram Moolenaar let @" = '' 1300297bec07SBram Moolenaar call cursor(1, 10) 1301297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 2) 1302297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 2) .. "\<Down>\<CR>", "x") 13032764d06aSBram Moolenaar call assert_equal([1, 2], [line('.'), col('.')], msg) 13042764d06aSBram Moolenaar call assert_equal('', @", msg) 1305297bec07SBram Moolenaar 1306297bec07SBram Moolenaar " Test for right click in visual mode after the selection 1307297bec07SBram Moolenaar let @" = '' 1308297bec07SBram Moolenaar call cursor(1, 10) 1309297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 20) 1310297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 20) .. "\<Down>\<CR>", "x") 13112764d06aSBram Moolenaar call assert_equal([1, 20], [line('.'), col('.')], msg) 13122764d06aSBram Moolenaar call assert_equal('', @", msg) 1313297bec07SBram Moolenaar 1314297bec07SBram Moolenaar " Test for right click in block-wise visual mode inside the selection 1315297bec07SBram Moolenaar let @" = '' 1316297bec07SBram Moolenaar call cursor(1, 16) 1317297bec07SBram Moolenaar call feedkeys("\<C-V>j3l" .. MouseRightClickCode(2, 17) 1318297bec07SBram Moolenaar \ .. MouseRightReleaseCode(2, 17) .. "\<Down>\<CR>", "x") 13192764d06aSBram Moolenaar call assert_equal([1, 16], [line('.'), col('.')], msg) 13202764d06aSBram Moolenaar call assert_equal("\<C-V>4", getregtype('"'), msg) 1321297bec07SBram Moolenaar 1322297bec07SBram Moolenaar " Test for right click in block-wise visual mode outside the selection 1323297bec07SBram Moolenaar let @" = '' 1324297bec07SBram Moolenaar call cursor(1, 16) 1325297bec07SBram Moolenaar call feedkeys("\<C-V>j3l" .. MouseRightClickCode(2, 2) 1326297bec07SBram Moolenaar \ .. MouseRightReleaseCode(2, 2) .. "\<Down>\<CR>", "x") 13272764d06aSBram Moolenaar call assert_equal([2, 2], [line('.'), col('.')], msg) 13282764d06aSBram Moolenaar call assert_equal('v', getregtype('"'), msg) 13292764d06aSBram Moolenaar call assert_equal('', @", msg) 1330297bec07SBram Moolenaar 1331297bec07SBram Moolenaar " Try clicking on the status line 1332297bec07SBram Moolenaar let @" = '' 1333297bec07SBram Moolenaar call cursor(1, 10) 1334297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(6, 2) 1335297bec07SBram Moolenaar \ .. MouseRightReleaseCode(6, 2) .. "\<Down>\<CR>", "x") 13362764d06aSBram Moolenaar call assert_equal([1, 10], [line('.'), col('.')], msg) 13372764d06aSBram Moolenaar call assert_equal('ran away', @", msg) 1338297bec07SBram Moolenaar 1339297bec07SBram Moolenaar " Try clicking outside the window 1340297bec07SBram Moolenaar let @" = '' 1341297bec07SBram Moolenaar call cursor(7, 2) 1342297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(7, 2) 1343297bec07SBram Moolenaar \ .. MouseRightReleaseCode(7, 2) .. "\<Down>\<CR>", "x") 13442764d06aSBram Moolenaar call assert_equal(2, winnr(), msg) 13452764d06aSBram Moolenaar call assert_equal('', @", msg) 1346297bec07SBram Moolenaar wincmd w 1347297bec07SBram Moolenaar endfor 1348297bec07SBram Moolenaar 1349297bec07SBram Moolenaar unmenu PopUp 1350297bec07SBram Moolenaar let &mouse = save_mouse 1351297bec07SBram Moolenaar let &term = save_term 1352297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1353297bec07SBram Moolenaar let &mousemodel = save_mousemodel 1354297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1355297bec07SBram Moolenaar close! 1356297bec07SBram Moolenaarendfunc 1357297bec07SBram Moolenaar 1358297bec07SBram Moolenaar" Test for searching for the word under the cursor using Shift-Right or 1359297bec07SBram Moolenaar" Shift-Left click. 1360297bec07SBram Moolenaarfunc Test_term_mouse_search() 1361297bec07SBram Moolenaar new 1362297bec07SBram Moolenaar let save_mouse = &mouse 1363297bec07SBram Moolenaar let save_term = &term 1364297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1365297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1366297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 1367297bec07SBram Moolenaar set mousemodel= 1368297bec07SBram Moolenaar 1369297bec07SBram Moolenaar " In normal mode, Shift-Left or Shift-Right click should search for the word 1370297bec07SBram Moolenaar " under the cursor. 1371297bec07SBram Moolenaar call setline(1, ['one two three four', 'four three two one']) 1372297bec07SBram Moolenaar call test_setmouse(1, 4) 1373297bec07SBram Moolenaar exe "normal \<S-LeftMouse>" 1374297bec07SBram Moolenaar call assert_equal([2, 12], [line('.'), col('.')]) 1375297bec07SBram Moolenaar call test_setmouse(2, 16) 1376297bec07SBram Moolenaar exe "normal \<S-RightMouse>" 1377297bec07SBram Moolenaar call assert_equal([1, 1], [line('.'), col('.')]) 1378297bec07SBram Moolenaar 1379297bec07SBram Moolenaar " In visual mode, Shift-Left or Shift-Right click should search for the word 1380297bec07SBram Moolenaar " under the cursor and extend the selection. 1381297bec07SBram Moolenaar call test_setmouse(1, 4) 1382297bec07SBram Moolenaar exe "normal 4|ve\<S-LeftMouse>y" 1383297bec07SBram Moolenaar call assert_equal([2, 12], [line("'>"), col("'>")]) 1384297bec07SBram Moolenaar call test_setmouse(2, 16) 1385297bec07SBram Moolenaar exe "normal 2G16|ve\<S-RightMouse>y" 1386297bec07SBram Moolenaar call assert_equal([1, 1], [line("'<"), col("'<")]) 1387297bec07SBram Moolenaar 1388297bec07SBram Moolenaar set mousemodel& 1389297bec07SBram Moolenaar let &mouse = save_mouse 1390297bec07SBram Moolenaar let &term = save_term 1391297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1392297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1393297bec07SBram Moolenaar close! 1394297bec07SBram Moolenaarendfunc 1395297bec07SBram Moolenaar 1396297bec07SBram Moolenaar" Test for selecting an entry in the quickfix/location list window using the 1397297bec07SBram Moolenaar" mouse. 1398297bec07SBram Moolenaarfunc Test_term_mouse_quickfix_window() 1399297bec07SBram Moolenaar let save_mouse = &mouse 1400297bec07SBram Moolenaar let save_term = &term 1401297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1402297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1403297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 1404297bec07SBram Moolenaar set mousemodel= 1405297bec07SBram Moolenaar 1406297bec07SBram Moolenaar cgetexpr "Xfile1:1:L1" 1407297bec07SBram Moolenaar copen 5 1408297bec07SBram Moolenaar call test_setmouse(&lines - 7, 1) 1409297bec07SBram Moolenaar exe "normal \<2-LeftMouse>" 1410297bec07SBram Moolenaar call assert_equal('Xfile1', @%) 1411297bec07SBram Moolenaar %bw! 1412297bec07SBram Moolenaar 1413297bec07SBram Moolenaar lgetexpr "Xfile2:1:L1" 1414297bec07SBram Moolenaar lopen 5 1415297bec07SBram Moolenaar call test_setmouse(&lines - 7, 1) 1416297bec07SBram Moolenaar exe "normal \<2-LeftMouse>" 1417297bec07SBram Moolenaar call assert_equal('Xfile2', @%) 1418297bec07SBram Moolenaar %bw! 1419297bec07SBram Moolenaar 1420297bec07SBram Moolenaar set mousemodel& 1421297bec07SBram Moolenaar let &mouse = save_mouse 1422297bec07SBram Moolenaar let &term = save_term 1423297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1424297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1425297bec07SBram Moolenaarendfunc 1426297bec07SBram Moolenaar 14272764d06aSBram Moolenaar" Test for the 'h' flag in the 'mouse' option. Using mouse in the help window. 14282764d06aSBram Moolenaarfunc Test_term_mouse_help_window() 14292764d06aSBram Moolenaar let save_mouse = &mouse 14302764d06aSBram Moolenaar let save_term = &term 14312764d06aSBram Moolenaar let save_ttymouse = &ttymouse 14322764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 14332764d06aSBram Moolenaar set mouse=h term=xterm mousetime=200 14342764d06aSBram Moolenaar 14352764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 14362764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 14372764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 14382764d06aSBram Moolenaar help 14392764d06aSBram Moolenaar let @" = '' 14402764d06aSBram Moolenaar call MouseLeftClick(2, 5) 14412764d06aSBram Moolenaar call MouseLeftRelease(2, 5) 14422764d06aSBram Moolenaar call MouseLeftClick(1, 1) 14432764d06aSBram Moolenaar call MouseLeftDrag(1, 10) 14442764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 14452764d06aSBram Moolenaar norm! y 14462764d06aSBram Moolenaar call assert_equal('*help.txt*', @", msg) 14472764d06aSBram Moolenaar helpclose 14482764d06aSBram Moolenaar 14492764d06aSBram Moolenaar " Click somewhere else to make sure the left click above is not combined 14502764d06aSBram Moolenaar " with the next left click and treated as a double click 14512764d06aSBram Moolenaar call MouseRightClick(5, 10) 14522764d06aSBram Moolenaar call MouseRightRelease(5, 10) 14532764d06aSBram Moolenaar endfor 14542764d06aSBram Moolenaar 14552764d06aSBram Moolenaar let &mouse = save_mouse 14562764d06aSBram Moolenaar let &term = save_term 14572764d06aSBram Moolenaar let &ttymouse = save_ttymouse 14582764d06aSBram Moolenaar set mousetime& 14592764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 14602764d06aSBram Moolenaar %bw! 14612764d06aSBram Moolenaarendfunc 14622764d06aSBram Moolenaar 14632764d06aSBram Moolenaar" Test for the translation of various mouse terminal codes 14642764d06aSBram Moolenaarfunc Test_mouse_termcodes() 14652764d06aSBram Moolenaar let save_mouse = &mouse 14662764d06aSBram Moolenaar let save_term = &term 14672764d06aSBram Moolenaar let save_ttymouse = &ttymouse 14682764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 14692764d06aSBram Moolenaar set mouse=a term=xterm mousetime=200 14702764d06aSBram Moolenaar 14712764d06aSBram Moolenaar new 14722764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 14732764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 14742764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 14752764d06aSBram Moolenaar 14762764d06aSBram Moolenaar let mouse_codes = [ 14772764d06aSBram Moolenaar \ ["\<LeftMouse>", "<LeftMouse>"], 14782764d06aSBram Moolenaar \ ["\<MiddleMouse>", "<MiddleMouse>"], 14792764d06aSBram Moolenaar \ ["\<RightMouse>", "<RightMouse>"], 14802764d06aSBram Moolenaar \ ["\<S-LeftMouse>", "<S-LeftMouse>"], 14812764d06aSBram Moolenaar \ ["\<S-MiddleMouse>", "<S-MiddleMouse>"], 14822764d06aSBram Moolenaar \ ["\<S-RightMouse>", "<S-RightMouse>"], 14832764d06aSBram Moolenaar \ ["\<C-LeftMouse>", "<C-LeftMouse>"], 14842764d06aSBram Moolenaar \ ["\<C-MiddleMouse>", "<C-MiddleMouse>"], 14852764d06aSBram Moolenaar \ ["\<C-RightMouse>", "<C-RightMouse>"], 14862764d06aSBram Moolenaar \ ["\<M-LeftMouse>", "<M-LeftMouse>"], 14872764d06aSBram Moolenaar \ ["\<M-MiddleMouse>", "<M-MiddleMouse>"], 14882764d06aSBram Moolenaar \ ["\<M-RightMouse>", "<M-RightMouse>"], 14892764d06aSBram Moolenaar \ ["\<2-LeftMouse>", "<2-LeftMouse>"], 14902764d06aSBram Moolenaar \ ["\<2-MiddleMouse>", "<2-MiddleMouse>"], 14912764d06aSBram Moolenaar \ ["\<2-RightMouse>", "<2-RightMouse>"], 14922764d06aSBram Moolenaar \ ["\<3-LeftMouse>", "<3-LeftMouse>"], 14932764d06aSBram Moolenaar \ ["\<3-MiddleMouse>", "<3-MiddleMouse>"], 14942764d06aSBram Moolenaar \ ["\<3-RightMouse>", "<3-RightMouse>"], 14952764d06aSBram Moolenaar \ ["\<4-LeftMouse>", "<4-LeftMouse>"], 14962764d06aSBram Moolenaar \ ["\<4-MiddleMouse>", "<4-MiddleMouse>"], 14972764d06aSBram Moolenaar \ ["\<4-RightMouse>", "<4-RightMouse>"], 14982764d06aSBram Moolenaar \ ["\<LeftDrag>", "<LeftDrag>"], 14992764d06aSBram Moolenaar \ ["\<MiddleDrag>", "<MiddleDrag>"], 15002764d06aSBram Moolenaar \ ["\<RightDrag>", "<RightDrag>"], 15012764d06aSBram Moolenaar \ ["\<LeftRelease>", "<LeftRelease>"], 15022764d06aSBram Moolenaar \ ["\<MiddleRelease>", "<MiddleRelease>"], 15032764d06aSBram Moolenaar \ ["\<RightRelease>", "<RightRelease>"], 15042764d06aSBram Moolenaar \ ["\<ScrollWheelUp>", "<ScrollWheelUp>"], 15052764d06aSBram Moolenaar \ ["\<S-ScrollWheelUp>", "<S-ScrollWheelUp>"], 15062764d06aSBram Moolenaar \ ["\<C-ScrollWheelUp>", "<C-ScrollWheelUp>"], 15072764d06aSBram Moolenaar \ ["\<ScrollWheelDown>", "<ScrollWheelDown>"], 15082764d06aSBram Moolenaar \ ["\<S-ScrollWheelDown>", "<S-ScrollWheelDown>"], 15092764d06aSBram Moolenaar \ ["\<C-ScrollWheelDown>", "<C-ScrollWheelDown>"], 15102764d06aSBram Moolenaar \ ["\<ScrollWheelLeft>", "<ScrollWheelLeft>"], 15112764d06aSBram Moolenaar \ ["\<S-ScrollWheelLeft>", "<S-ScrollWheelLeft>"], 15122764d06aSBram Moolenaar \ ["\<C-ScrollWheelLeft>", "<C-ScrollWheelLeft>"], 15132764d06aSBram Moolenaar \ ["\<ScrollWheelRight>", "<ScrollWheelRight>"], 15142764d06aSBram Moolenaar \ ["\<S-ScrollWheelRight>", "<S-ScrollWheelRight>"], 15152764d06aSBram Moolenaar \ ["\<C-ScrollWheelRight>", "<C-ScrollWheelRight>"] 15162764d06aSBram Moolenaar \ ] 15172764d06aSBram Moolenaar 15182764d06aSBram Moolenaar for [code, outstr] in mouse_codes 15192764d06aSBram Moolenaar exe "normal ggC\<C-K>" . code 15202764d06aSBram Moolenaar call assert_equal(outstr, getline(1), msg) 15212764d06aSBram Moolenaar endfor 15222764d06aSBram Moolenaar endfor 15232764d06aSBram Moolenaar 15242764d06aSBram Moolenaar let &mouse = save_mouse 15252764d06aSBram Moolenaar let &term = save_term 15262764d06aSBram Moolenaar let &ttymouse = save_ttymouse 15272764d06aSBram Moolenaar set mousetime& 15282764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 15292764d06aSBram Moolenaar %bw! 15302764d06aSBram Moolenaarendfunc 15312764d06aSBram Moolenaar 153266761db1SBram Moolenaar" This only checks if the sequence is recognized. 153366761db1SBram Moolenaarfunc Test_term_rgb_response() 153466761db1SBram Moolenaar set t_RF=x 153566761db1SBram Moolenaar set t_RB=y 153666761db1SBram Moolenaar 153766761db1SBram Moolenaar " response to t_RF, 4 digits 153866761db1SBram Moolenaar let red = 0x12 153966761db1SBram Moolenaar let green = 0x34 154066761db1SBram Moolenaar let blue = 0x56 154166761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 154266761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 154366761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 154466761db1SBram Moolenaar 154566761db1SBram Moolenaar " response to t_RF, 2 digits 154666761db1SBram Moolenaar let red = 0x78 154766761db1SBram Moolenaar let green = 0x9a 154866761db1SBram Moolenaar let blue = 0xbc 154966761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 155066761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 155166761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 155266761db1SBram Moolenaar 155332e19770SBram Moolenaar " response to t_RB, 4 digits, dark 155432e19770SBram Moolenaar set background=light 1555ce90e36fSBram Moolenaar eval 'background'->test_option_not_set() 155632e19770SBram Moolenaar let red = 0x29 155732e19770SBram Moolenaar let green = 0x4a 155832e19770SBram Moolenaar let blue = 0x6b 155932e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 156032e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 156132e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 156232e19770SBram Moolenaar call assert_equal('dark', &background) 156332e19770SBram Moolenaar 156432e19770SBram Moolenaar " response to t_RB, 4 digits, light 156532e19770SBram Moolenaar set background=dark 156632e19770SBram Moolenaar call test_option_not_set('background') 156732e19770SBram Moolenaar let red = 0x81 156832e19770SBram Moolenaar let green = 0x63 156966761db1SBram Moolenaar let blue = 0x65 157066761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 157166761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 157266761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 157332e19770SBram Moolenaar call assert_equal('light', &background) 157466761db1SBram Moolenaar 157532e19770SBram Moolenaar " response to t_RB, 2 digits, dark 157632e19770SBram Moolenaar set background=light 157732e19770SBram Moolenaar call test_option_not_set('background') 157832e19770SBram Moolenaar let red = 0x47 157932e19770SBram Moolenaar let green = 0x59 158032e19770SBram Moolenaar let blue = 0x5b 158166761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 158266761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 158366761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 158432e19770SBram Moolenaar call assert_equal('dark', &background) 158532e19770SBram Moolenaar 158632e19770SBram Moolenaar " response to t_RB, 2 digits, light 158732e19770SBram Moolenaar set background=dark 158832e19770SBram Moolenaar call test_option_not_set('background') 158932e19770SBram Moolenaar let red = 0x83 159032e19770SBram Moolenaar let green = 0xa4 159132e19770SBram Moolenaar let blue = 0xc2 159232e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 159332e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 159432e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 159532e19770SBram Moolenaar call assert_equal('light', &background) 159666761db1SBram Moolenaar 159766761db1SBram Moolenaar set t_RF= t_RB= 159866761db1SBram Moolenaarendfunc 159966761db1SBram Moolenaar 160066761db1SBram Moolenaar" This only checks if the sequence is recognized. 16011a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 16021a4cbb19SBram Moolenaar" properties. 16031a4cbb19SBram Moolenaarfunc Test_xx01_term_style_response() 160466761db1SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 160566761db1SBram Moolenaar set t_RV=x 16060c0eddd3SBram Moolenaar call test_override('term_props', 1) 160766761db1SBram Moolenaar 160866761db1SBram Moolenaar " send the termresponse to trigger requesting the XT codes 160966761db1SBram Moolenaar let seq = "\<Esc>[>41;337;0c" 161066761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 161166761db1SBram Moolenaar call assert_equal(seq, v:termresponse) 161266761db1SBram Moolenaar 161366761db1SBram Moolenaar let seq = "\<Esc>P1$r2 q\<Esc>\\" 161466761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 161566761db1SBram Moolenaar call assert_equal(seq, v:termstyleresp) 161666761db1SBram Moolenaar 16170c0eddd3SBram Moolenaar call assert_equal(#{ 16180c0eddd3SBram Moolenaar \ cursor_style: 'u', 16190c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16200c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16210c0eddd3SBram Moolenaar \ mouse: 's' 16220c0eddd3SBram Moolenaar \ }, terminalprops()) 16230c0eddd3SBram Moolenaar 162466761db1SBram Moolenaar set t_RV= 16250c0eddd3SBram Moolenaar call test_override('term_props', 0) 162666761db1SBram Moolenaarendfunc 1627de6dbb45SBram Moolenaar 162889577b3bSBram Moolenaar" This checks the iTerm2 version response. 162989577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 163089577b3bSBram Moolenaar" properties. 163189577b3bSBram Moolenaarfunc Test_xx02_iTerm2_response() 163289577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 163389577b3bSBram Moolenaar set t_RV=x 16340c0eddd3SBram Moolenaar call test_override('term_props', 1) 163589577b3bSBram Moolenaar 163689577b3bSBram Moolenaar " Old versions of iTerm2 used a different style term response. 163789577b3bSBram Moolenaar set ttymouse=xterm 163889577b3bSBram Moolenaar call test_option_not_set('ttymouse') 163989577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;c" 164089577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 164189577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 164289577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 164389577b3bSBram Moolenaar 164489577b3bSBram Moolenaar set ttymouse=xterm 164589577b3bSBram Moolenaar call test_option_not_set('ttymouse') 164689577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;0c" 164789577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 164889577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 164989577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 165089577b3bSBram Moolenaar 16510c0eddd3SBram Moolenaar call assert_equal(#{ 16520c0eddd3SBram Moolenaar \ cursor_style: 'n', 16530c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16540c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16550c0eddd3SBram Moolenaar \ mouse: 's' 16560c0eddd3SBram Moolenaar \ }, terminalprops()) 16570c0eddd3SBram Moolenaar 165889577b3bSBram Moolenaar set t_RV= 16590c0eddd3SBram Moolenaar call test_override('term_props', 0) 166089577b3bSBram Moolenaarendfunc 166189577b3bSBram Moolenaar 16621a4cbb19SBram Moolenaar" This checks the libvterm version response. 16631a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 16641a4cbb19SBram Moolenaar" properties. 166589577b3bSBram Moolenaarfunc Test_xx03_libvterm_response() 16661a4cbb19SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 16671a4cbb19SBram Moolenaar set t_RV=x 16680c0eddd3SBram Moolenaar call test_override('term_props', 1) 166903b00476SBram Moolenaar 16701a4cbb19SBram Moolenaar set ttymouse=xterm 16711a4cbb19SBram Moolenaar call test_option_not_set('ttymouse') 16721a4cbb19SBram Moolenaar let seq = "\<Esc>[>0;100;0c" 16731a4cbb19SBram Moolenaar call feedkeys(seq, 'Lx!') 16741a4cbb19SBram Moolenaar call assert_equal(seq, v:termresponse) 16751a4cbb19SBram Moolenaar call assert_equal('sgr', &ttymouse) 16761a4cbb19SBram Moolenaar 16770c0eddd3SBram Moolenaar call assert_equal(#{ 16780c0eddd3SBram Moolenaar \ cursor_style: 'n', 16790c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16800c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16810c0eddd3SBram Moolenaar \ mouse: 's' 16820c0eddd3SBram Moolenaar \ }, terminalprops()) 16830c0eddd3SBram Moolenaar 16841a4cbb19SBram Moolenaar set t_RV= 16850c0eddd3SBram Moolenaar call test_override('term_props', 0) 16861a4cbb19SBram Moolenaarendfunc 16871a4cbb19SBram Moolenaar 168889577b3bSBram Moolenaar" This checks the Mac Terminal.app version response. 168989577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 169089577b3bSBram Moolenaar" properties. 169189577b3bSBram Moolenaarfunc Test_xx04_Mac_Terminal_response() 169289577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 169389577b3bSBram Moolenaar set t_RV=x 16940c0eddd3SBram Moolenaar call test_override('term_props', 1) 169589577b3bSBram Moolenaar 169689577b3bSBram Moolenaar set ttymouse=xterm 16978dff4cbfSBram Moolenaar " t_8u is not reset 16988dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 169989577b3bSBram Moolenaar call test_option_not_set('ttymouse') 170089577b3bSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 170189577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 170289577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 170389577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 170489577b3bSBram Moolenaar 17050c0eddd3SBram Moolenaar call assert_equal(#{ 17060c0eddd3SBram Moolenaar \ cursor_style: 'n', 17070c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 17080c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17090c0eddd3SBram Moolenaar \ mouse: 's' 17100c0eddd3SBram Moolenaar \ }, terminalprops()) 17118dff4cbfSBram Moolenaar call assert_equal("\<Esc>[58;2;%lu;%lu;%lum", &t_8u) 17120c0eddd3SBram Moolenaar 171389577b3bSBram Moolenaar " Reset is_not_xterm and is_mac_terminal. 171489577b3bSBram Moolenaar set t_RV= 171589577b3bSBram Moolenaar set term=xterm 171689577b3bSBram Moolenaar set t_RV=x 17170c0eddd3SBram Moolenaar call test_override('term_props', 0) 171889577b3bSBram Moolenaarendfunc 171989577b3bSBram Moolenaar 172089577b3bSBram Moolenaar" This checks the mintty version response. 172189577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 172289577b3bSBram Moolenaar" properties. 172389577b3bSBram Moolenaarfunc Test_xx05_mintty_response() 172489577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 172589577b3bSBram Moolenaar set t_RV=x 17260c0eddd3SBram Moolenaar call test_override('term_props', 1) 172789577b3bSBram Moolenaar 172889577b3bSBram Moolenaar set ttymouse=xterm 172989577b3bSBram Moolenaar call test_option_not_set('ttymouse') 173089577b3bSBram Moolenaar let seq = "\<Esc>[>77;20905;0c" 173189577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 173289577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 173389577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 173489577b3bSBram Moolenaar 17350c0eddd3SBram Moolenaar call assert_equal(#{ 17360c0eddd3SBram Moolenaar \ cursor_style: 'n', 17370c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 17380c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17390c0eddd3SBram Moolenaar \ mouse: 's' 17400c0eddd3SBram Moolenaar \ }, terminalprops()) 17410c0eddd3SBram Moolenaar 174289577b3bSBram Moolenaar set t_RV= 17430c0eddd3SBram Moolenaar call test_override('term_props', 0) 174489577b3bSBram Moolenaarendfunc 174589577b3bSBram Moolenaar 174689577b3bSBram Moolenaar" This checks the screen version response. 174789577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 174889577b3bSBram Moolenaar" properties. 174989577b3bSBram Moolenaarfunc Test_xx06_screen_response() 175089577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 175189577b3bSBram Moolenaar set t_RV=x 17520c0eddd3SBram Moolenaar call test_override('term_props', 1) 175389577b3bSBram Moolenaar 175489577b3bSBram Moolenaar " Old versions of screen don't support SGR mouse mode. 175589577b3bSBram Moolenaar set ttymouse=xterm 175689577b3bSBram Moolenaar call test_option_not_set('ttymouse') 175789577b3bSBram Moolenaar let seq = "\<Esc>[>83;40500;0c" 175889577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 175989577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 176089577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 176189577b3bSBram Moolenaar 176289577b3bSBram Moolenaar " screen supports SGR mouse mode starting in version 4.7. 176389577b3bSBram Moolenaar set ttymouse=xterm 176489577b3bSBram Moolenaar call test_option_not_set('ttymouse') 176589577b3bSBram Moolenaar let seq = "\<Esc>[>83;40700;0c" 176689577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 176789577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 176889577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 176989577b3bSBram Moolenaar 17700c0eddd3SBram Moolenaar call assert_equal(#{ 17710c0eddd3SBram Moolenaar \ cursor_style: 'n', 17720c0eddd3SBram Moolenaar \ cursor_blink_mode: 'n', 17730c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17740c0eddd3SBram Moolenaar \ mouse: 's' 17750c0eddd3SBram Moolenaar \ }, terminalprops()) 17760c0eddd3SBram Moolenaar 177789577b3bSBram Moolenaar set t_RV= 17780c0eddd3SBram Moolenaar call test_override('term_props', 0) 177989577b3bSBram Moolenaarendfunc 178089577b3bSBram Moolenaar 178103b00476SBram Moolenaar" This checks the xterm version response. 178203b00476SBram Moolenaar" This must be after other tests, because it has side effects to xterm 178303b00476SBram Moolenaar" properties. 178489577b3bSBram Moolenaarfunc Test_xx07_xterm_response() 178503b00476SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 178603b00476SBram Moolenaar set t_RV=x 17870c0eddd3SBram Moolenaar call test_override('term_props', 1) 178803b00476SBram Moolenaar 17893cea8a9aSBram Moolenaar " Do Terminal.app first to check that is_mac_terminal is reset. 17903cea8a9aSBram Moolenaar set ttymouse=xterm 17913cea8a9aSBram Moolenaar call test_option_not_set('ttymouse') 17923cea8a9aSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 17933cea8a9aSBram Moolenaar call feedkeys(seq, 'Lx!') 17943cea8a9aSBram Moolenaar call assert_equal(seq, v:termresponse) 17953cea8a9aSBram Moolenaar call assert_equal('sgr', &ttymouse) 17963cea8a9aSBram Moolenaar 179703b00476SBram Moolenaar " xterm < 95: "xterm" (actually unmodified) 17983cea8a9aSBram Moolenaar set t_RV= 17993cea8a9aSBram Moolenaar set term=xterm 18003cea8a9aSBram Moolenaar set t_RV=x 180103b00476SBram Moolenaar set ttymouse=xterm 180203b00476SBram Moolenaar call test_option_not_set('ttymouse') 180303b00476SBram Moolenaar let seq = "\<Esc>[>0;94;0c" 180403b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 180503b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 180603b00476SBram Moolenaar call assert_equal('xterm', &ttymouse) 180703b00476SBram Moolenaar 18080c0eddd3SBram Moolenaar call assert_equal(#{ 18090c0eddd3SBram Moolenaar \ cursor_style: 'n', 18100c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18110c0eddd3SBram Moolenaar \ underline_rgb: 'y', 18120c0eddd3SBram Moolenaar \ mouse: 'u' 18130c0eddd3SBram Moolenaar \ }, terminalprops()) 18140c0eddd3SBram Moolenaar 181503b00476SBram Moolenaar " xterm >= 95 < 277 "xterm2" 181603b00476SBram Moolenaar set ttymouse=xterm 181703b00476SBram Moolenaar call test_option_not_set('ttymouse') 181803b00476SBram Moolenaar let seq = "\<Esc>[>0;267;0c" 181903b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 182003b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 182103b00476SBram Moolenaar call assert_equal('xterm2', &ttymouse) 182203b00476SBram Moolenaar 18230c0eddd3SBram Moolenaar call assert_equal(#{ 18240c0eddd3SBram Moolenaar \ cursor_style: 'n', 18250c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18260c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18270c0eddd3SBram Moolenaar \ mouse: '2' 18280c0eddd3SBram Moolenaar \ }, terminalprops()) 18290c0eddd3SBram Moolenaar 183003b00476SBram Moolenaar " xterm >= 277: "sgr" 183103b00476SBram Moolenaar set ttymouse=xterm 183203b00476SBram Moolenaar call test_option_not_set('ttymouse') 183303b00476SBram Moolenaar let seq = "\<Esc>[>0;277;0c" 183403b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 183503b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 183603b00476SBram Moolenaar call assert_equal('sgr', &ttymouse) 183703b00476SBram Moolenaar 18380c0eddd3SBram Moolenaar call assert_equal(#{ 18390c0eddd3SBram Moolenaar \ cursor_style: 'n', 18400c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18410c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18420c0eddd3SBram Moolenaar \ mouse: 's' 18430c0eddd3SBram Moolenaar \ }, terminalprops()) 18440c0eddd3SBram Moolenaar 18458dff4cbfSBram Moolenaar " xterm >= 279: "sgr" and cursor_style not reset; also check t_8u reset 18460c0eddd3SBram Moolenaar set ttymouse=xterm 18470c0eddd3SBram Moolenaar call test_option_not_set('ttymouse') 18488dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 18490c0eddd3SBram Moolenaar let seq = "\<Esc>[>0;279;0c" 18500c0eddd3SBram Moolenaar call feedkeys(seq, 'Lx!') 18510c0eddd3SBram Moolenaar call assert_equal(seq, v:termresponse) 18520c0eddd3SBram Moolenaar call assert_equal('sgr', &ttymouse) 18530c0eddd3SBram Moolenaar 18540c0eddd3SBram Moolenaar call assert_equal(#{ 18550c0eddd3SBram Moolenaar \ cursor_style: 'u', 18560c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18570c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18580c0eddd3SBram Moolenaar \ mouse: 's' 18590c0eddd3SBram Moolenaar \ }, terminalprops()) 18608dff4cbfSBram Moolenaar call assert_equal('', &t_8u) 18610c0eddd3SBram Moolenaar 186203b00476SBram Moolenaar set t_RV= 18630c0eddd3SBram Moolenaar call test_override('term_props', 0) 186403b00476SBram Moolenaarendfunc 186503b00476SBram Moolenaar 1866de6dbb45SBram Moolenaarfunc Test_get_termcode() 1867eb66328bSBram Moolenaar try 1868de6dbb45SBram Moolenaar let k1 = &t_k1 1869eb66328bSBram Moolenaar catch /E113/ 1870eb66328bSBram Moolenaar throw 'Skipped: Unable to query termcodes' 1871eb66328bSBram Moolenaar endtry 1872de6dbb45SBram Moolenaar set t_k1= 1873de6dbb45SBram Moolenaar set t_k1& 1874de6dbb45SBram Moolenaar call assert_equal(k1, &t_k1) 18759aeb3363SBram Moolenaar 18769aeb3363SBram Moolenaar " use external termcap first 18779aeb3363SBram Moolenaar set nottybuiltin 18789aeb3363SBram Moolenaar set t_k1= 18799aeb3363SBram Moolenaar set t_k1& 18809aeb3363SBram Moolenaar " when using external termcap may get something else, but it must not be 18819aeb3363SBram Moolenaar " empty, since we would fallback to the builtin one. 18829aeb3363SBram Moolenaar call assert_notequal('', &t_k1) 18839aeb3363SBram Moolenaar 18849aeb3363SBram Moolenaar if &term =~ 'xterm' 18859aeb3363SBram Moolenaar " use internal termcap first 18869aeb3363SBram Moolenaar let term_save = &term 18879aeb3363SBram Moolenaar let &term = 'builtin_' .. &term 18889aeb3363SBram Moolenaar set t_k1= 18899aeb3363SBram Moolenaar set t_k1& 18909aeb3363SBram Moolenaar call assert_equal(k1, &t_k1) 18919aeb3363SBram Moolenaar let &term = term_save 18929aeb3363SBram Moolenaar endif 18939aeb3363SBram Moolenaar 18949aeb3363SBram Moolenaar set ttybuiltin 1895de6dbb45SBram Moolenaarendfunc 189618a79a68SBram Moolenaar 1897ecd34bf5SBram Moolenaarfunc Test_list_builtin_terminals() 1898e46a2ed0SBram Moolenaar CheckRunVimInTerminal 1899ecd34bf5SBram Moolenaar let buf = RunVimInTerminal('', #{rows: 14}) 1900ecd34bf5SBram Moolenaar call term_sendkeys(buf, ":set cmdheight=3\<CR>") 1901*733d259aSBram Moolenaar call TermWait(buf, 100) 1902ecd34bf5SBram Moolenaar call term_sendkeys(buf, ":set term=xxx\<CR>") 1903*733d259aSBram Moolenaar call TermWait(buf, 100) 1904ecd34bf5SBram Moolenaar call assert_match('builtin_dumb', term_getline(buf, 11)) 1905ecd34bf5SBram Moolenaar call assert_match('Not found in termcap', term_getline(buf, 12)) 1906ecd34bf5SBram Moolenaar call StopVimInTerminal(buf) 1907ecd34bf5SBram Moolenaarendfunc 1908ecd34bf5SBram Moolenaar 190918a79a68SBram Moolenaarfunc GetEscCodeCSI27(key, modifier) 191018a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 191118a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 191218a79a68SBram Moolenaar return "\<Esc>[27;" .. mod .. ';' .. key .. '~' 191318a79a68SBram Moolenaarendfunc 191418a79a68SBram Moolenaar 191518a79a68SBram Moolenaarfunc GetEscCodeCSIu(key, modifier) 191618a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 191718a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 191818a79a68SBram Moolenaar return "\<Esc>[" .. key .. ';' .. mod .. 'u' 191918a79a68SBram Moolenaarendfunc 192018a79a68SBram Moolenaar 192118a79a68SBram Moolenaar" This checks the CSI sequences when in modifyOtherKeys mode. 192218a79a68SBram Moolenaar" The mode doesn't need to be enabled, the codes are always detected. 192318a79a68SBram Moolenaarfunc RunTest_modifyOtherKeys(func) 192418a79a68SBram Moolenaar new 1925459fd785SBram Moolenaar set timeoutlen=10 192618a79a68SBram Moolenaar 1927f19f8d1aSBram Moolenaar " Shift-X is sent as 'X' with the shift modifier 192818a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 2) .. "\<Esc>", 'Lx!') 192918a79a68SBram Moolenaar call assert_equal('X', getline(1)) 193018a79a68SBram Moolenaar 193118a79a68SBram Moolenaar " Ctrl-i is Tab 193218a79a68SBram Moolenaar call setline(1, '') 193318a79a68SBram Moolenaar call feedkeys('a' .. a:func('i', 5) .. "\<Esc>", 'Lx!') 193418a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 193518a79a68SBram Moolenaar 193618a79a68SBram Moolenaar " Ctrl-I is also Tab 193718a79a68SBram Moolenaar call setline(1, '') 193818a79a68SBram Moolenaar call feedkeys('a' .. a:func('I', 5) .. "\<Esc>", 'Lx!') 193918a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 194018a79a68SBram Moolenaar 194118a79a68SBram Moolenaar " Alt-x is ø 194218a79a68SBram Moolenaar call setline(1, '') 194318a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 3) .. "\<Esc>", 'Lx!') 194418a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 194518a79a68SBram Moolenaar 194618a79a68SBram Moolenaar " Meta-x is also ø 194718a79a68SBram Moolenaar call setline(1, '') 194818a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 9) .. "\<Esc>", 'Lx!') 194918a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 195018a79a68SBram Moolenaar 195118a79a68SBram Moolenaar " Alt-X is Ø 195218a79a68SBram Moolenaar call setline(1, '') 195318a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 3) .. "\<Esc>", 'Lx!') 195418a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 195518a79a68SBram Moolenaar 195618a79a68SBram Moolenaar " Meta-X is ø 195718a79a68SBram Moolenaar call setline(1, '') 195818a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 9) .. "\<Esc>", 'Lx!') 195918a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 196018a79a68SBram Moolenaar 1961828ffd59SBram Moolenaar " Ctrl-6 is Ctrl-^ 1962828ffd59SBram Moolenaar split aaa 1963828ffd59SBram Moolenaar edit bbb 1964828ffd59SBram Moolenaar call feedkeys(a:func('6', 5), 'Lx!') 1965828ffd59SBram Moolenaar call assert_equal("aaa", bufname()) 1966828ffd59SBram Moolenaar bwipe aaa 1967828ffd59SBram Moolenaar bwipe bbb 1968828ffd59SBram Moolenaar 196918a79a68SBram Moolenaar bwipe! 197018a79a68SBram Moolenaar set timeoutlen& 197118a79a68SBram Moolenaarendfunc 197218a79a68SBram Moolenaar 1973459fd785SBram Moolenaarfunc Test_modifyOtherKeys_basic() 197418a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSI27')) 197518a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSIu')) 197618a79a68SBram Moolenaarendfunc 1977d1e2f398SBram Moolenaar 197838571a04SBram Moolenaarfunc Test_modifyOtherKeys_no_mapping() 197938571a04SBram Moolenaar set timeoutlen=10 198038571a04SBram Moolenaar 198138571a04SBram Moolenaar let @a = 'aaa' 198238571a04SBram Moolenaar call feedkeys(":let x = '" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a'\<CR>", 'Lx!') 198338571a04SBram Moolenaar call assert_equal("let x = 'aaa'", @:) 198438571a04SBram Moolenaar 198538571a04SBram Moolenaar new 198638571a04SBram Moolenaar call feedkeys("a" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a\<Esc>", 'Lx!') 198738571a04SBram Moolenaar call assert_equal("aaa", getline(1)) 198838571a04SBram Moolenaar bwipe! 198938571a04SBram Moolenaar 199038571a04SBram Moolenaar new 199138571a04SBram Moolenaar call feedkeys("axx\<CR>yy" .. GetEscCodeCSI27('G', 5) .. GetEscCodeCSI27('K', 5) .. "a\<Esc>", 'Lx!') 199238571a04SBram Moolenaar call assert_equal("axx", getline(1)) 199338571a04SBram Moolenaar call assert_equal("yy", getline(2)) 199438571a04SBram Moolenaar bwipe! 199538571a04SBram Moolenaar 199638571a04SBram Moolenaar set timeoutlen& 199738571a04SBram Moolenaarendfunc 199838571a04SBram Moolenaar 1999d1e2f398SBram Moolenaarfunc RunTest_mapping_shift(key, func) 2000d1e2f398SBram Moolenaar call setline(1, '') 2001d1e2f398SBram Moolenaar if a:key == '|' 2002d1e2f398SBram Moolenaar exe 'inoremap \| xyz' 2003d1e2f398SBram Moolenaar else 2004d1e2f398SBram Moolenaar exe 'inoremap ' .. a:key .. ' xyz' 2005d1e2f398SBram Moolenaar endif 2006d1e2f398SBram Moolenaar call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!') 2007d1e2f398SBram Moolenaar call assert_equal("xyz", getline(1)) 2008d1e2f398SBram Moolenaar if a:key == '|' 2009d1e2f398SBram Moolenaar exe 'iunmap \|' 2010d1e2f398SBram Moolenaar else 2011d1e2f398SBram Moolenaar exe 'iunmap ' .. a:key 2012d1e2f398SBram Moolenaar endif 2013d1e2f398SBram Moolenaarendfunc 2014d1e2f398SBram Moolenaar 2015975a880aSBram Moolenaarfunc Test_modifyOtherKeys_mapped() 2016975a880aSBram Moolenaar set timeoutlen=10 2017975a880aSBram Moolenaar imap ' <C-W> 2018975a880aSBram Moolenaar imap <C-W><C-A> c-a 2019975a880aSBram Moolenaar call setline(1, '') 2020975a880aSBram Moolenaar 2021975a880aSBram Moolenaar " single quote is turned into single byte CTRL-W 2022975a880aSBram Moolenaar " CTRL-A is added with a separate modifier, and needs to be simplified before 2023975a880aSBram Moolenaar " the mapping can match. 2024975a880aSBram Moolenaar call feedkeys("a'" .. GetEscCodeCSI27('A', 5) .. "\<Esc>", 'Lx!') 2025975a880aSBram Moolenaar call assert_equal('c-a', getline(1)) 2026975a880aSBram Moolenaar 2027975a880aSBram Moolenaar iunmap ' 2028975a880aSBram Moolenaar iunmap <C-W><C-A> 2029975a880aSBram Moolenaar set timeoutlen& 2030975a880aSBram Moolenaarendfunc 2031975a880aSBram Moolenaar 2032d1e2f398SBram Moolenaarfunc RunTest_mapping_works_with_shift(func) 2033d1e2f398SBram Moolenaar new 2034459fd785SBram Moolenaar set timeoutlen=10 2035d1e2f398SBram Moolenaar 2036d1e2f398SBram Moolenaar call RunTest_mapping_shift('@', a:func) 2037d1e2f398SBram Moolenaar call RunTest_mapping_shift('A', a:func) 2038d1e2f398SBram Moolenaar call RunTest_mapping_shift('Z', a:func) 2039d1e2f398SBram Moolenaar call RunTest_mapping_shift('^', a:func) 2040d1e2f398SBram Moolenaar call RunTest_mapping_shift('_', a:func) 2041d1e2f398SBram Moolenaar call RunTest_mapping_shift('{', a:func) 2042d1e2f398SBram Moolenaar call RunTest_mapping_shift('|', a:func) 2043d1e2f398SBram Moolenaar call RunTest_mapping_shift('}', a:func) 2044d1e2f398SBram Moolenaar call RunTest_mapping_shift('~', a:func) 2045d1e2f398SBram Moolenaar 2046d1e2f398SBram Moolenaar bwipe! 2047d1e2f398SBram Moolenaar set timeoutlen& 2048d1e2f398SBram Moolenaarendfunc 2049d1e2f398SBram Moolenaar 2050459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_plain() 2051d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27')) 2052d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu')) 2053d1e2f398SBram Moolenaarendfunc 2054459fd785SBram Moolenaar 2055459fd785SBram Moolenaarfunc RunTest_mapping_mods(map, key, func, code) 2056459fd785SBram Moolenaar call setline(1, '') 2057459fd785SBram Moolenaar exe 'inoremap ' .. a:map .. ' xyz' 2058459fd785SBram Moolenaar call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!') 2059459fd785SBram Moolenaar call assert_equal("xyz", getline(1)) 2060459fd785SBram Moolenaar exe 'iunmap ' .. a:map 2061459fd785SBram Moolenaarendfunc 2062459fd785SBram Moolenaar 2063459fd785SBram Moolenaarfunc RunTest_mapping_works_with_mods(func, mods, code) 2064459fd785SBram Moolenaar new 2065459fd785SBram Moolenaar set timeoutlen=10 2066459fd785SBram Moolenaar 2067459fd785SBram Moolenaar if a:mods !~ 'S' 2068459fd785SBram Moolenaar " Shift by itself has no effect 2069459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-@>', '@', a:func, a:code) 2070459fd785SBram Moolenaar endif 2071459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-A>', 'A', a:func, a:code) 2072459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-Z>', 'Z', a:func, a:code) 2073459fd785SBram Moolenaar if a:mods !~ 'S' 2074459fd785SBram Moolenaar " with Shift code is always upper case 2075459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'a', a:func, a:code) 2076459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'z', a:func, a:code) 2077459fd785SBram Moolenaar endif 2078459fd785SBram Moolenaar if a:mods != 'A' 2079459fd785SBram Moolenaar " with Alt code is not in upper case 2080459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'A', a:func, a:code) 2081459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'Z', a:func, a:code) 2082459fd785SBram Moolenaar endif 2083459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-á>', 'á', a:func, a:code) 2084459fd785SBram Moolenaar if a:mods !~ 'S' 2085459fd785SBram Moolenaar " Shift by itself has no effect 2086459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-^>', '^', a:func, a:code) 2087459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-_>', '_', a:func, a:code) 2088459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-{>', '{', a:func, a:code) 2089459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-\|>', '|', a:func, a:code) 2090459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-}>', '}', a:func, a:code) 2091459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-~>', '~', a:func, a:code) 2092459fd785SBram Moolenaar endif 2093459fd785SBram Moolenaar 2094459fd785SBram Moolenaar bwipe! 2095459fd785SBram Moolenaar set timeoutlen& 2096459fd785SBram Moolenaarendfunc 2097459fd785SBram Moolenaar 2098459fd785SBram Moolenaarfunc Test_mapping_works_with_shift() 2099459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S', 2) 2100459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S', 2) 2101459fd785SBram Moolenaarendfunc 2102459fd785SBram Moolenaar 2103459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl() 2104459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C', 5) 2105459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C', 5) 2106459fd785SBram Moolenaarendfunc 2107459fd785SBram Moolenaar 2108459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl() 2109459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S', 6) 2110459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S', 6) 2111459fd785SBram Moolenaarendfunc 2112459fd785SBram Moolenaar 2113459fd785SBram Moolenaar" Below we also test the "u" code with Alt, This works, but libvterm would not 2114459fd785SBram Moolenaar" send the Alt key like this but by prefixing an Esc. 2115459fd785SBram Moolenaar 2116459fd785SBram Moolenaarfunc Test_mapping_works_with_alt() 2117459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'A', 3) 2118459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'A', 3) 2119459fd785SBram Moolenaarendfunc 2120459fd785SBram Moolenaar 2121459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_alt() 2122459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S-A', 4) 2123459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S-A', 4) 2124459fd785SBram Moolenaarendfunc 2125459fd785SBram Moolenaar 2126459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl_alt() 2127459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-A', 7) 2128459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-A', 7) 2129459fd785SBram Moolenaarendfunc 2130459fd785SBram Moolenaar 2131459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl_alt() 2132459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S-A', 8) 2133459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S-A', 8) 2134459fd785SBram Moolenaarendfunc 2135fc4ea2a7SBram Moolenaar 2136fc4ea2a7SBram Moolenaarfunc Test_insert_literal() 2137fc4ea2a7SBram Moolenaar set timeoutlen=10 2138fc4ea2a7SBram Moolenaar new 2139fc4ea2a7SBram Moolenaar " CTRL-V CTRL-X inserts a ^X 2140fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 2141fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 2142fc4ea2a7SBram Moolenaar 2143fc4ea2a7SBram Moolenaar call setline(1, '') 2144fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 2145fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 2146fc4ea2a7SBram Moolenaar 2147f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-X inserts escape sequence 2148fc4ea2a7SBram Moolenaar call setline(1, '') 2149fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 2150fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[88;5u", getline(1)) 2151fc4ea2a7SBram Moolenaar 2152fc4ea2a7SBram Moolenaar call setline(1, '') 2153fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 2154fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[27;5;88~", getline(1)) 2155fc4ea2a7SBram Moolenaar 2156fc4ea2a7SBram Moolenaar bwipe! 2157fc4ea2a7SBram Moolenaar set timeoutlen& 2158fc4ea2a7SBram Moolenaarendfunc 2159fc4ea2a7SBram Moolenaar 2160fc4ea2a7SBram Moolenaarfunc Test_cmdline_literal() 2161fc4ea2a7SBram Moolenaar set timeoutlen=10 2162fc4ea2a7SBram Moolenaar 2163fc4ea2a7SBram Moolenaar " CTRL-V CTRL-Y inserts a ^Y 2164fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2165fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 2166fc4ea2a7SBram Moolenaar 2167fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2168fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 2169fc4ea2a7SBram Moolenaar 2170f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-Y inserts escape sequence 2171fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2172fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[89;5u", @:) 2173fc4ea2a7SBram Moolenaar 2174fc4ea2a7SBram Moolenaar call setline(1, '') 2175fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2176fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[27;5;89~", @:) 2177fc4ea2a7SBram Moolenaar 2178fc4ea2a7SBram Moolenaar set timeoutlen& 2179fc4ea2a7SBram Moolenaarendfunc 21800eabd4dcSBram Moolenaar 21810ff5dedfSBram Moolenaar" Test for translation of special key codes (<xF1>, <xF2>, etc.) 21820ff5dedfSBram Moolenaarfunc Test_Keycode_Tranlsation() 21830ff5dedfSBram Moolenaar let keycodes = [ 21840ff5dedfSBram Moolenaar \ ["<xUp>", "<Up>"], 21850ff5dedfSBram Moolenaar \ ["<xDown>", "<Down>"], 21860ff5dedfSBram Moolenaar \ ["<xLeft>", "<Left>"], 21870ff5dedfSBram Moolenaar \ ["<xRight>", "<Right>"], 21880ff5dedfSBram Moolenaar \ ["<xHome>", "<Home>"], 21890ff5dedfSBram Moolenaar \ ["<xEnd>", "<End>"], 21900ff5dedfSBram Moolenaar \ ["<zHome>", "<Home>"], 21910ff5dedfSBram Moolenaar \ ["<zEnd>", "<End>"], 21920ff5dedfSBram Moolenaar \ ["<xF1>", "<F1>"], 21930ff5dedfSBram Moolenaar \ ["<xF2>", "<F2>"], 21940ff5dedfSBram Moolenaar \ ["<xF3>", "<F3>"], 21950ff5dedfSBram Moolenaar \ ["<xF4>", "<F4>"], 21960ff5dedfSBram Moolenaar \ ["<S-xF1>", "<S-F1>"], 21970ff5dedfSBram Moolenaar \ ["<S-xF2>", "<S-F2>"], 21980ff5dedfSBram Moolenaar \ ["<S-xF3>", "<S-F3>"], 21990ff5dedfSBram Moolenaar \ ["<S-xF4>", "<S-F4>"]] 22000ff5dedfSBram Moolenaar for [k1, k2] in keycodes 22010ff5dedfSBram Moolenaar exe "nnoremap " .. k1 .. " 2wx" 22020ff5dedfSBram Moolenaar call assert_true(maparg(k1, 'n', 0, 1).lhs == k2) 22030ff5dedfSBram Moolenaar exe "nunmap " .. k1 22040ff5dedfSBram Moolenaar endfor 22050ff5dedfSBram Moolenaarendfunc 22060ff5dedfSBram Moolenaar 22070eabd4dcSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 2208