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 11*e46a2ed0SBram 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 return 274297bec07SBram Moolenaar endif 275297bec07SBram Moolenaar new 276297bec07SBram Moolenaar let save_mouse = &mouse 277297bec07SBram Moolenaar let save_term = &term 278297bec07SBram Moolenaar let save_ttymouse = &ttymouse 279297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 280297bec07SBram Moolenaar set mouse=a term=xterm 281297bec07SBram Moolenaar 282297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 283297bec07SBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 284297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 285297bec07SBram Moolenaar call setline(1, ['123456789', '123456789']) 286297bec07SBram Moolenaar 287297bec07SBram Moolenaar " Clicking middle mouse in visual mode, yanks the selection and pastes it 288297bec07SBram Moolenaar call cursor(1, 1) 289297bec07SBram Moolenaar call feedkeys("v3l" .. 290297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7), 'Lx!') 291297bec07SBram Moolenaar call assert_equal(['123456789', '1234561234789'], 292297bec07SBram Moolenaar \ getline(1, '$'), msg) 293297bec07SBram Moolenaar endfor 294297bec07SBram Moolenaar 295297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 296297bec07SBram Moolenaar let &ttymouse = save_ttymouse 297297bec07SBram Moolenaar let &term = save_term 298297bec07SBram Moolenaar let &mouse = save_mouse 299297bec07SBram Moolenaar close! 300297bec07SBram Moolenaarendfunc 301297bec07SBram Moolenaar 302297bec07SBram Moolenaarfunc Test_term_mouse_middle_click_insert_mode() 303297bec07SBram Moolenaar CheckFeature clipboard_working 304297bec07SBram Moolenaar 305297bec07SBram Moolenaar new 306297bec07SBram Moolenaar let save_mouse = &mouse 307297bec07SBram Moolenaar let save_term = &term 308297bec07SBram Moolenaar let save_ttymouse = &ttymouse 309297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 310297bec07SBram Moolenaar set mouse=a term=xterm 311297bec07SBram Moolenaar 312297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 313297bec07SBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 314297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 315297bec07SBram Moolenaar call setline(1, ['123456789', '123456789']) 316297bec07SBram Moolenaar let @* = 'abc' 317297bec07SBram Moolenaar 318297bec07SBram Moolenaar " Middle-click in inesrt mode doesn't move the cursor but inserts the 319297bec07SBram Moolenaar " contents of aregister 320297bec07SBram Moolenaar call cursor(1, 4) 321297bec07SBram Moolenaar call feedkeys('i' .. 322297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7) .. 323297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 324297bec07SBram Moolenaar call assert_equal(['123abc456789', '123456789'], 325297bec07SBram Moolenaar \ getline(1, '$'), msg) 3262764d06aSBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')], msg) 327297bec07SBram Moolenaar 328297bec07SBram Moolenaar " Middle-click in replace mode 329297bec07SBram Moolenaar call cursor(1, 1) 330297bec07SBram Moolenaar call feedkeys('$R' .. 331297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7) .. 332297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 333297bec07SBram Moolenaar call assert_equal(['123abc45678abc', '123456789'], 334297bec07SBram Moolenaar \ getline(1, '$'), msg) 3352764d06aSBram Moolenaar call assert_equal([1, 14], [line('.'), col('.')], msg) 336297bec07SBram Moolenaar endfor 337297bec07SBram Moolenaar 338297bec07SBram Moolenaar let &mouse = save_mouse 339297bec07SBram Moolenaar let &term = save_term 340297bec07SBram Moolenaar let &ttymouse = save_ttymouse 341297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 342297bec07SBram Moolenaar close! 343297bec07SBram Moolenaarendfunc 344297bec07SBram Moolenaar 345297bec07SBram Moolenaar" Test for switching window using mouse in insert mode 346297bec07SBram Moolenaarfunc Test_term_mouse_switch_win_insert_mode() 347297bec07SBram Moolenaar 5new 348297bec07SBram Moolenaar let save_mouse = &mouse 349297bec07SBram Moolenaar let save_term = &term 350297bec07SBram Moolenaar let save_ttymouse = &ttymouse 351297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 352297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 353297bec07SBram Moolenaar 354297bec07SBram Moolenaar call feedkeys('ivim' .. 355297bec07SBram Moolenaar \ MouseLeftClickCode(8, 6) .. MouseLeftReleaseCode(8, 6) .. 356297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 357297bec07SBram Moolenaar call assert_equal(2, winnr()) 358297bec07SBram Moolenaar wincmd w 359297bec07SBram Moolenaar call assert_equal('n', mode()) 360297bec07SBram Moolenaar call assert_equal(['vim'], getline(1, '$')) 361297bec07SBram Moolenaar 362297bec07SBram Moolenaar let &mouse = save_mouse 363297bec07SBram Moolenaar let &term = save_term 364297bec07SBram Moolenaar let &ttymouse = save_ttymouse 365297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 366297bec07SBram Moolenaar close! 367297bec07SBram Moolenaarendfunc 368297bec07SBram Moolenaar 369297bec07SBram Moolenaar" Test for using the mouse to increaes the height of the cmdline window 370297bec07SBram Moolenaarfunc Test_mouse_cmdwin_resize() 371297bec07SBram Moolenaar let save_mouse = &mouse 372297bec07SBram Moolenaar let save_term = &term 373297bec07SBram Moolenaar let save_ttymouse = &ttymouse 374297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 375297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 376297bec07SBram Moolenaar 5new 377297bec07SBram Moolenaar redraw! 378297bec07SBram Moolenaar 379297bec07SBram Moolenaar let h = 0 380297bec07SBram Moolenaar let row = &lines - &cmdwinheight - 2 381297bec07SBram Moolenaar call feedkeys("q:" .. 382297bec07SBram Moolenaar \ MouseLeftClickCode(row, 1) .. 383297bec07SBram Moolenaar \ MouseLeftDragCode(row - 1, 1) .. 384297bec07SBram Moolenaar \ MouseLeftReleaseCode(row - 2, 1) .. 385297bec07SBram Moolenaar \ "alet h = \<C-R>=winheight(0)\<CR>\<CR>", 'Lx!') 386297bec07SBram Moolenaar call assert_equal(&cmdwinheight + 2, h) 387297bec07SBram Moolenaar 388297bec07SBram Moolenaar let &mouse = save_mouse 389297bec07SBram Moolenaar let &term = save_term 390297bec07SBram Moolenaar let &ttymouse = save_ttymouse 391297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 392297bec07SBram Moolenaar close! 393297bec07SBram Moolenaarendfunc 394297bec07SBram Moolenaar 39592fd599eSBram Moolenaar" TODO: for unclear reasons this test fails if it comes after 39692fd599eSBram Moolenaar" Test_xterm_mouse_ctrl_click() 39792fd599eSBram Moolenaarfunc Test_1xterm_mouse_wheel() 398049736faSBram Moolenaar new 399049736faSBram Moolenaar let save_mouse = &mouse 400049736faSBram Moolenaar let save_term = &term 401d58d4f90SBram Moolenaar let save_wrap = &wrap 402049736faSBram Moolenaar let save_ttymouse = &ttymouse 403d58d4f90SBram Moolenaar set mouse=a term=xterm nowrap 404d58d4f90SBram Moolenaar call setline(1, range(100000000000000, 100000000000100)) 405049736faSBram Moolenaar 406515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 4074945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4081ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 409049736faSBram Moolenaar go 4104945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 4114945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 4123fbd2d7cSBram Moolenaar 4133fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 4144945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 4154945219bSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.'), msg) 4163fbd2d7cSBram Moolenaar 4173fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 4184945219bSBram Moolenaar call assert_equal(7, line('w0'), msg) 4194945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 420049736faSBram Moolenaar 4213fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 4224945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 4234945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 4243fbd2d7cSBram Moolenaar 4253fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 4264945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 4274945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 428d58d4f90SBram Moolenaar 429d58d4f90SBram Moolenaar if has('gui') 430d58d4f90SBram Moolenaar " Horizontal wheel scrolling currently only works when vim is 431d58d4f90SBram Moolenaar " compiled with gui enabled. 432d58d4f90SBram Moolenaar call MouseWheelRight(1, 1) 433d58d4f90SBram Moolenaar call assert_equal(7, 1 + virtcol(".") - wincol(), msg) 434d58d4f90SBram Moolenaar call assert_equal([0, 7, 7, 0], getpos('.'), msg) 435d58d4f90SBram Moolenaar 436d58d4f90SBram Moolenaar call MouseWheelRight(1, 1) 437d58d4f90SBram Moolenaar call assert_equal(13, 1 + virtcol(".") - wincol(), msg) 438d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 439d58d4f90SBram Moolenaar 440d58d4f90SBram Moolenaar call MouseWheelLeft(1, 1) 441d58d4f90SBram Moolenaar call assert_equal(7, 1 + virtcol(".") - wincol(), msg) 442d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 443d58d4f90SBram Moolenaar 444d58d4f90SBram Moolenaar call MouseWheelLeft(1, 1) 445d58d4f90SBram Moolenaar call assert_equal(1, 1 + virtcol(".") - wincol(), msg) 446d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 447d58d4f90SBram Moolenaar endif 4483fbd2d7cSBram Moolenaar endfor 449049736faSBram Moolenaar 450049736faSBram Moolenaar let &mouse = save_mouse 451049736faSBram Moolenaar let &term = save_term 452d58d4f90SBram Moolenaar let &wrap = save_wrap 453049736faSBram Moolenaar let &ttymouse = save_ttymouse 454049736faSBram Moolenaar bwipe! 455049736faSBram Moolenaarendfunc 4563fb01a53SBram Moolenaar 457b4367b7fSBram Moolenaar" Test that dragging beyond the window (at the bottom and at the top) 458f19f8d1aSBram Moolenaar" scrolls window content by the number of lines beyond the window. 459b4367b7fSBram Moolenaarfunc Test_term_mouse_drag_beyond_window() 460b4367b7fSBram Moolenaar let save_mouse = &mouse 461b4367b7fSBram Moolenaar let save_term = &term 462b4367b7fSBram Moolenaar let save_ttymouse = &ttymouse 463b4367b7fSBram Moolenaar call test_override('no_query_mouse', 1) 464b4367b7fSBram Moolenaar set mouse=a term=xterm 465b4367b7fSBram Moolenaar let col = 1 466b4367b7fSBram Moolenaar call setline(1, range(1, 100)) 467b4367b7fSBram Moolenaar 468b4367b7fSBram Moolenaar " Split into 3 windows, and go into the middle window 469b4367b7fSBram Moolenaar " so we test dragging mouse below and above the window. 470b4367b7fSBram Moolenaar 2split 471b4367b7fSBram Moolenaar wincmd j 472b4367b7fSBram Moolenaar 2split 473b4367b7fSBram Moolenaar 474515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 475b4367b7fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 476b4367b7fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 477b4367b7fSBram Moolenaar 478b4367b7fSBram Moolenaar " Line #10 at the top. 479b4367b7fSBram Moolenaar norm! 10zt 480b4367b7fSBram Moolenaar redraw 481b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 482b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 483b4367b7fSBram Moolenaar 484b4367b7fSBram Moolenaar let row = 4 485b4367b7fSBram Moolenaar call MouseLeftClick(row, col) 486b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 487b4367b7fSBram Moolenaar 488b4367b7fSBram Moolenaar " Drag downwards. We're still in the window so topline should 489b4367b7fSBram Moolenaar " not change yet. 490b4367b7fSBram Moolenaar let row += 1 491b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 492b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 493b4367b7fSBram Moolenaar 494b4367b7fSBram Moolenaar " We now leave the window at the bottom, so the window content should 495b4367b7fSBram Moolenaar " scroll by 1 line, then 2 lines (etc) as we drag further away. 496b4367b7fSBram Moolenaar let row += 1 497b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 498b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 499b4367b7fSBram Moolenaar 500b4367b7fSBram Moolenaar let row += 1 501b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 502b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 503b4367b7fSBram Moolenaar 504b4367b7fSBram Moolenaar " Now drag upwards. 505b4367b7fSBram Moolenaar let row -= 1 506b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 507b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 508b4367b7fSBram Moolenaar 509b4367b7fSBram Moolenaar " We're now back in the window so the topline should not change. 510b4367b7fSBram Moolenaar let row -= 1 511b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 512b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 513b4367b7fSBram Moolenaar 514b4367b7fSBram Moolenaar let row -= 1 515b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 516b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 517b4367b7fSBram Moolenaar 518b4367b7fSBram Moolenaar " We now leave the window at the top so the window content should 519b4367b7fSBram Moolenaar " scroll by 1 line, then 2, then 3 (etc) in the opposite direction. 520b4367b7fSBram Moolenaar let row -= 1 521b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 522b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 523b4367b7fSBram Moolenaar 524b4367b7fSBram Moolenaar let row -= 1 525b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 526b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 527b4367b7fSBram Moolenaar 528b4367b7fSBram Moolenaar let row -= 1 529b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 530b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 531b4367b7fSBram Moolenaar 532b4367b7fSBram Moolenaar call MouseLeftRelease(row, col) 533b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 534b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 535b4367b7fSBram Moolenaar endfor 536b4367b7fSBram Moolenaar 537b4367b7fSBram Moolenaar let &mouse = save_mouse 538b4367b7fSBram Moolenaar let &term = save_term 539b4367b7fSBram Moolenaar let &ttymouse = save_ttymouse 540b4367b7fSBram Moolenaar call test_override('no_query_mouse', 0) 541b4367b7fSBram Moolenaar bwipe! 542b4367b7fSBram Moolenaarendfunc 543b4367b7fSBram Moolenaar 54492fd599eSBram Moolenaarfunc Test_term_mouse_drag_window_separator() 5453fb01a53SBram Moolenaar let save_mouse = &mouse 5463fb01a53SBram Moolenaar let save_term = &term 5473fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 54892fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 5493fbd2d7cSBram Moolenaar set mouse=a term=xterm 5503fbd2d7cSBram Moolenaar 551515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 5524945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5531ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 5543fb01a53SBram Moolenaar 5553fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 5563fb01a53SBram Moolenaar split 5573fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 5583fb01a53SBram Moolenaar let row = rowseparator 5593fb01a53SBram Moolenaar let col = 1 560c8b3ddabSBram Moolenaar 5612b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 5622b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 5633fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5643fb01a53SBram Moolenaar let row -= 1 5653fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5664945219bSBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 5673fb01a53SBram Moolenaar let row += 1 5683fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5694945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 5703fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5714945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 57239f76c6aSBram Moolenaar endif 5733fb01a53SBram Moolenaar bwipe! 5743fb01a53SBram Moolenaar 5753fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 5763fb01a53SBram Moolenaar vsplit 5773fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 5783fb01a53SBram Moolenaar let row = 1 5793fb01a53SBram Moolenaar let col = colseparator 58039f76c6aSBram Moolenaar 5812b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 5822b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || col <= 223 5833fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5843fb01a53SBram Moolenaar let col -= 1 5853fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5864945219bSBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 5873fb01a53SBram Moolenaar let col += 1 5883fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5894945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 5903fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5914945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 59239f76c6aSBram Moolenaar endif 5933fb01a53SBram Moolenaar bwipe! 5943fbd2d7cSBram Moolenaar endfor 5953fbd2d7cSBram Moolenaar 5963fbd2d7cSBram Moolenaar let &mouse = save_mouse 5973fbd2d7cSBram Moolenaar let &term = save_term 5983fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 59992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 6003fbd2d7cSBram Moolenaarendfunc 6013fbd2d7cSBram Moolenaar 60292fd599eSBram Moolenaarfunc Test_term_mouse_drag_statusline() 6033fbd2d7cSBram Moolenaar let save_mouse = &mouse 6043fbd2d7cSBram Moolenaar let save_term = &term 6053fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 60692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 607ca57ab54SBram Moolenaar let save_laststatus = &laststatus 608ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 6093fbd2d7cSBram Moolenaar 610515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 6114945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6121ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 6133fbd2d7cSBram Moolenaar 6144945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6153fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 6163fbd2d7cSBram Moolenaar let row = rowstatusline 6173fbd2d7cSBram Moolenaar let col = 1 618c8b3ddabSBram Moolenaar 6192b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && row > 223 6202b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 621c8b3ddabSBram Moolenaar continue 622c8b3ddabSBram Moolenaar endif 623c8b3ddabSBram Moolenaar 6243fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 6253fbd2d7cSBram Moolenaar let row -= 1 6263fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 6274945219bSBram Moolenaar call assert_equal(2, &cmdheight, msg) 6284945219bSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 6293fbd2d7cSBram Moolenaar let row += 1 6303fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 6314945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6324945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 6333fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 6344945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6354945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 6363fbd2d7cSBram Moolenaar endfor 6373fbd2d7cSBram Moolenaar 6383fb01a53SBram Moolenaar let &mouse = save_mouse 6393fb01a53SBram Moolenaar let &term = save_term 6403fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 64192fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 642ca57ab54SBram Moolenaar let &laststatus = save_laststatus 643ca57ab54SBram Moolenaarendfunc 644ca57ab54SBram Moolenaar 64592fd599eSBram Moolenaarfunc Test_term_mouse_click_tab() 646ca57ab54SBram Moolenaar let save_mouse = &mouse 647ca57ab54SBram Moolenaar let save_term = &term 648ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 64992fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 650ca57ab54SBram Moolenaar set mouse=a term=xterm 651ca57ab54SBram Moolenaar let row = 1 652ca57ab54SBram Moolenaar 653515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 6544945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6551ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 656ca57ab54SBram Moolenaar e Xfoo 657ca57ab54SBram Moolenaar tabnew Xbar 658ca57ab54SBram Moolenaar 659ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 660ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 661ca57ab54SBram Moolenaar \ ' Xfoo', 662ca57ab54SBram Moolenaar \ 'Tab page 2', 6634945219bSBram Moolenaar \ '> Xbar'], a, msg) 664ca57ab54SBram Moolenaar 665ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 666ca57ab54SBram Moolenaar let col = 2 66739f76c6aSBram Moolenaar redraw 668ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 669ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 670ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 671ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 672ca57ab54SBram Moolenaar \ '> Xfoo', 673ca57ab54SBram Moolenaar \ 'Tab page 2', 6744945219bSBram Moolenaar \ ' Xbar'], a, msg) 675ca57ab54SBram Moolenaar 676ca57ab54SBram Moolenaar let col = 9 677ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 678ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 679ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 680ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 681ca57ab54SBram Moolenaar \ ' Xfoo', 682ca57ab54SBram Moolenaar \ 'Tab page 2', 6834945219bSBram Moolenaar \ '> Xbar'], a, msg) 684ca57ab54SBram Moolenaar 685ca57ab54SBram Moolenaar %bwipe! 686ca57ab54SBram Moolenaar endfor 687ca57ab54SBram Moolenaar 688ca57ab54SBram Moolenaar let &mouse = save_mouse 689ca57ab54SBram Moolenaar let &term = save_term 690ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 69192fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 6923fb01a53SBram Moolenaarendfunc 69339f76c6aSBram Moolenaar 69492fd599eSBram Moolenaarfunc Test_term_mouse_click_X_to_close_tab() 69539f76c6aSBram Moolenaar let save_mouse = &mouse 69639f76c6aSBram Moolenaar let save_term = &term 69739f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 69892fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 69939f76c6aSBram Moolenaar set mouse=a term=xterm 70039f76c6aSBram Moolenaar let row = 1 70139f76c6aSBram Moolenaar let col = &columns 70239f76c6aSBram Moolenaar 703515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 7042b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && col > 223 7052b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 70639f76c6aSBram Moolenaar continue 70739f76c6aSBram Moolenaar endif 7084945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7091ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 71039f76c6aSBram Moolenaar e Xtab1 71139f76c6aSBram Moolenaar tabnew Xtab2 71239f76c6aSBram Moolenaar tabnew Xtab3 71339f76c6aSBram Moolenaar tabn 2 71439f76c6aSBram Moolenaar 71539f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 71639f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 71739f76c6aSBram Moolenaar \ ' Xtab1', 71839f76c6aSBram Moolenaar \ 'Tab page 2', 71939f76c6aSBram Moolenaar \ '> Xtab2', 72039f76c6aSBram Moolenaar \ 'Tab page 3', 7214945219bSBram Moolenaar \ ' Xtab3'], a, msg) 72239f76c6aSBram Moolenaar 72339f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 72439f76c6aSBram Moolenaar redraw 72539f76c6aSBram Moolenaar call MouseLeftClick(row, col) 72639f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 72739f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 72839f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 72939f76c6aSBram Moolenaar \ ' Xtab1', 73039f76c6aSBram Moolenaar \ 'Tab page 2', 7314945219bSBram Moolenaar \ '> Xtab3'], a, msg) 73239f76c6aSBram Moolenaar 73339f76c6aSBram Moolenaar %bwipe! 73439f76c6aSBram Moolenaar endfor 73539f76c6aSBram Moolenaar 73639f76c6aSBram Moolenaar let &mouse = save_mouse 73739f76c6aSBram Moolenaar let &term = save_term 73839f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 73992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 74039f76c6aSBram Moolenaarendfunc 741e3e3828fSBram Moolenaar 74292fd599eSBram Moolenaarfunc Test_term_mouse_drag_to_move_tab() 743e3e3828fSBram Moolenaar let save_mouse = &mouse 744e3e3828fSBram Moolenaar let save_term = &term 745e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 74692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 747e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 748e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 749e3e3828fSBram Moolenaar let row = 1 750e3e3828fSBram Moolenaar 751515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 7524945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7531ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 754e3e3828fSBram Moolenaar e Xtab1 755e3e3828fSBram Moolenaar tabnew Xtab2 756e3e3828fSBram Moolenaar 757e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 758e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 759e3e3828fSBram Moolenaar \ ' Xtab1', 760e3e3828fSBram Moolenaar \ 'Tab page 2', 7614945219bSBram Moolenaar \ '> Xtab2'], a, msg) 762e3e3828fSBram Moolenaar redraw 763e3e3828fSBram Moolenaar 764e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 765e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 766e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 767e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 7684945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 769e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 770e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 771e3e3828fSBram Moolenaar endfor 772e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 773e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 774e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 775e3e3828fSBram Moolenaar \ '> Xtab2', 776e3e3828fSBram Moolenaar \ 'Tab page 2', 7774945219bSBram Moolenaar \ ' Xtab1'], a, msg) 778e3e3828fSBram Moolenaar 779f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 780f36a2c7eSBram Moolenaar " interpreted as unwanted double-click. 781f36a2c7eSBram Moolenaar call MouseLeftClick(row, 11) 782f36a2c7eSBram Moolenaar call MouseLeftRelease(row, 11) 783f36a2c7eSBram Moolenaar 784e3e3828fSBram Moolenaar %bwipe! 785e3e3828fSBram Moolenaar endfor 786e3e3828fSBram Moolenaar 787e3e3828fSBram Moolenaar let &mouse = save_mouse 788e3e3828fSBram Moolenaar let &term = save_term 789e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 79092fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 791e3e3828fSBram Moolenaar set mousetime& 792e3e3828fSBram Moolenaarendfunc 793e3e3828fSBram Moolenaar 79492fd599eSBram Moolenaarfunc Test_term_mouse_double_click_to_create_tab() 795e3e3828fSBram Moolenaar let save_mouse = &mouse 796e3e3828fSBram Moolenaar let save_term = &term 797e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 79892fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 799e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 800e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 801f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 802e3e3828fSBram Moolenaar let row = 1 803e3e3828fSBram Moolenaar let col = 10 804e3e3828fSBram Moolenaar 805515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 8064945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 8071ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 808e3e3828fSBram Moolenaar e Xtab1 809e3e3828fSBram Moolenaar tabnew Xtab2 810e3e3828fSBram Moolenaar 811e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 812e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 813e3e3828fSBram Moolenaar \ ' Xtab1', 814e3e3828fSBram Moolenaar \ 'Tab page 2', 8154945219bSBram Moolenaar \ '> Xtab2'], a, msg) 816e3e3828fSBram Moolenaar 817e3e3828fSBram Moolenaar redraw 818e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 819e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 820e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 8214945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 822e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 823e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 8244945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 825e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 826e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 827e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 828e3e3828fSBram Moolenaar \ ' Xtab1', 829e3e3828fSBram Moolenaar \ 'Tab page 2', 830e3e3828fSBram Moolenaar \ '> [No Name]', 831e3e3828fSBram Moolenaar \ 'Tab page 3', 8324945219bSBram Moolenaar \ ' Xtab2'], a, msg) 833e3e3828fSBram Moolenaar 834f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 835f36a2c7eSBram Moolenaar " interpreted as unwanted double click. 836f36a2c7eSBram Moolenaar call MouseLeftClick(row, col + 1) 837f36a2c7eSBram Moolenaar call MouseLeftRelease(row, col + 1) 838f36a2c7eSBram Moolenaar 839e3e3828fSBram Moolenaar %bwipe! 840e3e3828fSBram Moolenaar endfor 841e3e3828fSBram Moolenaar 842e3e3828fSBram Moolenaar let &mouse = save_mouse 843e3e3828fSBram Moolenaar let &term = save_term 844e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 84592fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 846e3e3828fSBram Moolenaar set mousetime& 847e3e3828fSBram Moolenaarendfunc 848696d6377SBram Moolenaar 849f36a2c7eSBram Moolenaar" Test double/triple/quadruple click in normal mode to visually select. 850f36a2c7eSBram Moolenaarfunc Test_term_mouse_multiple_clicks_to_visually_select() 851f36a2c7eSBram Moolenaar let save_mouse = &mouse 852f36a2c7eSBram Moolenaar let save_term = &term 853f36a2c7eSBram Moolenaar let save_ttymouse = &ttymouse 854f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 1) 855f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 856f36a2c7eSBram Moolenaar new 857f36a2c7eSBram Moolenaar 858515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 859f36a2c7eSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 860f36a2c7eSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 861f36a2c7eSBram Moolenaar call setline(1, ['foo [foo bar] foo', 'foo']) 862f36a2c7eSBram Moolenaar 863f36a2c7eSBram Moolenaar " Double-click on word should visually select the word. 864f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 865f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 866f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 867f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 868f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 869f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 870f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 871f36a2c7eSBram Moolenaar norm! r1 872f36a2c7eSBram Moolenaar call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg) 873f36a2c7eSBram Moolenaar 874f36a2c7eSBram Moolenaar " Double-click on opening square bracket should visually 875f36a2c7eSBram Moolenaar " select the whole [foo bar]. 876f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 877f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 878f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 879f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 880f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 881f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 882f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 883f36a2c7eSBram Moolenaar norm! r2 884f36a2c7eSBram Moolenaar call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg) 885f36a2c7eSBram Moolenaar 886f36a2c7eSBram Moolenaar " Triple-click should visually select the whole line. 887f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 888f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 889f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 890f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 891f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 892f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 893f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 894f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 895f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 896f36a2c7eSBram Moolenaar call assert_equal('V', mode(), msg) 897f36a2c7eSBram Moolenaar norm! r3 898f36a2c7eSBram Moolenaar call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg) 899f36a2c7eSBram Moolenaar 900f36a2c7eSBram Moolenaar " Quadruple-click should start visual block select. 901f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 902f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 903f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 904f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 905f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 906f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 907f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 908f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 909f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 910f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 911f36a2c7eSBram Moolenaar call assert_equal(96, getcharmod(), msg) " quadruple-click 912f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 913f36a2c7eSBram Moolenaar call assert_equal("\<c-v>", mode(), msg) 914f36a2c7eSBram Moolenaar norm! r4 915f36a2c7eSBram Moolenaar call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg) 9162764d06aSBram Moolenaar 9172764d06aSBram Moolenaar " Double-click on a space character should visually select all the 9182764d06aSBram Moolenaar " consecutive space characters. 9192764d06aSBram Moolenaar %d 9202764d06aSBram Moolenaar call setline(1, ' one two') 9212764d06aSBram Moolenaar call MouseLeftClick(1, 2) 9222764d06aSBram Moolenaar call MouseLeftRelease(1, 2) 9232764d06aSBram Moolenaar call MouseLeftClick(1, 2) 9242764d06aSBram Moolenaar call MouseLeftRelease(1, 2) 9252764d06aSBram Moolenaar call assert_equal('v', mode(), msg) 9262764d06aSBram Moolenaar norm! r1 9272764d06aSBram Moolenaar call assert_equal(['1111one two'], getline(1, '$'), msg) 9282764d06aSBram Moolenaar 9292764d06aSBram Moolenaar " Double-click on a word with exclusive selection 9302764d06aSBram Moolenaar set selection=exclusive 9312764d06aSBram Moolenaar let @" = '' 9322764d06aSBram Moolenaar call MouseLeftClick(1, 10) 9332764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 9342764d06aSBram Moolenaar call MouseLeftClick(1, 10) 9352764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 9362764d06aSBram Moolenaar norm! y 9372764d06aSBram Moolenaar call assert_equal('two', @", msg) 9382764d06aSBram Moolenaar 9392764d06aSBram Moolenaar " Double click to select a block of text with exclusive selection 9402764d06aSBram Moolenaar %d 9412764d06aSBram Moolenaar call setline(1, 'one (two) three') 9422764d06aSBram Moolenaar call MouseLeftClick(1, 5) 9432764d06aSBram Moolenaar call MouseLeftRelease(1, 5) 9442764d06aSBram Moolenaar call MouseLeftClick(1, 5) 9452764d06aSBram Moolenaar call MouseLeftRelease(1, 5) 9462764d06aSBram Moolenaar norm! y 9472764d06aSBram Moolenaar call assert_equal(5, col("'<"), msg) 9482764d06aSBram Moolenaar call assert_equal(10, col("'>"), msg) 9492764d06aSBram Moolenaar 9502764d06aSBram Moolenaar call MouseLeftClick(1, 9) 9512764d06aSBram Moolenaar call MouseLeftRelease(1, 9) 9522764d06aSBram Moolenaar call MouseLeftClick(1, 9) 9532764d06aSBram Moolenaar call MouseLeftRelease(1, 9) 9542764d06aSBram Moolenaar norm! y 9552764d06aSBram Moolenaar call assert_equal(5, col("'<"), msg) 9562764d06aSBram Moolenaar call assert_equal(10, col("'>"), msg) 9572764d06aSBram Moolenaar set selection& 9582764d06aSBram Moolenaar 9592764d06aSBram Moolenaar " Click somewhere else so that the clicks above is not combined with the 9602764d06aSBram Moolenaar " clicks in the next iteration. 9612764d06aSBram Moolenaar call MouseRightClick(3, 10) 9622764d06aSBram Moolenaar call MouseRightRelease(3, 10) 963f36a2c7eSBram Moolenaar endfor 964f36a2c7eSBram Moolenaar 965f36a2c7eSBram Moolenaar let &mouse = save_mouse 966f36a2c7eSBram Moolenaar let &term = save_term 967f36a2c7eSBram Moolenaar let &ttymouse = save_ttymouse 968f36a2c7eSBram Moolenaar set mousetime& 969f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 0) 970f36a2c7eSBram Moolenaar bwipe! 971f36a2c7eSBram Moolenaarendfunc 972f36a2c7eSBram Moolenaar 9732764d06aSBram Moolenaar" Test for selecting text in visual blockwise mode using Alt-LeftClick 9742764d06aSBram Moolenaarfunc Test_mouse_alt_leftclick() 9752764d06aSBram Moolenaar let save_mouse = &mouse 9762764d06aSBram Moolenaar let save_term = &term 9772764d06aSBram Moolenaar let save_ttymouse = &ttymouse 9782764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 9792764d06aSBram Moolenaar set mouse=a term=xterm mousetime=200 9802764d06aSBram Moolenaar set mousemodel=popup 9812764d06aSBram Moolenaar new 9822764d06aSBram Moolenaar call setline(1, 'one (two) three') 9832764d06aSBram Moolenaar 9842764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values 9852764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 9862764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 9872764d06aSBram Moolenaar 9882764d06aSBram Moolenaar " Left click with the Alt modifier key should extend the selection in 9892764d06aSBram Moolenaar " blockwise visual mode. 9902764d06aSBram Moolenaar let @" = '' 9912764d06aSBram Moolenaar call MouseLeftClick(1, 3) 9922764d06aSBram Moolenaar call MouseLeftRelease(1, 3) 9932764d06aSBram Moolenaar call MouseAltLeftClick(1, 11) 9942764d06aSBram Moolenaar call MouseLeftRelease(1, 11) 9952764d06aSBram Moolenaar call assert_equal("\<C-V>", mode(), msg) 9962764d06aSBram Moolenaar normal! y 9972764d06aSBram Moolenaar call assert_equal('e (two) t', @") 9982764d06aSBram Moolenaar endfor 9992764d06aSBram Moolenaar 10002764d06aSBram Moolenaar let &mouse = save_mouse 10012764d06aSBram Moolenaar let &term = save_term 10022764d06aSBram Moolenaar let &ttymouse = save_ttymouse 10032764d06aSBram Moolenaar set mousetime& mousemodel& 10042764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 10052764d06aSBram Moolenaar close! 10062764d06aSBram Moolenaarendfunc 10072764d06aSBram Moolenaar 1008696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 1009696d6377SBram Moolenaar new 1010696d6377SBram Moolenaar let save_mouse = &mouse 1011696d6377SBram Moolenaar let save_term = &term 1012696d6377SBram Moolenaar let save_ttymouse = &ttymouse 1013696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 10142b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 1015696d6377SBram Moolenaar 1016696d6377SBram Moolenaar " Create 2 nested folds. 1017696d6377SBram Moolenaar call setline(1, range(1, 7)) 1018696d6377SBram Moolenaar 2,6fold 1019696d6377SBram Moolenaar norm! zR 1020696d6377SBram Moolenaar 4,5fold 1021696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 1022696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1023696d6377SBram Moolenaar 1024696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 1025696d6377SBram Moolenaar redraw 1026696d6377SBram Moolenaar let row = 4 1027696d6377SBram Moolenaar let col = 2 1028696d6377SBram Moolenaar call MouseLeftClick(row, col) 1029696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1030696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 1031696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1032696d6377SBram Moolenaar 1033696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 1034696d6377SBram Moolenaar redraw 1035696d6377SBram Moolenaar let row = 2 1036696d6377SBram Moolenaar let col = 1 1037696d6377SBram Moolenaar call MouseLeftClick(row, col) 1038696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1039696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 1040696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1041696d6377SBram Moolenaar norm! zR 1042696d6377SBram Moolenaar 1043696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 1044696d6377SBram Moolenaar redraw 1045696d6377SBram Moolenaar let row = 5 1046696d6377SBram Moolenaar let col = 2 1047696d6377SBram Moolenaar call MouseLeftClick(row, col) 1048696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1049696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 1050696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1051696d6377SBram Moolenaar 1052696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 1053696d6377SBram Moolenaar let &ttymouse = save_ttymouse 1054696d6377SBram Moolenaar let &term = save_term 1055696d6377SBram Moolenaar let &mouse = save_mouse 1056696d6377SBram Moolenaar bwipe! 1057696d6377SBram Moolenaarendfunc 105866761db1SBram Moolenaar 1059f19f8d1aSBram Moolenaar" Left or right click in Ex command line sets position of the cursor. 1060f19f8d1aSBram Moolenaarfunc Test_term_mouse_click_in_cmdline_to_set_pos() 1061f19f8d1aSBram Moolenaar let save_mouse = &mouse 1062f19f8d1aSBram Moolenaar let save_term = &term 1063f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 1064f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 1065f19f8d1aSBram Moolenaar set mouse=a term=xterm 1066f19f8d1aSBram Moolenaar let row = &lines 1067f19f8d1aSBram Moolenaar 1068515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 1069ab505b1aSBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 1070ab505b1aSBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 1071f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1072f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1073f19f8d1aSBram Moolenaar 1074ab505b1aSBram Moolenaar 1075f19f8d1aSBram Moolenaar call feedkeys(':"3456789' 1076f19f8d1aSBram Moolenaar \ .. MouseLeftClickCode(row, 7) 1077f19f8d1aSBram Moolenaar \ .. MouseLeftReleaseCode(row, 7) .. 'L' 1078f19f8d1aSBram Moolenaar \ .. MouseRightClickCode(row, 4) 1079f19f8d1aSBram Moolenaar \ .. MouseRightReleaseCode(row, 4) .. 'R' 1080f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 1081f19f8d1aSBram Moolenaar call assert_equal('"3R456L789', @:, msg) 1082ab505b1aSBram Moolenaar endif 1083f19f8d1aSBram Moolenaar endfor 1084f19f8d1aSBram Moolenaar 1085f19f8d1aSBram Moolenaar let &mouse = save_mouse 1086f19f8d1aSBram Moolenaar let &term = save_term 1087f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 1088f19f8d1aSBram Moolenaar set mousetime& 1089f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 1090f19f8d1aSBram Moolenaarendfunc 1091f19f8d1aSBram Moolenaar 1092f19f8d1aSBram Moolenaar" Middle click in command line pastes at position of cursor. 1093f19f8d1aSBram Moolenaarfunc Test_term_mouse_middle_click_in_cmdline_to_paste() 1094f19f8d1aSBram Moolenaar CheckFeature clipboard_working 1095f19f8d1aSBram Moolenaar let save_mouse = &mouse 1096f19f8d1aSBram Moolenaar let save_term = &term 1097f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 1098f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 1099f19f8d1aSBram Moolenaar set mouse=a term=xterm 1100f19f8d1aSBram Moolenaar let row = &lines 1101f19f8d1aSBram Moolenaar " Column values does not matter, paste is done at position of cursor. 1102f19f8d1aSBram Moolenaar let col = 1 1103f19f8d1aSBram Moolenaar let @* = 'paste' 1104f19f8d1aSBram Moolenaar 1105515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 1106f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1107f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1108f19f8d1aSBram Moolenaar 1109f19f8d1aSBram Moolenaar call feedkeys(":\"->" 1110f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 1111f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 1112f19f8d1aSBram Moolenaar \ .. "<-" 1113f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 1114f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 1115f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 1116f19f8d1aSBram Moolenaar call assert_equal('"->paste<-paste', @:, msg) 1117f19f8d1aSBram Moolenaar endfor 1118f19f8d1aSBram Moolenaar 1119f19f8d1aSBram Moolenaar let &mouse = save_mouse 1120f19f8d1aSBram Moolenaar let &term = save_term 1121f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 1122f19f8d1aSBram Moolenaar let @* = '' 1123f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 1124f19f8d1aSBram Moolenaarendfunc 1125f19f8d1aSBram Moolenaar 1126297bec07SBram Moolenaar" Test for making sure S-Middlemouse doesn't do anything 1127297bec07SBram Moolenaarfunc Test_term_mouse_shift_middle_click() 1128297bec07SBram Moolenaar new 1129297bec07SBram Moolenaar let save_mouse = &mouse 1130297bec07SBram Moolenaar let save_term = &term 1131297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1132297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1133297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 mousemodel= 1134297bec07SBram Moolenaar 1135297bec07SBram Moolenaar call test_setmouse(1, 1) 1136297bec07SBram Moolenaar exe "normal \<S-MiddleMouse>" 1137297bec07SBram Moolenaar call assert_equal([''], getline(1, '$')) 1138297bec07SBram Moolenaar call assert_equal(1, winnr()) 1139297bec07SBram Moolenaar 1140297bec07SBram Moolenaar let &mouse = save_mouse 1141297bec07SBram Moolenaar let &term = save_term 1142297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1143297bec07SBram Moolenaar set mousemodel& 1144297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1145297bec07SBram Moolenaar close! 1146297bec07SBram Moolenaarendfunc 1147297bec07SBram Moolenaar 1148297bec07SBram Moolenaar" Test for using mouse in visual mode 1149297bec07SBram Moolenaarfunc Test_term_mouse_visual_mode() 1150297bec07SBram Moolenaar new 1151297bec07SBram Moolenaar let save_mouse = &mouse 1152297bec07SBram Moolenaar let save_term = &term 1153297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1154297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1155297bec07SBram Moolenaar set term=xterm ttymouse=xterm2 1156297bec07SBram Moolenaar 1157297bec07SBram Moolenaar " If visual mode is not present in 'mouse', then left click should not 1158297bec07SBram Moolenaar " do anything in visal mode. 1159297bec07SBram Moolenaar call setline(1, ['one two three four']) 1160297bec07SBram Moolenaar set mouse=nci 1161297bec07SBram Moolenaar call cursor(1, 5) 1162297bec07SBram Moolenaar let @" = '' 1163297bec07SBram Moolenaar call feedkeys("ve" 1164297bec07SBram Moolenaar \ .. MouseLeftClickCode(1, 15) .. MouseLeftReleaseCode(1, 15) 1165297bec07SBram Moolenaar \ .. 'y', 'Lx!') 1166297bec07SBram Moolenaar call assert_equal(5, col('.')) 1167297bec07SBram Moolenaar call assert_equal('two', @") 1168297bec07SBram Moolenaar 1169297bec07SBram Moolenaar " Pressing right click in visual mode should change the visual selection 1170297bec07SBram Moolenaar " if 'mousemodel' doesn't contain popup. 1171297bec07SBram Moolenaar " Right click after the visual selection 1172297bec07SBram Moolenaar set mousemodel= 1173297bec07SBram Moolenaar set mouse=a 1174297bec07SBram Moolenaar call test_setmouse(1, 13) 1175297bec07SBram Moolenaar exe "normal 5|ve\<RightMouse>y" 1176297bec07SBram Moolenaar call assert_equal('two three', @") 1177297bec07SBram Moolenaar call assert_equal(5, col('.')) 1178297bec07SBram Moolenaar 1179297bec07SBram Moolenaar " Right click before the visual selection 1180297bec07SBram Moolenaar call test_setmouse(1, 9) 1181297bec07SBram Moolenaar exe "normal 15|ve\<RightMouse>y" 1182297bec07SBram Moolenaar call assert_equal('three four', @") 1183297bec07SBram Moolenaar call assert_equal(9, col('.')) 1184297bec07SBram Moolenaar 11852764d06aSBram Moolenaar " Right click inside the selection closer to the start of the selection 11862764d06aSBram Moolenaar call test_setmouse(1, 7) 11872764d06aSBram Moolenaar exe "normal 5|vee\<RightMouse>lly" 11882764d06aSBram Moolenaar call assert_equal('three', @") 11892764d06aSBram Moolenaar call assert_equal(9, col('.')) 11902764d06aSBram Moolenaar call assert_equal(9, col("'<")) 11912764d06aSBram Moolenaar call assert_equal(13, col("'>")) 11922764d06aSBram Moolenaar 11932764d06aSBram Moolenaar " Right click inside the selection closer to the end of the selection 11942764d06aSBram Moolenaar call test_setmouse(1, 11) 11952764d06aSBram Moolenaar exe "normal 5|vee\<RightMouse>ly" 11962764d06aSBram Moolenaar call assert_equal('two thre', @") 11972764d06aSBram Moolenaar call assert_equal(5, col('.')) 11982764d06aSBram Moolenaar call assert_equal(5, col("'<")) 11992764d06aSBram Moolenaar call assert_equal(12, col("'>")) 12002764d06aSBram Moolenaar 12012764d06aSBram Moolenaar " Multi-line selection. Right click inside thse selection. 12022764d06aSBram Moolenaar call setline(1, repeat(['aaaaaa'], 7)) 1203297bec07SBram Moolenaar call test_setmouse(3, 1) 1204297bec07SBram Moolenaar exe "normal ggVG\<RightMouse>y" 1205297bec07SBram Moolenaar call assert_equal(3, line("'<")) 12062764d06aSBram Moolenaar call test_setmouse(5, 1) 1207297bec07SBram Moolenaar exe "normal ggVG\<RightMouse>y" 12082764d06aSBram Moolenaar call assert_equal(5, line("'>")) 12092764d06aSBram Moolenaar 12102764d06aSBram Moolenaar " Click right in the middle line of the selection 12112764d06aSBram Moolenaar call test_setmouse(4, 3) 12122764d06aSBram Moolenaar exe "normal ggVG$\<RightMouse>y" 12132764d06aSBram Moolenaar call assert_equal(4, line("'<")) 12142764d06aSBram Moolenaar call test_setmouse(4, 4) 12152764d06aSBram Moolenaar exe "normal ggVG$\<RightMouse>y" 1216297bec07SBram Moolenaar call assert_equal(4, line("'>")) 1217297bec07SBram Moolenaar 1218297bec07SBram Moolenaar set mousemodel& 1219297bec07SBram Moolenaar let &mouse = save_mouse 1220297bec07SBram Moolenaar let &term = save_term 1221297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1222297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1223297bec07SBram Moolenaar close! 1224297bec07SBram Moolenaarendfunc 1225297bec07SBram Moolenaar 12260eabd4dcSBram Moolenaar" Test for displaying the popup menu using the right mouse click 1227297bec07SBram Moolenaarfunc Test_term_mouse_popup_menu() 12280eabd4dcSBram Moolenaar CheckFeature menu 12290eabd4dcSBram Moolenaar new 12300eabd4dcSBram Moolenaar call setline(1, 'popup menu test') 12310eabd4dcSBram Moolenaar let save_mouse = &mouse 12320eabd4dcSBram Moolenaar let save_term = &term 12330eabd4dcSBram Moolenaar let save_ttymouse = &ttymouse 12340eabd4dcSBram Moolenaar let save_mousemodel = &mousemodel 12350eabd4dcSBram Moolenaar call test_override('no_query_mouse', 1) 12360eabd4dcSBram Moolenaar set mouse=a term=xterm mousemodel=popup 12370eabd4dcSBram Moolenaar 12380eabd4dcSBram Moolenaar menu PopUp.foo :let g:menustr = 'foo'<CR> 12390eabd4dcSBram Moolenaar menu PopUp.bar :let g:menustr = 'bar'<CR> 12400eabd4dcSBram Moolenaar menu PopUp.baz :let g:menustr = 'baz'<CR> 12410eabd4dcSBram Moolenaar 1242515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 12432764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 12440eabd4dcSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 12450eabd4dcSBram Moolenaar let g:menustr = '' 12460eabd4dcSBram Moolenaar call feedkeys(MouseRightClickCode(1, 4) 12470eabd4dcSBram Moolenaar \ .. MouseRightReleaseCode(1, 4) .. "\<Down>\<Down>\<CR>", "x") 12482764d06aSBram Moolenaar call assert_equal('bar', g:menustr, msg) 12490eabd4dcSBram Moolenaar endfor 12500eabd4dcSBram Moolenaar 12510eabd4dcSBram Moolenaar unmenu PopUp 12520eabd4dcSBram Moolenaar let &mouse = save_mouse 12530eabd4dcSBram Moolenaar let &term = save_term 12540eabd4dcSBram Moolenaar let &ttymouse = save_ttymouse 12550eabd4dcSBram Moolenaar let &mousemodel = save_mousemodel 12560eabd4dcSBram Moolenaar call test_override('no_query_mouse', 0) 12570eabd4dcSBram Moolenaar close! 12580eabd4dcSBram Moolenaarendfunc 12590eabd4dcSBram Moolenaar 1260297bec07SBram Moolenaar" Test for 'mousemodel' set to popup_setpos to move the cursor where the popup 1261297bec07SBram Moolenaar" menu is displayed. 1262297bec07SBram Moolenaarfunc Test_term_mouse_popup_menu_setpos() 1263297bec07SBram Moolenaar CheckFeature menu 1264297bec07SBram Moolenaar 5new 1265297bec07SBram Moolenaar call setline(1, ['the dish ran away with the spoon', 1266297bec07SBram Moolenaar \ 'the cow jumped over the moon' ]) 1267297bec07SBram Moolenaar let save_mouse = &mouse 1268297bec07SBram Moolenaar let save_term = &term 1269297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1270297bec07SBram Moolenaar let save_mousemodel = &mousemodel 1271297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1272297bec07SBram Moolenaar set mouse=a term=xterm mousemodel=popup_setpos 1273297bec07SBram Moolenaar 1274297bec07SBram Moolenaar nmenu PopUp.foo :let g:menustr = 'foo'<CR> 1275297bec07SBram Moolenaar nmenu PopUp.bar :let g:menustr = 'bar'<CR> 1276297bec07SBram Moolenaar nmenu PopUp.baz :let g:menustr = 'baz'<CR> 1277297bec07SBram Moolenaar vmenu PopUp.foo y:<C-U>let g:menustr = 'foo'<CR> 1278297bec07SBram Moolenaar vmenu PopUp.bar y:<C-U>let g:menustr = 'bar'<CR> 1279297bec07SBram Moolenaar vmenu PopUp.baz y:<C-U>let g:menustr = 'baz'<CR> 1280297bec07SBram Moolenaar 1281297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values 12822764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1283297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1284297bec07SBram Moolenaar let g:menustr = '' 1285297bec07SBram Moolenaar call cursor(1, 1) 1286297bec07SBram Moolenaar call feedkeys(MouseRightClickCode(1, 5) 1287297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 5) .. "\<Down>\<Down>\<CR>", "x") 12882764d06aSBram Moolenaar call assert_equal('bar', g:menustr, msg) 12892764d06aSBram Moolenaar call assert_equal([1, 5], [line('.'), col('.')], msg) 1290297bec07SBram Moolenaar 1291297bec07SBram Moolenaar " Test for right click in visual mode inside the selection 1292297bec07SBram Moolenaar let @" = '' 1293297bec07SBram Moolenaar call cursor(1, 10) 1294297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 12) 1295297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 12) .. "\<Down>\<CR>", "x") 12962764d06aSBram Moolenaar call assert_equal([1, 10], [line('.'), col('.')], msg) 12972764d06aSBram Moolenaar call assert_equal('ran away', @", msg) 1298297bec07SBram Moolenaar 1299297bec07SBram Moolenaar " Test for right click in visual mode before the selection 1300297bec07SBram Moolenaar let @" = '' 1301297bec07SBram Moolenaar call cursor(1, 10) 1302297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 2) 1303297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 2) .. "\<Down>\<CR>", "x") 13042764d06aSBram Moolenaar call assert_equal([1, 2], [line('.'), col('.')], msg) 13052764d06aSBram Moolenaar call assert_equal('', @", msg) 1306297bec07SBram Moolenaar 1307297bec07SBram Moolenaar " Test for right click in visual mode after the selection 1308297bec07SBram Moolenaar let @" = '' 1309297bec07SBram Moolenaar call cursor(1, 10) 1310297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 20) 1311297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 20) .. "\<Down>\<CR>", "x") 13122764d06aSBram Moolenaar call assert_equal([1, 20], [line('.'), col('.')], msg) 13132764d06aSBram Moolenaar call assert_equal('', @", msg) 1314297bec07SBram Moolenaar 1315297bec07SBram Moolenaar " Test for right click in block-wise visual mode inside the selection 1316297bec07SBram Moolenaar let @" = '' 1317297bec07SBram Moolenaar call cursor(1, 16) 1318297bec07SBram Moolenaar call feedkeys("\<C-V>j3l" .. MouseRightClickCode(2, 17) 1319297bec07SBram Moolenaar \ .. MouseRightReleaseCode(2, 17) .. "\<Down>\<CR>", "x") 13202764d06aSBram Moolenaar call assert_equal([1, 16], [line('.'), col('.')], msg) 13212764d06aSBram Moolenaar call assert_equal("\<C-V>4", getregtype('"'), msg) 1322297bec07SBram Moolenaar 1323297bec07SBram Moolenaar " Test for right click in block-wise visual mode outside the selection 1324297bec07SBram Moolenaar let @" = '' 1325297bec07SBram Moolenaar call cursor(1, 16) 1326297bec07SBram Moolenaar call feedkeys("\<C-V>j3l" .. MouseRightClickCode(2, 2) 1327297bec07SBram Moolenaar \ .. MouseRightReleaseCode(2, 2) .. "\<Down>\<CR>", "x") 13282764d06aSBram Moolenaar call assert_equal([2, 2], [line('.'), col('.')], msg) 13292764d06aSBram Moolenaar call assert_equal('v', getregtype('"'), msg) 13302764d06aSBram Moolenaar call assert_equal('', @", msg) 1331297bec07SBram Moolenaar 1332297bec07SBram Moolenaar " Try clicking on the status line 1333297bec07SBram Moolenaar let @" = '' 1334297bec07SBram Moolenaar call cursor(1, 10) 1335297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(6, 2) 1336297bec07SBram Moolenaar \ .. MouseRightReleaseCode(6, 2) .. "\<Down>\<CR>", "x") 13372764d06aSBram Moolenaar call assert_equal([1, 10], [line('.'), col('.')], msg) 13382764d06aSBram Moolenaar call assert_equal('ran away', @", msg) 1339297bec07SBram Moolenaar 1340297bec07SBram Moolenaar " Try clicking outside the window 1341297bec07SBram Moolenaar let @" = '' 1342297bec07SBram Moolenaar call cursor(7, 2) 1343297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(7, 2) 1344297bec07SBram Moolenaar \ .. MouseRightReleaseCode(7, 2) .. "\<Down>\<CR>", "x") 13452764d06aSBram Moolenaar call assert_equal(2, winnr(), msg) 13462764d06aSBram Moolenaar call assert_equal('', @", msg) 1347297bec07SBram Moolenaar wincmd w 1348297bec07SBram Moolenaar endfor 1349297bec07SBram Moolenaar 1350297bec07SBram Moolenaar unmenu PopUp 1351297bec07SBram Moolenaar let &mouse = save_mouse 1352297bec07SBram Moolenaar let &term = save_term 1353297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1354297bec07SBram Moolenaar let &mousemodel = save_mousemodel 1355297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1356297bec07SBram Moolenaar close! 1357297bec07SBram Moolenaarendfunc 1358297bec07SBram Moolenaar 1359297bec07SBram Moolenaar" Test for searching for the word under the cursor using Shift-Right or 1360297bec07SBram Moolenaar" Shift-Left click. 1361297bec07SBram Moolenaarfunc Test_term_mouse_search() 1362297bec07SBram Moolenaar new 1363297bec07SBram Moolenaar let save_mouse = &mouse 1364297bec07SBram Moolenaar let save_term = &term 1365297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1366297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1367297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 1368297bec07SBram Moolenaar set mousemodel= 1369297bec07SBram Moolenaar 1370297bec07SBram Moolenaar " In normal mode, Shift-Left or Shift-Right click should search for the word 1371297bec07SBram Moolenaar " under the cursor. 1372297bec07SBram Moolenaar call setline(1, ['one two three four', 'four three two one']) 1373297bec07SBram Moolenaar call test_setmouse(1, 4) 1374297bec07SBram Moolenaar exe "normal \<S-LeftMouse>" 1375297bec07SBram Moolenaar call assert_equal([2, 12], [line('.'), col('.')]) 1376297bec07SBram Moolenaar call test_setmouse(2, 16) 1377297bec07SBram Moolenaar exe "normal \<S-RightMouse>" 1378297bec07SBram Moolenaar call assert_equal([1, 1], [line('.'), col('.')]) 1379297bec07SBram Moolenaar 1380297bec07SBram Moolenaar " In visual mode, Shift-Left or Shift-Right click should search for the word 1381297bec07SBram Moolenaar " under the cursor and extend the selection. 1382297bec07SBram Moolenaar call test_setmouse(1, 4) 1383297bec07SBram Moolenaar exe "normal 4|ve\<S-LeftMouse>y" 1384297bec07SBram Moolenaar call assert_equal([2, 12], [line("'>"), col("'>")]) 1385297bec07SBram Moolenaar call test_setmouse(2, 16) 1386297bec07SBram Moolenaar exe "normal 2G16|ve\<S-RightMouse>y" 1387297bec07SBram Moolenaar call assert_equal([1, 1], [line("'<"), col("'<")]) 1388297bec07SBram Moolenaar 1389297bec07SBram Moolenaar set mousemodel& 1390297bec07SBram Moolenaar let &mouse = save_mouse 1391297bec07SBram Moolenaar let &term = save_term 1392297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1393297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1394297bec07SBram Moolenaar close! 1395297bec07SBram Moolenaarendfunc 1396297bec07SBram Moolenaar 1397297bec07SBram Moolenaar" Test for selecting an entry in the quickfix/location list window using the 1398297bec07SBram Moolenaar" mouse. 1399297bec07SBram Moolenaarfunc Test_term_mouse_quickfix_window() 1400297bec07SBram Moolenaar let save_mouse = &mouse 1401297bec07SBram Moolenaar let save_term = &term 1402297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1403297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1404297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 1405297bec07SBram Moolenaar set mousemodel= 1406297bec07SBram Moolenaar 1407297bec07SBram Moolenaar cgetexpr "Xfile1:1:L1" 1408297bec07SBram Moolenaar copen 5 1409297bec07SBram Moolenaar call test_setmouse(&lines - 7, 1) 1410297bec07SBram Moolenaar exe "normal \<2-LeftMouse>" 1411297bec07SBram Moolenaar call assert_equal('Xfile1', @%) 1412297bec07SBram Moolenaar %bw! 1413297bec07SBram Moolenaar 1414297bec07SBram Moolenaar lgetexpr "Xfile2:1:L1" 1415297bec07SBram Moolenaar lopen 5 1416297bec07SBram Moolenaar call test_setmouse(&lines - 7, 1) 1417297bec07SBram Moolenaar exe "normal \<2-LeftMouse>" 1418297bec07SBram Moolenaar call assert_equal('Xfile2', @%) 1419297bec07SBram Moolenaar %bw! 1420297bec07SBram Moolenaar 1421297bec07SBram Moolenaar set mousemodel& 1422297bec07SBram Moolenaar let &mouse = save_mouse 1423297bec07SBram Moolenaar let &term = save_term 1424297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1425297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1426297bec07SBram Moolenaarendfunc 1427297bec07SBram Moolenaar 14282764d06aSBram Moolenaar" Test for the 'h' flag in the 'mouse' option. Using mouse in the help window. 14292764d06aSBram Moolenaarfunc Test_term_mouse_help_window() 14302764d06aSBram Moolenaar let save_mouse = &mouse 14312764d06aSBram Moolenaar let save_term = &term 14322764d06aSBram Moolenaar let save_ttymouse = &ttymouse 14332764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 14342764d06aSBram Moolenaar set mouse=h term=xterm mousetime=200 14352764d06aSBram Moolenaar 14362764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 14372764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 14382764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 14392764d06aSBram Moolenaar help 14402764d06aSBram Moolenaar let @" = '' 14412764d06aSBram Moolenaar call MouseLeftClick(2, 5) 14422764d06aSBram Moolenaar call MouseLeftRelease(2, 5) 14432764d06aSBram Moolenaar call MouseLeftClick(1, 1) 14442764d06aSBram Moolenaar call MouseLeftDrag(1, 10) 14452764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 14462764d06aSBram Moolenaar norm! y 14472764d06aSBram Moolenaar call assert_equal('*help.txt*', @", msg) 14482764d06aSBram Moolenaar helpclose 14492764d06aSBram Moolenaar 14502764d06aSBram Moolenaar " Click somewhere else to make sure the left click above is not combined 14512764d06aSBram Moolenaar " with the next left click and treated as a double click 14522764d06aSBram Moolenaar call MouseRightClick(5, 10) 14532764d06aSBram Moolenaar call MouseRightRelease(5, 10) 14542764d06aSBram Moolenaar endfor 14552764d06aSBram Moolenaar 14562764d06aSBram Moolenaar let &mouse = save_mouse 14572764d06aSBram Moolenaar let &term = save_term 14582764d06aSBram Moolenaar let &ttymouse = save_ttymouse 14592764d06aSBram Moolenaar set mousetime& 14602764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 14612764d06aSBram Moolenaar %bw! 14622764d06aSBram Moolenaarendfunc 14632764d06aSBram Moolenaar 14642764d06aSBram Moolenaar" Test for the translation of various mouse terminal codes 14652764d06aSBram Moolenaarfunc Test_mouse_termcodes() 14662764d06aSBram Moolenaar let save_mouse = &mouse 14672764d06aSBram Moolenaar let save_term = &term 14682764d06aSBram Moolenaar let save_ttymouse = &ttymouse 14692764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 14702764d06aSBram Moolenaar set mouse=a term=xterm mousetime=200 14712764d06aSBram Moolenaar 14722764d06aSBram Moolenaar new 14732764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 14742764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 14752764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 14762764d06aSBram Moolenaar 14772764d06aSBram Moolenaar let mouse_codes = [ 14782764d06aSBram Moolenaar \ ["\<LeftMouse>", "<LeftMouse>"], 14792764d06aSBram Moolenaar \ ["\<MiddleMouse>", "<MiddleMouse>"], 14802764d06aSBram Moolenaar \ ["\<RightMouse>", "<RightMouse>"], 14812764d06aSBram Moolenaar \ ["\<S-LeftMouse>", "<S-LeftMouse>"], 14822764d06aSBram Moolenaar \ ["\<S-MiddleMouse>", "<S-MiddleMouse>"], 14832764d06aSBram Moolenaar \ ["\<S-RightMouse>", "<S-RightMouse>"], 14842764d06aSBram Moolenaar \ ["\<C-LeftMouse>", "<C-LeftMouse>"], 14852764d06aSBram Moolenaar \ ["\<C-MiddleMouse>", "<C-MiddleMouse>"], 14862764d06aSBram Moolenaar \ ["\<C-RightMouse>", "<C-RightMouse>"], 14872764d06aSBram Moolenaar \ ["\<M-LeftMouse>", "<M-LeftMouse>"], 14882764d06aSBram Moolenaar \ ["\<M-MiddleMouse>", "<M-MiddleMouse>"], 14892764d06aSBram Moolenaar \ ["\<M-RightMouse>", "<M-RightMouse>"], 14902764d06aSBram Moolenaar \ ["\<2-LeftMouse>", "<2-LeftMouse>"], 14912764d06aSBram Moolenaar \ ["\<2-MiddleMouse>", "<2-MiddleMouse>"], 14922764d06aSBram Moolenaar \ ["\<2-RightMouse>", "<2-RightMouse>"], 14932764d06aSBram Moolenaar \ ["\<3-LeftMouse>", "<3-LeftMouse>"], 14942764d06aSBram Moolenaar \ ["\<3-MiddleMouse>", "<3-MiddleMouse>"], 14952764d06aSBram Moolenaar \ ["\<3-RightMouse>", "<3-RightMouse>"], 14962764d06aSBram Moolenaar \ ["\<4-LeftMouse>", "<4-LeftMouse>"], 14972764d06aSBram Moolenaar \ ["\<4-MiddleMouse>", "<4-MiddleMouse>"], 14982764d06aSBram Moolenaar \ ["\<4-RightMouse>", "<4-RightMouse>"], 14992764d06aSBram Moolenaar \ ["\<LeftDrag>", "<LeftDrag>"], 15002764d06aSBram Moolenaar \ ["\<MiddleDrag>", "<MiddleDrag>"], 15012764d06aSBram Moolenaar \ ["\<RightDrag>", "<RightDrag>"], 15022764d06aSBram Moolenaar \ ["\<LeftRelease>", "<LeftRelease>"], 15032764d06aSBram Moolenaar \ ["\<MiddleRelease>", "<MiddleRelease>"], 15042764d06aSBram Moolenaar \ ["\<RightRelease>", "<RightRelease>"], 15052764d06aSBram Moolenaar \ ["\<ScrollWheelUp>", "<ScrollWheelUp>"], 15062764d06aSBram Moolenaar \ ["\<S-ScrollWheelUp>", "<S-ScrollWheelUp>"], 15072764d06aSBram Moolenaar \ ["\<C-ScrollWheelUp>", "<C-ScrollWheelUp>"], 15082764d06aSBram Moolenaar \ ["\<ScrollWheelDown>", "<ScrollWheelDown>"], 15092764d06aSBram Moolenaar \ ["\<S-ScrollWheelDown>", "<S-ScrollWheelDown>"], 15102764d06aSBram Moolenaar \ ["\<C-ScrollWheelDown>", "<C-ScrollWheelDown>"], 15112764d06aSBram Moolenaar \ ["\<ScrollWheelLeft>", "<ScrollWheelLeft>"], 15122764d06aSBram Moolenaar \ ["\<S-ScrollWheelLeft>", "<S-ScrollWheelLeft>"], 15132764d06aSBram Moolenaar \ ["\<C-ScrollWheelLeft>", "<C-ScrollWheelLeft>"], 15142764d06aSBram Moolenaar \ ["\<ScrollWheelRight>", "<ScrollWheelRight>"], 15152764d06aSBram Moolenaar \ ["\<S-ScrollWheelRight>", "<S-ScrollWheelRight>"], 15162764d06aSBram Moolenaar \ ["\<C-ScrollWheelRight>", "<C-ScrollWheelRight>"] 15172764d06aSBram Moolenaar \ ] 15182764d06aSBram Moolenaar 15192764d06aSBram Moolenaar for [code, outstr] in mouse_codes 15202764d06aSBram Moolenaar exe "normal ggC\<C-K>" . code 15212764d06aSBram Moolenaar call assert_equal(outstr, getline(1), msg) 15222764d06aSBram Moolenaar endfor 15232764d06aSBram Moolenaar endfor 15242764d06aSBram Moolenaar 15252764d06aSBram Moolenaar let &mouse = save_mouse 15262764d06aSBram Moolenaar let &term = save_term 15272764d06aSBram Moolenaar let &ttymouse = save_ttymouse 15282764d06aSBram Moolenaar set mousetime& 15292764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 15302764d06aSBram Moolenaar %bw! 15312764d06aSBram Moolenaarendfunc 15322764d06aSBram Moolenaar 153366761db1SBram Moolenaar" This only checks if the sequence is recognized. 153466761db1SBram Moolenaarfunc Test_term_rgb_response() 153566761db1SBram Moolenaar set t_RF=x 153666761db1SBram Moolenaar set t_RB=y 153766761db1SBram Moolenaar 153866761db1SBram Moolenaar " response to t_RF, 4 digits 153966761db1SBram Moolenaar let red = 0x12 154066761db1SBram Moolenaar let green = 0x34 154166761db1SBram Moolenaar let blue = 0x56 154266761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 154366761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 154466761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 154566761db1SBram Moolenaar 154666761db1SBram Moolenaar " response to t_RF, 2 digits 154766761db1SBram Moolenaar let red = 0x78 154866761db1SBram Moolenaar let green = 0x9a 154966761db1SBram Moolenaar let blue = 0xbc 155066761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 155166761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 155266761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 155366761db1SBram Moolenaar 155432e19770SBram Moolenaar " response to t_RB, 4 digits, dark 155532e19770SBram Moolenaar set background=light 1556ce90e36fSBram Moolenaar eval 'background'->test_option_not_set() 155732e19770SBram Moolenaar let red = 0x29 155832e19770SBram Moolenaar let green = 0x4a 155932e19770SBram Moolenaar let blue = 0x6b 156032e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 156132e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 156232e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 156332e19770SBram Moolenaar call assert_equal('dark', &background) 156432e19770SBram Moolenaar 156532e19770SBram Moolenaar " response to t_RB, 4 digits, light 156632e19770SBram Moolenaar set background=dark 156732e19770SBram Moolenaar call test_option_not_set('background') 156832e19770SBram Moolenaar let red = 0x81 156932e19770SBram Moolenaar let green = 0x63 157066761db1SBram Moolenaar let blue = 0x65 157166761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 157266761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 157366761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 157432e19770SBram Moolenaar call assert_equal('light', &background) 157566761db1SBram Moolenaar 157632e19770SBram Moolenaar " response to t_RB, 2 digits, dark 157732e19770SBram Moolenaar set background=light 157832e19770SBram Moolenaar call test_option_not_set('background') 157932e19770SBram Moolenaar let red = 0x47 158032e19770SBram Moolenaar let green = 0x59 158132e19770SBram Moolenaar let blue = 0x5b 158266761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 158366761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 158466761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 158532e19770SBram Moolenaar call assert_equal('dark', &background) 158632e19770SBram Moolenaar 158732e19770SBram Moolenaar " response to t_RB, 2 digits, light 158832e19770SBram Moolenaar set background=dark 158932e19770SBram Moolenaar call test_option_not_set('background') 159032e19770SBram Moolenaar let red = 0x83 159132e19770SBram Moolenaar let green = 0xa4 159232e19770SBram Moolenaar let blue = 0xc2 159332e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 159432e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 159532e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 159632e19770SBram Moolenaar call assert_equal('light', &background) 159766761db1SBram Moolenaar 159866761db1SBram Moolenaar set t_RF= t_RB= 159966761db1SBram Moolenaarendfunc 160066761db1SBram Moolenaar 160166761db1SBram Moolenaar" This only checks if the sequence is recognized. 16021a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 16031a4cbb19SBram Moolenaar" properties. 16041a4cbb19SBram Moolenaarfunc Test_xx01_term_style_response() 160566761db1SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 160666761db1SBram Moolenaar set t_RV=x 16070c0eddd3SBram Moolenaar call test_override('term_props', 1) 160866761db1SBram Moolenaar 160966761db1SBram Moolenaar " send the termresponse to trigger requesting the XT codes 161066761db1SBram Moolenaar let seq = "\<Esc>[>41;337;0c" 161166761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 161266761db1SBram Moolenaar call assert_equal(seq, v:termresponse) 161366761db1SBram Moolenaar 161466761db1SBram Moolenaar let seq = "\<Esc>P1$r2 q\<Esc>\\" 161566761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 161666761db1SBram Moolenaar call assert_equal(seq, v:termstyleresp) 161766761db1SBram Moolenaar 16180c0eddd3SBram Moolenaar call assert_equal(#{ 16190c0eddd3SBram Moolenaar \ cursor_style: 'u', 16200c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16210c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16220c0eddd3SBram Moolenaar \ mouse: 's' 16230c0eddd3SBram Moolenaar \ }, terminalprops()) 16240c0eddd3SBram Moolenaar 162566761db1SBram Moolenaar set t_RV= 16260c0eddd3SBram Moolenaar call test_override('term_props', 0) 162766761db1SBram Moolenaarendfunc 1628de6dbb45SBram Moolenaar 162989577b3bSBram Moolenaar" This checks the iTerm2 version response. 163089577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 163189577b3bSBram Moolenaar" properties. 163289577b3bSBram Moolenaarfunc Test_xx02_iTerm2_response() 163389577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 163489577b3bSBram Moolenaar set t_RV=x 16350c0eddd3SBram Moolenaar call test_override('term_props', 1) 163689577b3bSBram Moolenaar 163789577b3bSBram Moolenaar " Old versions of iTerm2 used a different style term response. 163889577b3bSBram Moolenaar set ttymouse=xterm 163989577b3bSBram Moolenaar call test_option_not_set('ttymouse') 164089577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;c" 164189577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 164289577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 164389577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 164489577b3bSBram Moolenaar 164589577b3bSBram Moolenaar set ttymouse=xterm 164689577b3bSBram Moolenaar call test_option_not_set('ttymouse') 164789577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;0c" 164889577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 164989577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 165089577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 165189577b3bSBram Moolenaar 16520c0eddd3SBram Moolenaar call assert_equal(#{ 16530c0eddd3SBram Moolenaar \ cursor_style: 'n', 16540c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16550c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16560c0eddd3SBram Moolenaar \ mouse: 's' 16570c0eddd3SBram Moolenaar \ }, terminalprops()) 16580c0eddd3SBram Moolenaar 165989577b3bSBram Moolenaar set t_RV= 16600c0eddd3SBram Moolenaar call test_override('term_props', 0) 166189577b3bSBram Moolenaarendfunc 166289577b3bSBram Moolenaar 16631a4cbb19SBram Moolenaar" This checks the libvterm version response. 16641a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 16651a4cbb19SBram Moolenaar" properties. 166689577b3bSBram Moolenaarfunc Test_xx03_libvterm_response() 16671a4cbb19SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 16681a4cbb19SBram Moolenaar set t_RV=x 16690c0eddd3SBram Moolenaar call test_override('term_props', 1) 167003b00476SBram Moolenaar 16711a4cbb19SBram Moolenaar set ttymouse=xterm 16721a4cbb19SBram Moolenaar call test_option_not_set('ttymouse') 16731a4cbb19SBram Moolenaar let seq = "\<Esc>[>0;100;0c" 16741a4cbb19SBram Moolenaar call feedkeys(seq, 'Lx!') 16751a4cbb19SBram Moolenaar call assert_equal(seq, v:termresponse) 16761a4cbb19SBram Moolenaar call assert_equal('sgr', &ttymouse) 16771a4cbb19SBram Moolenaar 16780c0eddd3SBram Moolenaar call assert_equal(#{ 16790c0eddd3SBram Moolenaar \ cursor_style: 'n', 16800c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16810c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16820c0eddd3SBram Moolenaar \ mouse: 's' 16830c0eddd3SBram Moolenaar \ }, terminalprops()) 16840c0eddd3SBram Moolenaar 16851a4cbb19SBram Moolenaar set t_RV= 16860c0eddd3SBram Moolenaar call test_override('term_props', 0) 16871a4cbb19SBram Moolenaarendfunc 16881a4cbb19SBram Moolenaar 168989577b3bSBram Moolenaar" This checks the Mac Terminal.app version response. 169089577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 169189577b3bSBram Moolenaar" properties. 169289577b3bSBram Moolenaarfunc Test_xx04_Mac_Terminal_response() 169389577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 169489577b3bSBram Moolenaar set t_RV=x 16950c0eddd3SBram Moolenaar call test_override('term_props', 1) 169689577b3bSBram Moolenaar 169789577b3bSBram Moolenaar set ttymouse=xterm 16988dff4cbfSBram Moolenaar " t_8u is not reset 16998dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 170089577b3bSBram Moolenaar call test_option_not_set('ttymouse') 170189577b3bSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 170289577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 170389577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 170489577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 170589577b3bSBram Moolenaar 17060c0eddd3SBram Moolenaar call assert_equal(#{ 17070c0eddd3SBram Moolenaar \ cursor_style: 'n', 17080c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 17090c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17100c0eddd3SBram Moolenaar \ mouse: 's' 17110c0eddd3SBram Moolenaar \ }, terminalprops()) 17128dff4cbfSBram Moolenaar call assert_equal("\<Esc>[58;2;%lu;%lu;%lum", &t_8u) 17130c0eddd3SBram Moolenaar 171489577b3bSBram Moolenaar " Reset is_not_xterm and is_mac_terminal. 171589577b3bSBram Moolenaar set t_RV= 171689577b3bSBram Moolenaar set term=xterm 171789577b3bSBram Moolenaar set t_RV=x 17180c0eddd3SBram Moolenaar call test_override('term_props', 0) 171989577b3bSBram Moolenaarendfunc 172089577b3bSBram Moolenaar 172189577b3bSBram Moolenaar" This checks the mintty version response. 172289577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 172389577b3bSBram Moolenaar" properties. 172489577b3bSBram Moolenaarfunc Test_xx05_mintty_response() 172589577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 172689577b3bSBram Moolenaar set t_RV=x 17270c0eddd3SBram Moolenaar call test_override('term_props', 1) 172889577b3bSBram Moolenaar 172989577b3bSBram Moolenaar set ttymouse=xterm 173089577b3bSBram Moolenaar call test_option_not_set('ttymouse') 173189577b3bSBram Moolenaar let seq = "\<Esc>[>77;20905;0c" 173289577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 173389577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 173489577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 173589577b3bSBram Moolenaar 17360c0eddd3SBram Moolenaar call assert_equal(#{ 17370c0eddd3SBram Moolenaar \ cursor_style: 'n', 17380c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 17390c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17400c0eddd3SBram Moolenaar \ mouse: 's' 17410c0eddd3SBram Moolenaar \ }, terminalprops()) 17420c0eddd3SBram Moolenaar 174389577b3bSBram Moolenaar set t_RV= 17440c0eddd3SBram Moolenaar call test_override('term_props', 0) 174589577b3bSBram Moolenaarendfunc 174689577b3bSBram Moolenaar 174789577b3bSBram Moolenaar" This checks the screen version response. 174889577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 174989577b3bSBram Moolenaar" properties. 175089577b3bSBram Moolenaarfunc Test_xx06_screen_response() 175189577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 175289577b3bSBram Moolenaar set t_RV=x 17530c0eddd3SBram Moolenaar call test_override('term_props', 1) 175489577b3bSBram Moolenaar 175589577b3bSBram Moolenaar " Old versions of screen don't support SGR mouse mode. 175689577b3bSBram Moolenaar set ttymouse=xterm 175789577b3bSBram Moolenaar call test_option_not_set('ttymouse') 175889577b3bSBram Moolenaar let seq = "\<Esc>[>83;40500;0c" 175989577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 176089577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 176189577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 176289577b3bSBram Moolenaar 176389577b3bSBram Moolenaar " screen supports SGR mouse mode starting in version 4.7. 176489577b3bSBram Moolenaar set ttymouse=xterm 176589577b3bSBram Moolenaar call test_option_not_set('ttymouse') 176689577b3bSBram Moolenaar let seq = "\<Esc>[>83;40700;0c" 176789577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 176889577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 176989577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 177089577b3bSBram Moolenaar 17710c0eddd3SBram Moolenaar call assert_equal(#{ 17720c0eddd3SBram Moolenaar \ cursor_style: 'n', 17730c0eddd3SBram Moolenaar \ cursor_blink_mode: 'n', 17740c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17750c0eddd3SBram Moolenaar \ mouse: 's' 17760c0eddd3SBram Moolenaar \ }, terminalprops()) 17770c0eddd3SBram Moolenaar 177889577b3bSBram Moolenaar set t_RV= 17790c0eddd3SBram Moolenaar call test_override('term_props', 0) 178089577b3bSBram Moolenaarendfunc 178189577b3bSBram Moolenaar 178203b00476SBram Moolenaar" This checks the xterm version response. 178303b00476SBram Moolenaar" This must be after other tests, because it has side effects to xterm 178403b00476SBram Moolenaar" properties. 178589577b3bSBram Moolenaarfunc Test_xx07_xterm_response() 178603b00476SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 178703b00476SBram Moolenaar set t_RV=x 17880c0eddd3SBram Moolenaar call test_override('term_props', 1) 178903b00476SBram Moolenaar 17903cea8a9aSBram Moolenaar " Do Terminal.app first to check that is_mac_terminal is reset. 17913cea8a9aSBram Moolenaar set ttymouse=xterm 17923cea8a9aSBram Moolenaar call test_option_not_set('ttymouse') 17933cea8a9aSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 17943cea8a9aSBram Moolenaar call feedkeys(seq, 'Lx!') 17953cea8a9aSBram Moolenaar call assert_equal(seq, v:termresponse) 17963cea8a9aSBram Moolenaar call assert_equal('sgr', &ttymouse) 17973cea8a9aSBram Moolenaar 179803b00476SBram Moolenaar " xterm < 95: "xterm" (actually unmodified) 17993cea8a9aSBram Moolenaar set t_RV= 18003cea8a9aSBram Moolenaar set term=xterm 18013cea8a9aSBram Moolenaar set t_RV=x 180203b00476SBram Moolenaar set ttymouse=xterm 180303b00476SBram Moolenaar call test_option_not_set('ttymouse') 180403b00476SBram Moolenaar let seq = "\<Esc>[>0;94;0c" 180503b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 180603b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 180703b00476SBram Moolenaar call assert_equal('xterm', &ttymouse) 180803b00476SBram Moolenaar 18090c0eddd3SBram Moolenaar call assert_equal(#{ 18100c0eddd3SBram Moolenaar \ cursor_style: 'n', 18110c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18120c0eddd3SBram Moolenaar \ underline_rgb: 'y', 18130c0eddd3SBram Moolenaar \ mouse: 'u' 18140c0eddd3SBram Moolenaar \ }, terminalprops()) 18150c0eddd3SBram Moolenaar 181603b00476SBram Moolenaar " xterm >= 95 < 277 "xterm2" 181703b00476SBram Moolenaar set ttymouse=xterm 181803b00476SBram Moolenaar call test_option_not_set('ttymouse') 181903b00476SBram Moolenaar let seq = "\<Esc>[>0;267;0c" 182003b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 182103b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 182203b00476SBram Moolenaar call assert_equal('xterm2', &ttymouse) 182303b00476SBram Moolenaar 18240c0eddd3SBram Moolenaar call assert_equal(#{ 18250c0eddd3SBram Moolenaar \ cursor_style: 'n', 18260c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18270c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18280c0eddd3SBram Moolenaar \ mouse: '2' 18290c0eddd3SBram Moolenaar \ }, terminalprops()) 18300c0eddd3SBram Moolenaar 183103b00476SBram Moolenaar " xterm >= 277: "sgr" 183203b00476SBram Moolenaar set ttymouse=xterm 183303b00476SBram Moolenaar call test_option_not_set('ttymouse') 183403b00476SBram Moolenaar let seq = "\<Esc>[>0;277;0c" 183503b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 183603b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 183703b00476SBram Moolenaar call assert_equal('sgr', &ttymouse) 183803b00476SBram Moolenaar 18390c0eddd3SBram Moolenaar call assert_equal(#{ 18400c0eddd3SBram Moolenaar \ cursor_style: 'n', 18410c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18420c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18430c0eddd3SBram Moolenaar \ mouse: 's' 18440c0eddd3SBram Moolenaar \ }, terminalprops()) 18450c0eddd3SBram Moolenaar 18468dff4cbfSBram Moolenaar " xterm >= 279: "sgr" and cursor_style not reset; also check t_8u reset 18470c0eddd3SBram Moolenaar set ttymouse=xterm 18480c0eddd3SBram Moolenaar call test_option_not_set('ttymouse') 18498dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 18500c0eddd3SBram Moolenaar let seq = "\<Esc>[>0;279;0c" 18510c0eddd3SBram Moolenaar call feedkeys(seq, 'Lx!') 18520c0eddd3SBram Moolenaar call assert_equal(seq, v:termresponse) 18530c0eddd3SBram Moolenaar call assert_equal('sgr', &ttymouse) 18540c0eddd3SBram Moolenaar 18550c0eddd3SBram Moolenaar call assert_equal(#{ 18560c0eddd3SBram Moolenaar \ cursor_style: 'u', 18570c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18580c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18590c0eddd3SBram Moolenaar \ mouse: 's' 18600c0eddd3SBram Moolenaar \ }, terminalprops()) 18618dff4cbfSBram Moolenaar call assert_equal('', &t_8u) 18620c0eddd3SBram Moolenaar 186303b00476SBram Moolenaar set t_RV= 18640c0eddd3SBram Moolenaar call test_override('term_props', 0) 186503b00476SBram Moolenaarendfunc 186603b00476SBram Moolenaar 1867de6dbb45SBram Moolenaarfunc Test_get_termcode() 1868eb66328bSBram Moolenaar try 1869de6dbb45SBram Moolenaar let k1 = &t_k1 1870eb66328bSBram Moolenaar catch /E113/ 1871eb66328bSBram Moolenaar throw 'Skipped: Unable to query termcodes' 1872eb66328bSBram Moolenaar endtry 1873de6dbb45SBram Moolenaar set t_k1= 1874de6dbb45SBram Moolenaar set t_k1& 1875de6dbb45SBram Moolenaar call assert_equal(k1, &t_k1) 18769aeb3363SBram Moolenaar 18779aeb3363SBram Moolenaar " use external termcap first 18789aeb3363SBram Moolenaar set nottybuiltin 18799aeb3363SBram Moolenaar set t_k1= 18809aeb3363SBram Moolenaar set t_k1& 18819aeb3363SBram Moolenaar " when using external termcap may get something else, but it must not be 18829aeb3363SBram Moolenaar " empty, since we would fallback to the builtin one. 18839aeb3363SBram Moolenaar call assert_notequal('', &t_k1) 18849aeb3363SBram Moolenaar 18859aeb3363SBram Moolenaar if &term =~ 'xterm' 18869aeb3363SBram Moolenaar " use internal termcap first 18879aeb3363SBram Moolenaar let term_save = &term 18889aeb3363SBram Moolenaar let &term = 'builtin_' .. &term 18899aeb3363SBram Moolenaar set t_k1= 18909aeb3363SBram Moolenaar set t_k1& 18919aeb3363SBram Moolenaar call assert_equal(k1, &t_k1) 18929aeb3363SBram Moolenaar let &term = term_save 18939aeb3363SBram Moolenaar endif 18949aeb3363SBram Moolenaar 18959aeb3363SBram Moolenaar set ttybuiltin 1896de6dbb45SBram Moolenaarendfunc 189718a79a68SBram Moolenaar 1898ecd34bf5SBram Moolenaarfunc Test_list_builtin_terminals() 1899*e46a2ed0SBram Moolenaar CheckRunVimInTerminal 1900ecd34bf5SBram Moolenaar let buf = RunVimInTerminal('', #{rows: 14}) 1901ecd34bf5SBram Moolenaar call term_sendkeys(buf, ":set cmdheight=3\<CR>") 1902ecd34bf5SBram Moolenaar call term_wait(buf, 100) 1903ecd34bf5SBram Moolenaar call term_sendkeys(buf, ":set term=xxx\<CR>") 1904ecd34bf5SBram Moolenaar call term_wait(buf, 100) 1905ecd34bf5SBram Moolenaar call assert_match('builtin_dumb', term_getline(buf, 11)) 1906ecd34bf5SBram Moolenaar call assert_match('Not found in termcap', term_getline(buf, 12)) 1907ecd34bf5SBram Moolenaar call StopVimInTerminal(buf) 1908ecd34bf5SBram Moolenaarendfunc 1909ecd34bf5SBram Moolenaar 191018a79a68SBram Moolenaarfunc GetEscCodeCSI27(key, modifier) 191118a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 191218a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 191318a79a68SBram Moolenaar return "\<Esc>[27;" .. mod .. ';' .. key .. '~' 191418a79a68SBram Moolenaarendfunc 191518a79a68SBram Moolenaar 191618a79a68SBram Moolenaarfunc GetEscCodeCSIu(key, modifier) 191718a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 191818a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 191918a79a68SBram Moolenaar return "\<Esc>[" .. key .. ';' .. mod .. 'u' 192018a79a68SBram Moolenaarendfunc 192118a79a68SBram Moolenaar 192218a79a68SBram Moolenaar" This checks the CSI sequences when in modifyOtherKeys mode. 192318a79a68SBram Moolenaar" The mode doesn't need to be enabled, the codes are always detected. 192418a79a68SBram Moolenaarfunc RunTest_modifyOtherKeys(func) 192518a79a68SBram Moolenaar new 1926459fd785SBram Moolenaar set timeoutlen=10 192718a79a68SBram Moolenaar 1928f19f8d1aSBram Moolenaar " Shift-X is sent as 'X' with the shift modifier 192918a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 2) .. "\<Esc>", 'Lx!') 193018a79a68SBram Moolenaar call assert_equal('X', getline(1)) 193118a79a68SBram Moolenaar 193218a79a68SBram Moolenaar " Ctrl-i is Tab 193318a79a68SBram Moolenaar call setline(1, '') 193418a79a68SBram Moolenaar call feedkeys('a' .. a:func('i', 5) .. "\<Esc>", 'Lx!') 193518a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 193618a79a68SBram Moolenaar 193718a79a68SBram Moolenaar " Ctrl-I is also Tab 193818a79a68SBram Moolenaar call setline(1, '') 193918a79a68SBram Moolenaar call feedkeys('a' .. a:func('I', 5) .. "\<Esc>", 'Lx!') 194018a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 194118a79a68SBram Moolenaar 194218a79a68SBram Moolenaar " Alt-x is ø 194318a79a68SBram Moolenaar call setline(1, '') 194418a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 3) .. "\<Esc>", 'Lx!') 194518a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 194618a79a68SBram Moolenaar 194718a79a68SBram Moolenaar " Meta-x is also ø 194818a79a68SBram Moolenaar call setline(1, '') 194918a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 9) .. "\<Esc>", 'Lx!') 195018a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 195118a79a68SBram Moolenaar 195218a79a68SBram Moolenaar " Alt-X is Ø 195318a79a68SBram Moolenaar call setline(1, '') 195418a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 3) .. "\<Esc>", 'Lx!') 195518a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 195618a79a68SBram Moolenaar 195718a79a68SBram Moolenaar " Meta-X is ø 195818a79a68SBram Moolenaar call setline(1, '') 195918a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 9) .. "\<Esc>", 'Lx!') 196018a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 196118a79a68SBram Moolenaar 1962828ffd59SBram Moolenaar " Ctrl-6 is Ctrl-^ 1963828ffd59SBram Moolenaar split aaa 1964828ffd59SBram Moolenaar edit bbb 1965828ffd59SBram Moolenaar call feedkeys(a:func('6', 5), 'Lx!') 1966828ffd59SBram Moolenaar call assert_equal("aaa", bufname()) 1967828ffd59SBram Moolenaar bwipe aaa 1968828ffd59SBram Moolenaar bwipe bbb 1969828ffd59SBram Moolenaar 197018a79a68SBram Moolenaar bwipe! 197118a79a68SBram Moolenaar set timeoutlen& 197218a79a68SBram Moolenaarendfunc 197318a79a68SBram Moolenaar 1974459fd785SBram Moolenaarfunc Test_modifyOtherKeys_basic() 197518a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSI27')) 197618a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSIu')) 197718a79a68SBram Moolenaarendfunc 1978d1e2f398SBram Moolenaar 197938571a04SBram Moolenaarfunc Test_modifyOtherKeys_no_mapping() 198038571a04SBram Moolenaar set timeoutlen=10 198138571a04SBram Moolenaar 198238571a04SBram Moolenaar let @a = 'aaa' 198338571a04SBram Moolenaar call feedkeys(":let x = '" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a'\<CR>", 'Lx!') 198438571a04SBram Moolenaar call assert_equal("let x = 'aaa'", @:) 198538571a04SBram Moolenaar 198638571a04SBram Moolenaar new 198738571a04SBram Moolenaar call feedkeys("a" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a\<Esc>", 'Lx!') 198838571a04SBram Moolenaar call assert_equal("aaa", getline(1)) 198938571a04SBram Moolenaar bwipe! 199038571a04SBram Moolenaar 199138571a04SBram Moolenaar new 199238571a04SBram Moolenaar call feedkeys("axx\<CR>yy" .. GetEscCodeCSI27('G', 5) .. GetEscCodeCSI27('K', 5) .. "a\<Esc>", 'Lx!') 199338571a04SBram Moolenaar call assert_equal("axx", getline(1)) 199438571a04SBram Moolenaar call assert_equal("yy", getline(2)) 199538571a04SBram Moolenaar bwipe! 199638571a04SBram Moolenaar 199738571a04SBram Moolenaar set timeoutlen& 199838571a04SBram Moolenaarendfunc 199938571a04SBram Moolenaar 2000d1e2f398SBram Moolenaarfunc RunTest_mapping_shift(key, func) 2001d1e2f398SBram Moolenaar call setline(1, '') 2002d1e2f398SBram Moolenaar if a:key == '|' 2003d1e2f398SBram Moolenaar exe 'inoremap \| xyz' 2004d1e2f398SBram Moolenaar else 2005d1e2f398SBram Moolenaar exe 'inoremap ' .. a:key .. ' xyz' 2006d1e2f398SBram Moolenaar endif 2007d1e2f398SBram Moolenaar call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!') 2008d1e2f398SBram Moolenaar call assert_equal("xyz", getline(1)) 2009d1e2f398SBram Moolenaar if a:key == '|' 2010d1e2f398SBram Moolenaar exe 'iunmap \|' 2011d1e2f398SBram Moolenaar else 2012d1e2f398SBram Moolenaar exe 'iunmap ' .. a:key 2013d1e2f398SBram Moolenaar endif 2014d1e2f398SBram Moolenaarendfunc 2015d1e2f398SBram Moolenaar 2016975a880aSBram Moolenaarfunc Test_modifyOtherKeys_mapped() 2017975a880aSBram Moolenaar set timeoutlen=10 2018975a880aSBram Moolenaar imap ' <C-W> 2019975a880aSBram Moolenaar imap <C-W><C-A> c-a 2020975a880aSBram Moolenaar call setline(1, '') 2021975a880aSBram Moolenaar 2022975a880aSBram Moolenaar " single quote is turned into single byte CTRL-W 2023975a880aSBram Moolenaar " CTRL-A is added with a separate modifier, and needs to be simplified before 2024975a880aSBram Moolenaar " the mapping can match. 2025975a880aSBram Moolenaar call feedkeys("a'" .. GetEscCodeCSI27('A', 5) .. "\<Esc>", 'Lx!') 2026975a880aSBram Moolenaar call assert_equal('c-a', getline(1)) 2027975a880aSBram Moolenaar 2028975a880aSBram Moolenaar iunmap ' 2029975a880aSBram Moolenaar iunmap <C-W><C-A> 2030975a880aSBram Moolenaar set timeoutlen& 2031975a880aSBram Moolenaarendfunc 2032975a880aSBram Moolenaar 2033d1e2f398SBram Moolenaarfunc RunTest_mapping_works_with_shift(func) 2034d1e2f398SBram Moolenaar new 2035459fd785SBram Moolenaar set timeoutlen=10 2036d1e2f398SBram Moolenaar 2037d1e2f398SBram Moolenaar call RunTest_mapping_shift('@', a:func) 2038d1e2f398SBram Moolenaar call RunTest_mapping_shift('A', a:func) 2039d1e2f398SBram Moolenaar call RunTest_mapping_shift('Z', 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 call RunTest_mapping_shift('~', a:func) 2046d1e2f398SBram Moolenaar 2047d1e2f398SBram Moolenaar bwipe! 2048d1e2f398SBram Moolenaar set timeoutlen& 2049d1e2f398SBram Moolenaarendfunc 2050d1e2f398SBram Moolenaar 2051459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_plain() 2052d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27')) 2053d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu')) 2054d1e2f398SBram Moolenaarendfunc 2055459fd785SBram Moolenaar 2056459fd785SBram Moolenaarfunc RunTest_mapping_mods(map, key, func, code) 2057459fd785SBram Moolenaar call setline(1, '') 2058459fd785SBram Moolenaar exe 'inoremap ' .. a:map .. ' xyz' 2059459fd785SBram Moolenaar call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!') 2060459fd785SBram Moolenaar call assert_equal("xyz", getline(1)) 2061459fd785SBram Moolenaar exe 'iunmap ' .. a:map 2062459fd785SBram Moolenaarendfunc 2063459fd785SBram Moolenaar 2064459fd785SBram Moolenaarfunc RunTest_mapping_works_with_mods(func, mods, code) 2065459fd785SBram Moolenaar new 2066459fd785SBram Moolenaar set timeoutlen=10 2067459fd785SBram Moolenaar 2068459fd785SBram Moolenaar if a:mods !~ 'S' 2069459fd785SBram Moolenaar " Shift by itself has no effect 2070459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-@>', '@', a:func, a:code) 2071459fd785SBram Moolenaar endif 2072459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-A>', 'A', a:func, a:code) 2073459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-Z>', 'Z', a:func, a:code) 2074459fd785SBram Moolenaar if a:mods !~ 'S' 2075459fd785SBram Moolenaar " with Shift code is always upper case 2076459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'a', a:func, a:code) 2077459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'z', a:func, a:code) 2078459fd785SBram Moolenaar endif 2079459fd785SBram Moolenaar if a:mods != 'A' 2080459fd785SBram Moolenaar " with Alt code is not in upper case 2081459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'A', a:func, a:code) 2082459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'Z', a:func, a:code) 2083459fd785SBram Moolenaar endif 2084459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-á>', 'á', a:func, a:code) 2085459fd785SBram Moolenaar if a:mods !~ 'S' 2086459fd785SBram Moolenaar " Shift by itself has no effect 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 call RunTest_mapping_mods('<' .. a:mods .. '-~>', '~', a:func, a:code) 2093459fd785SBram Moolenaar endif 2094459fd785SBram Moolenaar 2095459fd785SBram Moolenaar bwipe! 2096459fd785SBram Moolenaar set timeoutlen& 2097459fd785SBram Moolenaarendfunc 2098459fd785SBram Moolenaar 2099459fd785SBram Moolenaarfunc Test_mapping_works_with_shift() 2100459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S', 2) 2101459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S', 2) 2102459fd785SBram Moolenaarendfunc 2103459fd785SBram Moolenaar 2104459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl() 2105459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C', 5) 2106459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C', 5) 2107459fd785SBram Moolenaarendfunc 2108459fd785SBram Moolenaar 2109459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl() 2110459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S', 6) 2111459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S', 6) 2112459fd785SBram Moolenaarendfunc 2113459fd785SBram Moolenaar 2114459fd785SBram Moolenaar" Below we also test the "u" code with Alt, This works, but libvterm would not 2115459fd785SBram Moolenaar" send the Alt key like this but by prefixing an Esc. 2116459fd785SBram Moolenaar 2117459fd785SBram Moolenaarfunc Test_mapping_works_with_alt() 2118459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'A', 3) 2119459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'A', 3) 2120459fd785SBram Moolenaarendfunc 2121459fd785SBram Moolenaar 2122459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_alt() 2123459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S-A', 4) 2124459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S-A', 4) 2125459fd785SBram Moolenaarendfunc 2126459fd785SBram Moolenaar 2127459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl_alt() 2128459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-A', 7) 2129459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-A', 7) 2130459fd785SBram Moolenaarendfunc 2131459fd785SBram Moolenaar 2132459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl_alt() 2133459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S-A', 8) 2134459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S-A', 8) 2135459fd785SBram Moolenaarendfunc 2136fc4ea2a7SBram Moolenaar 2137fc4ea2a7SBram Moolenaarfunc Test_insert_literal() 2138fc4ea2a7SBram Moolenaar set timeoutlen=10 2139fc4ea2a7SBram Moolenaar new 2140fc4ea2a7SBram Moolenaar " CTRL-V CTRL-X inserts a ^X 2141fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 2142fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 2143fc4ea2a7SBram Moolenaar 2144fc4ea2a7SBram Moolenaar call setline(1, '') 2145fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 2146fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 2147fc4ea2a7SBram Moolenaar 2148f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-X inserts escape sequence 2149fc4ea2a7SBram Moolenaar call setline(1, '') 2150fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 2151fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[88;5u", getline(1)) 2152fc4ea2a7SBram Moolenaar 2153fc4ea2a7SBram Moolenaar call setline(1, '') 2154fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 2155fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[27;5;88~", getline(1)) 2156fc4ea2a7SBram Moolenaar 2157fc4ea2a7SBram Moolenaar bwipe! 2158fc4ea2a7SBram Moolenaar set timeoutlen& 2159fc4ea2a7SBram Moolenaarendfunc 2160fc4ea2a7SBram Moolenaar 2161fc4ea2a7SBram Moolenaarfunc Test_cmdline_literal() 2162fc4ea2a7SBram Moolenaar set timeoutlen=10 2163fc4ea2a7SBram Moolenaar 2164fc4ea2a7SBram Moolenaar " CTRL-V CTRL-Y inserts a ^Y 2165fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2166fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 2167fc4ea2a7SBram Moolenaar 2168fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2169fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 2170fc4ea2a7SBram Moolenaar 2171f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-Y inserts escape sequence 2172fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2173fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[89;5u", @:) 2174fc4ea2a7SBram Moolenaar 2175fc4ea2a7SBram Moolenaar call setline(1, '') 2176fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2177fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[27;5;89~", @:) 2178fc4ea2a7SBram Moolenaar 2179fc4ea2a7SBram Moolenaar set timeoutlen& 2180fc4ea2a7SBram Moolenaarendfunc 21810eabd4dcSBram Moolenaar 21820ff5dedfSBram Moolenaar" Test for translation of special key codes (<xF1>, <xF2>, etc.) 21830ff5dedfSBram Moolenaarfunc Test_Keycode_Tranlsation() 21840ff5dedfSBram Moolenaar let keycodes = [ 21850ff5dedfSBram Moolenaar \ ["<xUp>", "<Up>"], 21860ff5dedfSBram Moolenaar \ ["<xDown>", "<Down>"], 21870ff5dedfSBram Moolenaar \ ["<xLeft>", "<Left>"], 21880ff5dedfSBram Moolenaar \ ["<xRight>", "<Right>"], 21890ff5dedfSBram Moolenaar \ ["<xHome>", "<Home>"], 21900ff5dedfSBram Moolenaar \ ["<xEnd>", "<End>"], 21910ff5dedfSBram Moolenaar \ ["<zHome>", "<Home>"], 21920ff5dedfSBram Moolenaar \ ["<zEnd>", "<End>"], 21930ff5dedfSBram Moolenaar \ ["<xF1>", "<F1>"], 21940ff5dedfSBram Moolenaar \ ["<xF2>", "<F2>"], 21950ff5dedfSBram Moolenaar \ ["<xF3>", "<F3>"], 21960ff5dedfSBram Moolenaar \ ["<xF4>", "<F4>"], 21970ff5dedfSBram Moolenaar \ ["<S-xF1>", "<S-F1>"], 21980ff5dedfSBram Moolenaar \ ["<S-xF2>", "<S-F2>"], 21990ff5dedfSBram Moolenaar \ ["<S-xF3>", "<S-F3>"], 22000ff5dedfSBram Moolenaar \ ["<S-xF4>", "<S-F4>"]] 22010ff5dedfSBram Moolenaar for [k1, k2] in keycodes 22020ff5dedfSBram Moolenaar exe "nnoremap " .. k1 .. " 2wx" 22030ff5dedfSBram Moolenaar call assert_true(maparg(k1, 'n', 0, 1).lhs == k2) 22040ff5dedfSBram Moolenaar exe "nunmap " .. k1 22050ff5dedfSBram Moolenaar endfor 22060ff5dedfSBram Moolenaarendfunc 22070ff5dedfSBram Moolenaar 22080eabd4dcSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 2209