1905dd905SBram Moolenaar" Tests for decoding escape sequences sent by the terminal. 2905dd905SBram Moolenaar 3905dd905SBram Moolenaar" This only works for Unix in a terminal 4905dd905SBram Moolenaarif has('gui_running') || !has('unix') 5905dd905SBram Moolenaar finish 6905dd905SBram Moolenaarendif 7905dd905SBram Moolenaar 8564344acSBram Moolenaarsource shared.vim 9564344acSBram Moolenaar 10*d0621d85SBram Moolenaar" xterm2 and sgr always work, urxvt is optional. 11*d0621d85SBram Moolenaarlet s:test_ttymouse = ['xterm2', 'sgr'] 12*d0621d85SBram Moolenaarif has('mouse_urxvt') 13*d0621d85SBram Moolenaar call add(s:test_ttymouse, 'urxvt') 14*d0621d85SBram Moolenaarendif 15*d0621d85SBram Moolenaar 163fbd2d7cSBram Moolenaar" Helper function to emit a terminal escape code. 17*d0621d85SBram Moolenaarfunc TerminalEscapeCode(code, row, col, m) 182b00b9b0SBram Moolenaar if &ttymouse ==# 'xterm2' 193fbd2d7cSBram Moolenaar " need to use byte encoding here. 20*d0621d85SBram Moolenaar let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) 213fbd2d7cSBram Moolenaar if has('iconv') 223fbd2d7cSBram Moolenaar let bytes = iconv(str, 'utf-8', 'latin1') 233fbd2d7cSBram Moolenaar else 243fbd2d7cSBram Moolenaar " Hopefully the numbers are not too big. 253fbd2d7cSBram Moolenaar let bytes = str 263fbd2d7cSBram Moolenaar endif 273fbd2d7cSBram Moolenaar call feedkeys("\<Esc>[M" .. bytes, 'Lx!') 283fbd2d7cSBram Moolenaar elseif &ttymouse ==# 'sgr' 29*d0621d85SBram Moolenaar call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m), 'Lx!') 30*d0621d85SBram Moolenaar elseif &ttymouse ==# 'urxvt' 31*d0621d85SBram Moolenaar call feedkeys(printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row), 'Lx!') 323fbd2d7cSBram Moolenaar endif 333fbd2d7cSBram Moolenaarendfunc 343fbd2d7cSBram Moolenaar 353fbd2d7cSBram Moolenaarfunc MouseLeftClick(row, col) 36*d0621d85SBram Moolenaar call TerminalEscapeCode(0, a:row, a:col, 'M') 373fbd2d7cSBram Moolenaarendfunc 383fbd2d7cSBram Moolenaar 39c1b8160bSBram Moolenaarfunc MouseMiddleClick(row, col) 40*d0621d85SBram Moolenaar call TerminalEscapeCode(1, a:row, a:col, 'M') 41c1b8160bSBram Moolenaarendfunc 42c1b8160bSBram Moolenaar 431ee36d6fSBram Moolenaarfunc MouseCtrlLeftClick(row, col) 441ee36d6fSBram Moolenaar let ctrl = 0x10 45*d0621d85SBram Moolenaar call TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M') 461ee36d6fSBram Moolenaarendfunc 471ee36d6fSBram Moolenaar 481ee36d6fSBram Moolenaarfunc MouseCtrlRightClick(row, col) 491ee36d6fSBram Moolenaar let ctrl = 0x10 50*d0621d85SBram Moolenaar call TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M') 511ee36d6fSBram Moolenaarendfunc 521ee36d6fSBram Moolenaar 533fbd2d7cSBram Moolenaarfunc MouseLeftRelease(row, col) 54*d0621d85SBram Moolenaar call TerminalEscapeCode(3, a:row, a:col, 'm') 553fbd2d7cSBram Moolenaarendfunc 563fbd2d7cSBram Moolenaar 57c1b8160bSBram Moolenaarfunc MouseMiddleRelease(row, col) 58*d0621d85SBram Moolenaar call TerminalEscapeCode(3, a:row, a:col, 'm') 59c1b8160bSBram Moolenaarendfunc 60c1b8160bSBram Moolenaar 611ee36d6fSBram Moolenaarfunc MouseRightRelease(row, col) 62*d0621d85SBram Moolenaar call TerminalEscapeCode(3, a:row, a:col, 'm') 631ee36d6fSBram Moolenaarendfunc 641ee36d6fSBram Moolenaar 653fbd2d7cSBram Moolenaarfunc MouseLeftDrag(row, col) 66*d0621d85SBram Moolenaar call TerminalEscapeCode(0x20, a:row, a:col, 'M') 673fbd2d7cSBram Moolenaarendfunc 683fbd2d7cSBram Moolenaar 693fbd2d7cSBram Moolenaarfunc MouseWheelUp(row, col) 70*d0621d85SBram Moolenaar call TerminalEscapeCode(0x40, a:row, a:col, 'M') 713fbd2d7cSBram Moolenaarendfunc 723fbd2d7cSBram Moolenaar 733fbd2d7cSBram Moolenaarfunc MouseWheelDown(row, col) 74*d0621d85SBram Moolenaar call TerminalEscapeCode(0x41, a:row, a:col, 'M') 753fbd2d7cSBram Moolenaarendfunc 763fbd2d7cSBram Moolenaar 77c1b8160bSBram Moolenaarfunc Test_xterm_mouse_left_click() 78905dd905SBram Moolenaar new 79905dd905SBram Moolenaar let save_mouse = &mouse 80905dd905SBram Moolenaar let save_term = &term 81905dd905SBram Moolenaar let save_ttymouse = &ttymouse 823fbd2d7cSBram Moolenaar set mouse=a term=xterm 83905dd905SBram Moolenaar call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 84905dd905SBram Moolenaar 85*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 864945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 871ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 883fbd2d7cSBram Moolenaar go 894945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 903fbd2d7cSBram Moolenaar let row = 2 913fbd2d7cSBram Moolenaar let col = 6 923fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 933fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 944945219bSBram Moolenaar call assert_equal([0, 2, 6, 0], getpos('.'), msg) 953fbd2d7cSBram Moolenaar endfor 96905dd905SBram Moolenaar 97905dd905SBram Moolenaar let &mouse = save_mouse 98905dd905SBram Moolenaar let &term = save_term 99905dd905SBram Moolenaar let &ttymouse = save_ttymouse 100905dd905SBram Moolenaar bwipe! 101905dd905SBram Moolenaarendfunc 102905dd905SBram Moolenaar 1031ee36d6fSBram Moolenaar" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. 1041ee36d6fSBram Moolenaarfunc Test_xterm_mouse_ctrl_click() 1051ee36d6fSBram Moolenaar let save_mouse = &mouse 1061ee36d6fSBram Moolenaar let save_term = &term 1071ee36d6fSBram Moolenaar let save_ttymouse = &ttymouse 1081ee36d6fSBram Moolenaar set mouse=a term=xterm 1091ee36d6fSBram Moolenaar 110*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 1111ee36d6fSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1121ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 1131ee36d6fSBram Moolenaar help 1141ee36d6fSBram Moolenaar /usr_02.txt 1151ee36d6fSBram Moolenaar norm! zt 1161ee36d6fSBram Moolenaar let row = 1 1171ee36d6fSBram Moolenaar let col = 1 1181ee36d6fSBram Moolenaar call MouseCtrlLeftClick(row, col) 1191ee36d6fSBram Moolenaar call MouseLeftRelease(row, col) 1201ee36d6fSBram Moolenaar call assert_match('usr_02.txt$', bufname('%'), msg) 1211ee36d6fSBram Moolenaar call assert_equal('*usr_02.txt*', expand('<cWORD>')) 1221ee36d6fSBram Moolenaar 1231ee36d6fSBram Moolenaar call MouseCtrlRightClick(row, col) 1241ee36d6fSBram Moolenaar call MouseLeftRelease(row, col) 1251ee36d6fSBram Moolenaar call assert_match('help.txt$', bufname('%'), msg) 1261ee36d6fSBram Moolenaar call assert_equal('|usr_02.txt|', expand('<cWORD>')) 1271ee36d6fSBram Moolenaar 1281ee36d6fSBram Moolenaar helpclose 1291ee36d6fSBram Moolenaar endfor 1301ee36d6fSBram Moolenaar 1311ee36d6fSBram Moolenaar let &mouse = save_mouse 1321ee36d6fSBram Moolenaar let &term = save_term 1331ee36d6fSBram Moolenaar let &ttymouse = save_ttymouse 1341ee36d6fSBram Moolenaarendfunc 1351ee36d6fSBram Moolenaar 136c1b8160bSBram Moolenaarfunc Test_xterm_mouse_middle_click() 137564344acSBram Moolenaar if !WorkingClipboard() 138564344acSBram Moolenaar throw 'Skipped: No working clipboard' 139564344acSBram Moolenaar endif 140564344acSBram Moolenaar 141c1b8160bSBram Moolenaar new 142c1b8160bSBram Moolenaar let save_mouse = &mouse 143c1b8160bSBram Moolenaar let save_term = &term 144c1b8160bSBram Moolenaar let save_ttymouse = &ttymouse 145c1b8160bSBram Moolenaar let save_quotestar = @* 146c1b8160bSBram Moolenaar let @* = 'abc' 147c1b8160bSBram Moolenaar set mouse=a term=xterm 148c1b8160bSBram Moolenaar 149*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 150c1b8160bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1511ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 152c1b8160bSBram Moolenaar call setline(1, ['123456789', '123456789']) 153c1b8160bSBram Moolenaar 154c1b8160bSBram Moolenaar " Middle-click in the middle of the line pastes text where clicked. 155c1b8160bSBram Moolenaar let row = 1 156c1b8160bSBram Moolenaar let col = 6 157c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 158c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 159c1b8160bSBram Moolenaar call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) 160c1b8160bSBram Moolenaar 161c1b8160bSBram Moolenaar " Middle-click beyond end of the line pastes text at the end of the line. 162c1b8160bSBram Moolenaar let col = 20 163c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 164c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 165c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) 166c1b8160bSBram Moolenaar 167c1b8160bSBram Moolenaar " Middle-click beyond the last line pastes in the last line. 168c1b8160bSBram Moolenaar let row = 5 169c1b8160bSBram Moolenaar let col = 3 170c1b8160bSBram Moolenaar call MouseMiddleClick(row, col) 171c1b8160bSBram Moolenaar call MouseMiddleRelease(row, col) 172c1b8160bSBram Moolenaar call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) 173c1b8160bSBram Moolenaar endfor 174c1b8160bSBram Moolenaar 175c1b8160bSBram Moolenaar let &mouse = save_mouse 176c1b8160bSBram Moolenaar let &term = save_term 177c1b8160bSBram Moolenaar let &ttymouse = save_ttymouse 178c1b8160bSBram Moolenaar let @* = save_quotestar 179c1b8160bSBram Moolenaar bwipe! 180c1b8160bSBram Moolenaarendfunc 181c1b8160bSBram Moolenaar 182049736faSBram Moolenaarfunc Test_xterm_mouse_wheel() 183049736faSBram Moolenaar new 184049736faSBram Moolenaar let save_mouse = &mouse 185049736faSBram Moolenaar let save_term = &term 186049736faSBram Moolenaar let save_ttymouse = &ttymouse 1873fbd2d7cSBram Moolenaar set mouse=a term=xterm 188049736faSBram Moolenaar call setline(1, range(1, 100)) 189049736faSBram Moolenaar 190*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 1914945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 1921ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 193049736faSBram Moolenaar go 1944945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 1954945219bSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.'), msg) 1963fbd2d7cSBram Moolenaar 1973fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 1984945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 1994945219bSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.'), msg) 2003fbd2d7cSBram Moolenaar 2013fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 2024945219bSBram Moolenaar call assert_equal(7, line('w0'), msg) 2034945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 204049736faSBram Moolenaar 2053fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 2064945219bSBram Moolenaar call assert_equal(4, line('w0'), msg) 2074945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 2083fbd2d7cSBram Moolenaar 2093fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 2104945219bSBram Moolenaar call assert_equal(1, line('w0'), msg) 2114945219bSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.'), msg) 2123fbd2d7cSBram Moolenaar endfor 213049736faSBram Moolenaar 214049736faSBram Moolenaar let &mouse = save_mouse 215049736faSBram Moolenaar let &term = save_term 216049736faSBram Moolenaar let &ttymouse = save_ttymouse 217049736faSBram Moolenaar bwipe! 218049736faSBram Moolenaarendfunc 2193fb01a53SBram Moolenaar 2203fb01a53SBram Moolenaarfunc Test_xterm_mouse_drag_window_separator() 2213fb01a53SBram Moolenaar let save_mouse = &mouse 2223fb01a53SBram Moolenaar let save_term = &term 2233fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 2243fbd2d7cSBram Moolenaar set mouse=a term=xterm 2253fbd2d7cSBram Moolenaar 226*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 2274945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 2281ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 2293fb01a53SBram Moolenaar 2303fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 2313fb01a53SBram Moolenaar split 2323fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 2333fb01a53SBram Moolenaar let row = rowseparator 2343fb01a53SBram Moolenaar let col = 1 235c8b3ddabSBram Moolenaar 2362b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 2372b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || row <= 223 2383fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 2393fb01a53SBram Moolenaar let row -= 1 2403fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 2414945219bSBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1, msg) 2423fb01a53SBram Moolenaar let row += 1 2433fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 2444945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 2453fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 2464945219bSBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1, msg) 24739f76c6aSBram Moolenaar endif 2483fb01a53SBram Moolenaar bwipe! 2493fb01a53SBram Moolenaar 2503fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 2513fb01a53SBram Moolenaar vsplit 2523fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 2533fb01a53SBram Moolenaar let row = 1 2543fb01a53SBram Moolenaar let col = colseparator 25539f76c6aSBram Moolenaar 2562b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 2572b00b9b0SBram Moolenaar if ttymouse_val !=# 'xterm2' || col <= 223 2583fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 2593fb01a53SBram Moolenaar let col -= 1 2603fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 2614945219bSBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1, msg) 2623fb01a53SBram Moolenaar let col += 1 2633fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 2644945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 2653fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 2664945219bSBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1, msg) 26739f76c6aSBram Moolenaar endif 2683fb01a53SBram Moolenaar bwipe! 2693fbd2d7cSBram Moolenaar endfor 2703fbd2d7cSBram Moolenaar 2713fbd2d7cSBram Moolenaar let &mouse = save_mouse 2723fbd2d7cSBram Moolenaar let &term = save_term 2733fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 2743fbd2d7cSBram Moolenaarendfunc 2753fbd2d7cSBram Moolenaar 2763fbd2d7cSBram Moolenaarfunc Test_xterm_mouse_drag_statusline() 2773fbd2d7cSBram Moolenaar let save_mouse = &mouse 2783fbd2d7cSBram Moolenaar let save_term = &term 2793fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 280ca57ab54SBram Moolenaar let save_laststatus = &laststatus 281ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 2823fbd2d7cSBram Moolenaar 283*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 2844945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 2851ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 2863fbd2d7cSBram Moolenaar 2874945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 2883fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 2893fbd2d7cSBram Moolenaar let row = rowstatusline 2903fbd2d7cSBram Moolenaar let col = 1 291c8b3ddabSBram Moolenaar 2922b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && row > 223 2932b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 294c8b3ddabSBram Moolenaar continue 295c8b3ddabSBram Moolenaar endif 296c8b3ddabSBram Moolenaar 2973fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 2983fbd2d7cSBram Moolenaar let row -= 1 2993fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 3004945219bSBram Moolenaar call assert_equal(2, &cmdheight, msg) 3014945219bSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) 3023fbd2d7cSBram Moolenaar let row += 1 3033fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 3044945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 3054945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 3063fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 3074945219bSBram Moolenaar call assert_equal(1, &cmdheight, msg) 3084945219bSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1, msg) 3093fbd2d7cSBram Moolenaar endfor 3103fbd2d7cSBram Moolenaar 3113fb01a53SBram Moolenaar let &mouse = save_mouse 3123fb01a53SBram Moolenaar let &term = save_term 3133fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 314ca57ab54SBram Moolenaar let &laststatus = save_laststatus 315ca57ab54SBram Moolenaarendfunc 316ca57ab54SBram Moolenaar 317ca57ab54SBram Moolenaarfunc Test_xterm_mouse_click_tab() 318ca57ab54SBram Moolenaar let save_mouse = &mouse 319ca57ab54SBram Moolenaar let save_term = &term 320ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 321ca57ab54SBram Moolenaar set mouse=a term=xterm 322ca57ab54SBram Moolenaar let row = 1 323ca57ab54SBram Moolenaar 324*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 3254945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 3261ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 327ca57ab54SBram Moolenaar e Xfoo 328ca57ab54SBram Moolenaar tabnew Xbar 329ca57ab54SBram Moolenaar 330ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 331ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 332ca57ab54SBram Moolenaar \ ' Xfoo', 333ca57ab54SBram Moolenaar \ 'Tab page 2', 3344945219bSBram Moolenaar \ '> Xbar'], a, msg) 335ca57ab54SBram Moolenaar 336ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 337ca57ab54SBram Moolenaar let col = 2 33839f76c6aSBram Moolenaar redraw 339ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 340ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 341ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 342ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 343ca57ab54SBram Moolenaar \ '> Xfoo', 344ca57ab54SBram Moolenaar \ 'Tab page 2', 3454945219bSBram Moolenaar \ ' Xbar'], a, msg) 346ca57ab54SBram Moolenaar 347ca57ab54SBram Moolenaar let col = 9 348ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 349ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 350ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 351ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 352ca57ab54SBram Moolenaar \ ' Xfoo', 353ca57ab54SBram Moolenaar \ 'Tab page 2', 3544945219bSBram Moolenaar \ '> Xbar'], a, msg) 355ca57ab54SBram Moolenaar 356ca57ab54SBram Moolenaar %bwipe! 357ca57ab54SBram Moolenaar endfor 358ca57ab54SBram Moolenaar 359ca57ab54SBram Moolenaar let &mouse = save_mouse 360ca57ab54SBram Moolenaar let &term = save_term 361ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 3623fb01a53SBram Moolenaarendfunc 36339f76c6aSBram Moolenaar 36439f76c6aSBram Moolenaarfunc Test_xterm_mouse_click_X_to_close_tab() 36539f76c6aSBram Moolenaar let save_mouse = &mouse 36639f76c6aSBram Moolenaar let save_term = &term 36739f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 36839f76c6aSBram Moolenaar set mouse=a term=xterm 36939f76c6aSBram Moolenaar let row = 1 37039f76c6aSBram Moolenaar let col = &columns 37139f76c6aSBram Moolenaar 372*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 3732b00b9b0SBram Moolenaar if ttymouse_val ==# 'xterm2' && col > 223 3742b00b9b0SBram Moolenaar " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 37539f76c6aSBram Moolenaar continue 37639f76c6aSBram Moolenaar endif 3774945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 3781ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 37939f76c6aSBram Moolenaar e Xtab1 38039f76c6aSBram Moolenaar tabnew Xtab2 38139f76c6aSBram Moolenaar tabnew Xtab3 38239f76c6aSBram Moolenaar tabn 2 38339f76c6aSBram Moolenaar 38439f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 38539f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 38639f76c6aSBram Moolenaar \ ' Xtab1', 38739f76c6aSBram Moolenaar \ 'Tab page 2', 38839f76c6aSBram Moolenaar \ '> Xtab2', 38939f76c6aSBram Moolenaar \ 'Tab page 3', 3904945219bSBram Moolenaar \ ' Xtab3'], a, msg) 39139f76c6aSBram Moolenaar 39239f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 39339f76c6aSBram Moolenaar redraw 39439f76c6aSBram Moolenaar call MouseLeftClick(row, col) 39539f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 39639f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 39739f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 39839f76c6aSBram Moolenaar \ ' Xtab1', 39939f76c6aSBram Moolenaar \ 'Tab page 2', 4004945219bSBram Moolenaar \ '> Xtab3'], a, msg) 40139f76c6aSBram Moolenaar 40239f76c6aSBram Moolenaar %bwipe! 40339f76c6aSBram Moolenaar endfor 40439f76c6aSBram Moolenaar 40539f76c6aSBram Moolenaar let &mouse = save_mouse 40639f76c6aSBram Moolenaar let &term = save_term 40739f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 40839f76c6aSBram Moolenaarendfunc 409e3e3828fSBram Moolenaar 410e3e3828fSBram Moolenaarfunc Test_xterm_mouse_drag_to_move_tab() 411e3e3828fSBram Moolenaar let save_mouse = &mouse 412e3e3828fSBram Moolenaar let save_term = &term 413e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 414e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 415e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 416e3e3828fSBram Moolenaar let row = 1 417e3e3828fSBram Moolenaar 418*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 4194945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4201ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 421e3e3828fSBram Moolenaar e Xtab1 422e3e3828fSBram Moolenaar tabnew Xtab2 423e3e3828fSBram Moolenaar 424e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 425e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 426e3e3828fSBram Moolenaar \ ' Xtab1', 427e3e3828fSBram Moolenaar \ 'Tab page 2', 4284945219bSBram Moolenaar \ '> Xtab2'], a, msg) 429e3e3828fSBram Moolenaar redraw 430e3e3828fSBram Moolenaar 431e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 432e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 433e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 434e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 4354945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 436e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 437e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 438e3e3828fSBram Moolenaar endfor 439e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 440e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 441e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 442e3e3828fSBram Moolenaar \ '> Xtab2', 443e3e3828fSBram Moolenaar \ 'Tab page 2', 4444945219bSBram Moolenaar \ ' Xtab1'], a, msg) 445e3e3828fSBram Moolenaar 4467f279765SBram Moolenaar " brief sleep to avoid causing a double-click 4477f279765SBram Moolenaar sleep 20m 448e3e3828fSBram Moolenaar %bwipe! 449e3e3828fSBram Moolenaar endfor 450e3e3828fSBram Moolenaar 451e3e3828fSBram Moolenaar let &mouse = save_mouse 452e3e3828fSBram Moolenaar let &term = save_term 453e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 454e3e3828fSBram Moolenaar set mousetime& 455e3e3828fSBram Moolenaarendfunc 456e3e3828fSBram Moolenaar 457e3e3828fSBram Moolenaarfunc Test_xterm_mouse_double_click_to_create_tab() 458e3e3828fSBram Moolenaar let save_mouse = &mouse 459e3e3828fSBram Moolenaar let save_term = &term 460e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 461e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 462e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 463e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=100 464e3e3828fSBram Moolenaar let row = 1 465e3e3828fSBram Moolenaar let col = 10 466e3e3828fSBram Moolenaar 467*d0621d85SBram Moolenaar let round = 0 468*d0621d85SBram Moolenaar for ttymouse_val in s:test_ttymouse 4694945219bSBram Moolenaar let msg = 'ttymouse=' .. ttymouse_val 4701ee36d6fSBram Moolenaar exe 'set ttymouse=' .. ttymouse_val 471e3e3828fSBram Moolenaar e Xtab1 472e3e3828fSBram Moolenaar tabnew Xtab2 473e3e3828fSBram Moolenaar 474*d0621d85SBram Moolenaar if round > 0 475*d0621d85SBram Moolenaar " We need to sleep, or else the first MouseLeftClick() will be 476*d0621d85SBram Moolenaar " interpreted as a spurious triple-click. 477*d0621d85SBram Moolenaar sleep 100m 478*d0621d85SBram Moolenaar endif 479*d0621d85SBram Moolenaar let round += 1 480*d0621d85SBram Moolenaar 481e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 482e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 483e3e3828fSBram Moolenaar \ ' Xtab1', 484e3e3828fSBram Moolenaar \ 'Tab page 2', 4854945219bSBram Moolenaar \ '> Xtab2'], a, msg) 486e3e3828fSBram Moolenaar 487e3e3828fSBram Moolenaar redraw 488e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 489e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 490e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 4914945219bSBram Moolenaar call assert_equal(0, getcharmod(), msg) 492e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 493e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 4944945219bSBram Moolenaar call assert_equal(32, getcharmod(), msg) " double-click 495e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 496e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 497e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 498e3e3828fSBram Moolenaar \ ' Xtab1', 499e3e3828fSBram Moolenaar \ 'Tab page 2', 500e3e3828fSBram Moolenaar \ '> [No Name]', 501e3e3828fSBram Moolenaar \ 'Tab page 3', 5024945219bSBram Moolenaar \ ' Xtab2'], a, msg) 503e3e3828fSBram Moolenaar 504e3e3828fSBram Moolenaar %bwipe! 505e3e3828fSBram Moolenaar endfor 506e3e3828fSBram Moolenaar 507e3e3828fSBram Moolenaar let &mouse = save_mouse 508e3e3828fSBram Moolenaar let &term = save_term 509e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 510e3e3828fSBram Moolenaar set mousetime& 511e3e3828fSBram Moolenaarendfunc 512696d6377SBram Moolenaar 513696d6377SBram Moolenaarfunc Test_xterm_mouse_click_in_fold_columns() 514696d6377SBram Moolenaar new 515696d6377SBram Moolenaar let save_mouse = &mouse 516696d6377SBram Moolenaar let save_term = &term 517696d6377SBram Moolenaar let save_ttymouse = &ttymouse 518696d6377SBram Moolenaar let save_foldcolumn = &foldcolumn 5192b00b9b0SBram Moolenaar set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 520696d6377SBram Moolenaar 521696d6377SBram Moolenaar " Create 2 nested folds. 522696d6377SBram Moolenaar call setline(1, range(1, 7)) 523696d6377SBram Moolenaar 2,6fold 524696d6377SBram Moolenaar norm! zR 525696d6377SBram Moolenaar 4,5fold 526696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 527696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 528696d6377SBram Moolenaar 529696d6377SBram Moolenaar " Click in "+" of inner fold in foldcolumn should open it. 530696d6377SBram Moolenaar redraw 531696d6377SBram Moolenaar let row = 4 532696d6377SBram Moolenaar let col = 2 533696d6377SBram Moolenaar call MouseLeftClick(row, col) 534696d6377SBram Moolenaar call MouseLeftRelease(row, col) 535696d6377SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1, -1], 536696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 537696d6377SBram Moolenaar 538696d6377SBram Moolenaar " Click in "-" of outer fold in foldcolumn should close it. 539696d6377SBram Moolenaar redraw 540696d6377SBram Moolenaar let row = 2 541696d6377SBram Moolenaar let col = 1 542696d6377SBram Moolenaar call MouseLeftClick(row, col) 543696d6377SBram Moolenaar call MouseLeftRelease(row, col) 544696d6377SBram Moolenaar call assert_equal([-1, 2, 2, 2, 2, 2, -1], 545696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 546696d6377SBram Moolenaar norm! zR 547696d6377SBram Moolenaar 548696d6377SBram Moolenaar " Click in "|" of inner fold in foldcolumn should close it. 549696d6377SBram Moolenaar redraw 550696d6377SBram Moolenaar let row = 5 551696d6377SBram Moolenaar let col = 2 552696d6377SBram Moolenaar call MouseLeftClick(row, col) 553696d6377SBram Moolenaar call MouseLeftRelease(row, col) 554696d6377SBram Moolenaar call assert_equal([-1, -1, -1, 4, 4, -1, -1], 555696d6377SBram Moolenaar \ map(range(1, 7), 'foldclosed(v:val)')) 556696d6377SBram Moolenaar 557696d6377SBram Moolenaar let &foldcolumn = save_foldcolumn 558696d6377SBram Moolenaar let &ttymouse = save_ttymouse 559696d6377SBram Moolenaar let &term = save_term 560696d6377SBram Moolenaar let &mouse = save_mouse 561696d6377SBram Moolenaar bwipe! 562696d6377SBram Moolenaarendfunc 563