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 103fbd2d7cSBram Moolenaar 1192fd599eSBram Moolenaarfunc Test_term_mouse_left_click() 12905dd905SBram Moolenaar new 13905dd905SBram Moolenaar let save_mouse = &mouse 14905dd905SBram Moolenaar let save_term = &term 15905dd905SBram Moolenaar let save_ttymouse = &ttymouse 1692fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 173fbd2d7cSBram Moolenaar set mouse=a term=xterm 18905dd905SBram Moolenaar call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 19905dd905SBram Moolenaar 20515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 214945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 221ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 233fbd2d7cSBram Moolenaar go 244945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 253fbd2d7cSBram Moolenaar let row = 2 263fbd2d7cSBram Moolenaar let col = 6 273fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 283fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 294945219bSBram Moolenaar call assert_equal([0, 2, 6, 0], getpos('.'), msg) 303fbd2d7cSBram Moolenaar endfor 31905dd905SBram Moolenaar 32905dd905SBram Moolenaar let &mouse = save_mouse 33905dd905SBram Moolenaar let &term = save_term 34905dd905SBram Moolenaar let &ttymouse = save_ttymouse 3592fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 36905dd905SBram Moolenaar bwipe! 37905dd905SBram Moolenaarendfunc 38905dd905SBram Moolenaar 396aa7523bSBram Moolenaarfunc Test_xterm_mouse_right_click_extends_visual() 406aa7523bSBram Moolenaar if has('mac') 416aa7523bSBram Moolenaar throw "Skipped: test right click in visual mode does not work on macOs (why?)" 426aa7523bSBram Moolenaar endif 436aa7523bSBram Moolenaar let save_mouse = &mouse 446aa7523bSBram Moolenaar let save_term = &term 456aa7523bSBram Moolenaar let save_ttymouse = &ttymouse 466aa7523bSBram Moolenaar call test_override('no_query_mouse', 1) 476aa7523bSBram Moolenaar set mouse=a term=xterm 486aa7523bSBram Moolenaar 496aa7523bSBram Moolenaar for visual_mode in ["v", "V", "\<C-V>"] 50515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 516aa7523bSBram Moolenaar let msg = 'visual=' .. visual_mode .. ' ttymouse=' .. ttymouse_val 526aa7523bSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 536aa7523bSBram Moolenaar 546aa7523bSBram Moolenaar call setline(1, repeat([repeat('-', 7)], 7)) 556aa7523bSBram Moolenaar call MouseLeftClick(4, 4) 566aa7523bSBram Moolenaar call MouseLeftRelease(4, 4) 576aa7523bSBram Moolenaar exe "norm! " .. visual_mode 586aa7523bSBram Moolenaar 596aa7523bSBram Moolenaar " Right click extends top left of visual area. 606aa7523bSBram Moolenaar call MouseRightClick(2, 2) 616aa7523bSBram Moolenaar call MouseRightRelease(2, 2) 626aa7523bSBram Moolenaar 63f19f8d1aSBram Moolenaar " Right click extends bottom right of visual area. 646aa7523bSBram Moolenaar call MouseRightClick(6, 6) 656aa7523bSBram Moolenaar call MouseRightRelease(6, 6) 666aa7523bSBram Moolenaar norm! r1gv 676aa7523bSBram Moolenaar 686aa7523bSBram Moolenaar " Right click shrinks top left of visual area. 696aa7523bSBram Moolenaar call MouseRightClick(3, 3) 706aa7523bSBram Moolenaar call MouseRightRelease(3, 3) 716aa7523bSBram Moolenaar 726aa7523bSBram Moolenaar " Right click shrinks bottom right of visual area. 736aa7523bSBram Moolenaar call MouseRightClick(5, 5) 746aa7523bSBram Moolenaar call MouseRightRelease(5, 5) 756aa7523bSBram Moolenaar norm! r2 766aa7523bSBram Moolenaar 776aa7523bSBram Moolenaar if visual_mode ==# 'v' 786aa7523bSBram Moolenaar call assert_equal(['-------', 796aa7523bSBram Moolenaar \ '-111111', 806aa7523bSBram Moolenaar \ '1122222', 816aa7523bSBram Moolenaar \ '2222222', 826aa7523bSBram Moolenaar \ '2222211', 836aa7523bSBram Moolenaar \ '111111-', 846aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 856aa7523bSBram Moolenaar elseif visual_mode ==# 'V' 866aa7523bSBram Moolenaar call assert_equal(['-------', 876aa7523bSBram Moolenaar \ '1111111', 886aa7523bSBram Moolenaar \ '2222222', 896aa7523bSBram Moolenaar \ '2222222', 906aa7523bSBram Moolenaar \ '2222222', 916aa7523bSBram Moolenaar \ '1111111', 926aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 936aa7523bSBram Moolenaar else 946aa7523bSBram Moolenaar call assert_equal(['-------', 956aa7523bSBram Moolenaar \ '-11111-', 966aa7523bSBram Moolenaar \ '-12221-', 976aa7523bSBram Moolenaar \ '-12221-', 986aa7523bSBram Moolenaar \ '-12221-', 996aa7523bSBram Moolenaar \ '-11111-', 1006aa7523bSBram Moolenaar \ '-------'], getline(1, '$'), msg) 1016aa7523bSBram Moolenaar endif 1026aa7523bSBram Moolenaar endfor 1036aa7523bSBram Moolenaar endfor 1046aa7523bSBram Moolenaar 1056aa7523bSBram Moolenaar let &mouse = save_mouse 1066aa7523bSBram Moolenaar let &term = save_term 1076aa7523bSBram Moolenaar let &ttymouse = save_ttymouse 1086aa7523bSBram Moolenaar call test_override('no_query_mouse', 0) 1096aa7523bSBram Moolenaar bwipe! 1106aa7523bSBram Moolenaarendfunc 1116aa7523bSBram Moolenaar 1121ee36d6fSBram Moolenaar" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 1131ee36d6fSBram Moolenaarfunc Test_xterm_mouse_ctrl_click() 1141ee36d6fSBram Moolenaar let save_mouse = &mouse 1151ee36d6fSBram Moolenaar let save_term = &term 1161ee36d6fSBram Moolenaar let save_ttymouse = &ttymouse 1171ee36d6fSBram Moolenaar set mouse=a term=xterm 1181ee36d6fSBram Moolenaar 119515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 1201ee36d6fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1211ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1221ee36d6fSBram Moolenaar help 1231ee36d6fSBram Moolenaar /usr_02.txt 1241ee36d6fSBram Moolenaar norm! zt 1251ee36d6fSBram Moolenaar let row = 1 1261ee36d6fSBram Moolenaar let col = 1 1271ee36d6fSBram Moolenaar call MouseCtrlLeftClick(row, col) 1281ee36d6fSBram Moolenaar call MouseLeftRelease(row, col) 1291ee36d6fSBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 130b4367b7fSBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) 1311ee36d6fSBram Moolenaar 1321ee36d6fSBram Moolenaar call MouseCtrlRightClick(row, col) 13392fd599eSBram Moolenaar call MouseRightRelease(row, col) 1341ee36d6fSBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 135b4367b7fSBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) 1361ee36d6fSBram Moolenaar 1371ee36d6fSBram Moolenaar helpclose 1381ee36d6fSBram Moolenaar endfor 1391ee36d6fSBram Moolenaar 1401ee36d6fSBram Moolenaar let &mouse = save_mouse 1411ee36d6fSBram Moolenaar let &term = save_term 1421ee36d6fSBram Moolenaar let &ttymouse = save_ttymouse 1431ee36d6fSBram Moolenaarendfunc 1441ee36d6fSBram Moolenaar 14592fd599eSBram Moolenaarfunc Test_term_mouse_middle_click() 14652992feaSBram Moolenaar CheckFeature clipboard_working 147564344acSBram Moolenaar 148c1b8160bSBram Moolenaar new 149c1b8160bSBram Moolenaar let save_mouse = &mouse 150c1b8160bSBram Moolenaar let save_term = &term 151c1b8160bSBram Moolenaar let save_ttymouse = &ttymouse 15292fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 153c1b8160bSBram Moolenaar let save_quotestar = @* 154c1b8160bSBram Moolenaar let @* = 'abc' 155c1b8160bSBram Moolenaar set mouse=a term=xterm 156c1b8160bSBram Moolenaar 157515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 158c1b8160bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1591ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 160c1b8160bSBram Moolenaar call setline(1, ['123456789', '123456789']) 161c1b8160bSBram Moolenaar 162c1b8160bSBram Moolenaar " Middle-click in the middle of the line pastes text where clicked. 163c1b8160bSBram Moolenaar let row = 1 164c1b8160bSBram Moolenaar let col = 6 165c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 166c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 167c1b8160bSBram Moolenaar call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 168c1b8160bSBram Moolenaar 169c1b8160bSBram Moolenaar " Middle-click beyond end of the line pastes text at the end of the line. 170c1b8160bSBram Moolenaar let col = 20 171c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 172c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 173c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 174c1b8160bSBram Moolenaar 175c1b8160bSBram Moolenaar " Middle-click beyond the last line pastes in the last line. 176c1b8160bSBram Moolenaar let row = 5 177c1b8160bSBram Moolenaar let col = 3 178c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 179c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 180c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 181c1b8160bSBram Moolenaar endfor 182c1b8160bSBram Moolenaar 183c1b8160bSBram Moolenaar let &mouse = save_mouse 184c1b8160bSBram Moolenaar let &term = save_term 185c1b8160bSBram Moolenaar let &ttymouse = save_ttymouse 18692fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 187c1b8160bSBram Moolenaar let @* = save_quotestar 188c1b8160bSBram Moolenaar bwipe! 189c1b8160bSBram Moolenaarendfunc 190c1b8160bSBram Moolenaar 19192fd599eSBram Moolenaar" TODO: for unclear reasons this test fails if it comes after 19292fd599eSBram Moolenaar" Test_xterm_mouse_ctrl_click() 19392fd599eSBram Moolenaarfunc Test_1xterm_mouse_wheel() 194049736faSBram Moolenaar new 195049736faSBram Moolenaar let save_mouse = &mouse 196049736faSBram Moolenaar let save_term = &term 197049736faSBram Moolenaar let save_ttymouse = &ttymouse 1983fbd2d7cSBram Moolenaar set mouse=a term=xterm 199049736faSBram Moolenaar call setline(1, range(1, 100)) 200049736faSBram Moolenaar 201515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 2024945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 2031ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 204049736faSBram Moolenaar go 2054945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 2064945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 2073fbd2d7cSBram Moolenaar 2083fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 2094945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 2104945219bSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.'), msg) 2113fbd2d7cSBram Moolenaar 2123fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 2134945219bSBram Moolenaar call assert_equal(7, line('w0'), msg) 2144945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 215049736faSBram Moolenaar 2163fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 2174945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 2184945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 2193fbd2d7cSBram Moolenaar 2203fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 2214945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 2224945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 2233fbd2d7cSBram Moolenaar endfor 224049736faSBram Moolenaar 225049736faSBram Moolenaar let &mouse = save_mouse 226049736faSBram Moolenaar let &term = save_term 227049736faSBram Moolenaar let &ttymouse = save_ttymouse 228049736faSBram Moolenaar bwipe! 229049736faSBram Moolenaarendfunc 2303fb01a53SBram Moolenaar 231b4367b7fSBram Moolenaar" Test that dragging beyond the window (at the bottom and at the top) 232f19f8d1aSBram Moolenaar" scrolls window content by the number of lines beyond the window. 233b4367b7fSBram Moolenaarfunc Test_term_mouse_drag_beyond_window() 234b4367b7fSBram Moolenaar let save_mouse = &mouse 235b4367b7fSBram Moolenaar let save_term = &term 236b4367b7fSBram Moolenaar let save_ttymouse = &ttymouse 237b4367b7fSBram Moolenaar call test_override('no_query_mouse', 1) 238b4367b7fSBram Moolenaar set mouse=a term=xterm 239b4367b7fSBram Moolenaar let col = 1 240b4367b7fSBram Moolenaar call setline(1, range(1, 100)) 241b4367b7fSBram Moolenaar 242b4367b7fSBram Moolenaar " Split into 3 windows, and go into the middle window 243b4367b7fSBram Moolenaar " so we test dragging mouse below and above the window. 244b4367b7fSBram Moolenaar 2split 245b4367b7fSBram Moolenaar wincmd j 246b4367b7fSBram Moolenaar 2split 247b4367b7fSBram Moolenaar 248515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 249b4367b7fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 250b4367b7fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 251b4367b7fSBram Moolenaar 252b4367b7fSBram Moolenaar " Line #10 at the top. 253b4367b7fSBram Moolenaar norm! 10zt 254b4367b7fSBram Moolenaar redraw 255b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 256b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 257b4367b7fSBram Moolenaar 258b4367b7fSBram Moolenaar let row = 4 259b4367b7fSBram Moolenaar call MouseLeftClick(row, col) 260b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 261b4367b7fSBram Moolenaar 262b4367b7fSBram Moolenaar " Drag downwards. We're still in the window so topline should 263b4367b7fSBram Moolenaar " not change yet. 264b4367b7fSBram Moolenaar let row += 1 265b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 266b4367b7fSBram Moolenaar call assert_equal(10, winsaveview().topline, msg) 267b4367b7fSBram Moolenaar 268b4367b7fSBram Moolenaar " We now leave the window at the bottom, so the window content should 269b4367b7fSBram Moolenaar " scroll by 1 line, then 2 lines (etc) as we drag further away. 270b4367b7fSBram Moolenaar let row += 1 271b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 272b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 273b4367b7fSBram Moolenaar 274b4367b7fSBram Moolenaar let row += 1 275b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 276b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 277b4367b7fSBram Moolenaar 278b4367b7fSBram Moolenaar " Now drag upwards. 279b4367b7fSBram Moolenaar let row -= 1 280b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 281b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 282b4367b7fSBram Moolenaar 283b4367b7fSBram Moolenaar " We're now back in the window so the topline should not change. 284b4367b7fSBram Moolenaar let row -= 1 285b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 286b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 287b4367b7fSBram Moolenaar 288b4367b7fSBram Moolenaar let row -= 1 289b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 290b4367b7fSBram Moolenaar call assert_equal(14, winsaveview().topline, msg) 291b4367b7fSBram Moolenaar 292b4367b7fSBram Moolenaar " We now leave the window at the top so the window content should 293b4367b7fSBram Moolenaar " scroll by 1 line, then 2, then 3 (etc) in the opposite direction. 294b4367b7fSBram Moolenaar let row -= 1 295b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 296b4367b7fSBram Moolenaar call assert_equal(13, winsaveview().topline, msg) 297b4367b7fSBram Moolenaar 298b4367b7fSBram Moolenaar let row -= 1 299b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 300b4367b7fSBram Moolenaar call assert_equal(11, winsaveview().topline, msg) 301b4367b7fSBram Moolenaar 302b4367b7fSBram Moolenaar let row -= 1 303b4367b7fSBram Moolenaar call MouseLeftDrag(row, col) 304b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 305b4367b7fSBram Moolenaar 306b4367b7fSBram Moolenaar call MouseLeftRelease(row, col) 307b4367b7fSBram Moolenaar call assert_equal(8, winsaveview().topline, msg) 308b4367b7fSBram Moolenaar call assert_equal(2, winheight(0), msg) 309b4367b7fSBram Moolenaar endfor 310b4367b7fSBram Moolenaar 311b4367b7fSBram Moolenaar let &mouse = save_mouse 312b4367b7fSBram Moolenaar let &term = save_term 313b4367b7fSBram Moolenaar let &ttymouse = save_ttymouse 314b4367b7fSBram Moolenaar call test_override('no_query_mouse', 0) 315b4367b7fSBram Moolenaar bwipe! 316b4367b7fSBram Moolenaarendfunc 317b4367b7fSBram Moolenaar 31892fd599eSBram Moolenaarfunc Test_term_mouse_drag_window_separator() 3193fb01a53SBram Moolenaar let save_mouse = &mouse 3203fb01a53SBram Moolenaar let save_term = &term 3213fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 32292fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 3233fbd2d7cSBram Moolenaar set mouse=a term=xterm 3243fbd2d7cSBram Moolenaar 325515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 3264945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 3271ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 3283fb01a53SBram Moolenaar 3293fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 3303fb01a53SBram Moolenaar split 3313fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 3323fb01a53SBram Moolenaar let row = rowseparator 3333fb01a53SBram Moolenaar let col = 1 334c8b3ddabSBram Moolenaar 3352b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 3362b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 3373fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 3383fb01a53SBram Moolenaar let row -= 1 3393fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 3404945219bSBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 3413fb01a53SBram Moolenaar let row += 1 3423fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 3434945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 3443fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 3454945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 34639f76c6aSBram Moolenaar endif 3473fb01a53SBram Moolenaar bwipe! 3483fb01a53SBram Moolenaar 3493fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 3503fb01a53SBram Moolenaar vsplit 3513fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 3523fb01a53SBram Moolenaar let row = 1 3533fb01a53SBram Moolenaar let col = colseparator 35439f76c6aSBram Moolenaar 3552b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 3562b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || col <= 223 3573fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 3583fb01a53SBram Moolenaar let col -= 1 3593fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 3604945219bSBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 3613fb01a53SBram Moolenaar let col += 1 3623fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 3634945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 3643fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 3654945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 36639f76c6aSBram Moolenaar endif 3673fb01a53SBram Moolenaar bwipe! 3683fbd2d7cSBram Moolenaar endfor 3693fbd2d7cSBram Moolenaar 3703fbd2d7cSBram Moolenaar let &mouse = save_mouse 3713fbd2d7cSBram Moolenaar let &term = save_term 3723fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 37392fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 3743fbd2d7cSBram Moolenaarendfunc 3753fbd2d7cSBram Moolenaar 37692fd599eSBram Moolenaarfunc Test_term_mouse_drag_statusline() 3773fbd2d7cSBram Moolenaar let save_mouse = &mouse 3783fbd2d7cSBram Moolenaar let save_term = &term 3793fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 38092fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 381ca57ab54SBram Moolenaar let save_laststatus = &laststatus 382ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 3833fbd2d7cSBram Moolenaar 384515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 3854945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 3861ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 3873fbd2d7cSBram Moolenaar 3884945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 3893fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 3903fbd2d7cSBram Moolenaar let row = rowstatusline 3913fbd2d7cSBram Moolenaar let col = 1 392c8b3ddabSBram Moolenaar 3932b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && row > 223 3942b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 395c8b3ddabSBram Moolenaar continue 396c8b3ddabSBram Moolenaar endif 397c8b3ddabSBram Moolenaar 3983fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 3993fbd2d7cSBram Moolenaar let row -= 1 4003fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 4014945219bSBram Moolenaar call assert_equal(2, &cmdheight, msg) 4024945219bSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 4033fbd2d7cSBram Moolenaar let row += 1 4043fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 4054945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 4064945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 4073fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 4084945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 4094945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 4103fbd2d7cSBram Moolenaar endfor 4113fbd2d7cSBram Moolenaar 4123fb01a53SBram Moolenaar let &mouse = save_mouse 4133fb01a53SBram Moolenaar let &term = save_term 4143fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 41592fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 416ca57ab54SBram Moolenaar let &laststatus = save_laststatus 417ca57ab54SBram Moolenaarendfunc 418ca57ab54SBram Moolenaar 41992fd599eSBram Moolenaarfunc Test_term_mouse_click_tab() 420ca57ab54SBram Moolenaar let save_mouse = &mouse 421ca57ab54SBram Moolenaar let save_term = &term 422ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 42392fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 424ca57ab54SBram Moolenaar set mouse=a term=xterm 425ca57ab54SBram Moolenaar let row = 1 426ca57ab54SBram Moolenaar 427515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 4284945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4291ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 430ca57ab54SBram Moolenaar e Xfoo 431ca57ab54SBram Moolenaar tabnew Xbar 432ca57ab54SBram Moolenaar 433ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 434ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 435ca57ab54SBram Moolenaar \ ' Xfoo', 436ca57ab54SBram Moolenaar \ 'Tab page 2', 4374945219bSBram Moolenaar \ '> Xbar'], a, msg) 438ca57ab54SBram Moolenaar 439ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 440ca57ab54SBram Moolenaar let col = 2 44139f76c6aSBram Moolenaar redraw 442ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 443ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 444ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 445ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 446ca57ab54SBram Moolenaar \ '> Xfoo', 447ca57ab54SBram Moolenaar \ 'Tab page 2', 4484945219bSBram Moolenaar \ ' Xbar'], a, msg) 449ca57ab54SBram Moolenaar 450ca57ab54SBram Moolenaar let col = 9 451ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 452ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 453ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 454ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 455ca57ab54SBram Moolenaar \ ' Xfoo', 456ca57ab54SBram Moolenaar \ 'Tab page 2', 4574945219bSBram Moolenaar \ '> Xbar'], a, msg) 458ca57ab54SBram Moolenaar 459ca57ab54SBram Moolenaar %bwipe! 460ca57ab54SBram Moolenaar endfor 461ca57ab54SBram Moolenaar 462ca57ab54SBram Moolenaar let &mouse = save_mouse 463ca57ab54SBram Moolenaar let &term = save_term 464ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 46592fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 4663fb01a53SBram Moolenaarendfunc 46739f76c6aSBram Moolenaar 46892fd599eSBram Moolenaarfunc Test_term_mouse_click_X_to_close_tab() 46939f76c6aSBram Moolenaar let save_mouse = &mouse 47039f76c6aSBram Moolenaar let save_term = &term 47139f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 47292fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 47339f76c6aSBram Moolenaar set mouse=a term=xterm 47439f76c6aSBram Moolenaar let row = 1 47539f76c6aSBram Moolenaar let col = &columns 47639f76c6aSBram Moolenaar 477515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm 4782b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && col > 223 4792b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 48039f76c6aSBram Moolenaar continue 48139f76c6aSBram Moolenaar endif 4824945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4831ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 48439f76c6aSBram Moolenaar e Xtab1 48539f76c6aSBram Moolenaar tabnew Xtab2 48639f76c6aSBram Moolenaar tabnew Xtab3 48739f76c6aSBram Moolenaar tabn 2 48839f76c6aSBram Moolenaar 48939f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 49039f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 49139f76c6aSBram Moolenaar \ ' Xtab1', 49239f76c6aSBram Moolenaar \ 'Tab page 2', 49339f76c6aSBram Moolenaar \ '> Xtab2', 49439f76c6aSBram Moolenaar \ 'Tab page 3', 4954945219bSBram Moolenaar \ ' Xtab3'], a, msg) 49639f76c6aSBram Moolenaar 49739f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 49839f76c6aSBram Moolenaar redraw 49939f76c6aSBram Moolenaar call MouseLeftClick(row, col) 50039f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 50139f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 50239f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 50339f76c6aSBram Moolenaar \ ' Xtab1', 50439f76c6aSBram Moolenaar \ 'Tab page 2', 5054945219bSBram Moolenaar \ '> Xtab3'], a, msg) 50639f76c6aSBram Moolenaar 50739f76c6aSBram Moolenaar %bwipe! 50839f76c6aSBram Moolenaar endfor 50939f76c6aSBram Moolenaar 51039f76c6aSBram Moolenaar let &mouse = save_mouse 51139f76c6aSBram Moolenaar let &term = save_term 51239f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 51392fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 51439f76c6aSBram Moolenaarendfunc 515e3e3828fSBram Moolenaar 51692fd599eSBram Moolenaarfunc Test_term_mouse_drag_to_move_tab() 517e3e3828fSBram Moolenaar let save_mouse = &mouse 518e3e3828fSBram Moolenaar let save_term = &term 519e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 52092fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 521e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 522e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 523e3e3828fSBram Moolenaar let row = 1 524e3e3828fSBram Moolenaar 525515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 5264945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5271ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 528e3e3828fSBram Moolenaar e Xtab1 529e3e3828fSBram Moolenaar tabnew Xtab2 530e3e3828fSBram Moolenaar 531e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 532e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 533e3e3828fSBram Moolenaar \ ' Xtab1', 534e3e3828fSBram Moolenaar \ 'Tab page 2', 5354945219bSBram Moolenaar \ '> Xtab2'], a, msg) 536e3e3828fSBram Moolenaar redraw 537e3e3828fSBram Moolenaar 538e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 539e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 540e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 541e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 5424945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 543e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 544e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 545e3e3828fSBram Moolenaar endfor 546e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 547e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 548e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 549e3e3828fSBram Moolenaar \ '> Xtab2', 550e3e3828fSBram Moolenaar \ 'Tab page 2', 5514945219bSBram Moolenaar \ ' Xtab1'], a, msg) 552e3e3828fSBram Moolenaar 553f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 554f36a2c7eSBram Moolenaar " interpreted as unwanted double-click. 555f36a2c7eSBram Moolenaar call MouseLeftClick(row, 11) 556f36a2c7eSBram Moolenaar call MouseLeftRelease(row, 11) 557f36a2c7eSBram Moolenaar 558e3e3828fSBram Moolenaar %bwipe! 559e3e3828fSBram Moolenaar endfor 560e3e3828fSBram Moolenaar 561e3e3828fSBram Moolenaar let &mouse = save_mouse 562e3e3828fSBram Moolenaar let &term = save_term 563e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 56492fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 565e3e3828fSBram Moolenaar set mousetime& 566e3e3828fSBram Moolenaarendfunc 567e3e3828fSBram Moolenaar 56892fd599eSBram Moolenaarfunc Test_term_mouse_double_click_to_create_tab() 569e3e3828fSBram Moolenaar let save_mouse = &mouse 570e3e3828fSBram Moolenaar let save_term = &term 571e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 57292fd599eSBram Moolenaar call test_override('no_query_mouse', 1) 573e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 574e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 575f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 576e3e3828fSBram Moolenaar let row = 1 577e3e3828fSBram Moolenaar let col = 10 578e3e3828fSBram Moolenaar 579515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 5804945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 5811ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 582e3e3828fSBram Moolenaar e Xtab1 583e3e3828fSBram Moolenaar tabnew Xtab2 584e3e3828fSBram Moolenaar 585e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 586e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 587e3e3828fSBram Moolenaar \ ' Xtab1', 588e3e3828fSBram Moolenaar \ 'Tab page 2', 5894945219bSBram Moolenaar \ '> Xtab2'], a, msg) 590e3e3828fSBram Moolenaar 591e3e3828fSBram Moolenaar redraw 592e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 593e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 594e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 5954945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 596e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 597e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 5984945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 599e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 600e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 601e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 602e3e3828fSBram Moolenaar \ ' Xtab1', 603e3e3828fSBram Moolenaar \ 'Tab page 2', 604e3e3828fSBram Moolenaar \ '> [No Name]', 605e3e3828fSBram Moolenaar \ 'Tab page 3', 6064945219bSBram Moolenaar \ ' Xtab2'], a, msg) 607e3e3828fSBram Moolenaar 608f36a2c7eSBram Moolenaar " Click elsewhere so that click in next iteration is not 609f36a2c7eSBram Moolenaar " interpreted as unwanted double click. 610f36a2c7eSBram Moolenaar call MouseLeftClick(row, col + 1) 611f36a2c7eSBram Moolenaar call MouseLeftRelease(row, col + 1) 612f36a2c7eSBram Moolenaar 613e3e3828fSBram Moolenaar %bwipe! 614e3e3828fSBram Moolenaar endfor 615e3e3828fSBram Moolenaar 616e3e3828fSBram Moolenaar let &mouse = save_mouse 617e3e3828fSBram Moolenaar let &term = save_term 618e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 61992fd599eSBram Moolenaar call test_override('no_query_mouse', 0) 620e3e3828fSBram Moolenaar set mousetime& 621e3e3828fSBram Moolenaarendfunc 622696d6377SBram Moolenaar 623f36a2c7eSBram Moolenaar" Test double/triple/quadruple click in normal mode to visually select. 624f36a2c7eSBram Moolenaarfunc Test_term_mouse_multiple_clicks_to_visually_select() 625f36a2c7eSBram Moolenaar let save_mouse = &mouse 626f36a2c7eSBram Moolenaar let save_term = &term 627f36a2c7eSBram Moolenaar let save_ttymouse = &ttymouse 628f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 1) 629f36a2c7eSBram Moolenaar set mouse=a term=xterm mousetime=200 630f36a2c7eSBram Moolenaar new 631f36a2c7eSBram Moolenaar 632515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 633f36a2c7eSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 634f36a2c7eSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 635f36a2c7eSBram Moolenaar call setline(1, ['foo [foo bar] foo', 'foo']) 636f36a2c7eSBram Moolenaar 637f36a2c7eSBram Moolenaar " Double-click on word should visually select the word. 638f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 639f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 640f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 641f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 642f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 643f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 644f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 645f36a2c7eSBram Moolenaar norm! r1 646f36a2c7eSBram Moolenaar call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg) 647f36a2c7eSBram Moolenaar 648f36a2c7eSBram Moolenaar " Double-click on opening square bracket should visually 649f36a2c7eSBram Moolenaar " select the whole [foo bar]. 650f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 651f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 652f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 653f36a2c7eSBram Moolenaar call MouseLeftClick(1, 5) 654f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 655f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 5) 656f36a2c7eSBram Moolenaar call assert_equal('v', mode(), msg) 657f36a2c7eSBram Moolenaar norm! r2 658f36a2c7eSBram Moolenaar call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg) 659f36a2c7eSBram Moolenaar 660f36a2c7eSBram Moolenaar " Triple-click should visually select the whole line. 661f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 662f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 663f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 664f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 665f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 666f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 667f36a2c7eSBram Moolenaar call MouseLeftClick(1, 3) 668f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 669f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 3) 670f36a2c7eSBram Moolenaar call assert_equal('V', mode(), msg) 671f36a2c7eSBram Moolenaar norm! r3 672f36a2c7eSBram Moolenaar call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg) 673f36a2c7eSBram Moolenaar 674f36a2c7eSBram Moolenaar " Quadruple-click should start visual block select. 675f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 676f36a2c7eSBram Moolenaar call assert_equal(0, getcharmod(), msg) 677f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 678f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 679f36a2c7eSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 680f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 681f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 682f36a2c7eSBram Moolenaar call assert_equal(64, getcharmod(), msg) " triple-click 683f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 684f36a2c7eSBram Moolenaar call MouseLeftClick(1, 2) 685f36a2c7eSBram Moolenaar call assert_equal(96, getcharmod(), msg) " quadruple-click 686f36a2c7eSBram Moolenaar call MouseLeftRelease(1, 2) 687f36a2c7eSBram Moolenaar call assert_equal("\<c-v>", mode(), msg) 688f36a2c7eSBram Moolenaar norm! r4 689f36a2c7eSBram Moolenaar call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg) 690f36a2c7eSBram Moolenaar endfor 691f36a2c7eSBram Moolenaar 692f36a2c7eSBram Moolenaar let &mouse = save_mouse 693f36a2c7eSBram Moolenaar let &term = save_term 694f36a2c7eSBram Moolenaar let &ttymouse = save_ttymouse 695f36a2c7eSBram Moolenaar set mousetime& 696f36a2c7eSBram Moolenaar call test_override('no_query_mouse', 0) 697f36a2c7eSBram Moolenaar bwipe! 698f36a2c7eSBram Moolenaarendfunc 699f36a2c7eSBram Moolenaar 700696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 701696d6377SBram Moolenaar new 702696d6377SBram Moolenaar let save_mouse = &mouse 703696d6377SBram Moolenaar let save_term = &term 704696d6377SBram Moolenaar let save_ttymouse = &ttymouse 705696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 7062b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 707696d6377SBram Moolenaar 708696d6377SBram Moolenaar " Create 2 nested folds. 709696d6377SBram Moolenaar call setline(1, range(1, 7)) 710696d6377SBram Moolenaar 2,6fold 711696d6377SBram Moolenaar norm! zR 712696d6377SBram Moolenaar 4,5fold 713696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 714696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 715696d6377SBram Moolenaar 716696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 717696d6377SBram Moolenaar redraw 718696d6377SBram Moolenaar let row = 4 719696d6377SBram Moolenaar let col = 2 720696d6377SBram Moolenaar call MouseLeftClick(row, col) 721696d6377SBram Moolenaar call MouseLeftRelease(row, col) 722696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 723696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 724696d6377SBram Moolenaar 725696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 726696d6377SBram Moolenaar redraw 727696d6377SBram Moolenaar let row = 2 728696d6377SBram Moolenaar let col = 1 729696d6377SBram Moolenaar call MouseLeftClick(row, col) 730696d6377SBram Moolenaar call MouseLeftRelease(row, col) 731696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 732696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 733696d6377SBram Moolenaar norm! zR 734696d6377SBram Moolenaar 735696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 736696d6377SBram Moolenaar redraw 737696d6377SBram Moolenaar let row = 5 738696d6377SBram Moolenaar let col = 2 739696d6377SBram Moolenaar call MouseLeftClick(row, col) 740696d6377SBram Moolenaar call MouseLeftRelease(row, col) 741696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 742696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 743696d6377SBram Moolenaar 744696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 745696d6377SBram Moolenaar let &ttymouse = save_ttymouse 746696d6377SBram Moolenaar let &term = save_term 747696d6377SBram Moolenaar let &mouse = save_mouse 748696d6377SBram Moolenaar bwipe! 749696d6377SBram Moolenaarendfunc 75066761db1SBram Moolenaar 751f19f8d1aSBram Moolenaar" Left or right click in Ex command line sets position of the cursor. 752f19f8d1aSBram Moolenaarfunc Test_term_mouse_click_in_cmdline_to_set_pos() 753f19f8d1aSBram Moolenaar let save_mouse = &mouse 754f19f8d1aSBram Moolenaar let save_term = &term 755f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 756f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 757f19f8d1aSBram Moolenaar set mouse=a term=xterm 758f19f8d1aSBram Moolenaar let row = &lines 759f19f8d1aSBram Moolenaar 760515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 761ab505b1aSBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 762ab505b1aSBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 763f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 764f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 765f19f8d1aSBram Moolenaar 766ab505b1aSBram Moolenaar 767f19f8d1aSBram Moolenaar call feedkeys(':"3456789' 768f19f8d1aSBram Moolenaar \ .. MouseLeftClickCode(row, 7) 769f19f8d1aSBram Moolenaar \ .. MouseLeftReleaseCode(row, 7) .. 'L' 770f19f8d1aSBram Moolenaar \ .. MouseRightClickCode(row, 4) 771f19f8d1aSBram Moolenaar \ .. MouseRightReleaseCode(row, 4) .. 'R' 772f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 773f19f8d1aSBram Moolenaar call assert_equal('"3R456L789', @:, msg) 774ab505b1aSBram Moolenaar endif 775f19f8d1aSBram Moolenaar endfor 776f19f8d1aSBram Moolenaar 777f19f8d1aSBram Moolenaar let &mouse = save_mouse 778f19f8d1aSBram Moolenaar let &term = save_term 779f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 780f19f8d1aSBram Moolenaar set mousetime& 781f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 782f19f8d1aSBram Moolenaarendfunc 783f19f8d1aSBram Moolenaar 784f19f8d1aSBram Moolenaar" Middle click in command line pastes at position of cursor. 785f19f8d1aSBram Moolenaarfunc Test_term_mouse_middle_click_in_cmdline_to_paste() 786f19f8d1aSBram Moolenaar CheckFeature clipboard_working 787f19f8d1aSBram Moolenaar let save_mouse = &mouse 788f19f8d1aSBram Moolenaar let save_term = &term 789f19f8d1aSBram Moolenaar let save_ttymouse = &ttymouse 790f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 1) 791f19f8d1aSBram Moolenaar set mouse=a term=xterm 792f19f8d1aSBram Moolenaar let row = &lines 793f19f8d1aSBram Moolenaar " Column values does not matter, paste is done at position of cursor. 794f19f8d1aSBram Moolenaar let col = 1 795f19f8d1aSBram Moolenaar let @* = 'paste' 796f19f8d1aSBram Moolenaar 797515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec 798f19f8d1aSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 799f19f8d1aSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 800f19f8d1aSBram Moolenaar 801f19f8d1aSBram Moolenaar call feedkeys(":\"->" 802f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 803f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 804f19f8d1aSBram Moolenaar \ .. "<-" 805f19f8d1aSBram Moolenaar \ .. MouseMiddleReleaseCode(row, col) 806f19f8d1aSBram Moolenaar \ .. MouseMiddleClickCode(row, col) 807f19f8d1aSBram Moolenaar \ .. "\<CR>", 'Lx!') 808f19f8d1aSBram Moolenaar call assert_equal('"->paste<-paste', @:, msg) 809f19f8d1aSBram Moolenaar endfor 810f19f8d1aSBram Moolenaar 811f19f8d1aSBram Moolenaar let &mouse = save_mouse 812f19f8d1aSBram Moolenaar let &term = save_term 813f19f8d1aSBram Moolenaar let &ttymouse = save_ttymouse 814f19f8d1aSBram Moolenaar let @* = '' 815f19f8d1aSBram Moolenaar call test_override('no_query_mouse', 0) 816f19f8d1aSBram Moolenaarendfunc 817f19f8d1aSBram Moolenaar 8180eabd4dcSBram Moolenaar" Test for displaying the popup menu using the right mouse click 8190eabd4dcSBram Moolenaarfunc Test_mouse_popup_menu() 8200eabd4dcSBram Moolenaar CheckFeature menu 8210eabd4dcSBram Moolenaar new 8220eabd4dcSBram Moolenaar call setline(1, 'popup menu test') 8230eabd4dcSBram Moolenaar let save_mouse = &mouse 8240eabd4dcSBram Moolenaar let save_term = &term 8250eabd4dcSBram Moolenaar let save_ttymouse = &ttymouse 8260eabd4dcSBram Moolenaar let save_mousemodel = &mousemodel 8270eabd4dcSBram Moolenaar call test_override('no_query_mouse', 1) 8280eabd4dcSBram Moolenaar set mouse=a term=xterm mousemodel=popup 8290eabd4dcSBram Moolenaar 8300eabd4dcSBram Moolenaar menu PopUp.foo :let g:menustr = 'foo'<CR> 8310eabd4dcSBram Moolenaar menu PopUp.bar :let g:menustr = 'bar'<CR> 8320eabd4dcSBram Moolenaar menu PopUp.baz :let g:menustr = 'baz'<CR> 8330eabd4dcSBram Moolenaar 834515545e1SBram Moolenaar for ttymouse_val in g:Ttymouse_values 8350eabd4dcSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 8360eabd4dcSBram Moolenaar let g:menustr = '' 8370eabd4dcSBram Moolenaar call feedkeys(MouseRightClickCode(1, 4) 8380eabd4dcSBram Moolenaar \ .. MouseRightReleaseCode(1, 4) .. "\<Down>\<Down>\<CR>", "x") 8390eabd4dcSBram Moolenaar call assert_equal('bar', g:menustr) 8400eabd4dcSBram Moolenaar endfor 8410eabd4dcSBram Moolenaar 8420eabd4dcSBram Moolenaar unmenu PopUp 8430eabd4dcSBram Moolenaar let &mouse = save_mouse 8440eabd4dcSBram Moolenaar let &term = save_term 8450eabd4dcSBram Moolenaar let &ttymouse = save_ttymouse 8460eabd4dcSBram Moolenaar let &mousemodel = save_mousemodel 8470eabd4dcSBram Moolenaar call test_override('no_query_mouse', 0) 8480eabd4dcSBram Moolenaar close! 8490eabd4dcSBram Moolenaarendfunc 8500eabd4dcSBram Moolenaar 85166761db1SBram Moolenaar" This only checks if the sequence is recognized. 85266761db1SBram Moolenaarfunc Test_term_rgb_response() 85366761db1SBram Moolenaar set t_RF=x 85466761db1SBram Moolenaar set t_RB=y 85566761db1SBram Moolenaar 85666761db1SBram Moolenaar " response to t_RF, 4 digits 85766761db1SBram Moolenaar let red = 0x12 85866761db1SBram Moolenaar let green = 0x34 85966761db1SBram Moolenaar let blue = 0x56 86066761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 86166761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 86266761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 86366761db1SBram Moolenaar 86466761db1SBram Moolenaar " response to t_RF, 2 digits 86566761db1SBram Moolenaar let red = 0x78 86666761db1SBram Moolenaar let green = 0x9a 86766761db1SBram Moolenaar let blue = 0xbc 86866761db1SBram Moolenaar let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue) 86966761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 87066761db1SBram Moolenaar call assert_equal(seq, v:termrfgresp) 87166761db1SBram Moolenaar 87232e19770SBram Moolenaar " response to t_RB, 4 digits, dark 87332e19770SBram Moolenaar set background=light 874ce90e36fSBram Moolenaar eval 'background'->test_option_not_set() 87532e19770SBram Moolenaar let red = 0x29 87632e19770SBram Moolenaar let green = 0x4a 87732e19770SBram Moolenaar let blue = 0x6b 87832e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 87932e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 88032e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 88132e19770SBram Moolenaar call assert_equal('dark', &background) 88232e19770SBram Moolenaar 88332e19770SBram Moolenaar " response to t_RB, 4 digits, light 88432e19770SBram Moolenaar set background=dark 88532e19770SBram Moolenaar call test_option_not_set('background') 88632e19770SBram Moolenaar let red = 0x81 88732e19770SBram Moolenaar let green = 0x63 88866761db1SBram Moolenaar let blue = 0x65 88966761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue) 89066761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 89166761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 89232e19770SBram Moolenaar call assert_equal('light', &background) 89366761db1SBram Moolenaar 89432e19770SBram Moolenaar " response to t_RB, 2 digits, dark 89532e19770SBram Moolenaar set background=light 89632e19770SBram Moolenaar call test_option_not_set('background') 89732e19770SBram Moolenaar let red = 0x47 89832e19770SBram Moolenaar let green = 0x59 89932e19770SBram Moolenaar let blue = 0x5b 90066761db1SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 90166761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 90266761db1SBram Moolenaar call assert_equal(seq, v:termrbgresp) 90332e19770SBram Moolenaar call assert_equal('dark', &background) 90432e19770SBram Moolenaar 90532e19770SBram Moolenaar " response to t_RB, 2 digits, light 90632e19770SBram Moolenaar set background=dark 90732e19770SBram Moolenaar call test_option_not_set('background') 90832e19770SBram Moolenaar let red = 0x83 90932e19770SBram Moolenaar let green = 0xa4 91032e19770SBram Moolenaar let blue = 0xc2 91132e19770SBram Moolenaar let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue) 91232e19770SBram Moolenaar call feedkeys(seq, 'Lx!') 91332e19770SBram Moolenaar call assert_equal(seq, v:termrbgresp) 91432e19770SBram Moolenaar call assert_equal('light', &background) 91566761db1SBram Moolenaar 91666761db1SBram Moolenaar set t_RF= t_RB= 91766761db1SBram Moolenaarendfunc 91866761db1SBram Moolenaar 91966761db1SBram Moolenaar" This only checks if the sequence is recognized. 9201a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 9211a4cbb19SBram Moolenaar" properties. 9221a4cbb19SBram Moolenaarfunc Test_xx01_term_style_response() 92366761db1SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 92466761db1SBram Moolenaar set t_RV=x 9250c0eddd3SBram Moolenaar call test_override('term_props', 1) 92666761db1SBram Moolenaar 92766761db1SBram Moolenaar " send the termresponse to trigger requesting the XT codes 92866761db1SBram Moolenaar let seq = "\<Esc>[>41;337;0c" 92966761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 93066761db1SBram Moolenaar call assert_equal(seq, v:termresponse) 93166761db1SBram Moolenaar 93266761db1SBram Moolenaar let seq = "\<Esc>P1$r2 q\<Esc>\\" 93366761db1SBram Moolenaar call feedkeys(seq, 'Lx!') 93466761db1SBram Moolenaar call assert_equal(seq, v:termstyleresp) 93566761db1SBram Moolenaar 9360c0eddd3SBram Moolenaar call assert_equal(#{ 9370c0eddd3SBram Moolenaar \ cursor_style: 'u', 9380c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 9390c0eddd3SBram Moolenaar \ underline_rgb: 'u', 9400c0eddd3SBram Moolenaar \ mouse: 's' 9410c0eddd3SBram Moolenaar \ }, terminalprops()) 9420c0eddd3SBram Moolenaar 94366761db1SBram Moolenaar set t_RV= 9440c0eddd3SBram Moolenaar call test_override('term_props', 0) 94566761db1SBram Moolenaarendfunc 946de6dbb45SBram Moolenaar 94789577b3bSBram Moolenaar" This checks the iTerm2 version response. 94889577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 94989577b3bSBram Moolenaar" properties. 95089577b3bSBram Moolenaarfunc Test_xx02_iTerm2_response() 95189577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 95289577b3bSBram Moolenaar set t_RV=x 9530c0eddd3SBram Moolenaar call test_override('term_props', 1) 95489577b3bSBram Moolenaar 95589577b3bSBram Moolenaar " Old versions of iTerm2 used a different style term response. 95689577b3bSBram Moolenaar set ttymouse=xterm 95789577b3bSBram Moolenaar call test_option_not_set('ttymouse') 95889577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;c" 95989577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 96089577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 96189577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 96289577b3bSBram Moolenaar 96389577b3bSBram Moolenaar set ttymouse=xterm 96489577b3bSBram Moolenaar call test_option_not_set('ttymouse') 96589577b3bSBram Moolenaar let seq = "\<Esc>[>0;95;0c" 96689577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 96789577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 96889577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 96989577b3bSBram Moolenaar 9700c0eddd3SBram Moolenaar call assert_equal(#{ 9710c0eddd3SBram Moolenaar \ cursor_style: 'n', 9720c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 9730c0eddd3SBram Moolenaar \ underline_rgb: 'u', 9740c0eddd3SBram Moolenaar \ mouse: 's' 9750c0eddd3SBram Moolenaar \ }, terminalprops()) 9760c0eddd3SBram Moolenaar 97789577b3bSBram Moolenaar set t_RV= 9780c0eddd3SBram Moolenaar call test_override('term_props', 0) 97989577b3bSBram Moolenaarendfunc 98089577b3bSBram Moolenaar 9811a4cbb19SBram Moolenaar" This checks the libvterm version response. 9821a4cbb19SBram Moolenaar" This must be after other tests, because it has side effects to xterm 9831a4cbb19SBram Moolenaar" properties. 98489577b3bSBram Moolenaarfunc Test_xx03_libvterm_response() 9851a4cbb19SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 9861a4cbb19SBram Moolenaar set t_RV=x 9870c0eddd3SBram Moolenaar call test_override('term_props', 1) 98803b00476SBram Moolenaar 9891a4cbb19SBram Moolenaar set ttymouse=xterm 9901a4cbb19SBram Moolenaar call test_option_not_set('ttymouse') 9911a4cbb19SBram Moolenaar let seq = "\<Esc>[>0;100;0c" 9921a4cbb19SBram Moolenaar call feedkeys(seq, 'Lx!') 9931a4cbb19SBram Moolenaar call assert_equal(seq, v:termresponse) 9941a4cbb19SBram Moolenaar call assert_equal('sgr', &ttymouse) 9951a4cbb19SBram Moolenaar 9960c0eddd3SBram Moolenaar call assert_equal(#{ 9970c0eddd3SBram Moolenaar \ cursor_style: 'n', 9980c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 9990c0eddd3SBram Moolenaar \ underline_rgb: 'u', 10000c0eddd3SBram Moolenaar \ mouse: 's' 10010c0eddd3SBram Moolenaar \ }, terminalprops()) 10020c0eddd3SBram Moolenaar 10031a4cbb19SBram Moolenaar set t_RV= 10040c0eddd3SBram Moolenaar call test_override('term_props', 0) 10051a4cbb19SBram Moolenaarendfunc 10061a4cbb19SBram Moolenaar 100789577b3bSBram Moolenaar" This checks the Mac Terminal.app version response. 100889577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 100989577b3bSBram Moolenaar" properties. 101089577b3bSBram Moolenaarfunc Test_xx04_Mac_Terminal_response() 101189577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 101289577b3bSBram Moolenaar set t_RV=x 10130c0eddd3SBram Moolenaar call test_override('term_props', 1) 101489577b3bSBram Moolenaar 101589577b3bSBram Moolenaar set ttymouse=xterm 1016*8dff4cbfSBram Moolenaar " t_8u is not reset 1017*8dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 101889577b3bSBram Moolenaar call test_option_not_set('ttymouse') 101989577b3bSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 102089577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 102189577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 102289577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 102389577b3bSBram Moolenaar 10240c0eddd3SBram Moolenaar call assert_equal(#{ 10250c0eddd3SBram Moolenaar \ cursor_style: 'n', 10260c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 10270c0eddd3SBram Moolenaar \ underline_rgb: 'y', 10280c0eddd3SBram Moolenaar \ mouse: 's' 10290c0eddd3SBram Moolenaar \ }, terminalprops()) 1030*8dff4cbfSBram Moolenaar call assert_equal("\<Esc>[58;2;%lu;%lu;%lum", &t_8u) 10310c0eddd3SBram Moolenaar 103289577b3bSBram Moolenaar " Reset is_not_xterm and is_mac_terminal. 103389577b3bSBram Moolenaar set t_RV= 103489577b3bSBram Moolenaar set term=xterm 103589577b3bSBram Moolenaar set t_RV=x 10360c0eddd3SBram Moolenaar call test_override('term_props', 0) 103789577b3bSBram Moolenaarendfunc 103889577b3bSBram Moolenaar 103989577b3bSBram Moolenaar" This checks the mintty version response. 104089577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 104189577b3bSBram Moolenaar" properties. 104289577b3bSBram Moolenaarfunc Test_xx05_mintty_response() 104389577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 104489577b3bSBram Moolenaar set t_RV=x 10450c0eddd3SBram Moolenaar call test_override('term_props', 1) 104689577b3bSBram Moolenaar 104789577b3bSBram Moolenaar set ttymouse=xterm 104889577b3bSBram Moolenaar call test_option_not_set('ttymouse') 104989577b3bSBram Moolenaar let seq = "\<Esc>[>77;20905;0c" 105089577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 105189577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 105289577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 105389577b3bSBram Moolenaar 10540c0eddd3SBram Moolenaar call assert_equal(#{ 10550c0eddd3SBram Moolenaar \ cursor_style: 'n', 10560c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 10570c0eddd3SBram Moolenaar \ underline_rgb: 'y', 10580c0eddd3SBram Moolenaar \ mouse: 's' 10590c0eddd3SBram Moolenaar \ }, terminalprops()) 10600c0eddd3SBram Moolenaar 106189577b3bSBram Moolenaar set t_RV= 10620c0eddd3SBram Moolenaar call test_override('term_props', 0) 106389577b3bSBram Moolenaarendfunc 106489577b3bSBram Moolenaar 106589577b3bSBram Moolenaar" This checks the screen version response. 106689577b3bSBram Moolenaar" This must be after other tests, because it has side effects to xterm 106789577b3bSBram Moolenaar" properties. 106889577b3bSBram Moolenaarfunc Test_xx06_screen_response() 106989577b3bSBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 107089577b3bSBram Moolenaar set t_RV=x 10710c0eddd3SBram Moolenaar call test_override('term_props', 1) 107289577b3bSBram Moolenaar 107389577b3bSBram Moolenaar " Old versions of screen don't support SGR mouse mode. 107489577b3bSBram Moolenaar set ttymouse=xterm 107589577b3bSBram Moolenaar call test_option_not_set('ttymouse') 107689577b3bSBram Moolenaar let seq = "\<Esc>[>83;40500;0c" 107789577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 107889577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 107989577b3bSBram Moolenaar call assert_equal('xterm', &ttymouse) 108089577b3bSBram Moolenaar 108189577b3bSBram Moolenaar " screen supports SGR mouse mode starting in version 4.7. 108289577b3bSBram Moolenaar set ttymouse=xterm 108389577b3bSBram Moolenaar call test_option_not_set('ttymouse') 108489577b3bSBram Moolenaar let seq = "\<Esc>[>83;40700;0c" 108589577b3bSBram Moolenaar call feedkeys(seq, 'Lx!') 108689577b3bSBram Moolenaar call assert_equal(seq, v:termresponse) 108789577b3bSBram Moolenaar call assert_equal('sgr', &ttymouse) 108889577b3bSBram Moolenaar 10890c0eddd3SBram Moolenaar call assert_equal(#{ 10900c0eddd3SBram Moolenaar \ cursor_style: 'n', 10910c0eddd3SBram Moolenaar \ cursor_blink_mode: 'n', 10920c0eddd3SBram Moolenaar \ underline_rgb: 'y', 10930c0eddd3SBram Moolenaar \ mouse: 's' 10940c0eddd3SBram Moolenaar \ }, terminalprops()) 10950c0eddd3SBram Moolenaar 109689577b3bSBram Moolenaar set t_RV= 10970c0eddd3SBram Moolenaar call test_override('term_props', 0) 109889577b3bSBram Moolenaarendfunc 109989577b3bSBram Moolenaar 110003b00476SBram Moolenaar" This checks the xterm version response. 110103b00476SBram Moolenaar" This must be after other tests, because it has side effects to xterm 110203b00476SBram Moolenaar" properties. 110389577b3bSBram Moolenaarfunc Test_xx07_xterm_response() 110403b00476SBram Moolenaar " Termresponse is only parsed when t_RV is not empty. 110503b00476SBram Moolenaar set t_RV=x 11060c0eddd3SBram Moolenaar call test_override('term_props', 1) 110703b00476SBram Moolenaar 11083cea8a9aSBram Moolenaar " Do Terminal.app first to check that is_mac_terminal is reset. 11093cea8a9aSBram Moolenaar set ttymouse=xterm 11103cea8a9aSBram Moolenaar call test_option_not_set('ttymouse') 11113cea8a9aSBram Moolenaar let seq = "\<Esc>[>1;95;0c" 11123cea8a9aSBram Moolenaar call feedkeys(seq, 'Lx!') 11133cea8a9aSBram Moolenaar call assert_equal(seq, v:termresponse) 11143cea8a9aSBram Moolenaar call assert_equal('sgr', &ttymouse) 11153cea8a9aSBram Moolenaar 111603b00476SBram Moolenaar " xterm < 95: "xterm" (actually unmodified) 11173cea8a9aSBram Moolenaar set t_RV= 11183cea8a9aSBram Moolenaar set term=xterm 11193cea8a9aSBram Moolenaar set t_RV=x 112003b00476SBram Moolenaar set ttymouse=xterm 112103b00476SBram Moolenaar call test_option_not_set('ttymouse') 112203b00476SBram Moolenaar let seq = "\<Esc>[>0;94;0c" 112303b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 112403b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 112503b00476SBram Moolenaar call assert_equal('xterm', &ttymouse) 112603b00476SBram Moolenaar 11270c0eddd3SBram Moolenaar call assert_equal(#{ 11280c0eddd3SBram Moolenaar \ cursor_style: 'n', 11290c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 11300c0eddd3SBram Moolenaar \ underline_rgb: 'y', 11310c0eddd3SBram Moolenaar \ mouse: 'u' 11320c0eddd3SBram Moolenaar \ }, terminalprops()) 11330c0eddd3SBram Moolenaar 113403b00476SBram Moolenaar " xterm >= 95 < 277 "xterm2" 113503b00476SBram Moolenaar set ttymouse=xterm 113603b00476SBram Moolenaar call test_option_not_set('ttymouse') 113703b00476SBram Moolenaar let seq = "\<Esc>[>0;267;0c" 113803b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 113903b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 114003b00476SBram Moolenaar call assert_equal('xterm2', &ttymouse) 114103b00476SBram Moolenaar 11420c0eddd3SBram Moolenaar call assert_equal(#{ 11430c0eddd3SBram Moolenaar \ cursor_style: 'n', 11440c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 11450c0eddd3SBram Moolenaar \ underline_rgb: 'u', 11460c0eddd3SBram Moolenaar \ mouse: '2' 11470c0eddd3SBram Moolenaar \ }, terminalprops()) 11480c0eddd3SBram Moolenaar 114903b00476SBram Moolenaar " xterm >= 277: "sgr" 115003b00476SBram Moolenaar set ttymouse=xterm 115103b00476SBram Moolenaar call test_option_not_set('ttymouse') 115203b00476SBram Moolenaar let seq = "\<Esc>[>0;277;0c" 115303b00476SBram Moolenaar call feedkeys(seq, 'Lx!') 115403b00476SBram Moolenaar call assert_equal(seq, v:termresponse) 115503b00476SBram Moolenaar call assert_equal('sgr', &ttymouse) 115603b00476SBram Moolenaar 11570c0eddd3SBram Moolenaar call assert_equal(#{ 11580c0eddd3SBram Moolenaar \ cursor_style: 'n', 11590c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 11600c0eddd3SBram Moolenaar \ underline_rgb: 'u', 11610c0eddd3SBram Moolenaar \ mouse: 's' 11620c0eddd3SBram Moolenaar \ }, terminalprops()) 11630c0eddd3SBram Moolenaar 1164*8dff4cbfSBram Moolenaar " xterm >= 279: "sgr" and cursor_style not reset; also check t_8u reset 11650c0eddd3SBram Moolenaar set ttymouse=xterm 11660c0eddd3SBram Moolenaar call test_option_not_set('ttymouse') 1167*8dff4cbfSBram Moolenaar let &t_8u = "\<Esc>[58;2;%lu;%lu;%lum" 11680c0eddd3SBram Moolenaar let seq = "\<Esc>[>0;279;0c" 11690c0eddd3SBram Moolenaar call feedkeys(seq, 'Lx!') 11700c0eddd3SBram Moolenaar call assert_equal(seq, v:termresponse) 11710c0eddd3SBram Moolenaar call assert_equal('sgr', &ttymouse) 11720c0eddd3SBram Moolenaar 11730c0eddd3SBram Moolenaar call assert_equal(#{ 11740c0eddd3SBram Moolenaar \ cursor_style: 'u', 11750c0eddd3SBram Moolenaar \ cursor_blink_mode: 'u', 11760c0eddd3SBram Moolenaar \ underline_rgb: 'u', 11770c0eddd3SBram Moolenaar \ mouse: 's' 11780c0eddd3SBram Moolenaar \ }, terminalprops()) 1179*8dff4cbfSBram Moolenaar call assert_equal('', &t_8u) 11800c0eddd3SBram Moolenaar 118103b00476SBram Moolenaar set t_RV= 11820c0eddd3SBram Moolenaar call test_override('term_props', 0) 118303b00476SBram Moolenaarendfunc 118403b00476SBram Moolenaar 1185de6dbb45SBram Moolenaarfunc Test_get_termcode() 1186eb66328bSBram Moolenaar try 1187de6dbb45SBram Moolenaar let k1 = &t_k1 1188eb66328bSBram Moolenaar catch /E113/ 1189eb66328bSBram Moolenaar throw 'Skipped: Unable to query termcodes' 1190eb66328bSBram Moolenaar endtry 1191de6dbb45SBram Moolenaar set t_k1= 1192de6dbb45SBram Moolenaar set t_k1& 1193de6dbb45SBram Moolenaar call assert_equal(k1, &t_k1) 11949aeb3363SBram Moolenaar 11959aeb3363SBram Moolenaar " use external termcap first 11969aeb3363SBram Moolenaar set nottybuiltin 11979aeb3363SBram Moolenaar set t_k1= 11989aeb3363SBram Moolenaar set t_k1& 11999aeb3363SBram Moolenaar " when using external termcap may get something else, but it must not be 12009aeb3363SBram Moolenaar " empty, since we would fallback to the builtin one. 12019aeb3363SBram Moolenaar call assert_notequal('', &t_k1) 12029aeb3363SBram Moolenaar 12039aeb3363SBram Moolenaar if &term =~ 'xterm' 12049aeb3363SBram Moolenaar " use internal termcap first 12059aeb3363SBram Moolenaar let term_save = &term 12069aeb3363SBram Moolenaar let &term = 'builtin_' .. &term 12079aeb3363SBram Moolenaar set t_k1= 12089aeb3363SBram Moolenaar set t_k1& 12099aeb3363SBram Moolenaar call assert_equal(k1, &t_k1) 12109aeb3363SBram Moolenaar let &term = term_save 12119aeb3363SBram Moolenaar endif 12129aeb3363SBram Moolenaar 12139aeb3363SBram Moolenaar set ttybuiltin 1214de6dbb45SBram Moolenaarendfunc 121518a79a68SBram Moolenaar 121618a79a68SBram Moolenaarfunc GetEscCodeCSI27(key, modifier) 121718a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 121818a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 121918a79a68SBram Moolenaar return "\<Esc>[27;" .. mod .. ';' .. key .. '~' 122018a79a68SBram Moolenaarendfunc 122118a79a68SBram Moolenaar 122218a79a68SBram Moolenaarfunc GetEscCodeCSIu(key, modifier) 122318a79a68SBram Moolenaar let key = printf("%d", char2nr(a:key)) 122418a79a68SBram Moolenaar let mod = printf("%d", a:modifier) 122518a79a68SBram Moolenaar return "\<Esc>[" .. key .. ';' .. mod .. 'u' 122618a79a68SBram Moolenaarendfunc 122718a79a68SBram Moolenaar 122818a79a68SBram Moolenaar" This checks the CSI sequences when in modifyOtherKeys mode. 122918a79a68SBram Moolenaar" The mode doesn't need to be enabled, the codes are always detected. 123018a79a68SBram Moolenaarfunc RunTest_modifyOtherKeys(func) 123118a79a68SBram Moolenaar new 1232459fd785SBram Moolenaar set timeoutlen=10 123318a79a68SBram Moolenaar 1234f19f8d1aSBram Moolenaar " Shift-X is sent as 'X' with the shift modifier 123518a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 2) .. "\<Esc>", 'Lx!') 123618a79a68SBram Moolenaar call assert_equal('X', getline(1)) 123718a79a68SBram Moolenaar 123818a79a68SBram Moolenaar " Ctrl-i is Tab 123918a79a68SBram Moolenaar call setline(1, '') 124018a79a68SBram Moolenaar call feedkeys('a' .. a:func('i', 5) .. "\<Esc>", 'Lx!') 124118a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 124218a79a68SBram Moolenaar 124318a79a68SBram Moolenaar " Ctrl-I is also Tab 124418a79a68SBram Moolenaar call setline(1, '') 124518a79a68SBram Moolenaar call feedkeys('a' .. a:func('I', 5) .. "\<Esc>", 'Lx!') 124618a79a68SBram Moolenaar call assert_equal("\t", getline(1)) 124718a79a68SBram Moolenaar 124818a79a68SBram Moolenaar " Alt-x is ø 124918a79a68SBram Moolenaar call setline(1, '') 125018a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 3) .. "\<Esc>", 'Lx!') 125118a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 125218a79a68SBram Moolenaar 125318a79a68SBram Moolenaar " Meta-x is also ø 125418a79a68SBram Moolenaar call setline(1, '') 125518a79a68SBram Moolenaar call feedkeys('a' .. a:func('x', 9) .. "\<Esc>", 'Lx!') 125618a79a68SBram Moolenaar call assert_equal("ø", getline(1)) 125718a79a68SBram Moolenaar 125818a79a68SBram Moolenaar " Alt-X is Ø 125918a79a68SBram Moolenaar call setline(1, '') 126018a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 3) .. "\<Esc>", 'Lx!') 126118a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 126218a79a68SBram Moolenaar 126318a79a68SBram Moolenaar " Meta-X is ø 126418a79a68SBram Moolenaar call setline(1, '') 126518a79a68SBram Moolenaar call feedkeys('a' .. a:func('X', 9) .. "\<Esc>", 'Lx!') 126618a79a68SBram Moolenaar call assert_equal("Ø", getline(1)) 126718a79a68SBram Moolenaar 1268828ffd59SBram Moolenaar " Ctrl-6 is Ctrl-^ 1269828ffd59SBram Moolenaar split aaa 1270828ffd59SBram Moolenaar edit bbb 1271828ffd59SBram Moolenaar call feedkeys(a:func('6', 5), 'Lx!') 1272828ffd59SBram Moolenaar call assert_equal("aaa", bufname()) 1273828ffd59SBram Moolenaar bwipe aaa 1274828ffd59SBram Moolenaar bwipe bbb 1275828ffd59SBram Moolenaar 127618a79a68SBram Moolenaar bwipe! 127718a79a68SBram Moolenaar set timeoutlen& 127818a79a68SBram Moolenaarendfunc 127918a79a68SBram Moolenaar 1280459fd785SBram Moolenaarfunc Test_modifyOtherKeys_basic() 128118a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSI27')) 128218a79a68SBram Moolenaar call RunTest_modifyOtherKeys(function('GetEscCodeCSIu')) 128318a79a68SBram Moolenaarendfunc 1284d1e2f398SBram Moolenaar 128538571a04SBram Moolenaarfunc Test_modifyOtherKeys_no_mapping() 128638571a04SBram Moolenaar set timeoutlen=10 128738571a04SBram Moolenaar 128838571a04SBram Moolenaar let @a = 'aaa' 128938571a04SBram Moolenaar call feedkeys(":let x = '" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a'\<CR>", 'Lx!') 129038571a04SBram Moolenaar call assert_equal("let x = 'aaa'", @:) 129138571a04SBram Moolenaar 129238571a04SBram Moolenaar new 129338571a04SBram Moolenaar call feedkeys("a" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a\<Esc>", 'Lx!') 129438571a04SBram Moolenaar call assert_equal("aaa", getline(1)) 129538571a04SBram Moolenaar bwipe! 129638571a04SBram Moolenaar 129738571a04SBram Moolenaar new 129838571a04SBram Moolenaar call feedkeys("axx\<CR>yy" .. GetEscCodeCSI27('G', 5) .. GetEscCodeCSI27('K', 5) .. "a\<Esc>", 'Lx!') 129938571a04SBram Moolenaar call assert_equal("axx", getline(1)) 130038571a04SBram Moolenaar call assert_equal("yy", getline(2)) 130138571a04SBram Moolenaar bwipe! 130238571a04SBram Moolenaar 130338571a04SBram Moolenaar set timeoutlen& 130438571a04SBram Moolenaarendfunc 130538571a04SBram Moolenaar 1306d1e2f398SBram Moolenaarfunc RunTest_mapping_shift(key, func) 1307d1e2f398SBram Moolenaar call setline(1, '') 1308d1e2f398SBram Moolenaar if a:key == '|' 1309d1e2f398SBram Moolenaar exe 'inoremap \| xyz' 1310d1e2f398SBram Moolenaar else 1311d1e2f398SBram Moolenaar exe 'inoremap ' .. a:key .. ' xyz' 1312d1e2f398SBram Moolenaar endif 1313d1e2f398SBram Moolenaar call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!') 1314d1e2f398SBram Moolenaar call assert_equal("xyz", getline(1)) 1315d1e2f398SBram Moolenaar if a:key == '|' 1316d1e2f398SBram Moolenaar exe 'iunmap \|' 1317d1e2f398SBram Moolenaar else 1318d1e2f398SBram Moolenaar exe 'iunmap ' .. a:key 1319d1e2f398SBram Moolenaar endif 1320d1e2f398SBram Moolenaarendfunc 1321d1e2f398SBram Moolenaar 1322975a880aSBram Moolenaarfunc Test_modifyOtherKeys_mapped() 1323975a880aSBram Moolenaar set timeoutlen=10 1324975a880aSBram Moolenaar imap ' <C-W> 1325975a880aSBram Moolenaar imap <C-W><C-A> c-a 1326975a880aSBram Moolenaar call setline(1, '') 1327975a880aSBram Moolenaar 1328975a880aSBram Moolenaar " single quote is turned into single byte CTRL-W 1329975a880aSBram Moolenaar " CTRL-A is added with a separate modifier, and needs to be simplified before 1330975a880aSBram Moolenaar " the mapping can match. 1331975a880aSBram Moolenaar call feedkeys("a'" .. GetEscCodeCSI27('A', 5) .. "\<Esc>", 'Lx!') 1332975a880aSBram Moolenaar call assert_equal('c-a', getline(1)) 1333975a880aSBram Moolenaar 1334975a880aSBram Moolenaar iunmap ' 1335975a880aSBram Moolenaar iunmap <C-W><C-A> 1336975a880aSBram Moolenaar set timeoutlen& 1337975a880aSBram Moolenaarendfunc 1338975a880aSBram Moolenaar 1339d1e2f398SBram Moolenaarfunc RunTest_mapping_works_with_shift(func) 1340d1e2f398SBram Moolenaar new 1341459fd785SBram Moolenaar set timeoutlen=10 1342d1e2f398SBram Moolenaar 1343d1e2f398SBram Moolenaar call RunTest_mapping_shift('@', a:func) 1344d1e2f398SBram Moolenaar call RunTest_mapping_shift('A', a:func) 1345d1e2f398SBram Moolenaar call RunTest_mapping_shift('Z', a:func) 1346d1e2f398SBram Moolenaar call RunTest_mapping_shift('^', a:func) 1347d1e2f398SBram Moolenaar call RunTest_mapping_shift('_', a:func) 1348d1e2f398SBram Moolenaar call RunTest_mapping_shift('{', a:func) 1349d1e2f398SBram Moolenaar call RunTest_mapping_shift('|', a:func) 1350d1e2f398SBram Moolenaar call RunTest_mapping_shift('}', a:func) 1351d1e2f398SBram Moolenaar call RunTest_mapping_shift('~', a:func) 1352d1e2f398SBram Moolenaar 1353d1e2f398SBram Moolenaar bwipe! 1354d1e2f398SBram Moolenaar set timeoutlen& 1355d1e2f398SBram Moolenaarendfunc 1356d1e2f398SBram Moolenaar 1357459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_plain() 1358d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27')) 1359d1e2f398SBram Moolenaar call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu')) 1360d1e2f398SBram Moolenaarendfunc 1361459fd785SBram Moolenaar 1362459fd785SBram Moolenaarfunc RunTest_mapping_mods(map, key, func, code) 1363459fd785SBram Moolenaar call setline(1, '') 1364459fd785SBram Moolenaar exe 'inoremap ' .. a:map .. ' xyz' 1365459fd785SBram Moolenaar call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!') 1366459fd785SBram Moolenaar call assert_equal("xyz", getline(1)) 1367459fd785SBram Moolenaar exe 'iunmap ' .. a:map 1368459fd785SBram Moolenaarendfunc 1369459fd785SBram Moolenaar 1370459fd785SBram Moolenaarfunc RunTest_mapping_works_with_mods(func, mods, code) 1371459fd785SBram Moolenaar new 1372459fd785SBram Moolenaar set timeoutlen=10 1373459fd785SBram Moolenaar 1374459fd785SBram Moolenaar if a:mods !~ 'S' 1375459fd785SBram Moolenaar " Shift by itself has no effect 1376459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-@>', '@', a:func, a:code) 1377459fd785SBram Moolenaar endif 1378459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-A>', 'A', a:func, a:code) 1379459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-Z>', 'Z', a:func, a:code) 1380459fd785SBram Moolenaar if a:mods !~ 'S' 1381459fd785SBram Moolenaar " with Shift code is always upper case 1382459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'a', a:func, a:code) 1383459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'z', a:func, a:code) 1384459fd785SBram Moolenaar endif 1385459fd785SBram Moolenaar if a:mods != 'A' 1386459fd785SBram Moolenaar " with Alt code is not in upper case 1387459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-a>', 'A', a:func, a:code) 1388459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-z>', 'Z', a:func, a:code) 1389459fd785SBram Moolenaar endif 1390459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-á>', 'á', a:func, a:code) 1391459fd785SBram Moolenaar if a:mods !~ 'S' 1392459fd785SBram Moolenaar " Shift by itself has no effect 1393459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-^>', '^', a:func, a:code) 1394459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-_>', '_', a:func, a:code) 1395459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-{>', '{', a:func, a:code) 1396459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-\|>', '|', a:func, a:code) 1397459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-}>', '}', a:func, a:code) 1398459fd785SBram Moolenaar call RunTest_mapping_mods('<' .. a:mods .. '-~>', '~', a:func, a:code) 1399459fd785SBram Moolenaar endif 1400459fd785SBram Moolenaar 1401459fd785SBram Moolenaar bwipe! 1402459fd785SBram Moolenaar set timeoutlen& 1403459fd785SBram Moolenaarendfunc 1404459fd785SBram Moolenaar 1405459fd785SBram Moolenaarfunc Test_mapping_works_with_shift() 1406459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S', 2) 1407459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S', 2) 1408459fd785SBram Moolenaarendfunc 1409459fd785SBram Moolenaar 1410459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl() 1411459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C', 5) 1412459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C', 5) 1413459fd785SBram Moolenaarendfunc 1414459fd785SBram Moolenaar 1415459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl() 1416459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S', 6) 1417459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S', 6) 1418459fd785SBram Moolenaarendfunc 1419459fd785SBram Moolenaar 1420459fd785SBram Moolenaar" Below we also test the "u" code with Alt, This works, but libvterm would not 1421459fd785SBram Moolenaar" send the Alt key like this but by prefixing an Esc. 1422459fd785SBram Moolenaar 1423459fd785SBram Moolenaarfunc Test_mapping_works_with_alt() 1424459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'A', 3) 1425459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'A', 3) 1426459fd785SBram Moolenaarendfunc 1427459fd785SBram Moolenaar 1428459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_alt() 1429459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'S-A', 4) 1430459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'S-A', 4) 1431459fd785SBram Moolenaarendfunc 1432459fd785SBram Moolenaar 1433459fd785SBram Moolenaarfunc Test_mapping_works_with_ctrl_alt() 1434459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-A', 7) 1435459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-A', 7) 1436459fd785SBram Moolenaarendfunc 1437459fd785SBram Moolenaar 1438459fd785SBram Moolenaarfunc Test_mapping_works_with_shift_ctrl_alt() 1439459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSI27'), 'C-S-A', 8) 1440459fd785SBram Moolenaar call RunTest_mapping_works_with_mods(function('GetEscCodeCSIu'), 'C-S-A', 8) 1441459fd785SBram Moolenaarendfunc 1442fc4ea2a7SBram Moolenaar 1443fc4ea2a7SBram Moolenaarfunc Test_insert_literal() 1444fc4ea2a7SBram Moolenaar set timeoutlen=10 1445fc4ea2a7SBram Moolenaar new 1446fc4ea2a7SBram Moolenaar " CTRL-V CTRL-X inserts a ^X 1447fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 1448fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 1449fc4ea2a7SBram Moolenaar 1450fc4ea2a7SBram Moolenaar call setline(1, '') 1451fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 1452fc4ea2a7SBram Moolenaar call assert_equal("\<C-X>", getline(1)) 1453fc4ea2a7SBram Moolenaar 1454f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-X inserts escape sequence 1455fc4ea2a7SBram Moolenaar call setline(1, '') 1456fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('X', '5') .. "\<Esc>", 'Lx!') 1457fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[88;5u", getline(1)) 1458fc4ea2a7SBram Moolenaar 1459fc4ea2a7SBram Moolenaar call setline(1, '') 1460fc4ea2a7SBram Moolenaar call feedkeys('a' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('X', '5') .. "\<Esc>", 'Lx!') 1461fc4ea2a7SBram Moolenaar call assert_equal("\<Esc>[27;5;88~", getline(1)) 1462fc4ea2a7SBram Moolenaar 1463fc4ea2a7SBram Moolenaar bwipe! 1464fc4ea2a7SBram Moolenaar set timeoutlen& 1465fc4ea2a7SBram Moolenaarendfunc 1466fc4ea2a7SBram Moolenaar 1467fc4ea2a7SBram Moolenaarfunc Test_cmdline_literal() 1468fc4ea2a7SBram Moolenaar set timeoutlen=10 1469fc4ea2a7SBram Moolenaar 1470fc4ea2a7SBram Moolenaar " CTRL-V CTRL-Y inserts a ^Y 1471fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1472fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 1473fc4ea2a7SBram Moolenaar 1474fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '5') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1475fc4ea2a7SBram Moolenaar call assert_equal("\"\<C-Y>", @:) 1476fc4ea2a7SBram Moolenaar 1477f19f8d1aSBram Moolenaar " CTRL-SHIFT-V CTRL-Y inserts escape sequence 1478fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSIu('V', '6') .. GetEscCodeCSIu('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1479fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[89;5u", @:) 1480fc4ea2a7SBram Moolenaar 1481fc4ea2a7SBram Moolenaar call setline(1, '') 1482fc4ea2a7SBram Moolenaar call feedkeys(':' .. GetEscCodeCSI27('V', '6') .. GetEscCodeCSI27('Y', '5') .. "\<C-B>\"\<CR>", 'Lx!') 1483fc4ea2a7SBram Moolenaar call assert_equal("\"\<Esc>[27;5;89~", @:) 1484fc4ea2a7SBram Moolenaar 1485fc4ea2a7SBram Moolenaar set timeoutlen& 1486fc4ea2a7SBram Moolenaarendfunc 14870eabd4dcSBram Moolenaar 14880ff5dedfSBram Moolenaar" Test for translation of special key codes (<xF1>, <xF2>, etc.) 14890ff5dedfSBram Moolenaarfunc Test_Keycode_Tranlsation() 14900ff5dedfSBram Moolenaar let keycodes = [ 14910ff5dedfSBram Moolenaar \ ["<xUp>", "<Up>"], 14920ff5dedfSBram Moolenaar \ ["<xDown>", "<Down>"], 14930ff5dedfSBram Moolenaar \ ["<xLeft>", "<Left>"], 14940ff5dedfSBram Moolenaar \ ["<xRight>", "<Right>"], 14950ff5dedfSBram Moolenaar \ ["<xHome>", "<Home>"], 14960ff5dedfSBram Moolenaar \ ["<xEnd>", "<End>"], 14970ff5dedfSBram Moolenaar \ ["<zHome>", "<Home>"], 14980ff5dedfSBram Moolenaar \ ["<zEnd>", "<End>"], 14990ff5dedfSBram Moolenaar \ ["<xF1>", "<F1>"], 15000ff5dedfSBram Moolenaar \ ["<xF2>", "<F2>"], 15010ff5dedfSBram Moolenaar \ ["<xF3>", "<F3>"], 15020ff5dedfSBram Moolenaar \ ["<xF4>", "<F4>"], 15030ff5dedfSBram Moolenaar \ ["<S-xF1>", "<S-F1>"], 15040ff5dedfSBram Moolenaar \ ["<S-xF2>", "<S-F2>"], 15050ff5dedfSBram Moolenaar \ ["<S-xF3>", "<S-F3>"], 15060ff5dedfSBram Moolenaar \ ["<S-xF4>", "<S-F4>"]] 15070ff5dedfSBram Moolenaar for [k1, k2] in keycodes 15080ff5dedfSBram Moolenaar exe "nnoremap " .. k1 .. " 2wx" 15090ff5dedfSBram Moolenaar call assert_true(maparg(k1, 'n', 0, 1).lhs == k2) 15100ff5dedfSBram Moolenaar exe "nunmap " .. k1 15110ff5dedfSBram Moolenaar endfor 15120ff5dedfSBram Moolenaarendfunc 15130ff5dedfSBram Moolenaar 15140eabd4dcSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1515