1905dd905SBram Moolenaar" Tests for decoding escape sequences sent by the terminal. 2905dd905SBram Moolenaar 3905dd905SBram Moolenaar" This only works for Unix in a terminal 48c5a278fSBram Moolenaarsource check.vim 58c5a278fSBram MoolenaarCheckNotGui 68c5a278fSBram MoolenaarCheckUnix 7905dd905SBram Moolenaar 8564344acSBram Moolenaarsource shared.vim 9515545e1SBram Moolenaarsource mouse.vim 10ecd34bf5SBram Moolenaarsource view_util.vim 11e46a2ed0SBram Moolenaarsource term_util.vim 123fbd2d7cSBram Moolenaar 1392fd599eSBram Moolenaarfunc Test_term_mouse_left_click() 14905dd905SBram Moolenaar new 15905dd905SBram Moolenaar let save_mouse = &mouse 16905dd905SBram Moolenaar let save_term = &term 17905dd905SBram Moolenaar let save_ttymouse = &ttymouse 1892fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 193fbd2d7cSBram Moolenaar set mouse=a term=xterm 20905dd905SBram Moolenaar call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 21905dd905SBram Moolenaar 22515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 234945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 241ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 253fbd2d7cSBram Moolenaar go 264945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 273fbd2d7cSBram Moolenaar let row = 2 283fbd2d7cSBram Moolenaar let col = 6 293fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 303fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 314945219bSBram Moolenaar call assert_equal([0, 2, 6, 0], getpos('.'), msg) 323fbd2d7cSBram Moolenaar endfor 33905dd905SBram Moolenaar 34905dd905SBram Moolenaar let &mouse = save_mouse 35905dd905SBram Moolenaar let &term = save_term 36905dd905SBram Moolenaar let &ttymouse = save_ttymouse 3792fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 38905dd905SBram Moolenaar bwipe! 39905dd905SBram Moolenaarendfunc 40905dd905SBram Moolenaar 416aa7523bSBram Moolenaarfunc Test_xterm_mouse_right_click_extends_visual() 426aa7523bSBram Moolenaar if has('mac') 436aa7523bSBram Moolenaar throw "Skipped: test right click in visual mode does not work on macOs (why?)" 446aa7523bSBram Moolenaar endif 456aa7523bSBram Moolenaar let save_mouse = &mouse 466aa7523bSBram Moolenaar let save_term = &term 476aa7523bSBram Moolenaar let save_ttymouse = &ttymouse 486aa7523bSBram Moolenaar call test_override('no_query_mouse', 1) 496aa7523bSBram Moolenaar set mouse=a term=xterm 506aa7523bSBram Moolenaar 516aa7523bSBram Moolenaar for visual_mode in ["v", "V", "\<C-V>"] 52515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 536aa7523bSBram Moolenaar let msg = 'visual=' .. visual_mode .. ' ttymouse=' .. ttymouse_val 546aa7523bSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 556aa7523bSBram Moolenaar 566aa7523bSBram Moolenaar call setline(1, repeat([repeat('-', 7)], 7)) 576aa7523bSBram Moolenaar call MouseLeftClick(4, 4) 586aa7523bSBram Moolenaar call MouseLeftRelease(4, 4) 596aa7523bSBram Moolenaar exe "norm! " .. visual_mode 606aa7523bSBram Moolenaar 616aa7523bSBram Moolenaar " Right click extends top left of visual area. 626aa7523bSBram Moolenaar call MouseRightClick(2, 2) 636aa7523bSBram Moolenaar call MouseRightRelease(2, 2) 646aa7523bSBram Moolenaar 65f19f8d1aSBram Moolenaar " Right click extends bottom right of visual area. 666aa7523bSBram Moolenaar call MouseRightClick(6, 6) 676aa7523bSBram Moolenaar call MouseRightRelease(6, 6) 686aa7523bSBram Moolenaar norm! r1gv 696aa7523bSBram Moolenaar 706aa7523bSBram Moolenaar " Right click shrinks top left of visual area. 716aa7523bSBram Moolenaar call MouseRightClick(3, 3) 726aa7523bSBram Moolenaar call MouseRightRelease(3, 3) 736aa7523bSBram Moolenaar 746aa7523bSBram Moolenaar " Right click shrinks bottom right of visual area. 756aa7523bSBram Moolenaar call MouseRightClick(5, 5) 766aa7523bSBram Moolenaar call MouseRightRelease(5, 5) 776aa7523bSBram Moolenaar norm! r2 786aa7523bSBram Moolenaar 796aa7523bSBram Moolenaar if visual_mode ==# 'v' 806aa7523bSBram Moolenaar call assert_equal(['-------', 816aa7523bSBram Moolenaar \ '-111111', 826aa7523bSBram Moolenaar \ '1122222', 836aa7523bSBram Moolenaar \ '2222222', 846aa7523bSBram Moolenaar \ '2222211', 856aa7523bSBram Moolenaar \ '111111-', 866aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 876aa7523bSBram Moolenaar elseif visual_mode ==# 'V' 886aa7523bSBram Moolenaar call assert_equal(['-------', 896aa7523bSBram Moolenaar \ '1111111', 906aa7523bSBram Moolenaar \ '2222222', 916aa7523bSBram Moolenaar \ '2222222', 926aa7523bSBram Moolenaar \ '2222222', 936aa7523bSBram Moolenaar \ '1111111', 946aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 956aa7523bSBram Moolenaar else 966aa7523bSBram Moolenaar call assert_equal(['-------', 976aa7523bSBram Moolenaar \ '-11111-', 986aa7523bSBram Moolenaar \ '-12221-', 996aa7523bSBram Moolenaar \ '-12221-', 1006aa7523bSBram Moolenaar \ '-12221-', 1016aa7523bSBram Moolenaar \ '-11111-', 1026aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 1036aa7523bSBram Moolenaar endif 1046aa7523bSBram Moolenaar endfor 1056aa7523bSBram Moolenaar endfor 1066aa7523bSBram Moolenaar 1076aa7523bSBram Moolenaar let &mouse = save_mouse 1086aa7523bSBram Moolenaar let &term = save_term 1096aa7523bSBram Moolenaar let &ttymouse = save_ttymouse 1106aa7523bSBram Moolenaar call test_override('no_query_mouse', 0) 1116aa7523bSBram Moolenaar bwipe! 1126aa7523bSBram Moolenaarendfunc 1136aa7523bSBram Moolenaar 1141ee36d6fSBram Moolenaar" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 115297bec07SBram Moolenaar" Also test for g<LeftMouse> and g<RightMouse>. 116297bec07SBram Moolenaarfunc Test_xterm_mouse_tagjump() 1171ee36d6fSBram Moolenaar let save_mouse = &mouse 1181ee36d6fSBram Moolenaar let save_term = &term 1191ee36d6fSBram Moolenaar let save_ttymouse = &ttymouse 1201ee36d6fSBram Moolenaar set mouse=a term=xterm 1211ee36d6fSBram Moolenaar 122515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 1231ee36d6fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1241ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1251ee36d6fSBram Moolenaar help 1261ee36d6fSBram Moolenaar /usr_02.txt 1271ee36d6fSBram Moolenaar norm! zt 128297bec07SBram Moolenaar 129297bec07SBram Moolenaar " CTRL-left click to jump to a tag 1301ee36d6fSBram Moolenaar let row = 1 1311ee36d6fSBram Moolenaar let col = 1 1321ee36d6fSBram Moolenaar call MouseCtrlLeftClick(row, col) 1331ee36d6fSBram Moolenaar call MouseLeftRelease(row, col) 1341ee36d6fSBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 135b4367b7fSBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 1361ee36d6fSBram Moolenaar 137297bec07SBram Moolenaar " CTRL-right click to pop a tag 1381ee36d6fSBram Moolenaar call MouseCtrlRightClick(row, col) 13992fd599eSBram Moolenaar call MouseRightRelease(row, col) 1401ee36d6fSBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 141b4367b7fSBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) 1421ee36d6fSBram Moolenaar 143297bec07SBram Moolenaar " Jump to a tag 144297bec07SBram Moolenaar exe "normal \<C-]>" 145297bec07SBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 146297bec07SBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 147297bec07SBram Moolenaar 148297bec07SBram Moolenaar " Use CTRL-right click in insert mode to pop the tag 149297bec07SBram Moolenaar new 150297bec07SBram Moolenaar let str = 'iHello' .. MouseCtrlRightClickCode(row, col) 151297bec07SBram Moolenaar \ .. MouseRightReleaseCode(row, col) .. "\<C-C>" 1522764d06aSBram Moolenaar call assert_fails('call feedkeys(str, "Lx!")', 'E37:', msg) 153297bec07SBram Moolenaar close! 154297bec07SBram Moolenaar 155297bec07SBram Moolenaar " CTRL-right click with a count 156297bec07SBram Moolenaar let str = "4" .. MouseCtrlRightClickCode(row, col) 157297bec07SBram Moolenaar \ .. MouseRightReleaseCode(row, col) 1582764d06aSBram Moolenaar call assert_fails('call feedkeys(str, "Lx!")', 'E555:', msg) 159297bec07SBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 160297bec07SBram Moolenaar call assert_equal(1, line('.'), msg) 161297bec07SBram Moolenaar 162297bec07SBram Moolenaar " g<LeftMouse> to jump to a tag 163297bec07SBram Moolenaar /usr_02.txt 164297bec07SBram Moolenaar norm! zt 165297bec07SBram Moolenaar call test_setmouse(row, col) 166297bec07SBram Moolenaar exe "normal g\<LeftMouse>" 167297bec07SBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 168297bec07SBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 169297bec07SBram Moolenaar 170297bec07SBram Moolenaar " g<RightMouse> to pop to a tag 171297bec07SBram Moolenaar call test_setmouse(row, col) 172297bec07SBram Moolenaar exe "normal g\<RightMouse>" 173297bec07SBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 174297bec07SBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) 175297bec07SBram Moolenaar 176297bec07SBram Moolenaar %bw! 1771ee36d6fSBram Moolenaar endfor 1781ee36d6fSBram Moolenaar 1791ee36d6fSBram Moolenaar let &mouse = save_mouse 1801ee36d6fSBram Moolenaar let &term = save_term 1811ee36d6fSBram Moolenaar let &ttymouse = save_ttymouse 1821ee36d6fSBram Moolenaarendfunc 1831ee36d6fSBram Moolenaar 18492fd599eSBram Moolenaarfunc Test_term_mouse_middle_click() 18552992feaSBram Moolenaar CheckFeature clipboard_working 186564344acSBram Moolenaar 187c1b8160bSBram Moolenaar new 188c1b8160bSBram Moolenaar let save_mouse = &mouse 189c1b8160bSBram Moolenaar let save_term = &term 190c1b8160bSBram Moolenaar let save_ttymouse = &ttymouse 19192fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 192c1b8160bSBram Moolenaar let save_quotestar = @* 193297bec07SBram Moolenaar let save_quoteplus = @+ 194c1b8160bSBram Moolenaar set mouse=a term=xterm 195c1b8160bSBram Moolenaar 196515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 197c1b8160bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1981ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 199c1b8160bSBram Moolenaar call setline(1, ['123456789', '123456789']) 200297bec07SBram Moolenaar let @* = 'abc' 201c1b8160bSBram Moolenaar 202c1b8160bSBram Moolenaar " Middle-click in the middle of the line pastes text where clicked. 203c1b8160bSBram Moolenaar let row = 1 204c1b8160bSBram Moolenaar let col = 6 205c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 206c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 207c1b8160bSBram Moolenaar call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 208c1b8160bSBram Moolenaar 209c1b8160bSBram Moolenaar " Middle-click beyond end of the line pastes text at the end of the line. 210c1b8160bSBram Moolenaar let col = 20 211c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 212c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 213c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 214c1b8160bSBram Moolenaar 215c1b8160bSBram Moolenaar " Middle-click beyond the last line pastes in the last line. 216c1b8160bSBram Moolenaar let row = 5 217c1b8160bSBram Moolenaar let col = 3 218c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 219c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 220c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 221297bec07SBram Moolenaar 222297bec07SBram Moolenaar " Middle mouse click in operator pending mode beeps 223297bec07SBram Moolenaar call assert_beeps('exe "normal c\<MiddleMouse>"') 224297bec07SBram Moolenaar 225297bec07SBram Moolenaar " Clicking middle mouse in visual mode, yanks the selection and pastes the 226297bec07SBram Moolenaar " clipboard contents 227297bec07SBram Moolenaar let save_clipboard = &clipboard 228297bec07SBram Moolenaar set clipboard= 229297bec07SBram Moolenaar let @" = '' 230297bec07SBram Moolenaar call cursor(1, 1) 231297bec07SBram Moolenaar call feedkeys("v3l" .. 232297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7), 'Lx!') 233297bec07SBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3abc456789'], 234297bec07SBram Moolenaar \ getline(1, '$'), msg) 2352764d06aSBram Moolenaar call assert_equal('1234', @", msg) 236297bec07SBram Moolenaar let &clipboard = save_clipboard 237297bec07SBram Moolenaar 238297bec07SBram Moolenaar " Clicking middle mouse in select mode, replaces the selected text with 239297bec07SBram Moolenaar " the clipboard contents 240297bec07SBram Moolenaar let @+ = 'xyz' 241297bec07SBram Moolenaar call cursor(1, 3) 242297bec07SBram Moolenaar exe "normal gh\<Right>\<Right>\<MiddleMouse>" 243297bec07SBram Moolenaar call assert_equal(['12xyzabc6789abc', '12abc3abc456789'], 244297bec07SBram Moolenaar \ getline(1, '$'), msg) 2452764d06aSBram Moolenaar 2462764d06aSBram Moolenaar " Prefixing middle click with [ or ] fixes the indent after pasting. 2472764d06aSBram Moolenaar %d 2482764d06aSBram Moolenaar call setline(1, " one two") 2492764d06aSBram Moolenaar call setreg('r', 'red blue', 'l') 2502764d06aSBram Moolenaar call test_setmouse(1, 5) 2512764d06aSBram Moolenaar exe "normal \"r[\<MiddleMouse>" 2522764d06aSBram Moolenaar call assert_equal(' red blue', getline(1), msg) 2532764d06aSBram Moolenaar call test_setmouse(2, 5) 2542764d06aSBram Moolenaar exe "normal \"r]\<MiddleMouse>" 2552764d06aSBram Moolenaar call assert_equal(' red blue', getline(3), msg) 2562764d06aSBram Moolenaar %d 257c1b8160bSBram Moolenaar endfor 258c1b8160bSBram Moolenaar 259c1b8160bSBram Moolenaar let &mouse = save_mouse 260c1b8160bSBram Moolenaar let &term = save_term 261c1b8160bSBram Moolenaar let &ttymouse = save_ttymouse 26292fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 263c1b8160bSBram Moolenaar let @* = save_quotestar 264297bec07SBram Moolenaar let @+ = save_quotestar 265c1b8160bSBram Moolenaar bwipe! 266c1b8160bSBram Moolenaarendfunc 267c1b8160bSBram Moolenaar 268297bec07SBram Moolenaar" If clipboard is not working, then clicking the middle mouse button in visual 269297bec07SBram Moolenaar" mode, will copy and paste the selected text. 270297bec07SBram Moolenaarfunc Test_term_mouse_middle_click_no_clipboard() 271297bec07SBram Moolenaar if has('clipboard_working') 272297bec07SBram Moolenaar throw 'Skipped: clipboard support works' 273297bec07SBram Moolenaar endif 274297bec07SBram Moolenaar new 275297bec07SBram Moolenaar let save_mouse = &mouse 276297bec07SBram Moolenaar let save_term = &term 277297bec07SBram Moolenaar let save_ttymouse = &ttymouse 278297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 279297bec07SBram Moolenaar set mouse=a term=xterm 280297bec07SBram Moolenaar 281297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 282297bec07SBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 283297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 284297bec07SBram Moolenaar call setline(1, ['123456789', '123456789']) 285297bec07SBram Moolenaar 286297bec07SBram Moolenaar " Clicking middle mouse in visual mode, yanks the selection and pastes it 287297bec07SBram Moolenaar call cursor(1, 1) 288297bec07SBram Moolenaar call feedkeys("v3l" .. 289297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7), 'Lx!') 290297bec07SBram Moolenaar call assert_equal(['123456789', '1234561234789'], 291297bec07SBram Moolenaar \ getline(1, '$'), msg) 292297bec07SBram Moolenaar endfor 293297bec07SBram Moolenaar 294297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 295297bec07SBram Moolenaar let &ttymouse = save_ttymouse 296297bec07SBram Moolenaar let &term = save_term 297297bec07SBram Moolenaar let &mouse = save_mouse 298297bec07SBram Moolenaar close! 299297bec07SBram Moolenaarendfunc 300297bec07SBram Moolenaar 301297bec07SBram Moolenaarfunc Test_term_mouse_middle_click_insert_mode() 302297bec07SBram Moolenaar CheckFeature clipboard_working 303297bec07SBram Moolenaar 304297bec07SBram Moolenaar new 305297bec07SBram Moolenaar let save_mouse = &mouse 306297bec07SBram Moolenaar let save_term = &term 307297bec07SBram Moolenaar let save_ttymouse = &ttymouse 308297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 309297bec07SBram Moolenaar set mouse=a term=xterm 310297bec07SBram Moolenaar 311297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 312297bec07SBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 313297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 314297bec07SBram Moolenaar call setline(1, ['123456789', '123456789']) 315297bec07SBram Moolenaar let @* = 'abc' 316297bec07SBram Moolenaar 317297bec07SBram Moolenaar " Middle-click in inesrt mode doesn't move the cursor but inserts the 318297bec07SBram Moolenaar " contents of aregister 319297bec07SBram Moolenaar call cursor(1, 4) 320297bec07SBram Moolenaar call feedkeys('i' .. 321297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7) .. 322297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 323297bec07SBram Moolenaar call assert_equal(['123abc456789', '123456789'], 324297bec07SBram Moolenaar \ getline(1, '$'), msg) 3252764d06aSBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')], msg) 326297bec07SBram Moolenaar 327297bec07SBram Moolenaar " Middle-click in replace mode 328297bec07SBram Moolenaar call cursor(1, 1) 329297bec07SBram Moolenaar call feedkeys('$R' .. 330297bec07SBram Moolenaar \ MouseMiddleClickCode(2, 7) .. MouseMiddleReleaseCode(2, 7) .. 331297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 332297bec07SBram Moolenaar call assert_equal(['123abc45678abc', '123456789'], 333297bec07SBram Moolenaar \ getline(1, '$'), msg) 3342764d06aSBram Moolenaar call assert_equal([1, 14], [line('.'), col('.')], msg) 335297bec07SBram Moolenaar endfor 336297bec07SBram Moolenaar 337297bec07SBram Moolenaar let &mouse = save_mouse 338297bec07SBram Moolenaar let &term = save_term 339297bec07SBram Moolenaar let &ttymouse = save_ttymouse 340297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 341297bec07SBram Moolenaar close! 342297bec07SBram Moolenaarendfunc 343297bec07SBram Moolenaar 344297bec07SBram Moolenaar" Test for switching window using mouse in insert mode 345297bec07SBram Moolenaarfunc Test_term_mouse_switch_win_insert_mode() 346297bec07SBram Moolenaar 5new 347297bec07SBram Moolenaar let save_mouse = &mouse 348297bec07SBram Moolenaar let save_term = &term 349297bec07SBram Moolenaar let save_ttymouse = &ttymouse 350297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 351297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 352297bec07SBram Moolenaar 353297bec07SBram Moolenaar call feedkeys('ivim' .. 354297bec07SBram Moolenaar \ MouseLeftClickCode(8, 6) .. MouseLeftReleaseCode(8, 6) .. 355297bec07SBram Moolenaar \ "\<C-C>", 'Lx!') 356297bec07SBram Moolenaar call assert_equal(2, winnr()) 357297bec07SBram Moolenaar wincmd w 358297bec07SBram Moolenaar call assert_equal('n', mode()) 359297bec07SBram Moolenaar call assert_equal(['vim'], getline(1, '$')) 360297bec07SBram Moolenaar 361297bec07SBram Moolenaar let &mouse = save_mouse 362297bec07SBram Moolenaar let &term = save_term 363297bec07SBram Moolenaar let &ttymouse = save_ttymouse 364297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 365297bec07SBram Moolenaar close! 366297bec07SBram Moolenaarendfunc 367297bec07SBram Moolenaar 368297bec07SBram Moolenaar" Test for using the mouse to increaes the height of the cmdline window 369297bec07SBram Moolenaarfunc Test_mouse_cmdwin_resize() 37021829c5fSBram Moolenaar CheckFeature cmdwin 37121829c5fSBram Moolenaar 372297bec07SBram Moolenaar let save_mouse = &mouse 373297bec07SBram Moolenaar let save_term = &term 374297bec07SBram Moolenaar let save_ttymouse = &ttymouse 375297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 376297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 377297bec07SBram Moolenaar 5new 378297bec07SBram Moolenaar redraw! 379297bec07SBram Moolenaar 380297bec07SBram Moolenaar let h = 0 381297bec07SBram Moolenaar let row = &lines - &cmdwinheight - 2 382297bec07SBram Moolenaar call feedkeys("q:" .. 383297bec07SBram Moolenaar \ MouseLeftClickCode(row, 1) .. 384297bec07SBram Moolenaar \ MouseLeftDragCode(row - 1, 1) .. 385297bec07SBram Moolenaar \ MouseLeftReleaseCode(row - 2, 1) .. 386297bec07SBram Moolenaar \ "alet h = \<C-R>=winheight(0)\<CR>\<CR>", 'Lx!') 387297bec07SBram Moolenaar call assert_equal(&cmdwinheight + 2, h) 388297bec07SBram Moolenaar 389297bec07SBram Moolenaar let &mouse = save_mouse 390297bec07SBram Moolenaar let &term = save_term 391297bec07SBram Moolenaar let &ttymouse = save_ttymouse 392297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 393297bec07SBram Moolenaar close! 394297bec07SBram Moolenaarendfunc 395297bec07SBram Moolenaar 39692fd599eSBram Moolenaar" TODO: for unclear reasons this test fails if it comes after 39792fd599eSBram Moolenaar" Test_xterm_mouse_ctrl_click() 39892fd599eSBram Moolenaarfunc Test_1xterm_mouse_wheel() 399049736faSBram Moolenaar new 400049736faSBram Moolenaar let save_mouse = &mouse 401049736faSBram Moolenaar let save_term = &term 402d58d4f90SBram Moolenaar let save_wrap = &wrap 403049736faSBram Moolenaar let save_ttymouse = &ttymouse 404d58d4f90SBram Moolenaar set mouse=a term=xterm nowrap 405d58d4f90SBram Moolenaar call setline(1, range(100000000000000, 100000000000100)) 406049736faSBram Moolenaar 407515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 4084945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4091ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 410049736faSBram Moolenaar go 4114945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 4124945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 4133fbd2d7cSBram Moolenaar 4143fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 4154945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 4164945219bSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.'), msg) 4173fbd2d7cSBram Moolenaar 4183fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 4194945219bSBram Moolenaar call assert_equal(7, line('w0'), msg) 4204945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 421049736faSBram Moolenaar 4223fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 4234945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 4244945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 4253fbd2d7cSBram Moolenaar 4263fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 4274945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 4284945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 429d58d4f90SBram Moolenaar 430d58d4f90SBram Moolenaar if has('gui') 431d58d4f90SBram Moolenaar " Horizontal wheel scrolling currently only works when vim is 432d58d4f90SBram Moolenaar " compiled with gui enabled. 433d58d4f90SBram Moolenaar call MouseWheelRight(1, 1) 434d58d4f90SBram Moolenaar call assert_equal(7, 1 + virtcol(".") - wincol(), msg) 435d58d4f90SBram Moolenaar call assert_equal([0, 7, 7, 0], getpos('.'), msg) 436d58d4f90SBram Moolenaar 437d58d4f90SBram Moolenaar call MouseWheelRight(1, 1) 438d58d4f90SBram Moolenaar call assert_equal(13, 1 + virtcol(".") - wincol(), msg) 439d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 440d58d4f90SBram Moolenaar 441d58d4f90SBram Moolenaar call MouseWheelLeft(1, 1) 442d58d4f90SBram Moolenaar call assert_equal(7, 1 + virtcol(".") - wincol(), msg) 443d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 444d58d4f90SBram Moolenaar 445d58d4f90SBram Moolenaar call MouseWheelLeft(1, 1) 446d58d4f90SBram Moolenaar call assert_equal(1, 1 + virtcol(".") - wincol(), msg) 447d58d4f90SBram Moolenaar call assert_equal([0, 7, 13, 0], getpos('.'), msg) 448d58d4f90SBram Moolenaar endif 4493fbd2d7cSBram Moolenaar endfor 450049736faSBram Moolenaar 451049736faSBram Moolenaar let &mouse = save_mouse 452049736faSBram Moolenaar let &term = save_term 453d58d4f90SBram Moolenaar let &wrap = save_wrap 454049736faSBram Moolenaar let &ttymouse = save_ttymouse 455049736faSBram Moolenaar bwipe! 456049736faSBram Moolenaarendfunc 4573fb01a53SBram Moolenaar 458b4367b7fSBram Moolenaar" Test that dragging beyond the window (at the bottom and at the top) 459f19f8d1aSBram Moolenaar" scrolls window content by the number of lines beyond the window. 460b4367b7fSBram Moolenaarfunc Test_term_mouse_drag_beyond_window() 461b4367b7fSBram Moolenaar let save_mouse = &mouse 462b4367b7fSBram Moolenaar let save_term = &term 463b4367b7fSBram Moolenaar let save_ttymouse = &ttymouse 464b4367b7fSBram Moolenaar call test_override('no_query_mouse', 1) 465b4367b7fSBram Moolenaar set mouse=a term=xterm 466b4367b7fSBram Moolenaar let col = 1 467b4367b7fSBram Moolenaar call setline(1, range(1, 100)) 468b4367b7fSBram Moolenaar 469b4367b7fSBram Moolenaar " Split into 3 windows, and go into the middle window 470b4367b7fSBram Moolenaar " so we test dragging mouse below and above the window. 471b4367b7fSBram Moolenaar 2split 472b4367b7fSBram Moolenaar wincmd j 473b4367b7fSBram Moolenaar 2split 474b4367b7fSBram Moolenaar 475515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 476b4367b7fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 477b4367b7fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 478b4367b7fSBram Moolenaar 479b4367b7fSBram Moolenaar " Line #10 at the top. 480b4367b7fSBram Moolenaar norm! 10zt 481b4367b7fSBram Moolenaar redraw 482b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 483b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 484b4367b7fSBram Moolenaar 485b4367b7fSBram Moolenaar let row = 4 486b4367b7fSBram Moolenaar call MouseLeftClick(row, col) 487b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 488b4367b7fSBram Moolenaar 489b4367b7fSBram Moolenaar " Drag downwards. We're still in the window so topline should 490b4367b7fSBram Moolenaar " not change yet. 491b4367b7fSBram Moolenaar let row += 1 492b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 493b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 494b4367b7fSBram Moolenaar 495b4367b7fSBram Moolenaar " We now leave the window at the bottom, so the window content should 496b4367b7fSBram Moolenaar " scroll by 1 line, then 2 lines (etc) as we drag further away. 497b4367b7fSBram Moolenaar let row += 1 498b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 499b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 500b4367b7fSBram Moolenaar 501b4367b7fSBram Moolenaar let row += 1 502b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 503b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 504b4367b7fSBram Moolenaar 505b4367b7fSBram Moolenaar " Now drag upwards. 506b4367b7fSBram Moolenaar let row -= 1 507b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 508b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 509b4367b7fSBram Moolenaar 510b4367b7fSBram Moolenaar " We're now back in the window so the topline should not change. 511b4367b7fSBram Moolenaar let row -= 1 512b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 513b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 514b4367b7fSBram Moolenaar 515b4367b7fSBram Moolenaar let row -= 1 516b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 517b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 518b4367b7fSBram Moolenaar 519b4367b7fSBram Moolenaar " We now leave the window at the top so the window content should 520b4367b7fSBram Moolenaar " scroll by 1 line, then 2, then 3 (etc) in the opposite direction. 521b4367b7fSBram Moolenaar let row -= 1 522b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 523b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 524b4367b7fSBram Moolenaar 525b4367b7fSBram Moolenaar let row -= 1 526b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 527b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 528b4367b7fSBram Moolenaar 529b4367b7fSBram Moolenaar let row -= 1 530b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 531b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 532b4367b7fSBram Moolenaar 533b4367b7fSBram Moolenaar call MouseLeftRelease(row, col) 534b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 535b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 536b4367b7fSBram Moolenaar endfor 537b4367b7fSBram Moolenaar 538b4367b7fSBram Moolenaar let &mouse = save_mouse 539b4367b7fSBram Moolenaar let &term = save_term 540b4367b7fSBram Moolenaar let &ttymouse = save_ttymouse 541b4367b7fSBram Moolenaar call test_override('no_query_mouse', 0) 542b4367b7fSBram Moolenaar bwipe! 543b4367b7fSBram Moolenaarendfunc 544b4367b7fSBram Moolenaar 54592fd599eSBram Moolenaarfunc Test_term_mouse_drag_window_separator() 5463fb01a53SBram Moolenaar let save_mouse = &mouse 5473fb01a53SBram Moolenaar let save_term = &term 5483fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 54992fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 5503fbd2d7cSBram Moolenaar set mouse=a term=xterm 5513fbd2d7cSBram Moolenaar 552515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 5534945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5541ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 5553fb01a53SBram Moolenaar 5563fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 5573fb01a53SBram Moolenaar split 5583fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 5593fb01a53SBram Moolenaar let row = rowseparator 5603fb01a53SBram Moolenaar let col = 1 561c8b3ddabSBram Moolenaar 5622b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 5632b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 5643fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5653fb01a53SBram Moolenaar let row -= 1 5663fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5674945219bSBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 5683fb01a53SBram Moolenaar let row += 1 5693fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5704945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 5713fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5724945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 57339f76c6aSBram Moolenaar endif 5743fb01a53SBram Moolenaar bwipe! 5753fb01a53SBram Moolenaar 5763fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 5773fb01a53SBram Moolenaar vsplit 5783fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 5793fb01a53SBram Moolenaar let row = 1 5803fb01a53SBram Moolenaar let col = colseparator 58139f76c6aSBram Moolenaar 5822b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 5832b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || col <= 223 5843fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 5853fb01a53SBram Moolenaar let col -= 1 5863fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5874945219bSBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 5883fb01a53SBram Moolenaar let col += 1 5893fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 5904945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 5913fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 5924945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 59339f76c6aSBram Moolenaar endif 5943fb01a53SBram Moolenaar bwipe! 5953fbd2d7cSBram Moolenaar endfor 5963fbd2d7cSBram Moolenaar 5973fbd2d7cSBram Moolenaar let &mouse = save_mouse 5983fbd2d7cSBram Moolenaar let &term = save_term 5993fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 60092fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 6013fbd2d7cSBram Moolenaarendfunc 6023fbd2d7cSBram Moolenaar 60392fd599eSBram Moolenaarfunc Test_term_mouse_drag_statusline() 6043fbd2d7cSBram Moolenaar let save_mouse = &mouse 6053fbd2d7cSBram Moolenaar let save_term = &term 6063fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 60792fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 608ca57ab54SBram Moolenaar let save_laststatus = &laststatus 609ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 6103fbd2d7cSBram Moolenaar 611515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 6124945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6131ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 6143fbd2d7cSBram Moolenaar 6154945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6163fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 6173fbd2d7cSBram Moolenaar let row = rowstatusline 6183fbd2d7cSBram Moolenaar let col = 1 619c8b3ddabSBram Moolenaar 6202b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && row > 223 6212b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 622c8b3ddabSBram Moolenaar continue 623c8b3ddabSBram Moolenaar endif 624c8b3ddabSBram Moolenaar 6253fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 6263fbd2d7cSBram Moolenaar let row -= 1 6273fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 6284945219bSBram Moolenaar call assert_equal(2, &cmdheight, msg) 6294945219bSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 6303fbd2d7cSBram Moolenaar let row += 1 6313fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 6324945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6334945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 6343fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 6354945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 6364945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 6373fbd2d7cSBram Moolenaar endfor 6383fbd2d7cSBram Moolenaar 6393fb01a53SBram Moolenaar let &mouse = save_mouse 6403fb01a53SBram Moolenaar let &term = save_term 6413fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 64292fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 643ca57ab54SBram Moolenaar let &laststatus = save_laststatus 644ca57ab54SBram Moolenaarendfunc 645ca57ab54SBram Moolenaar 64692fd599eSBram Moolenaarfunc Test_term_mouse_click_tab() 647ca57ab54SBram Moolenaar let save_mouse = &mouse 648ca57ab54SBram Moolenaar let save_term = &term 649ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 65092fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 651ca57ab54SBram Moolenaar set mouse=a term=xterm 652ca57ab54SBram Moolenaar let row = 1 653ca57ab54SBram Moolenaar 654515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 6554945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 6561ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 657ca57ab54SBram Moolenaar e Xfoo 658ca57ab54SBram Moolenaar tabnew Xbar 659ca57ab54SBram Moolenaar 660ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 661ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 662ca57ab54SBram Moolenaar \ ' Xfoo', 663ca57ab54SBram Moolenaar \ 'Tab page 2', 6644945219bSBram Moolenaar \ '> Xbar'], a, msg) 665ca57ab54SBram Moolenaar 666ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 667ca57ab54SBram Moolenaar let col = 2 66839f76c6aSBram Moolenaar redraw 669ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 670ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 671ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 672ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 673ca57ab54SBram Moolenaar \ '> Xfoo', 674ca57ab54SBram Moolenaar \ 'Tab page 2', 6754945219bSBram Moolenaar \ ' Xbar'], a, msg) 676ca57ab54SBram Moolenaar 677ca57ab54SBram Moolenaar let col = 9 678ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 679ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 680ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 681ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 682ca57ab54SBram Moolenaar \ ' Xfoo', 683ca57ab54SBram Moolenaar \ 'Tab page 2', 6844945219bSBram Moolenaar \ '> Xbar'], a, msg) 685ca57ab54SBram Moolenaar 686ca57ab54SBram Moolenaar %bwipe! 687ca57ab54SBram Moolenaar endfor 688ca57ab54SBram Moolenaar 689ca57ab54SBram Moolenaar let &mouse = save_mouse 690ca57ab54SBram Moolenaar let &term = save_term 691ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 69292fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 6933fb01a53SBram Moolenaarendfunc 69439f76c6aSBram Moolenaar 69592fd599eSBram Moolenaarfunc Test_term_mouse_click_X_to_close_tab() 69639f76c6aSBram Moolenaar let save_mouse = &mouse 69739f76c6aSBram Moolenaar let save_term = &term 69839f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 69992fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 70039f76c6aSBram Moolenaar set mouse=a term=xterm 70139f76c6aSBram Moolenaar let row = 1 70239f76c6aSBram Moolenaar let col = &columns 70339f76c6aSBram Moolenaar 704515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 7052b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && col > 223 7062b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 70739f76c6aSBram Moolenaar continue 70839f76c6aSBram Moolenaar endif 7094945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7101ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 71139f76c6aSBram Moolenaar e Xtab1 71239f76c6aSBram Moolenaar tabnew Xtab2 71339f76c6aSBram Moolenaar tabnew Xtab3 71439f76c6aSBram Moolenaar tabn 2 71539f76c6aSBram Moolenaar 71639f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 71739f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 71839f76c6aSBram Moolenaar \ ' Xtab1', 71939f76c6aSBram Moolenaar \ 'Tab page 2', 72039f76c6aSBram Moolenaar \ '> Xtab2', 72139f76c6aSBram Moolenaar \ 'Tab page 3', 7224945219bSBram Moolenaar \ ' Xtab3'], a, msg) 72339f76c6aSBram Moolenaar 72439f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 72539f76c6aSBram Moolenaar redraw 72639f76c6aSBram Moolenaar call MouseLeftClick(row, col) 72739f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 72839f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 72939f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 73039f76c6aSBram Moolenaar \ ' Xtab1', 73139f76c6aSBram Moolenaar \ 'Tab page 2', 7324945219bSBram Moolenaar \ '> Xtab3'], a, msg) 73339f76c6aSBram Moolenaar 73439f76c6aSBram Moolenaar %bwipe! 73539f76c6aSBram Moolenaar endfor 73639f76c6aSBram Moolenaar 73739f76c6aSBram Moolenaar let &mouse = save_mouse 73839f76c6aSBram Moolenaar let &term = save_term 73939f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 74092fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 74139f76c6aSBram Moolenaarendfunc 742e3e3828fSBram Moolenaar 74392fd599eSBram Moolenaarfunc Test_term_mouse_drag_to_move_tab() 744e3e3828fSBram Moolenaar let save_mouse = &mouse 745e3e3828fSBram Moolenaar let save_term = &term 746e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 74792fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 748e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 749e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 750e3e3828fSBram Moolenaar let row = 1 751e3e3828fSBram Moolenaar 752515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 7534945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 7541ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 755e3e3828fSBram Moolenaar e Xtab1 756e3e3828fSBram Moolenaar tabnew Xtab2 757e3e3828fSBram Moolenaar 758e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 759e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 760e3e3828fSBram Moolenaar \ ' Xtab1', 761e3e3828fSBram Moolenaar \ 'Tab page 2', 7624945219bSBram Moolenaar \ '> Xtab2'], a, msg) 763e3e3828fSBram Moolenaar redraw 764e3e3828fSBram Moolenaar 765e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 766e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 767e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 768e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 7694945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 770e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 771e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 772e3e3828fSBram Moolenaar endfor 773e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 774e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 775e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 776e3e3828fSBram Moolenaar \ '> Xtab2', 777e3e3828fSBram Moolenaar \ 'Tab page 2', 7784945219bSBram Moolenaar \ ' Xtab1'], a, msg) 779e3e3828fSBram Moolenaar 780f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 781f36a2c7eSBram Moolenaar " interpreted as unwanted double-click. 782f36a2c7eSBram Moolenaar call MouseLeftClick(row, 11) 783f36a2c7eSBram Moolenaar call MouseLeftRelease(row, 11) 784f36a2c7eSBram Moolenaar 785e3e3828fSBram Moolenaar %bwipe! 786e3e3828fSBram Moolenaar endfor 787e3e3828fSBram Moolenaar 788e3e3828fSBram Moolenaar let &mouse = save_mouse 789e3e3828fSBram Moolenaar let &term = save_term 790e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 79192fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 792e3e3828fSBram Moolenaar set mousetime& 793e3e3828fSBram Moolenaarendfunc 794e3e3828fSBram Moolenaar 79592fd599eSBram Moolenaarfunc Test_term_mouse_double_click_to_create_tab() 796e3e3828fSBram Moolenaar let save_mouse = &mouse 797e3e3828fSBram Moolenaar let save_term = &term 798e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 79992fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 800e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 801e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 802f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 803e3e3828fSBram Moolenaar let row = 1 804e3e3828fSBram Moolenaar let col = 10 805e3e3828fSBram Moolenaar 806515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 8074945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 8081ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 809e3e3828fSBram Moolenaar e Xtab1 810e3e3828fSBram Moolenaar tabnew Xtab2 811e3e3828fSBram Moolenaar 812e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 813e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 814e3e3828fSBram Moolenaar \ ' Xtab1', 815e3e3828fSBram Moolenaar \ 'Tab page 2', 8164945219bSBram Moolenaar \ '> Xtab2'], a, msg) 817e3e3828fSBram Moolenaar 818e3e3828fSBram Moolenaar redraw 819e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 820e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 821e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 8224945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 823e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 824e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 8254945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 826e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 827e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 828e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 829e3e3828fSBram Moolenaar \ ' Xtab1', 830e3e3828fSBram Moolenaar \ 'Tab page 2', 831e3e3828fSBram Moolenaar \ '> [No Name]', 832e3e3828fSBram Moolenaar \ 'Tab page 3', 8334945219bSBram Moolenaar \ ' Xtab2'], a, msg) 834e3e3828fSBram Moolenaar 835f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 836f36a2c7eSBram Moolenaar " interpreted as unwanted double click. 837f36a2c7eSBram Moolenaar call MouseLeftClick(row, col + 1) 838f36a2c7eSBram Moolenaar call MouseLeftRelease(row, col + 1) 839f36a2c7eSBram Moolenaar 840e3e3828fSBram Moolenaar %bwipe! 841e3e3828fSBram Moolenaar endfor 842e3e3828fSBram Moolenaar 843e3e3828fSBram Moolenaar let &mouse = save_mouse 844e3e3828fSBram Moolenaar let &term = save_term 845e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 84692fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 847e3e3828fSBram Moolenaar set mousetime& 848e3e3828fSBram Moolenaarendfunc 849696d6377SBram Moolenaar 850f36a2c7eSBram Moolenaar" Test double/triple/quadruple click in normal mode to visually select. 851f36a2c7eSBram Moolenaarfunc Test_term_mouse_multiple_clicks_to_visually_select() 852f36a2c7eSBram Moolenaar let save_mouse = &mouse 853f36a2c7eSBram Moolenaar let save_term = &term 854f36a2c7eSBram Moolenaar let save_ttymouse = &ttymouse 855f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 1) 8562a5c61a0SBram Moolenaar 8572a5c61a0SBram Moolenaar " 'mousetime' must be sufficiently large, or else the test is flaky when 8582a5c61a0SBram Moolenaar " using a ssh connection with X forwarding; i.e. ssh -X (issue #7563). 8592a5c61a0SBram Moolenaar set mouse=a term=xterm mousetime=600 860f36a2c7eSBram Moolenaar new 861f36a2c7eSBram Moolenaar 862515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 863f36a2c7eSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 864f36a2c7eSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 865f36a2c7eSBram Moolenaar call setline(1, ['foo [foo bar] foo', 'foo']) 866f36a2c7eSBram Moolenaar 867f36a2c7eSBram Moolenaar " Double-click on word should visually select the word. 868f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 869f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 870f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 871f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 872f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 873f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 874f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 875f36a2c7eSBram Moolenaar norm! r1 876f36a2c7eSBram Moolenaar call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg) 877f36a2c7eSBram Moolenaar 878f36a2c7eSBram Moolenaar " Double-click on opening square bracket should visually 879f36a2c7eSBram Moolenaar " select the whole [foo bar]. 880f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 881f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 882f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 883f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 884f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 885f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 886f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 887f36a2c7eSBram Moolenaar norm! r2 888f36a2c7eSBram Moolenaar call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg) 889f36a2c7eSBram Moolenaar 890f36a2c7eSBram Moolenaar " Triple-click should visually select the whole line. 891f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 892f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 893f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 894f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 895f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 896f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 897f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 898f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 899f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 900f36a2c7eSBram Moolenaar call assert_equal('V', mode(), msg) 901f36a2c7eSBram Moolenaar norm! r3 902f36a2c7eSBram Moolenaar call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg) 903f36a2c7eSBram Moolenaar 904f36a2c7eSBram Moolenaar " Quadruple-click should start visual block select. 905f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 906f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 907f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 908f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 909f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 910f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 911f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 912f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 913f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 914f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 915f36a2c7eSBram Moolenaar call assert_equal(96, getcharmod(), msg) " quadruple-click 916f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 917f36a2c7eSBram Moolenaar call assert_equal("\<c-v>", mode(), msg) 918f36a2c7eSBram Moolenaar norm! r4 919f36a2c7eSBram Moolenaar call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg) 9202764d06aSBram Moolenaar 9212764d06aSBram Moolenaar " Double-click on a space character should visually select all the 9222764d06aSBram Moolenaar " consecutive space characters. 9232764d06aSBram Moolenaar %d 9242764d06aSBram Moolenaar call setline(1, ' one two') 9252764d06aSBram Moolenaar call MouseLeftClick(1, 2) 9262764d06aSBram Moolenaar call MouseLeftRelease(1, 2) 9272764d06aSBram Moolenaar call MouseLeftClick(1, 2) 9282764d06aSBram Moolenaar call MouseLeftRelease(1, 2) 9292764d06aSBram Moolenaar call assert_equal('v', mode(), msg) 9302764d06aSBram Moolenaar norm! r1 9312764d06aSBram Moolenaar call assert_equal(['1111one two'], getline(1, '$'), msg) 9322764d06aSBram Moolenaar 9332764d06aSBram Moolenaar " Double-click on a word with exclusive selection 9342764d06aSBram Moolenaar set selection=exclusive 9352764d06aSBram Moolenaar let @" = '' 9362764d06aSBram Moolenaar call MouseLeftClick(1, 10) 9372764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 9382764d06aSBram Moolenaar call MouseLeftClick(1, 10) 9392764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 9402764d06aSBram Moolenaar norm! y 9412764d06aSBram Moolenaar call assert_equal('two', @", msg) 9422764d06aSBram Moolenaar 9432764d06aSBram Moolenaar " Double click to select a block of text with exclusive selection 9442764d06aSBram Moolenaar %d 9452764d06aSBram Moolenaar call setline(1, 'one (two) three') 9462764d06aSBram Moolenaar call MouseLeftClick(1, 5) 9472764d06aSBram Moolenaar call MouseLeftRelease(1, 5) 9482764d06aSBram Moolenaar call MouseLeftClick(1, 5) 9492764d06aSBram Moolenaar call MouseLeftRelease(1, 5) 9502764d06aSBram Moolenaar norm! y 9512764d06aSBram Moolenaar call assert_equal(5, col("'<"), msg) 9522764d06aSBram Moolenaar call assert_equal(10, col("'>"), msg) 9532764d06aSBram Moolenaar 9542764d06aSBram Moolenaar call MouseLeftClick(1, 9) 9552764d06aSBram Moolenaar call MouseLeftRelease(1, 9) 9562764d06aSBram Moolenaar call MouseLeftClick(1, 9) 9572764d06aSBram Moolenaar call MouseLeftRelease(1, 9) 9582764d06aSBram Moolenaar norm! y 9592764d06aSBram Moolenaar call assert_equal(5, col("'<"), msg) 9602764d06aSBram Moolenaar call assert_equal(10, col("'>"), msg) 9612764d06aSBram Moolenaar set selection& 9622764d06aSBram Moolenaar 9632764d06aSBram Moolenaar " Click somewhere else so that the clicks above is not combined with the 9642764d06aSBram Moolenaar " clicks in the next iteration. 9652764d06aSBram Moolenaar call MouseRightClick(3, 10) 9662764d06aSBram Moolenaar call MouseRightRelease(3, 10) 967f36a2c7eSBram Moolenaar endfor 968f36a2c7eSBram Moolenaar 969f36a2c7eSBram Moolenaar let &mouse = save_mouse 970f36a2c7eSBram Moolenaar let &term = save_term 971f36a2c7eSBram Moolenaar let &ttymouse = save_ttymouse 972f36a2c7eSBram Moolenaar set mousetime& 973f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 0) 974f36a2c7eSBram Moolenaar bwipe! 975f36a2c7eSBram Moolenaarendfunc 976f36a2c7eSBram Moolenaar 9772764d06aSBram Moolenaar" Test for selecting text in visual blockwise mode using Alt-LeftClick 9782764d06aSBram Moolenaarfunc Test_mouse_alt_leftclick() 9792764d06aSBram Moolenaar let save_mouse = &mouse 9802764d06aSBram Moolenaar let save_term = &term 9812764d06aSBram Moolenaar let save_ttymouse = &ttymouse 9822764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 9832764d06aSBram Moolenaar set mouse=a term=xterm mousetime=200 9842764d06aSBram Moolenaar set mousemodel=popup 9852764d06aSBram Moolenaar new 9862764d06aSBram Moolenaar call setline(1, 'one (two) three') 9872764d06aSBram Moolenaar 9882764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values 9892764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 9902764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 9912764d06aSBram Moolenaar 9922764d06aSBram Moolenaar " Left click with the Alt modifier key should extend the selection in 9932764d06aSBram Moolenaar " blockwise visual mode. 9942764d06aSBram Moolenaar let @" = '' 9952764d06aSBram Moolenaar call MouseLeftClick(1, 3) 9962764d06aSBram Moolenaar call MouseLeftRelease(1, 3) 9972764d06aSBram Moolenaar call MouseAltLeftClick(1, 11) 9982764d06aSBram Moolenaar call MouseLeftRelease(1, 11) 9992764d06aSBram Moolenaar call assert_equal("\<C-V>", mode(), msg) 10002764d06aSBram Moolenaar normal! y 10012764d06aSBram Moolenaar call assert_equal('e (two) t', @") 10022764d06aSBram Moolenaar endfor 10032764d06aSBram Moolenaar 10042764d06aSBram Moolenaar let &mouse = save_mouse 10052764d06aSBram Moolenaar let &term = save_term 10062764d06aSBram Moolenaar let &ttymouse = save_ttymouse 10072764d06aSBram Moolenaar set mousetime& mousemodel& 10082764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 10092764d06aSBram Moolenaar close! 10102764d06aSBram Moolenaarendfunc 10112764d06aSBram Moolenaar 1012696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 1013696d6377SBram Moolenaar new 1014696d6377SBram Moolenaar let save_mouse = &mouse 1015696d6377SBram Moolenaar let save_term = &term 1016696d6377SBram Moolenaar let save_ttymouse = &ttymouse 1017696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 10182b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 1019696d6377SBram Moolenaar 1020696d6377SBram Moolenaar " Create 2 nested folds. 1021696d6377SBram Moolenaar call setline(1, range(1, 7)) 1022696d6377SBram Moolenaar 2,6fold 1023696d6377SBram Moolenaar norm! zR 1024696d6377SBram Moolenaar 4,5fold 1025696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 1026696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1027696d6377SBram Moolenaar 1028696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 1029696d6377SBram Moolenaar redraw 1030696d6377SBram Moolenaar let row = 4 1031696d6377SBram Moolenaar let col = 2 1032696d6377SBram Moolenaar call MouseLeftClick(row, col) 1033696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1034696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 1035696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1036696d6377SBram Moolenaar 1037696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 1038696d6377SBram Moolenaar redraw 1039696d6377SBram Moolenaar let row = 2 1040696d6377SBram Moolenaar let col = 1 1041696d6377SBram Moolenaar call MouseLeftClick(row, col) 1042696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1043696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 1044696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1045696d6377SBram Moolenaar norm! zR 1046696d6377SBram Moolenaar 1047696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 1048696d6377SBram Moolenaar redraw 1049696d6377SBram Moolenaar let row = 5 1050696d6377SBram Moolenaar let col = 2 1051696d6377SBram Moolenaar call MouseLeftClick(row, col) 1052696d6377SBram Moolenaar call MouseLeftRelease(row, col) 1053696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 1054696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 1055696d6377SBram Moolenaar 1056696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 1057696d6377SBram Moolenaar let &ttymouse = save_ttymouse 1058696d6377SBram Moolenaar let &term = save_term 1059696d6377SBram Moolenaar let &mouse = save_mouse 1060696d6377SBram Moolenaar bwipe! 1061696d6377SBram Moolenaarendfunc 106266761db1SBram Moolenaar 1063f19f8d1aSBram Moolenaar" Left or right click in Ex command line sets position of the cursor. 1064f19f8d1aSBram Moolenaarfunc Test_term_mouse_click_in_cmdline_to_set_pos() 1065f19f8d1aSBram Moolenaar let save_mouse = &mouse 1066f19f8d1aSBram Moolenaar let save_term = &term 1067f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 1068f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 1069f19f8d1aSBram Moolenaar set mouse=a term=xterm 1070f19f8d1aSBram Moolenaar let row = &lines 1071f19f8d1aSBram Moolenaar 1072515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 1073ab505b1aSBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 1074ab505b1aSBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 1075f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1076f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1077f19f8d1aSBram Moolenaar 1078ab505b1aSBram Moolenaar 1079f19f8d1aSBram Moolenaar call feedkeys(':"3456789' 1080f19f8d1aSBram Moolenaar \ .. MouseLeftClickCode(row, 7) 1081f19f8d1aSBram Moolenaar \ .. MouseLeftReleaseCode(row, 7) .. 'L' 1082f19f8d1aSBram Moolenaar \ .. MouseRightClickCode(row, 4) 1083f19f8d1aSBram Moolenaar \ .. MouseRightReleaseCode(row, 4) .. 'R' 1084f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 1085f19f8d1aSBram Moolenaar call assert_equal('"3R456L789', @:, msg) 1086ab505b1aSBram Moolenaar endif 1087f19f8d1aSBram Moolenaar endfor 1088f19f8d1aSBram Moolenaar 1089f19f8d1aSBram Moolenaar let &mouse = save_mouse 1090f19f8d1aSBram Moolenaar let &term = save_term 1091f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 1092f19f8d1aSBram Moolenaar set mousetime& 1093f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 1094f19f8d1aSBram Moolenaarendfunc 1095f19f8d1aSBram Moolenaar 1096f19f8d1aSBram Moolenaar" Middle click in command line pastes at position of cursor. 1097f19f8d1aSBram Moolenaarfunc Test_term_mouse_middle_click_in_cmdline_to_paste() 1098f19f8d1aSBram Moolenaar CheckFeature clipboard_working 1099f19f8d1aSBram Moolenaar let save_mouse = &mouse 1100f19f8d1aSBram Moolenaar let save_term = &term 1101f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 1102f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 1103f19f8d1aSBram Moolenaar set mouse=a term=xterm 1104f19f8d1aSBram Moolenaar let row = &lines 1105f19f8d1aSBram Moolenaar " Column values does not matter, paste is done at position of cursor. 1106f19f8d1aSBram Moolenaar let col = 1 1107f19f8d1aSBram Moolenaar let @* = 'paste' 1108f19f8d1aSBram Moolenaar 1109515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 1110f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1111f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1112f19f8d1aSBram Moolenaar 1113f19f8d1aSBram Moolenaar call feedkeys(":\"->" 1114f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 1115f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 1116f19f8d1aSBram Moolenaar \ .. "<-" 1117f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 1118f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 1119f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 1120f19f8d1aSBram Moolenaar call assert_equal('"->paste<-paste', @:, msg) 1121f19f8d1aSBram Moolenaar endfor 1122f19f8d1aSBram Moolenaar 1123f19f8d1aSBram Moolenaar let &mouse = save_mouse 1124f19f8d1aSBram Moolenaar let &term = save_term 1125f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 1126f19f8d1aSBram Moolenaar let @* = '' 1127f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 1128f19f8d1aSBram Moolenaarendfunc 1129f19f8d1aSBram Moolenaar 1130297bec07SBram Moolenaar" Test for making sure S-Middlemouse doesn't do anything 1131297bec07SBram Moolenaarfunc Test_term_mouse_shift_middle_click() 1132297bec07SBram Moolenaar new 1133297bec07SBram Moolenaar let save_mouse = &mouse 1134297bec07SBram Moolenaar let save_term = &term 1135297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1136297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1137297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 mousemodel= 1138297bec07SBram Moolenaar 1139297bec07SBram Moolenaar call test_setmouse(1, 1) 1140297bec07SBram Moolenaar exe "normal \<S-MiddleMouse>" 1141297bec07SBram Moolenaar call assert_equal([''], getline(1, '$')) 1142297bec07SBram Moolenaar call assert_equal(1, winnr()) 1143297bec07SBram Moolenaar 1144297bec07SBram Moolenaar let &mouse = save_mouse 1145297bec07SBram Moolenaar let &term = save_term 1146297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1147297bec07SBram Moolenaar set mousemodel& 1148297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1149297bec07SBram Moolenaar close! 1150297bec07SBram Moolenaarendfunc 1151297bec07SBram Moolenaar 1152297bec07SBram Moolenaar" Test for using mouse in visual mode 1153297bec07SBram Moolenaarfunc Test_term_mouse_visual_mode() 1154297bec07SBram Moolenaar new 1155297bec07SBram Moolenaar let save_mouse = &mouse 1156297bec07SBram Moolenaar let save_term = &term 1157297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1158297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1159297bec07SBram Moolenaar set term=xterm ttymouse=xterm2 1160297bec07SBram Moolenaar 1161297bec07SBram Moolenaar " If visual mode is not present in 'mouse', then left click should not 1162297bec07SBram Moolenaar " do anything in visal mode. 1163297bec07SBram Moolenaar call setline(1, ['one two three four']) 1164297bec07SBram Moolenaar set mouse=nci 1165297bec07SBram Moolenaar call cursor(1, 5) 1166297bec07SBram Moolenaar let @" = '' 1167297bec07SBram Moolenaar call feedkeys("ve" 1168297bec07SBram Moolenaar \ .. MouseLeftClickCode(1, 15) .. MouseLeftReleaseCode(1, 15) 1169297bec07SBram Moolenaar \ .. 'y', 'Lx!') 1170297bec07SBram Moolenaar call assert_equal(5, col('.')) 1171297bec07SBram Moolenaar call assert_equal('two', @") 1172297bec07SBram Moolenaar 1173297bec07SBram Moolenaar " Pressing right click in visual mode should change the visual selection 1174297bec07SBram Moolenaar " if 'mousemodel' doesn't contain popup. 1175297bec07SBram Moolenaar " Right click after the visual selection 1176297bec07SBram Moolenaar set mousemodel= 1177297bec07SBram Moolenaar set mouse=a 1178297bec07SBram Moolenaar call test_setmouse(1, 13) 1179297bec07SBram Moolenaar exe "normal 5|ve\<RightMouse>y" 1180297bec07SBram Moolenaar call assert_equal('two three', @") 1181297bec07SBram Moolenaar call assert_equal(5, col('.')) 1182297bec07SBram Moolenaar 1183297bec07SBram Moolenaar " Right click before the visual selection 1184297bec07SBram Moolenaar call test_setmouse(1, 9) 1185297bec07SBram Moolenaar exe "normal 15|ve\<RightMouse>y" 1186297bec07SBram Moolenaar call assert_equal('three four', @") 1187297bec07SBram Moolenaar call assert_equal(9, col('.')) 1188297bec07SBram Moolenaar 11892764d06aSBram Moolenaar " Right click inside the selection closer to the start of the selection 11902764d06aSBram Moolenaar call test_setmouse(1, 7) 11912764d06aSBram Moolenaar exe "normal 5|vee\<RightMouse>lly" 11922764d06aSBram Moolenaar call assert_equal('three', @") 11932764d06aSBram Moolenaar call assert_equal(9, col('.')) 11942764d06aSBram Moolenaar call assert_equal(9, col("'<")) 11952764d06aSBram Moolenaar call assert_equal(13, col("'>")) 11962764d06aSBram Moolenaar 11972764d06aSBram Moolenaar " Right click inside the selection closer to the end of the selection 11982764d06aSBram Moolenaar call test_setmouse(1, 11) 11992764d06aSBram Moolenaar exe "normal 5|vee\<RightMouse>ly" 12002764d06aSBram Moolenaar call assert_equal('two thre', @") 12012764d06aSBram Moolenaar call assert_equal(5, col('.')) 12022764d06aSBram Moolenaar call assert_equal(5, col("'<")) 12032764d06aSBram Moolenaar call assert_equal(12, col("'>")) 12042764d06aSBram Moolenaar 12052764d06aSBram Moolenaar " Multi-line selection. Right click inside thse selection. 12062764d06aSBram Moolenaar call setline(1, repeat(['aaaaaa'], 7)) 1207297bec07SBram Moolenaar call test_setmouse(3, 1) 1208297bec07SBram Moolenaar exe "normal ggVG\<RightMouse>y" 1209297bec07SBram Moolenaar call assert_equal(3, line("'<")) 12102764d06aSBram Moolenaar call test_setmouse(5, 1) 1211297bec07SBram Moolenaar exe "normal ggVG\<RightMouse>y" 12122764d06aSBram Moolenaar call assert_equal(5, line("'>")) 12132764d06aSBram Moolenaar 12142764d06aSBram Moolenaar " Click right in the middle line of the selection 12152764d06aSBram Moolenaar call test_setmouse(4, 3) 12162764d06aSBram Moolenaar exe "normal ggVG$\<RightMouse>y" 12172764d06aSBram Moolenaar call assert_equal(4, line("'<")) 12182764d06aSBram Moolenaar call test_setmouse(4, 4) 12192764d06aSBram Moolenaar exe "normal ggVG$\<RightMouse>y" 1220297bec07SBram Moolenaar call assert_equal(4, line("'>")) 1221297bec07SBram Moolenaar 1222297bec07SBram Moolenaar set mousemodel& 1223297bec07SBram Moolenaar let &mouse = save_mouse 1224297bec07SBram Moolenaar let &term = save_term 1225297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1226297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1227297bec07SBram Moolenaar close! 1228297bec07SBram Moolenaarendfunc 1229297bec07SBram Moolenaar 12300eabd4dcSBram Moolenaar" Test for displaying the popup menu using the right mouse click 1231297bec07SBram Moolenaarfunc Test_term_mouse_popup_menu() 12320eabd4dcSBram Moolenaar CheckFeature menu 12330eabd4dcSBram Moolenaar new 12340eabd4dcSBram Moolenaar call setline(1, 'popup menu test') 12350eabd4dcSBram Moolenaar let save_mouse = &mouse 12360eabd4dcSBram Moolenaar let save_term = &term 12370eabd4dcSBram Moolenaar let save_ttymouse = &ttymouse 12380eabd4dcSBram Moolenaar let save_mousemodel = &mousemodel 12390eabd4dcSBram Moolenaar call test_override('no_query_mouse', 1) 12400eabd4dcSBram Moolenaar set mouse=a term=xterm mousemodel=popup 12410eabd4dcSBram Moolenaar 12420eabd4dcSBram Moolenaar menu PopUp.foo :let g:menustr = 'foo'<CR> 12430eabd4dcSBram Moolenaar menu PopUp.bar :let g:menustr = 'bar'<CR> 12440eabd4dcSBram Moolenaar menu PopUp.baz :let g:menustr = 'baz'<CR> 12450eabd4dcSBram Moolenaar 1246515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 12472764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 12480eabd4dcSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 12490eabd4dcSBram Moolenaar let g:menustr = '' 12500eabd4dcSBram Moolenaar call feedkeys(MouseRightClickCode(1, 4) 12510eabd4dcSBram Moolenaar \ .. MouseRightReleaseCode(1, 4) .. "\<Down>\<Down>\<CR>", "x") 12522764d06aSBram Moolenaar call assert_equal('bar', g:menustr, msg) 12530eabd4dcSBram Moolenaar endfor 12540eabd4dcSBram Moolenaar 12550eabd4dcSBram Moolenaar unmenu PopUp 12560eabd4dcSBram Moolenaar let &mouse = save_mouse 12570eabd4dcSBram Moolenaar let &term = save_term 12580eabd4dcSBram Moolenaar let &ttymouse = save_ttymouse 12590eabd4dcSBram Moolenaar let &mousemodel = save_mousemodel 12600eabd4dcSBram Moolenaar call test_override('no_query_mouse', 0) 12610eabd4dcSBram Moolenaar close! 12620eabd4dcSBram Moolenaarendfunc 12630eabd4dcSBram Moolenaar 1264297bec07SBram Moolenaar" Test for 'mousemodel' set to popup_setpos to move the cursor where the popup 1265297bec07SBram Moolenaar" menu is displayed. 1266297bec07SBram Moolenaarfunc Test_term_mouse_popup_menu_setpos() 1267297bec07SBram Moolenaar CheckFeature menu 1268297bec07SBram Moolenaar 5new 1269297bec07SBram Moolenaar call setline(1, ['the dish ran away with the spoon', 1270297bec07SBram Moolenaar \ 'the cow jumped over the moon' ]) 1271297bec07SBram Moolenaar let save_mouse = &mouse 1272297bec07SBram Moolenaar let save_term = &term 1273297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1274297bec07SBram Moolenaar let save_mousemodel = &mousemodel 1275297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1276297bec07SBram Moolenaar set mouse=a term=xterm mousemodel=popup_setpos 1277297bec07SBram Moolenaar 1278297bec07SBram Moolenaar nmenu PopUp.foo :let g:menustr = 'foo'<CR> 1279297bec07SBram Moolenaar nmenu PopUp.bar :let g:menustr = 'bar'<CR> 1280297bec07SBram Moolenaar nmenu PopUp.baz :let g:menustr = 'baz'<CR> 1281297bec07SBram Moolenaar vmenu PopUp.foo y:<C-U>let g:menustr = 'foo'<CR> 1282297bec07SBram Moolenaar vmenu PopUp.bar y:<C-U>let g:menustr = 'bar'<CR> 1283297bec07SBram Moolenaar vmenu PopUp.baz y:<C-U>let g:menustr = 'baz'<CR> 1284297bec07SBram Moolenaar 1285297bec07SBram Moolenaar for ttymouse_val in g:Ttymouse_values 12862764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1287297bec07SBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1288297bec07SBram Moolenaar let g:menustr = '' 1289297bec07SBram Moolenaar call cursor(1, 1) 1290297bec07SBram Moolenaar call feedkeys(MouseRightClickCode(1, 5) 1291297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 5) .. "\<Down>\<Down>\<CR>", "x") 12922764d06aSBram Moolenaar call assert_equal('bar', g:menustr, msg) 12932764d06aSBram Moolenaar call assert_equal([1, 5], [line('.'), col('.')], msg) 1294297bec07SBram Moolenaar 1295297bec07SBram Moolenaar " Test for right click in visual mode inside the selection 1296297bec07SBram Moolenaar let @" = '' 1297297bec07SBram Moolenaar call cursor(1, 10) 1298297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 12) 1299297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 12) .. "\<Down>\<CR>", "x") 13002764d06aSBram Moolenaar call assert_equal([1, 10], [line('.'), col('.')], msg) 13012764d06aSBram Moolenaar call assert_equal('ran away', @", msg) 1302297bec07SBram Moolenaar 1303297bec07SBram Moolenaar " Test for right click in visual mode before the selection 1304297bec07SBram Moolenaar let @" = '' 1305297bec07SBram Moolenaar call cursor(1, 10) 1306297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 2) 1307297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 2) .. "\<Down>\<CR>", "x") 13082764d06aSBram Moolenaar call assert_equal([1, 2], [line('.'), col('.')], msg) 13092764d06aSBram Moolenaar call assert_equal('', @", msg) 1310297bec07SBram Moolenaar 1311297bec07SBram Moolenaar " Test for right click in visual mode after the selection 1312297bec07SBram Moolenaar let @" = '' 1313297bec07SBram Moolenaar call cursor(1, 10) 1314297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(1, 20) 1315297bec07SBram Moolenaar \ .. MouseRightReleaseCode(1, 20) .. "\<Down>\<CR>", "x") 13162764d06aSBram Moolenaar call assert_equal([1, 20], [line('.'), col('.')], msg) 13172764d06aSBram Moolenaar call assert_equal('', @", msg) 1318297bec07SBram Moolenaar 1319297bec07SBram Moolenaar " Test for right click in block-wise visual mode inside the selection 1320297bec07SBram Moolenaar let @" = '' 1321297bec07SBram Moolenaar call cursor(1, 16) 1322297bec07SBram Moolenaar call feedkeys("\<C-V>j3l" .. MouseRightClickCode(2, 17) 1323297bec07SBram Moolenaar \ .. MouseRightReleaseCode(2, 17) .. "\<Down>\<CR>", "x") 13242764d06aSBram Moolenaar call assert_equal([1, 16], [line('.'), col('.')], msg) 13252764d06aSBram Moolenaar call assert_equal("\<C-V>4", getregtype('"'), msg) 1326297bec07SBram Moolenaar 1327297bec07SBram Moolenaar " Test for right click in block-wise visual mode outside the selection 1328297bec07SBram Moolenaar let @" = '' 1329297bec07SBram Moolenaar call cursor(1, 16) 1330297bec07SBram Moolenaar call feedkeys("\<C-V>j3l" .. MouseRightClickCode(2, 2) 1331297bec07SBram Moolenaar \ .. MouseRightReleaseCode(2, 2) .. "\<Down>\<CR>", "x") 13322764d06aSBram Moolenaar call assert_equal([2, 2], [line('.'), col('.')], msg) 13332764d06aSBram Moolenaar call assert_equal('v', getregtype('"'), msg) 13342764d06aSBram Moolenaar call assert_equal('', @", msg) 1335297bec07SBram Moolenaar 1336297bec07SBram Moolenaar " Try clicking on the status line 1337297bec07SBram Moolenaar let @" = '' 1338297bec07SBram Moolenaar call cursor(1, 10) 1339297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(6, 2) 1340297bec07SBram Moolenaar \ .. MouseRightReleaseCode(6, 2) .. "\<Down>\<CR>", "x") 13412764d06aSBram Moolenaar call assert_equal([1, 10], [line('.'), col('.')], msg) 13422764d06aSBram Moolenaar call assert_equal('ran away', @", msg) 1343297bec07SBram Moolenaar 1344297bec07SBram Moolenaar " Try clicking outside the window 1345297bec07SBram Moolenaar let @" = '' 1346297bec07SBram Moolenaar call cursor(7, 2) 1347297bec07SBram Moolenaar call feedkeys('vee' .. MouseRightClickCode(7, 2) 1348297bec07SBram Moolenaar \ .. MouseRightReleaseCode(7, 2) .. "\<Down>\<CR>", "x") 13492764d06aSBram Moolenaar call assert_equal(2, winnr(), msg) 13502764d06aSBram Moolenaar call assert_equal('', @", msg) 1351297bec07SBram Moolenaar wincmd w 1352297bec07SBram Moolenaar endfor 1353297bec07SBram Moolenaar 1354297bec07SBram Moolenaar unmenu PopUp 1355297bec07SBram Moolenaar let &mouse = save_mouse 1356297bec07SBram Moolenaar let &term = save_term 1357297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1358297bec07SBram Moolenaar let &mousemodel = save_mousemodel 1359297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1360297bec07SBram Moolenaar close! 1361297bec07SBram Moolenaarendfunc 1362297bec07SBram Moolenaar 1363297bec07SBram Moolenaar" Test for searching for the word under the cursor using Shift-Right or 1364297bec07SBram Moolenaar" Shift-Left click. 1365297bec07SBram Moolenaarfunc Test_term_mouse_search() 1366297bec07SBram Moolenaar new 1367297bec07SBram Moolenaar let save_mouse = &mouse 1368297bec07SBram Moolenaar let save_term = &term 1369297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1370297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1371297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 1372297bec07SBram Moolenaar set mousemodel= 1373297bec07SBram Moolenaar 1374297bec07SBram Moolenaar " In normal mode, Shift-Left or Shift-Right click should search for the word 1375297bec07SBram Moolenaar " under the cursor. 1376297bec07SBram Moolenaar call setline(1, ['one two three four', 'four three two one']) 1377297bec07SBram Moolenaar call test_setmouse(1, 4) 1378297bec07SBram Moolenaar exe "normal \<S-LeftMouse>" 1379297bec07SBram Moolenaar call assert_equal([2, 12], [line('.'), col('.')]) 1380297bec07SBram Moolenaar call test_setmouse(2, 16) 1381297bec07SBram Moolenaar exe "normal \<S-RightMouse>" 1382297bec07SBram Moolenaar call assert_equal([1, 1], [line('.'), col('.')]) 1383297bec07SBram Moolenaar 1384297bec07SBram Moolenaar " In visual mode, Shift-Left or Shift-Right click should search for the word 1385297bec07SBram Moolenaar " under the cursor and extend the selection. 1386297bec07SBram Moolenaar call test_setmouse(1, 4) 1387297bec07SBram Moolenaar exe "normal 4|ve\<S-LeftMouse>y" 1388297bec07SBram Moolenaar call assert_equal([2, 12], [line("'>"), col("'>")]) 1389297bec07SBram Moolenaar call test_setmouse(2, 16) 1390297bec07SBram Moolenaar exe "normal 2G16|ve\<S-RightMouse>y" 1391297bec07SBram Moolenaar call assert_equal([1, 1], [line("'<"), col("'<")]) 1392297bec07SBram Moolenaar 1393297bec07SBram Moolenaar set mousemodel& 1394297bec07SBram Moolenaar let &mouse = save_mouse 1395297bec07SBram Moolenaar let &term = save_term 1396297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1397297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1398297bec07SBram Moolenaar close! 1399297bec07SBram Moolenaarendfunc 1400297bec07SBram Moolenaar 1401297bec07SBram Moolenaar" Test for selecting an entry in the quickfix/location list window using the 1402297bec07SBram Moolenaar" mouse. 1403297bec07SBram Moolenaarfunc Test_term_mouse_quickfix_window() 1404297bec07SBram Moolenaar let save_mouse = &mouse 1405297bec07SBram Moolenaar let save_term = &term 1406297bec07SBram Moolenaar let save_ttymouse = &ttymouse 1407297bec07SBram Moolenaar call test_override('no_query_mouse', 1) 1408297bec07SBram Moolenaar set mouse=a term=xterm ttymouse=xterm2 1409297bec07SBram Moolenaar set mousemodel= 1410297bec07SBram Moolenaar 1411297bec07SBram Moolenaar cgetexpr "Xfile1:1:L1" 1412297bec07SBram Moolenaar copen 5 1413297bec07SBram Moolenaar call test_setmouse(&lines - 7, 1) 1414297bec07SBram Moolenaar exe "normal \<2-LeftMouse>" 1415297bec07SBram Moolenaar call assert_equal('Xfile1', @%) 1416297bec07SBram Moolenaar %bw! 1417297bec07SBram Moolenaar 1418297bec07SBram Moolenaar lgetexpr "Xfile2:1:L1" 1419297bec07SBram Moolenaar lopen 5 1420297bec07SBram Moolenaar call test_setmouse(&lines - 7, 1) 1421297bec07SBram Moolenaar exe "normal \<2-LeftMouse>" 1422297bec07SBram Moolenaar call assert_equal('Xfile2', @%) 1423297bec07SBram Moolenaar %bw! 1424297bec07SBram Moolenaar 1425297bec07SBram Moolenaar set mousemodel& 1426297bec07SBram Moolenaar let &mouse = save_mouse 1427297bec07SBram Moolenaar let &term = save_term 1428297bec07SBram Moolenaar let &ttymouse = save_ttymouse 1429297bec07SBram Moolenaar call test_override('no_query_mouse', 0) 1430297bec07SBram Moolenaarendfunc 1431297bec07SBram Moolenaar 14322764d06aSBram Moolenaar" Test for the 'h' flag in the 'mouse' option. Using mouse in the help window. 14332764d06aSBram Moolenaarfunc Test_term_mouse_help_window() 14342764d06aSBram Moolenaar let save_mouse = &mouse 14352764d06aSBram Moolenaar let save_term = &term 14362764d06aSBram Moolenaar let save_ttymouse = &ttymouse 14372764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 14382764d06aSBram Moolenaar set mouse=h term=xterm mousetime=200 14392764d06aSBram Moolenaar 14402764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 14412764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 14422764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 14432764d06aSBram Moolenaar help 14442764d06aSBram Moolenaar let @" = '' 14452764d06aSBram Moolenaar call MouseLeftClick(2, 5) 14462764d06aSBram Moolenaar call MouseLeftRelease(2, 5) 14472764d06aSBram Moolenaar call MouseLeftClick(1, 1) 14482764d06aSBram Moolenaar call MouseLeftDrag(1, 10) 14492764d06aSBram Moolenaar call MouseLeftRelease(1, 10) 14502764d06aSBram Moolenaar norm! y 14512764d06aSBram Moolenaar call assert_equal('*help.txt*', @", msg) 14522764d06aSBram Moolenaar helpclose 14532764d06aSBram Moolenaar 14542764d06aSBram Moolenaar " Click somewhere else to make sure the left click above is not combined 14552764d06aSBram Moolenaar " with the next left click and treated as a double click 14562764d06aSBram Moolenaar call MouseRightClick(5, 10) 14572764d06aSBram Moolenaar call MouseRightRelease(5, 10) 14582764d06aSBram Moolenaar endfor 14592764d06aSBram Moolenaar 14602764d06aSBram Moolenaar let &mouse = save_mouse 14612764d06aSBram Moolenaar let &term = save_term 14622764d06aSBram Moolenaar let &ttymouse = save_ttymouse 14632764d06aSBram Moolenaar set mousetime& 14642764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 14652764d06aSBram Moolenaar %bw! 14662764d06aSBram Moolenaarendfunc 14672764d06aSBram Moolenaar 14682764d06aSBram Moolenaar" Test for the translation of various mouse terminal codes 14692764d06aSBram Moolenaarfunc Test_mouse_termcodes() 14702764d06aSBram Moolenaar let save_mouse = &mouse 14712764d06aSBram Moolenaar let save_term = &term 14722764d06aSBram Moolenaar let save_ttymouse = &ttymouse 14732764d06aSBram Moolenaar call test_override('no_query_mouse', 1) 14742764d06aSBram Moolenaar set mouse=a term=xterm mousetime=200 14752764d06aSBram Moolenaar 14762764d06aSBram Moolenaar new 14772764d06aSBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 14782764d06aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 14792764d06aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 14802764d06aSBram Moolenaar 14812764d06aSBram Moolenaar let mouse_codes = [ 14822764d06aSBram Moolenaar \ ["\<LeftMouse>", "<LeftMouse>"], 14832764d06aSBram Moolenaar \ ["\<MiddleMouse>", "<MiddleMouse>"], 14842764d06aSBram Moolenaar \ ["\<RightMouse>", "<RightMouse>"], 14852764d06aSBram Moolenaar \ ["\<S-LeftMouse>", "<S-LeftMouse>"], 14862764d06aSBram Moolenaar \ ["\<S-MiddleMouse>", "<S-MiddleMouse>"], 14872764d06aSBram Moolenaar \ ["\<S-RightMouse>", "<S-RightMouse>"], 14882764d06aSBram Moolenaar \ ["\<C-LeftMouse>", "<C-LeftMouse>"], 14892764d06aSBram Moolenaar \ ["\<C-MiddleMouse>", "<C-MiddleMouse>"], 14902764d06aSBram Moolenaar \ ["\<C-RightMouse>", "<C-RightMouse>"], 14912764d06aSBram Moolenaar \ ["\<M-LeftMouse>", "<M-LeftMouse>"], 14922764d06aSBram Moolenaar \ ["\<M-MiddleMouse>", "<M-MiddleMouse>"], 14932764d06aSBram Moolenaar \ ["\<M-RightMouse>", "<M-RightMouse>"], 14942764d06aSBram Moolenaar \ ["\<2-LeftMouse>", "<2-LeftMouse>"], 14952764d06aSBram Moolenaar \ ["\<2-MiddleMouse>", "<2-MiddleMouse>"], 14962764d06aSBram Moolenaar \ ["\<2-RightMouse>", "<2-RightMouse>"], 14972764d06aSBram Moolenaar \ ["\<3-LeftMouse>", "<3-LeftMouse>"], 14982764d06aSBram Moolenaar \ ["\<3-MiddleMouse>", "<3-MiddleMouse>"], 14992764d06aSBram Moolenaar \ ["\<3-RightMouse>", "<3-RightMouse>"], 15002764d06aSBram Moolenaar \ ["\<4-LeftMouse>", "<4-LeftMouse>"], 15012764d06aSBram Moolenaar \ ["\<4-MiddleMouse>", "<4-MiddleMouse>"], 15022764d06aSBram Moolenaar \ ["\<4-RightMouse>", "<4-RightMouse>"], 15032764d06aSBram Moolenaar \ ["\<LeftDrag>", "<LeftDrag>"], 15042764d06aSBram Moolenaar \ ["\<MiddleDrag>", "<MiddleDrag>"], 15052764d06aSBram Moolenaar \ ["\<RightDrag>", "<RightDrag>"], 15062764d06aSBram Moolenaar \ ["\<LeftRelease>", "<LeftRelease>"], 15072764d06aSBram Moolenaar \ ["\<MiddleRelease>", "<MiddleRelease>"], 15082764d06aSBram Moolenaar \ ["\<RightRelease>", "<RightRelease>"], 15092764d06aSBram Moolenaar \ ["\<ScrollWheelUp>", "<ScrollWheelUp>"], 15102764d06aSBram Moolenaar \ ["\<S-ScrollWheelUp>", "<S-ScrollWheelUp>"], 15112764d06aSBram Moolenaar \ ["\<C-ScrollWheelUp>", "<C-ScrollWheelUp>"], 15122764d06aSBram Moolenaar \ ["\<ScrollWheelDown>", "<ScrollWheelDown>"], 15132764d06aSBram Moolenaar \ ["\<S-ScrollWheelDown>", "<S-ScrollWheelDown>"], 15142764d06aSBram Moolenaar \ ["\<C-ScrollWheelDown>", "<C-ScrollWheelDown>"], 15152764d06aSBram Moolenaar \ ["\<ScrollWheelLeft>", "<ScrollWheelLeft>"], 15162764d06aSBram Moolenaar \ ["\<S-ScrollWheelLeft>", "<S-ScrollWheelLeft>"], 15172764d06aSBram Moolenaar \ ["\<C-ScrollWheelLeft>", "<C-ScrollWheelLeft>"], 15182764d06aSBram Moolenaar \ ["\<ScrollWheelRight>", "<ScrollWheelRight>"], 15192764d06aSBram Moolenaar \ ["\<S-ScrollWheelRight>", "<S-ScrollWheelRight>"], 15202764d06aSBram Moolenaar \ ["\<C-ScrollWheelRight>", "<C-ScrollWheelRight>"] 15212764d06aSBram Moolenaar \ ] 15222764d06aSBram Moolenaar 15232764d06aSBram Moolenaar for [code, outstr] in mouse_codes 15242764d06aSBram Moolenaar exe "normal ggC\<C-K>" . code 15252764d06aSBram Moolenaar call assert_equal(outstr, getline(1), msg) 15262764d06aSBram Moolenaar endfor 15272764d06aSBram Moolenaar endfor 15282764d06aSBram Moolenaar 15292764d06aSBram Moolenaar let &mouse = save_mouse 15302764d06aSBram Moolenaar let &term = save_term 15312764d06aSBram Moolenaar let &ttymouse = save_ttymouse 15322764d06aSBram Moolenaar set mousetime& 15332764d06aSBram Moolenaar call test_override('no_query_mouse', 0) 15342764d06aSBram Moolenaar %bw! 15352764d06aSBram Moolenaarendfunc 15362764d06aSBram Moolenaar 153766761db1SBram Moolenaar" This only checks if the sequence is recognized. 153866761db1SBram Moolenaarfunc Test_term_rgb_response() 153966761db1SBram Moolenaar set t_RF=x 154066761db1SBram Moolenaar set t_RB=y 154166761db1SBram Moolenaar 154266761db1SBram Moolenaar " response to t_RF, 4 digits 154366761db1SBram Moolenaar let red = 0x12 154466761db1SBram Moolenaar let green = 0x34 154566761db1SBram Moolenaar let blue = 0x56 154666761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 154766761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 154866761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 154966761db1SBram Moolenaar 155066761db1SBram Moolenaar " response to t_RF, 2 digits 155166761db1SBram Moolenaar let red = 0x78 155266761db1SBram Moolenaar let green = 0x9a 155366761db1SBram Moolenaar let blue = 0xbc 155466761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 155566761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 155666761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 155766761db1SBram Moolenaar 155832e19770SBram Moolenaar " response to t_RB, 4 digits, dark 155932e19770SBram Moolenaar set background=light 1560ce90e36fSBram Moolenaar eval 'background'->test_option_not_set() 156132e19770SBram Moolenaar let red = 0x29 156232e19770SBram Moolenaar let green = 0x4a 156332e19770SBram Moolenaar let blue = 0x6b 156432e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 156532e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 156632e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 156732e19770SBram Moolenaar call assert_equal('dark', &background) 156832e19770SBram Moolenaar 156932e19770SBram Moolenaar " response to t_RB, 4 digits, light 157032e19770SBram Moolenaar set background=dark 157132e19770SBram Moolenaar call test_option_not_set('background') 157232e19770SBram Moolenaar let red = 0x81 157332e19770SBram Moolenaar let green = 0x63 157466761db1SBram Moolenaar let blue = 0x65 157566761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 157666761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 157766761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 157832e19770SBram Moolenaar call assert_equal('light', &background) 157966761db1SBram Moolenaar 158032e19770SBram Moolenaar " response to t_RB, 2 digits, dark 158132e19770SBram Moolenaar set background=light 158232e19770SBram Moolenaar call test_option_not_set('background') 158332e19770SBram Moolenaar let red = 0x47 158432e19770SBram Moolenaar let green = 0x59 158532e19770SBram Moolenaar let blue = 0x5b 158666761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 158766761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 158866761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 158932e19770SBram Moolenaar call assert_equal('dark', &background) 159032e19770SBram Moolenaar 159132e19770SBram Moolenaar " response to t_RB, 2 digits, light 159232e19770SBram Moolenaar set background=dark 159332e19770SBram Moolenaar call test_option_not_set('background') 159432e19770SBram Moolenaar let red = 0x83 159532e19770SBram Moolenaar let green = 0xa4 159632e19770SBram Moolenaar let blue = 0xc2 159732e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 159832e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 159932e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 160032e19770SBram Moolenaar call assert_equal('light', &background) 160166761db1SBram Moolenaar 160266761db1SBram Moolenaar set t_RF= t_RB= 160366761db1SBram Moolenaarendfunc 160466761db1SBram Moolenaar 160566761db1SBram Moolenaar" This only checks if the sequence is recognized. 16061a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 16071a4cbb19SBram Moolenaar" properties. 16081a4cbb19SBram Moolenaarfunc Test_xx01_term_style_response() 160966761db1SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 161066761db1SBram Moolenaar set t_RV=x 16110c0eddd3SBram Moolenaar call test_override('term_props', 1) 161266761db1SBram Moolenaar 161366761db1SBram Moolenaar " send the termresponse to trigger requesting the XT codes 161466761db1SBram Moolenaar let seq = "\<Esc>[>41;337;0c" 161566761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 161666761db1SBram Moolenaar call assert_equal(seq, v:termresponse) 161766761db1SBram Moolenaar 161866761db1SBram Moolenaar let seq = "\<Esc>P1$r2 q\<Esc>\\" 161966761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 162066761db1SBram Moolenaar call assert_equal(seq, v:termstyleresp) 162166761db1SBram Moolenaar 16220c0eddd3SBram Moolenaar call assert_equal(#{ 16230c0eddd3SBram Moolenaar \ cursor_style: 'u', 16240c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16250c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16260c0eddd3SBram Moolenaar \ mouse: 's' 16270c0eddd3SBram Moolenaar \ }, terminalprops()) 16280c0eddd3SBram Moolenaar 162966761db1SBram Moolenaar set t_RV= 16300c0eddd3SBram Moolenaar call test_override('term_props', 0) 163166761db1SBram Moolenaarendfunc 1632de6dbb45SBram Moolenaar 163389577b3bSBram Moolenaar" This checks the iTerm2 version response. 163489577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 163589577b3bSBram Moolenaar" properties. 163689577b3bSBram Moolenaarfunc Test_xx02_iTerm2_response() 163789577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 163889577b3bSBram Moolenaar set t_RV=x 16390c0eddd3SBram Moolenaar call test_override('term_props', 1) 164089577b3bSBram Moolenaar 164189577b3bSBram Moolenaar " Old versions of iTerm2 used a different style term response. 164289577b3bSBram Moolenaar set ttymouse=xterm 164389577b3bSBram Moolenaar call test_option_not_set('ttymouse') 164489577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;c" 164589577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 164689577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 164789577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 164889577b3bSBram Moolenaar 164989577b3bSBram Moolenaar set ttymouse=xterm 165089577b3bSBram Moolenaar call test_option_not_set('ttymouse') 165189577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;0c" 165289577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 165389577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 165489577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 165589577b3bSBram Moolenaar 16560c0eddd3SBram Moolenaar call assert_equal(#{ 16570c0eddd3SBram Moolenaar \ cursor_style: 'n', 16580c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16590c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16600c0eddd3SBram Moolenaar \ mouse: 's' 16610c0eddd3SBram Moolenaar \ }, terminalprops()) 16620c0eddd3SBram Moolenaar 166389577b3bSBram Moolenaar set t_RV= 16640c0eddd3SBram Moolenaar call test_override('term_props', 0) 166589577b3bSBram Moolenaarendfunc 166689577b3bSBram Moolenaar 16671a4cbb19SBram Moolenaar" This checks the libvterm version response. 16681a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 16691a4cbb19SBram Moolenaar" properties. 167089577b3bSBram Moolenaarfunc Test_xx03_libvterm_response() 16711a4cbb19SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 16721a4cbb19SBram Moolenaar set t_RV=x 16730c0eddd3SBram Moolenaar call test_override('term_props', 1) 167403b00476SBram Moolenaar 16751a4cbb19SBram Moolenaar set ttymouse=xterm 16761a4cbb19SBram Moolenaar call test_option_not_set('ttymouse') 16771a4cbb19SBram Moolenaar let seq = "\<Esc>[>0;100;0c" 16781a4cbb19SBram Moolenaar call feedkeys(seq, 'Lx!') 16791a4cbb19SBram Moolenaar call assert_equal(seq, v:termresponse) 16801a4cbb19SBram Moolenaar call assert_equal('sgr', &ttymouse) 16811a4cbb19SBram Moolenaar 16820c0eddd3SBram Moolenaar call assert_equal(#{ 16830c0eddd3SBram Moolenaar \ cursor_style: 'n', 16840c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 16850c0eddd3SBram Moolenaar \ underline_rgb: 'u', 16860c0eddd3SBram Moolenaar \ mouse: 's' 16870c0eddd3SBram Moolenaar \ }, terminalprops()) 16880c0eddd3SBram Moolenaar 16891a4cbb19SBram Moolenaar set t_RV= 16900c0eddd3SBram Moolenaar call test_override('term_props', 0) 16911a4cbb19SBram Moolenaarendfunc 16921a4cbb19SBram Moolenaar 169389577b3bSBram Moolenaar" This checks the Mac Terminal.app version response. 169489577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 169589577b3bSBram Moolenaar" properties. 169689577b3bSBram Moolenaarfunc Test_xx04_Mac_Terminal_response() 169789577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 169889577b3bSBram Moolenaar set t_RV=x 16990c0eddd3SBram Moolenaar call test_override('term_props', 1) 170089577b3bSBram Moolenaar 170189577b3bSBram Moolenaar set ttymouse=xterm 17028dff4cbfSBram Moolenaar " t_8u is not reset 17038dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 170489577b3bSBram Moolenaar call test_option_not_set('ttymouse') 170589577b3bSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 170689577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 170789577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 170889577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 170989577b3bSBram Moolenaar 17100c0eddd3SBram Moolenaar call assert_equal(#{ 17110c0eddd3SBram Moolenaar \ cursor_style: 'n', 17120c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 17130c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17140c0eddd3SBram Moolenaar \ mouse: 's' 17150c0eddd3SBram Moolenaar \ }, terminalprops()) 17168dff4cbfSBram Moolenaar call assert_equal("\<Esc>[58;2;%lu;%lu;%lum", &t_8u) 17170c0eddd3SBram Moolenaar 171889577b3bSBram Moolenaar " Reset is_not_xterm and is_mac_terminal. 171989577b3bSBram Moolenaar set t_RV= 172089577b3bSBram Moolenaar set term=xterm 172189577b3bSBram Moolenaar set t_RV=x 17220c0eddd3SBram Moolenaar call test_override('term_props', 0) 172389577b3bSBram Moolenaarendfunc 172489577b3bSBram Moolenaar 172589577b3bSBram Moolenaar" This checks the mintty version response. 172689577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 172789577b3bSBram Moolenaar" properties. 172889577b3bSBram Moolenaarfunc Test_xx05_mintty_response() 172989577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 173089577b3bSBram Moolenaar set t_RV=x 17310c0eddd3SBram Moolenaar call test_override('term_props', 1) 173289577b3bSBram Moolenaar 173389577b3bSBram Moolenaar set ttymouse=xterm 173489577b3bSBram Moolenaar call test_option_not_set('ttymouse') 173589577b3bSBram Moolenaar let seq = "\<Esc>[>77;20905;0c" 173689577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 173789577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 173889577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 173989577b3bSBram Moolenaar 17400c0eddd3SBram Moolenaar call assert_equal(#{ 17410c0eddd3SBram Moolenaar \ cursor_style: 'n', 17420c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 17430c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17440c0eddd3SBram Moolenaar \ mouse: 's' 17450c0eddd3SBram Moolenaar \ }, terminalprops()) 17460c0eddd3SBram Moolenaar 174789577b3bSBram Moolenaar set t_RV= 17480c0eddd3SBram Moolenaar call test_override('term_props', 0) 174989577b3bSBram Moolenaarendfunc 175089577b3bSBram Moolenaar 175189577b3bSBram Moolenaar" This checks the screen version response. 175289577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 175389577b3bSBram Moolenaar" properties. 175489577b3bSBram Moolenaarfunc Test_xx06_screen_response() 175589577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 175689577b3bSBram Moolenaar set t_RV=x 17570c0eddd3SBram Moolenaar call test_override('term_props', 1) 175889577b3bSBram Moolenaar 175989577b3bSBram Moolenaar " Old versions of screen don't support SGR mouse mode. 176089577b3bSBram Moolenaar set ttymouse=xterm 176189577b3bSBram Moolenaar call test_option_not_set('ttymouse') 176289577b3bSBram Moolenaar let seq = "\<Esc>[>83;40500;0c" 176389577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 176489577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 176589577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 176689577b3bSBram Moolenaar 176789577b3bSBram Moolenaar " screen supports SGR mouse mode starting in version 4.7. 176889577b3bSBram Moolenaar set ttymouse=xterm 176989577b3bSBram Moolenaar call test_option_not_set('ttymouse') 177089577b3bSBram Moolenaar let seq = "\<Esc>[>83;40700;0c" 177189577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 177289577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 177389577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 177489577b3bSBram Moolenaar 17750c0eddd3SBram Moolenaar call assert_equal(#{ 17760c0eddd3SBram Moolenaar \ cursor_style: 'n', 17770c0eddd3SBram Moolenaar \ cursor_blink_mode: 'n', 17780c0eddd3SBram Moolenaar \ underline_rgb: 'y', 17790c0eddd3SBram Moolenaar \ mouse: 's' 17800c0eddd3SBram Moolenaar \ }, terminalprops()) 17810c0eddd3SBram Moolenaar 178289577b3bSBram Moolenaar set t_RV= 17830c0eddd3SBram Moolenaar call test_override('term_props', 0) 178489577b3bSBram Moolenaarendfunc 178589577b3bSBram Moolenaar 178603b00476SBram Moolenaar" This checks the xterm version response. 178703b00476SBram Moolenaar" This must be after other tests, because it has side effects to xterm 178803b00476SBram Moolenaar" properties. 178989577b3bSBram Moolenaarfunc Test_xx07_xterm_response() 179003b00476SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 179103b00476SBram Moolenaar set t_RV=x 17920c0eddd3SBram Moolenaar call test_override('term_props', 1) 179303b00476SBram Moolenaar 17943cea8a9aSBram Moolenaar " Do Terminal.app first to check that is_mac_terminal is reset. 17953cea8a9aSBram Moolenaar set ttymouse=xterm 17963cea8a9aSBram Moolenaar call test_option_not_set('ttymouse') 17973cea8a9aSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 17983cea8a9aSBram Moolenaar call feedkeys(seq, 'Lx!') 17993cea8a9aSBram Moolenaar call assert_equal(seq, v:termresponse) 18003cea8a9aSBram Moolenaar call assert_equal('sgr', &ttymouse) 18013cea8a9aSBram Moolenaar 180203b00476SBram Moolenaar " xterm < 95: "xterm" (actually unmodified) 18033cea8a9aSBram Moolenaar set t_RV= 18043cea8a9aSBram Moolenaar set term=xterm 18053cea8a9aSBram Moolenaar set t_RV=x 180603b00476SBram Moolenaar set ttymouse=xterm 180703b00476SBram Moolenaar call test_option_not_set('ttymouse') 180803b00476SBram Moolenaar let seq = "\<Esc>[>0;94;0c" 180903b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 181003b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 181103b00476SBram Moolenaar call assert_equal('xterm', &ttymouse) 181203b00476SBram Moolenaar 18130c0eddd3SBram Moolenaar call assert_equal(#{ 18140c0eddd3SBram Moolenaar \ cursor_style: 'n', 18150c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18160c0eddd3SBram Moolenaar \ underline_rgb: 'y', 18170c0eddd3SBram Moolenaar \ mouse: 'u' 18180c0eddd3SBram Moolenaar \ }, terminalprops()) 18190c0eddd3SBram Moolenaar 182003b00476SBram Moolenaar " xterm >= 95 < 277 "xterm2" 182103b00476SBram Moolenaar set ttymouse=xterm 182203b00476SBram Moolenaar call test_option_not_set('ttymouse') 182303b00476SBram Moolenaar let seq = "\<Esc>[>0;267;0c" 182403b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 182503b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 182603b00476SBram Moolenaar call assert_equal('xterm2', &ttymouse) 182703b00476SBram Moolenaar 18280c0eddd3SBram Moolenaar call assert_equal(#{ 18290c0eddd3SBram Moolenaar \ cursor_style: 'n', 18300c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18310c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18320c0eddd3SBram Moolenaar \ mouse: '2' 18330c0eddd3SBram Moolenaar \ }, terminalprops()) 18340c0eddd3SBram Moolenaar 183503b00476SBram Moolenaar " xterm >= 277: "sgr" 183603b00476SBram Moolenaar set ttymouse=xterm 183703b00476SBram Moolenaar call test_option_not_set('ttymouse') 183803b00476SBram Moolenaar let seq = "\<Esc>[>0;277;0c" 183903b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 184003b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 184103b00476SBram Moolenaar call assert_equal('sgr', &ttymouse) 184203b00476SBram Moolenaar 18430c0eddd3SBram Moolenaar call assert_equal(#{ 18440c0eddd3SBram Moolenaar \ cursor_style: 'n', 18450c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18460c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18470c0eddd3SBram Moolenaar \ mouse: 's' 18480c0eddd3SBram Moolenaar \ }, terminalprops()) 18490c0eddd3SBram Moolenaar 18508dff4cbfSBram Moolenaar " xterm >= 279: "sgr" and cursor_style not reset; also check t_8u reset 18510c0eddd3SBram Moolenaar set ttymouse=xterm 18520c0eddd3SBram Moolenaar call test_option_not_set('ttymouse') 18538dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 18540c0eddd3SBram Moolenaar let seq = "\<Esc>[>0;279;0c" 18550c0eddd3SBram Moolenaar call feedkeys(seq, 'Lx!') 18560c0eddd3SBram Moolenaar call assert_equal(seq, v:termresponse) 18570c0eddd3SBram Moolenaar call assert_equal('sgr', &ttymouse) 18580c0eddd3SBram Moolenaar 18590c0eddd3SBram Moolenaar call assert_equal(#{ 18600c0eddd3SBram Moolenaar \ cursor_style: 'u', 18610c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 18620c0eddd3SBram Moolenaar \ underline_rgb: 'u', 18630c0eddd3SBram Moolenaar \ mouse: 's' 18640c0eddd3SBram Moolenaar \ }, terminalprops()) 18658dff4cbfSBram Moolenaar call assert_equal('', &t_8u) 18660c0eddd3SBram Moolenaar 186703b00476SBram Moolenaar set t_RV= 18680c0eddd3SBram Moolenaar call test_override('term_props', 0) 186903b00476SBram Moolenaarendfunc 187003b00476SBram Moolenaar 187192e5df80SBram Moolenaarfunc Test_focus_events() 187292e5df80SBram Moolenaar let save_term = &term 187392e5df80SBram Moolenaar let save_ttymouse = &ttymouse 187492e5df80SBram Moolenaar set term=xterm ttymouse=xterm2 187592e5df80SBram Moolenaar 187692e5df80SBram Moolenaar au FocusGained * let g:focus_gained += 1 187792e5df80SBram Moolenaar au FocusLost * let g:focus_lost += 1 187892e5df80SBram Moolenaar let g:focus_gained = 0 187992e5df80SBram Moolenaar let g:focus_lost = 0 188092e5df80SBram Moolenaar 188192e5df80SBram Moolenaar call feedkeys("\<Esc>[O", "Lx!") 188292e5df80SBram Moolenaar call assert_equal(1, g:focus_lost) 188392e5df80SBram Moolenaar call feedkeys("\<Esc>[I", "Lx!") 188492e5df80SBram Moolenaar call assert_equal(1, g:focus_gained) 188592e5df80SBram Moolenaar 188692e5df80SBram Moolenaar " still works when 'ttymouse' is empty 188792e5df80SBram Moolenaar set ttymouse= 188892e5df80SBram Moolenaar call feedkeys("\<Esc>[O", "Lx!") 188992e5df80SBram Moolenaar call assert_equal(2, g:focus_lost) 189092e5df80SBram Moolenaar call feedkeys("\<Esc>[I", "Lx!") 189192e5df80SBram Moolenaar call assert_equal(2, g:focus_gained) 189292e5df80SBram Moolenaar 189392e5df80SBram Moolenaar au! FocusGained 189492e5df80SBram Moolenaar au! FocusLost 189592e5df80SBram Moolenaar let &term = save_term 189692e5df80SBram Moolenaar let &ttymouse = save_ttymouse 189792e5df80SBram Moolenaarendfunc 189892e5df80SBram Moolenaar 1899de6dbb45SBram Moolenaarfunc Test_get_termcode() 1900eb66328bSBram Moolenaar try 1901de6dbb45SBram Moolenaar let k1 = &t_k1 1902eb66328bSBram Moolenaar catch /E113/ 1903eb66328bSBram Moolenaar throw 'Skipped: Unable to query termcodes' 1904eb66328bSBram Moolenaar endtry 1905de6dbb45SBram Moolenaar set t_k1= 1906de6dbb45SBram Moolenaar set t_k1& 1907de6dbb45SBram Moolenaar call assert_equal(k1, &t_k1) 19089aeb3363SBram Moolenaar 19099aeb3363SBram Moolenaar " use external termcap first 19109aeb3363SBram Moolenaar set nottybuiltin 19119aeb3363SBram Moolenaar set t_k1= 19129aeb3363SBram Moolenaar set t_k1& 19139aeb3363SBram Moolenaar " when using external termcap may get something else, but it must not be 19149aeb3363SBram Moolenaar " empty, since we would fallback to the builtin one. 19159aeb3363SBram Moolenaar call assert_notequal('', &t_k1) 19169aeb3363SBram Moolenaar 19179aeb3363SBram Moolenaar if &term =~ 'xterm' 19189aeb3363SBram Moolenaar " use internal termcap first 19199aeb3363SBram Moolenaar let term_save = &term 19209aeb3363SBram Moolenaar let &term = 'builtin_' .. &term 19219aeb3363SBram Moolenaar set t_k1= 19229aeb3363SBram Moolenaar set t_k1& 19239aeb3363SBram Moolenaar call assert_equal(k1, &t_k1) 19249aeb3363SBram Moolenaar let &term = term_save 19259aeb3363SBram Moolenaar endif 19269aeb3363SBram Moolenaar 19279aeb3363SBram Moolenaar set ttybuiltin 1928de6dbb45SBram Moolenaarendfunc 192918a79a68SBram Moolenaar 1930ecd34bf5SBram Moolenaarfunc Test_list_builtin_terminals() 1931e46a2ed0SBram Moolenaar CheckRunVimInTerminal 19324d05af0aSBram Moolenaar call RunVimInTerminal('', #{rows: 14}) 19334d05af0aSBram Moolenaar call term_sendkeys('', ":set cmdheight=3\<CR>") 19344d05af0aSBram Moolenaar call TermWait('', 100) 19354d05af0aSBram Moolenaar call term_sendkeys('', ":set term=xxx\<CR>") 19364d05af0aSBram Moolenaar call TermWait('', 100) 19374d05af0aSBram Moolenaar call assert_match('builtin_dumb', term_getline('', 11)) 19384d05af0aSBram Moolenaar call assert_match('Not found in termcap', term_getline('', 12)) 19394d05af0aSBram Moolenaar call StopVimInTerminal('') 1940ecd34bf5SBram Moolenaarendfunc 1941ecd34bf5SBram Moolenaar 194218a79a68SBram Moolenaarfunc GetEscCodeCSI27(key, modifier) 194318a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 194418a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 194518a79a68SBram Moolenaar return "\<Esc>[27;" .. mod .. ';' .. key .. '~' 194618a79a68SBram Moolenaarendfunc 194718a79a68SBram Moolenaar 194818a79a68SBram Moolenaarfunc GetEscCodeCSIu(key, modifier) 194918a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 195018a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 195118a79a68SBram Moolenaar return "\<Esc>[" .. key .. ';' .. mod .. 'u' 195218a79a68SBram Moolenaarendfunc 195318a79a68SBram Moolenaar 195418a79a68SBram Moolenaar" This checks the CSI sequences when in modifyOtherKeys mode. 195518a79a68SBram Moolenaar" The mode doesn't need to be enabled, the codes are always detected. 195618a79a68SBram Moolenaarfunc RunTest_modifyOtherKeys(func) 195718a79a68SBram Moolenaar new 1958459fd785SBram Moolenaar set timeoutlen=10 195918a79a68SBram Moolenaar 1960f19f8d1aSBram Moolenaar " Shift-X is sent as 'X' with the shift modifier 196118a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 2) .. "\<Esc>", 'Lx!') 196218a79a68SBram Moolenaar call assert_equal('X', getline(1)) 196318a79a68SBram Moolenaar 196418a79a68SBram Moolenaar " Ctrl-i is Tab 196518a79a68SBram Moolenaar call setline(1, '') 196618a79a68SBram Moolenaar call feedkeys('a' .. a:func('i', 5) .. "\<Esc>", 'Lx!') 196718a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 196818a79a68SBram Moolenaar 196918a79a68SBram Moolenaar " Ctrl-I is also Tab 197018a79a68SBram Moolenaar call setline(1, '') 197118a79a68SBram Moolenaar call feedkeys('a' .. a:func('I', 5) .. "\<Esc>", 'Lx!') 197218a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 197318a79a68SBram Moolenaar 197418a79a68SBram Moolenaar " Alt-x is ø 197518a79a68SBram Moolenaar call setline(1, '') 197618a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 3) .. "\<Esc>", 'Lx!') 197718a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 197818a79a68SBram Moolenaar 197918a79a68SBram Moolenaar " Meta-x is also ø 198018a79a68SBram Moolenaar call setline(1, '') 198118a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 9) .. "\<Esc>", 'Lx!') 198218a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 198318a79a68SBram Moolenaar 198418a79a68SBram Moolenaar " Alt-X is Ø 198518a79a68SBram Moolenaar call setline(1, '') 198618a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 3) .. "\<Esc>", 'Lx!') 198718a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 198818a79a68SBram Moolenaar 198918a79a68SBram Moolenaar " Meta-X is ø 199018a79a68SBram Moolenaar call setline(1, '') 199118a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 9) .. "\<Esc>", 'Lx!') 199218a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 199318a79a68SBram Moolenaar 1994828ffd59SBram Moolenaar " Ctrl-6 is Ctrl-^ 1995828ffd59SBram Moolenaar split aaa 1996828ffd59SBram Moolenaar edit bbb 1997828ffd59SBram Moolenaar call feedkeys(a:func('6', 5), 'Lx!') 1998828ffd59SBram Moolenaar call assert_equal("aaa", bufname()) 1999828ffd59SBram Moolenaar bwipe aaa 2000828ffd59SBram Moolenaar bwipe bbb 2001828ffd59SBram Moolenaar 20020684e36aSBram Moolenaar " Ctrl-V X 33 is 3 20030684e36aSBram Moolenaar call setline(1, '') 20040684e36aSBram Moolenaar call feedkeys("a\<C-V>" .. a:func('X', 2) .. "33\<Esc>", 'Lx!') 20050684e36aSBram Moolenaar call assert_equal("3", getline(1)) 20060684e36aSBram Moolenaar 20070684e36aSBram Moolenaar " Ctrl-V U 12345 is Unicode 12345 20080684e36aSBram Moolenaar call setline(1, '') 20090684e36aSBram Moolenaar call feedkeys("a\<C-V>" .. a:func('U', 2) .. "12345\<Esc>", 'Lx!') 20100684e36aSBram Moolenaar call assert_equal("\U12345", getline(1)) 20110684e36aSBram Moolenaar 201218a79a68SBram Moolenaar bwipe! 201318a79a68SBram Moolenaar set timeoutlen& 201418a79a68SBram Moolenaarendfunc 201518a79a68SBram Moolenaar 2016459fd785SBram Moolenaarfunc Test_modifyOtherKeys_basic() 201718a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSI27')) 201818a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSIu')) 201918a79a68SBram Moolenaarendfunc 2020d1e2f398SBram Moolenaar 202138571a04SBram Moolenaarfunc Test_modifyOtherKeys_no_mapping() 202238571a04SBram Moolenaar set timeoutlen=10 202338571a04SBram Moolenaar 202438571a04SBram Moolenaar let @a = 'aaa' 202538571a04SBram Moolenaar call feedkeys(":let x = '" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a'\<CR>", 'Lx!') 202638571a04SBram Moolenaar call assert_equal("let x = 'aaa'", @:) 202738571a04SBram Moolenaar 202838571a04SBram Moolenaar new 202938571a04SBram Moolenaar call feedkeys("a" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a\<Esc>", 'Lx!') 203038571a04SBram Moolenaar call assert_equal("aaa", getline(1)) 203138571a04SBram Moolenaar bwipe! 203238571a04SBram Moolenaar 203338571a04SBram Moolenaar new 203438571a04SBram Moolenaar call feedkeys("axx\<CR>yy" .. GetEscCodeCSI27('G', 5) .. GetEscCodeCSI27('K', 5) .. "a\<Esc>", 'Lx!') 203538571a04SBram Moolenaar call assert_equal("axx", getline(1)) 203638571a04SBram Moolenaar call assert_equal("yy", getline(2)) 203738571a04SBram Moolenaar bwipe! 203838571a04SBram Moolenaar 203938571a04SBram Moolenaar set timeoutlen& 204038571a04SBram Moolenaarendfunc 204138571a04SBram Moolenaar 2042d1e2f398SBram Moolenaarfunc RunTest_mapping_shift(key, func) 2043d1e2f398SBram Moolenaar call setline(1, '') 2044d1e2f398SBram Moolenaar if a:key == '|' 2045d1e2f398SBram Moolenaar exe 'inoremap \| xyz' 2046d1e2f398SBram Moolenaar else 2047d1e2f398SBram Moolenaar exe 'inoremap ' .. a:key .. ' xyz' 2048d1e2f398SBram Moolenaar endif 2049d1e2f398SBram Moolenaar call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!') 2050d1e2f398SBram Moolenaar call assert_equal("xyz", getline(1)) 2051d1e2f398SBram Moolenaar if a:key == '|' 2052d1e2f398SBram Moolenaar exe 'iunmap \|' 2053d1e2f398SBram Moolenaar else 2054d1e2f398SBram Moolenaar exe 'iunmap ' .. a:key 2055d1e2f398SBram Moolenaar endif 2056d1e2f398SBram Moolenaarendfunc 2057d1e2f398SBram Moolenaar 2058975a880aSBram Moolenaarfunc Test_modifyOtherKeys_mapped() 2059975a880aSBram Moolenaar set timeoutlen=10 2060975a880aSBram Moolenaar imap ' <C-W> 2061975a880aSBram Moolenaar imap <C-W><C-A> c-a 2062975a880aSBram Moolenaar call setline(1, '') 2063975a880aSBram Moolenaar 2064975a880aSBram Moolenaar " single quote is turned into single byte CTRL-W 2065975a880aSBram Moolenaar " CTRL-A is added with a separate modifier, and needs to be simplified before 2066975a880aSBram Moolenaar " the mapping can match. 2067975a880aSBram Moolenaar call feedkeys("a'" .. GetEscCodeCSI27('A', 5) .. "\<Esc>", 'Lx!') 2068975a880aSBram Moolenaar call assert_equal('c-a', getline(1)) 2069975a880aSBram Moolenaar 2070975a880aSBram Moolenaar iunmap ' 2071975a880aSBram Moolenaar iunmap <C-W><C-A> 2072975a880aSBram Moolenaar set timeoutlen& 2073975a880aSBram Moolenaarendfunc 2074975a880aSBram Moolenaar 2075749bc952SBram Moolenaar" Whether Shift-Tab sends "ESC [ Z" or "ESC [ 27 ; 2 ; 9 ~" is unpredictable, 2076749bc952SBram Moolenaar" both should work. 2077749bc952SBram Moolenaarfunc Test_modifyOtherKeys_shift_tab() 2078749bc952SBram Moolenaar set timeoutlen=10 2079749bc952SBram Moolenaar 2080749bc952SBram Moolenaar call setline(1, '') 2081749bc952SBram Moolenaar call feedkeys("a\<C-K>" .. GetEscCodeCSI27("\t", '2') .. "\<Esc>", 'Lx!') 2082749bc952SBram Moolenaar eval getline(1)->assert_equal('<S-Tab>') 2083749bc952SBram Moolenaar 2084749bc952SBram Moolenaar call setline(1, '') 2085749bc952SBram Moolenaar call feedkeys("a\<C-K>\<Esc>[Z\<Esc>", 'Lx!') 2086749bc952SBram Moolenaar eval getline(1)->assert_equal('<S-Tab>') 2087749bc952SBram Moolenaar 2088749bc952SBram Moolenaar set timeoutlen& 2089749bc952SBram Moolenaar bwipe! 2090749bc952SBram Moolenaarendfunc 2091749bc952SBram Moolenaar 2092d1e2f398SBram Moolenaarfunc RunTest_mapping_works_with_shift(func) 2093d1e2f398SBram Moolenaar new 2094459fd785SBram Moolenaar set timeoutlen=10 2095d1e2f398SBram Moolenaar 2096d1e2f398SBram Moolenaar call RunTest_mapping_shift('@', a:func) 2097d1e2f398SBram Moolenaar call RunTest_mapping_shift('A', a:func) 2098d1e2f398SBram Moolenaar call RunTest_mapping_shift('Z', a:func) 2099d1e2f398SBram Moolenaar call RunTest_mapping_shift('^', a:func) 2100d1e2f398SBram Moolenaar call RunTest_mapping_shift('_', a:func) 2101d1e2f398SBram Moolenaar call RunTest_mapping_shift('{', a:func) 2102d1e2f398SBram Moolenaar call RunTest_mapping_shift('|', a:func) 2103d1e2f398SBram Moolenaar call RunTest_mapping_shift('}', a:func) 2104d1e2f398SBram Moolenaar call RunTest_mapping_shift('~', a:func) 2105d1e2f398SBram Moolenaar 2106d1e2f398SBram Moolenaar bwipe! 2107d1e2f398SBram Moolenaar set timeoutlen& 2108d1e2f398SBram Moolenaarendfunc 2109d1e2f398SBram Moolenaar 2110459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_plain() 2111d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27')) 2112d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu')) 2113d1e2f398SBram Moolenaarendfunc 2114459fd785SBram Moolenaar 2115459fd785SBram Moolenaarfunc RunTest_mapping_mods(map, key, func, code) 2116459fd785SBram Moolenaar call setline(1, '') 2117459fd785SBram Moolenaar exe 'inoremap ' .. a:map .. ' xyz' 2118459fd785SBram Moolenaar call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!') 2119459fd785SBram Moolenaar call assert_equal("xyz", getline(1)) 2120459fd785SBram Moolenaar exe 'iunmap ' .. a:map 2121459fd785SBram Moolenaarendfunc 2122459fd785SBram Moolenaar 2123459fd785SBram Moolenaarfunc RunTest_mapping_works_with_mods(func, mods, code) 2124459fd785SBram Moolenaar new 2125459fd785SBram Moolenaar set timeoutlen=10 2126459fd785SBram Moolenaar 2127459fd785SBram Moolenaar if a:mods !~ 'S' 2128459fd785SBram Moolenaar " Shift by itself has no effect 2129459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-@>', '@', a:func, a:code) 2130459fd785SBram Moolenaar endif 2131459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-A>', 'A', a:func, a:code) 2132459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-Z>', 'Z', a:func, a:code) 2133459fd785SBram Moolenaar if a:mods !~ 'S' 2134459fd785SBram Moolenaar " with Shift code is always upper case 2135459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'a', a:func, a:code) 2136459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'z', a:func, a:code) 2137459fd785SBram Moolenaar endif 2138459fd785SBram Moolenaar if a:mods != 'A' 2139459fd785SBram Moolenaar " with Alt code is not in upper case 2140459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'A', a:func, a:code) 2141459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'Z', a:func, a:code) 2142459fd785SBram Moolenaar endif 2143459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-á>', 'á', a:func, a:code) 2144459fd785SBram Moolenaar if a:mods !~ 'S' 2145459fd785SBram Moolenaar " Shift by itself has no effect 2146459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-^>', '^', a:func, a:code) 2147459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-_>', '_', a:func, a:code) 2148459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-{>', '{', a:func, a:code) 2149459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-\|>', '|', a:func, a:code) 2150459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-}>', '}', a:func, a:code) 2151459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-~>', '~', a:func, a:code) 2152459fd785SBram Moolenaar endif 2153459fd785SBram Moolenaar 2154459fd785SBram Moolenaar bwipe! 2155459fd785SBram Moolenaar set timeoutlen& 2156459fd785SBram Moolenaarendfunc 2157459fd785SBram Moolenaar 2158459fd785SBram Moolenaarfunc Test_mapping_works_with_shift() 2159459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S', 2) 2160459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S', 2) 2161459fd785SBram Moolenaarendfunc 2162459fd785SBram Moolenaar 2163459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl() 2164459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C', 5) 2165459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C', 5) 21664e2114e9SBram Moolenaar 21674e2114e9SBram Moolenaar new 21684e2114e9SBram Moolenaar set timeoutlen=10 21694e2114e9SBram Moolenaar 21704e2114e9SBram Moolenaar " CTRL-@ actually produces the code for CTRL-2, which is converted 21714e2114e9SBram Moolenaar call RunTest_mapping_mods('<C-@>', '2', function('GetEscCodeCSI27'), 5) 21724e2114e9SBram Moolenaar call RunTest_mapping_mods('<C-@>', '2', function('GetEscCodeCSIu'), 5) 21734e2114e9SBram Moolenaar 21744e2114e9SBram Moolenaar " CTRL-^ actually produces the code for CTRL-6, which is converted 21754e2114e9SBram Moolenaar call RunTest_mapping_mods('<C-^>', '6', function('GetEscCodeCSI27'), 5) 21764e2114e9SBram Moolenaar call RunTest_mapping_mods('<C-^>', '6', function('GetEscCodeCSIu'), 5) 21774e2114e9SBram Moolenaar 21784e2114e9SBram Moolenaar " CTRL-_ actually produces the code for CTRL--, which is converted 21794e2114e9SBram Moolenaar call RunTest_mapping_mods('<C-_>', '-', function('GetEscCodeCSI27'), 5) 21804e2114e9SBram Moolenaar call RunTest_mapping_mods('<C-_>', '-', function('GetEscCodeCSIu'), 5) 21814e2114e9SBram Moolenaar 21824e2114e9SBram Moolenaar bwipe! 21834e2114e9SBram Moolenaar set timeoutlen& 2184459fd785SBram Moolenaarendfunc 2185459fd785SBram Moolenaar 2186459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl() 2187459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S', 6) 2188459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S', 6) 21899a033d7bSBram Moolenaar 21909a033d7bSBram Moolenaar new 21919a033d7bSBram Moolenaar set timeoutlen=10 21929a033d7bSBram Moolenaar 21939a033d7bSBram Moolenaar " Ctrl-Shift-[ actually produces CTRL-Shift-{ which is mapped as <C-{> 21949a033d7bSBram Moolenaar call RunTest_mapping_mods('<C-{>', '{', function('GetEscCodeCSI27'), 6) 21959a033d7bSBram Moolenaar call RunTest_mapping_mods('<C-{>', '{', function('GetEscCodeCSIu'), 6) 21969a033d7bSBram Moolenaar 21979a033d7bSBram Moolenaar " Ctrl-Shift-] actually produces CTRL-Shift-} which is mapped as <C-}> 21989a033d7bSBram Moolenaar call RunTest_mapping_mods('<C-{>', '{', function('GetEscCodeCSI27'), 6) 21999a033d7bSBram Moolenaar call RunTest_mapping_mods('<C-{>', '{', function('GetEscCodeCSIu'), 6) 22009a033d7bSBram Moolenaar 22019a033d7bSBram Moolenaar " Ctrl-Shift-\ actually produces CTRL-Shift-| which is mapped as <C-|> 22029a033d7bSBram Moolenaar call RunTest_mapping_mods('<C-\|>', '|', function('GetEscCodeCSI27'), 6) 22039a033d7bSBram Moolenaar call RunTest_mapping_mods('<C-\|>', '|', function('GetEscCodeCSIu'), 6) 22049a033d7bSBram Moolenaar 22059a033d7bSBram Moolenaar bwipe! 22069a033d7bSBram Moolenaar set timeoutlen& 2207459fd785SBram Moolenaarendfunc 2208459fd785SBram Moolenaar 2209459fd785SBram Moolenaar" Below we also test the "u" code with Alt, This works, but libvterm would not 2210459fd785SBram Moolenaar" send the Alt key like this but by prefixing an Esc. 2211459fd785SBram Moolenaar 2212459fd785SBram Moolenaarfunc Test_mapping_works_with_alt() 2213459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'A', 3) 2214459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'A', 3) 2215459fd785SBram Moolenaarendfunc 2216459fd785SBram Moolenaar 2217459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_alt() 2218459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S-A', 4) 2219459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S-A', 4) 2220459fd785SBram Moolenaarendfunc 2221459fd785SBram Moolenaar 2222daff0fb7SBram Moolenaarfunc Test_mapping_works_with_alt_and_shift() 2223daff0fb7SBram Moolenaar new 2224daff0fb7SBram Moolenaar set timeoutlen=10 2225daff0fb7SBram Moolenaar 2226daff0fb7SBram Moolenaar " mapping <A-?> works even though the code is A-S-? 2227daff0fb7SBram Moolenaar for c in ['!', '$', '+', ':', '?', '^', '~'] 2228daff0fb7SBram Moolenaar call RunTest_mapping_mods('<A-' .. c .. '>', c, function('GetEscCodeCSI27'), 4) 2229daff0fb7SBram Moolenaar call RunTest_mapping_mods('<A-' .. c .. '>', c, function('GetEscCodeCSIu'), 4) 2230daff0fb7SBram Moolenaar endfor 2231daff0fb7SBram Moolenaar 2232daff0fb7SBram Moolenaar bwipe! 2233daff0fb7SBram Moolenaar set timeoutlen& 2234daff0fb7SBram Moolenaarendfunc 2235daff0fb7SBram Moolenaar 2236459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl_alt() 2237459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-A', 7) 2238459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-A', 7) 2239459fd785SBram Moolenaarendfunc 2240459fd785SBram Moolenaar 2241459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl_alt() 2242459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S-A', 8) 2243459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S-A', 8) 2244459fd785SBram Moolenaarendfunc 2245fc4ea2a7SBram Moolenaar 2246fc4ea2a7SBram Moolenaarfunc Test_insert_literal() 2247fc4ea2a7SBram Moolenaar set timeoutlen=10 2248fc4ea2a7SBram Moolenaar new 2249fc4ea2a7SBram Moolenaar " CTRL-V CTRL-X inserts a ^X 2250fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 2251fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 2252fc4ea2a7SBram Moolenaar 2253fc4ea2a7SBram Moolenaar call setline(1, '') 2254fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 2255fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 2256fc4ea2a7SBram Moolenaar 2257f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-X inserts escape sequence 2258fc4ea2a7SBram Moolenaar call setline(1, '') 2259fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 2260fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[88;5u", getline(1)) 2261fc4ea2a7SBram Moolenaar 2262fc4ea2a7SBram Moolenaar call setline(1, '') 2263fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 2264fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[27;5;88~", getline(1)) 2265fc4ea2a7SBram Moolenaar 2266fc4ea2a7SBram Moolenaar bwipe! 2267fc4ea2a7SBram Moolenaar set timeoutlen& 2268fc4ea2a7SBram Moolenaarendfunc 2269fc4ea2a7SBram Moolenaar 2270fc4ea2a7SBram Moolenaarfunc Test_cmdline_literal() 2271fc4ea2a7SBram Moolenaar set timeoutlen=10 2272fc4ea2a7SBram Moolenaar 2273fc4ea2a7SBram Moolenaar " CTRL-V CTRL-Y inserts a ^Y 2274fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2275fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 2276fc4ea2a7SBram Moolenaar 2277fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2278fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 2279fc4ea2a7SBram Moolenaar 2280f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-Y inserts escape sequence 2281fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2282fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[89;5u", @:) 2283fc4ea2a7SBram Moolenaar 2284fc4ea2a7SBram Moolenaar call setline(1, '') 2285fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 2286fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[27;5;89~", @:) 2287fc4ea2a7SBram Moolenaar 2288fc4ea2a7SBram Moolenaar set timeoutlen& 2289fc4ea2a7SBram Moolenaarendfunc 22900eabd4dcSBram Moolenaar 22910ff5dedfSBram Moolenaar" Test for translation of special key codes (<xF1>, <xF2>, etc.) 229292e5df80SBram Moolenaarfunc Test_Keycode_Translation() 22930ff5dedfSBram Moolenaar let keycodes = [ 22940ff5dedfSBram Moolenaar \ ["<xUp>", "<Up>"], 22950ff5dedfSBram Moolenaar \ ["<xDown>", "<Down>"], 22960ff5dedfSBram Moolenaar \ ["<xLeft>", "<Left>"], 22970ff5dedfSBram Moolenaar \ ["<xRight>", "<Right>"], 22980ff5dedfSBram Moolenaar \ ["<xHome>", "<Home>"], 22990ff5dedfSBram Moolenaar \ ["<xEnd>", "<End>"], 23000ff5dedfSBram Moolenaar \ ["<zHome>", "<Home>"], 23010ff5dedfSBram Moolenaar \ ["<zEnd>", "<End>"], 23020ff5dedfSBram Moolenaar \ ["<xF1>", "<F1>"], 23030ff5dedfSBram Moolenaar \ ["<xF2>", "<F2>"], 23040ff5dedfSBram Moolenaar \ ["<xF3>", "<F3>"], 23050ff5dedfSBram Moolenaar \ ["<xF4>", "<F4>"], 23060ff5dedfSBram Moolenaar \ ["<S-xF1>", "<S-F1>"], 23070ff5dedfSBram Moolenaar \ ["<S-xF2>", "<S-F2>"], 23080ff5dedfSBram Moolenaar \ ["<S-xF3>", "<S-F3>"], 23090ff5dedfSBram Moolenaar \ ["<S-xF4>", "<S-F4>"]] 23100ff5dedfSBram Moolenaar for [k1, k2] in keycodes 23110ff5dedfSBram Moolenaar exe "nnoremap " .. k1 .. " 2wx" 23120ff5dedfSBram Moolenaar call assert_true(maparg(k1, 'n', 0, 1).lhs == k2) 23130ff5dedfSBram Moolenaar exe "nunmap " .. k1 23140ff5dedfSBram Moolenaar endfor 23150ff5dedfSBram Moolenaarendfunc 23160ff5dedfSBram Moolenaar 23171f448d90SBram Moolenaar" Test for terminal keycodes that doesn't have termcap entries 23181f448d90SBram Moolenaarfunc Test_special_term_keycodes() 23191f448d90SBram Moolenaar new 23201f448d90SBram Moolenaar " Test for <xHome>, <S-xHome> and <C-xHome> 23211f448d90SBram Moolenaar " send <K_SPECIAL> <KS_EXTRA> keycode 23221f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x3f\n", 'xt') 23231f448d90SBram Moolenaar " send <K_SPECIAL> <KS_MODIFIER> bitmap <K_SPECIAL> <KS_EXTRA> keycode 23241f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x3f\n", 'xt') 23251f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x3f\n", 'xt') 23261f448d90SBram Moolenaar " Test for <xEnd>, <S-xEnd> and <C-xEnd> 23271f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x3d\n", 'xt') 23281f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x3d\n", 'xt') 23291f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x3d\n", 'xt') 23301f448d90SBram Moolenaar " Test for <zHome>, <S-zHome> and <C-zHome> 23311f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x40\n", 'xt') 23321f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x40\n", 'xt') 23331f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x40\n", 'xt') 23341f448d90SBram Moolenaar " Test for <zEnd>, <S-zEnd> and <C-zEnd> 23351f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x3e\n", 'xt') 23361f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x3e\n", 'xt') 23371f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x3e\n", 'xt') 23381f448d90SBram Moolenaar " Test for <xUp>, <xDown>, <xLeft> and <xRight> 23391f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x41\n", 'xt') 23401f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x42\n", 'xt') 23411f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x43\n", 'xt') 23421f448d90SBram Moolenaar call feedkeys("i\<C-K>\x80\xfd\x44\n", 'xt') 23431f448d90SBram Moolenaar call assert_equal(['<Home>', '<S-Home>', '<C-Home>', 23441f448d90SBram Moolenaar \ '<End>', '<S-End>', '<C-End>', 23451f448d90SBram Moolenaar \ '<Home>', '<S-Home>', '<C-Home>', 23461f448d90SBram Moolenaar \ '<End>', '<S-End>', '<C-End>', 23471f448d90SBram Moolenaar \ '<Up>', '<Down>', '<Left>', '<Right>', ''], getline(1, '$')) 23481f448d90SBram Moolenaar bw! 23491f448d90SBram Moolenaarendfunc 23501f448d90SBram Moolenaar 2351*0f5575d0SBram Moolenaarfunc Test_terminal_builtin_without_gui() 2352*0f5575d0SBram Moolenaar CheckNotMSWindows 2353*0f5575d0SBram Moolenaar 2354*0f5575d0SBram Moolenaar " builtin_gui should not be output by :set term=xxx 2355*0f5575d0SBram Moolenaar let output = systemlist("TERM=dumb " .. v:progpath .. " --clean -c ':set t_ti= t_te=' -c 'set term=xxx' -c ':q!'") 2356*0f5575d0SBram Moolenaar redraw! 2357*0f5575d0SBram Moolenaar call map(output, {_, val -> trim(val)}) 2358*0f5575d0SBram Moolenaar call assert_equal(-1, index(output, 'builtin_gui')) 2359*0f5575d0SBram Moolenaar call assert_notequal(-1, index(output, 'builtin_dumb')) 2360*0f5575d0SBram Moolenaarendfunc 2361*0f5575d0SBram Moolenaar 2362*0f5575d0SBram Moolenaar 23630eabd4dcSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 2364