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 83fbd2d7cSBram Moolenaar" Helper function to emit a terminal escape code. 93fbd2d7cSBram Moolenaarfunc TerminalEscapeCode(code_xterm, code_sgr, row, col, m) 103fbd2d7cSBram Moolenaar if &ttymouse ==# 'xterm' 113fbd2d7cSBram Moolenaar " need to use byte encoding here. 123fbd2d7cSBram Moolenaar let str = list2str([a:code_xterm, a:col + 0x20, a:row + 0x20]) 133fbd2d7cSBram Moolenaar if has('iconv') 143fbd2d7cSBram Moolenaar let bytes = iconv(str, 'utf-8', 'latin1') 153fbd2d7cSBram Moolenaar else 163fbd2d7cSBram Moolenaar " Hopefully the numbers are not too big. 173fbd2d7cSBram Moolenaar let bytes = str 183fbd2d7cSBram Moolenaar endif 193fbd2d7cSBram Moolenaar call feedkeys("\<Esc>[M" .. bytes, 'Lx!') 203fbd2d7cSBram Moolenaar elseif &ttymouse ==# 'sgr' 213fbd2d7cSBram Moolenaar call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code_sgr, a:col, a:row, a:m), 'Lx!') 223fbd2d7cSBram Moolenaar endif 233fbd2d7cSBram Moolenaarendfunc 243fbd2d7cSBram Moolenaar 253fbd2d7cSBram Moolenaarfunc MouseLeftClick(row, col) 263fbd2d7cSBram Moolenaar call TerminalEscapeCode(0x20, 0, a:row, a:col, 'M') 273fbd2d7cSBram Moolenaarendfunc 283fbd2d7cSBram Moolenaar 293fbd2d7cSBram Moolenaarfunc MouseLeftRelease(row, col) 303fbd2d7cSBram Moolenaar call TerminalEscapeCode(0x23, 3, a:row, a:col, 'm') 313fbd2d7cSBram Moolenaarendfunc 323fbd2d7cSBram Moolenaar 333fbd2d7cSBram Moolenaarfunc MouseLeftDrag(row, col) 343fbd2d7cSBram Moolenaar call TerminalEscapeCode(0x43, 0x20, a:row, a:col, 'M') 353fbd2d7cSBram Moolenaarendfunc 363fbd2d7cSBram Moolenaar 373fbd2d7cSBram Moolenaarfunc MouseWheelUp(row, col) 383fbd2d7cSBram Moolenaar call TerminalEscapeCode(0x40, 0x40, a:row, a:col, 'M') 393fbd2d7cSBram Moolenaarendfunc 403fbd2d7cSBram Moolenaar 413fbd2d7cSBram Moolenaarfunc MouseWheelDown(row, col) 423fbd2d7cSBram Moolenaar call TerminalEscapeCode(0x41, 0x41, a:row, a:col, 'M') 433fbd2d7cSBram Moolenaarendfunc 443fbd2d7cSBram Moolenaar 45905dd905SBram Moolenaarfunc Test_xterm_mouse_click() 46905dd905SBram Moolenaar new 47905dd905SBram Moolenaar let save_mouse = &mouse 48905dd905SBram Moolenaar let save_term = &term 49905dd905SBram Moolenaar let save_ttymouse = &ttymouse 503fbd2d7cSBram Moolenaar set mouse=a term=xterm 51905dd905SBram Moolenaar call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 52905dd905SBram Moolenaar 533fbd2d7cSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 543fbd2d7cSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 553fbd2d7cSBram Moolenaar go 563fbd2d7cSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.')) 573fbd2d7cSBram Moolenaar let row = 2 583fbd2d7cSBram Moolenaar let col = 6 593fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 603fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 61905dd905SBram Moolenaar call assert_equal([0, 2, 6, 0], getpos('.')) 623fbd2d7cSBram Moolenaar endfor 63905dd905SBram Moolenaar 64905dd905SBram Moolenaar let &mouse = save_mouse 65905dd905SBram Moolenaar let &term = save_term 66905dd905SBram Moolenaar let &ttymouse = save_ttymouse 67905dd905SBram Moolenaar bwipe! 68905dd905SBram Moolenaarendfunc 69905dd905SBram Moolenaar 70049736faSBram Moolenaarfunc Test_xterm_mouse_wheel() 71049736faSBram Moolenaar new 72049736faSBram Moolenaar let save_mouse = &mouse 73049736faSBram Moolenaar let save_term = &term 74049736faSBram Moolenaar let save_ttymouse = &ttymouse 753fbd2d7cSBram Moolenaar set mouse=a term=xterm 76049736faSBram Moolenaar call setline(1, range(1, 100)) 77049736faSBram Moolenaar 783fbd2d7cSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 793fbd2d7cSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 80049736faSBram Moolenaar go 81049736faSBram Moolenaar call assert_equal(1, line('w0')) 82049736faSBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.')) 833fbd2d7cSBram Moolenaar 843fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 85049736faSBram Moolenaar call assert_equal(4, line('w0')) 86049736faSBram Moolenaar call assert_equal([0, 4, 1, 0], getpos('.')) 873fbd2d7cSBram Moolenaar 883fbd2d7cSBram Moolenaar call MouseWheelDown(1, 1) 89049736faSBram Moolenaar call assert_equal(7, line('w0')) 90049736faSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.')) 91049736faSBram Moolenaar 923fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 93049736faSBram Moolenaar call assert_equal(4, line('w0')) 94049736faSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.')) 953fbd2d7cSBram Moolenaar 963fbd2d7cSBram Moolenaar call MouseWheelUp(1, 1) 97049736faSBram Moolenaar call assert_equal(1, line('w0')) 98049736faSBram Moolenaar call assert_equal([0, 7, 1, 0], getpos('.')) 993fbd2d7cSBram Moolenaar endfor 100049736faSBram Moolenaar 101049736faSBram Moolenaar let &mouse = save_mouse 102049736faSBram Moolenaar let &term = save_term 103049736faSBram Moolenaar let &ttymouse = save_ttymouse 104049736faSBram Moolenaar bwipe! 105049736faSBram Moolenaarendfunc 1063fb01a53SBram Moolenaar 1073fb01a53SBram Moolenaarfunc Test_xterm_mouse_drag_window_separator() 1083fb01a53SBram Moolenaar let save_mouse = &mouse 1093fb01a53SBram Moolenaar let save_term = &term 1103fb01a53SBram Moolenaar let save_ttymouse = &ttymouse 1113fbd2d7cSBram Moolenaar set mouse=a term=xterm 1123fbd2d7cSBram Moolenaar 1133fbd2d7cSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 1143fbd2d7cSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 1153fb01a53SBram Moolenaar 1163fb01a53SBram Moolenaar " Split horizontally and test dragging the horizontal window separator. 1173fb01a53SBram Moolenaar split 1183fb01a53SBram Moolenaar let rowseparator = winheight(0) + 1 1193fb01a53SBram Moolenaar let row = rowseparator 1203fb01a53SBram Moolenaar let col = 1 121c8b3ddabSBram Moolenaar 122c8b3ddabSBram Moolenaar " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported. 12339f76c6aSBram Moolenaar if ttymouse_val !=# 'xterm' || row <= 223 1243fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1253fb01a53SBram Moolenaar let row -= 1 1263fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1273fb01a53SBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1) 1283fb01a53SBram Moolenaar let row += 1 1293fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1303fb01a53SBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1) 1313fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1323fb01a53SBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1) 13339f76c6aSBram Moolenaar endif 1343fb01a53SBram Moolenaar bwipe! 1353fb01a53SBram Moolenaar 1363fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 1373fb01a53SBram Moolenaar vsplit 1383fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 1393fb01a53SBram Moolenaar let row = 1 1403fb01a53SBram Moolenaar let col = colseparator 14139f76c6aSBram Moolenaar 14239f76c6aSBram Moolenaar " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported. 14339f76c6aSBram Moolenaar if ttymouse_val !=# 'xterm' || col <= 223 1443fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1453fb01a53SBram Moolenaar let col -= 1 1463fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1473fb01a53SBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1) 1483fb01a53SBram Moolenaar let col += 1 1493fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1503fb01a53SBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1) 1513fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1523fb01a53SBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1) 15339f76c6aSBram Moolenaar endif 1543fb01a53SBram Moolenaar bwipe! 1553fbd2d7cSBram Moolenaar endfor 1563fbd2d7cSBram Moolenaar 1573fbd2d7cSBram Moolenaar let &mouse = save_mouse 1583fbd2d7cSBram Moolenaar let &term = save_term 1593fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 1603fbd2d7cSBram Moolenaarendfunc 1613fbd2d7cSBram Moolenaar 1623fbd2d7cSBram Moolenaarfunc Test_xterm_mouse_drag_statusline() 1633fbd2d7cSBram Moolenaar let save_mouse = &mouse 1643fbd2d7cSBram Moolenaar let save_term = &term 1653fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 166ca57ab54SBram Moolenaar let save_laststatus = &laststatus 167ca57ab54SBram Moolenaar set mouse=a term=xterm laststatus=2 1683fbd2d7cSBram Moolenaar 1693fbd2d7cSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 1703fbd2d7cSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 1713fbd2d7cSBram Moolenaar 1723fbd2d7cSBram Moolenaar call assert_equal(1, &cmdheight) 1733fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 1743fbd2d7cSBram Moolenaar let row = rowstatusline 1753fbd2d7cSBram Moolenaar let col = 1 176c8b3ddabSBram Moolenaar 177c8b3ddabSBram Moolenaar if ttymouse_val ==# 'xterm' && row > 223 178c8b3ddabSBram Moolenaar " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported. 179c8b3ddabSBram Moolenaar continue 180c8b3ddabSBram Moolenaar endif 181c8b3ddabSBram Moolenaar 1823fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1833fbd2d7cSBram Moolenaar let row -= 1 1843fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1853fbd2d7cSBram Moolenaar call assert_equal(2, &cmdheight) 1863fbd2d7cSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1) 1873fbd2d7cSBram Moolenaar let row += 1 1883fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1893fbd2d7cSBram Moolenaar call assert_equal(1, &cmdheight) 1903fbd2d7cSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1) 1913fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1923fbd2d7cSBram Moolenaar call assert_equal(1, &cmdheight) 1933fbd2d7cSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1) 1943fbd2d7cSBram Moolenaar endfor 1953fbd2d7cSBram Moolenaar 1963fb01a53SBram Moolenaar let &mouse = save_mouse 1973fb01a53SBram Moolenaar let &term = save_term 1983fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 199ca57ab54SBram Moolenaar let &laststatus = save_laststatus 200ca57ab54SBram Moolenaarendfunc 201ca57ab54SBram Moolenaar 202ca57ab54SBram Moolenaarfunc Test_xterm_mouse_click_tab() 203ca57ab54SBram Moolenaar let save_mouse = &mouse 204ca57ab54SBram Moolenaar let save_term = &term 205ca57ab54SBram Moolenaar let save_ttymouse = &ttymouse 206ca57ab54SBram Moolenaar set mouse=a term=xterm 207ca57ab54SBram Moolenaar let row = 1 208ca57ab54SBram Moolenaar 209ca57ab54SBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 210ca57ab54SBram Moolenaar exe 'set ttymouse=' . ttymouse_val 211ca57ab54SBram Moolenaar e Xfoo 212ca57ab54SBram Moolenaar tabnew Xbar 213ca57ab54SBram Moolenaar 214ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 215ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 216ca57ab54SBram Moolenaar \ ' Xfoo', 217ca57ab54SBram Moolenaar \ 'Tab page 2', 218ca57ab54SBram Moolenaar \ '> Xbar'], a) 219ca57ab54SBram Moolenaar 220ca57ab54SBram Moolenaar " Test clicking on tab names in the tabline at the top. 221ca57ab54SBram Moolenaar let col = 2 22239f76c6aSBram Moolenaar redraw 223ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 224ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 225ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 226ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 227ca57ab54SBram Moolenaar \ '> Xfoo', 228ca57ab54SBram Moolenaar \ 'Tab page 2', 229ca57ab54SBram Moolenaar \ ' Xbar'], a) 230ca57ab54SBram Moolenaar 231ca57ab54SBram Moolenaar let col = 9 232ca57ab54SBram Moolenaar call MouseLeftClick(row, col) 233ca57ab54SBram Moolenaar call MouseLeftRelease(row, col) 234ca57ab54SBram Moolenaar let a = split(execute(':tabs'), "\n") 235ca57ab54SBram Moolenaar call assert_equal(['Tab page 1', 236ca57ab54SBram Moolenaar \ ' Xfoo', 237ca57ab54SBram Moolenaar \ 'Tab page 2', 238ca57ab54SBram Moolenaar \ '> Xbar'], a) 239ca57ab54SBram Moolenaar 240ca57ab54SBram Moolenaar %bwipe! 241ca57ab54SBram Moolenaar endfor 242ca57ab54SBram Moolenaar 243ca57ab54SBram Moolenaar let &mouse = save_mouse 244ca57ab54SBram Moolenaar let &term = save_term 245ca57ab54SBram Moolenaar let &ttymouse = save_ttymouse 2463fb01a53SBram Moolenaarendfunc 24739f76c6aSBram Moolenaar 24839f76c6aSBram Moolenaarfunc Test_xterm_mouse_click_X_to_close_tab() 24939f76c6aSBram Moolenaar let save_mouse = &mouse 25039f76c6aSBram Moolenaar let save_term = &term 25139f76c6aSBram Moolenaar let save_ttymouse = &ttymouse 25239f76c6aSBram Moolenaar set mouse=a term=xterm 25339f76c6aSBram Moolenaar let row = 1 25439f76c6aSBram Moolenaar let col = &columns 25539f76c6aSBram Moolenaar 25639f76c6aSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 25739f76c6aSBram Moolenaar if ttymouse_val ==# 'xterm' && col > 223 25839f76c6aSBram Moolenaar " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported. 25939f76c6aSBram Moolenaar continue 26039f76c6aSBram Moolenaar endif 26139f76c6aSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 26239f76c6aSBram Moolenaar e Xtab1 26339f76c6aSBram Moolenaar tabnew Xtab2 26439f76c6aSBram Moolenaar tabnew Xtab3 26539f76c6aSBram Moolenaar tabn 2 26639f76c6aSBram Moolenaar 26739f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 26839f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 26939f76c6aSBram Moolenaar \ ' Xtab1', 27039f76c6aSBram Moolenaar \ 'Tab page 2', 27139f76c6aSBram Moolenaar \ '> Xtab2', 27239f76c6aSBram Moolenaar \ 'Tab page 3', 27339f76c6aSBram Moolenaar \ ' Xtab3'], a) 27439f76c6aSBram Moolenaar 27539f76c6aSBram Moolenaar " Click on "X" in tabline to close current tab i.e. Xtab2. 27639f76c6aSBram Moolenaar redraw 27739f76c6aSBram Moolenaar call MouseLeftClick(row, col) 27839f76c6aSBram Moolenaar call MouseLeftRelease(row, col) 27939f76c6aSBram Moolenaar let a = split(execute(':tabs'), "\n") 28039f76c6aSBram Moolenaar call assert_equal(['Tab page 1', 28139f76c6aSBram Moolenaar \ ' Xtab1', 28239f76c6aSBram Moolenaar \ 'Tab page 2', 28339f76c6aSBram Moolenaar \ '> Xtab3'], a) 28439f76c6aSBram Moolenaar 28539f76c6aSBram Moolenaar %bwipe! 28639f76c6aSBram Moolenaar endfor 28739f76c6aSBram Moolenaar 28839f76c6aSBram Moolenaar let &mouse = save_mouse 28939f76c6aSBram Moolenaar let &term = save_term 29039f76c6aSBram Moolenaar let &ttymouse = save_ttymouse 29139f76c6aSBram Moolenaarendfunc 292e3e3828fSBram Moolenaar 293e3e3828fSBram Moolenaarfunc Test_xterm_mouse_drag_to_move_tab() 294e3e3828fSBram Moolenaar let save_mouse = &mouse 295e3e3828fSBram Moolenaar let save_term = &term 296e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 297e3e3828fSBram Moolenaar " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 298e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=1 299e3e3828fSBram Moolenaar let row = 1 300e3e3828fSBram Moolenaar 301e3e3828fSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 302e3e3828fSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 303e3e3828fSBram Moolenaar e Xtab1 304e3e3828fSBram Moolenaar tabnew Xtab2 305e3e3828fSBram Moolenaar 306e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 307e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 308e3e3828fSBram Moolenaar \ ' Xtab1', 309e3e3828fSBram Moolenaar \ 'Tab page 2', 310e3e3828fSBram Moolenaar \ '> Xtab2'], a) 311e3e3828fSBram Moolenaar redraw 312e3e3828fSBram Moolenaar 313e3e3828fSBram Moolenaar " Click in tab2 and drag it to tab1. 314e3e3828fSBram Moolenaar " Check getcharmod() to verify that click is not 315e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 316e3e3828fSBram Moolenaar call MouseLeftClick(row, 10) 317e3e3828fSBram Moolenaar call assert_equal(0, getcharmod()) 318e3e3828fSBram Moolenaar for col in [9, 8, 7, 6] 319e3e3828fSBram Moolenaar call MouseLeftDrag(row, col) 320e3e3828fSBram Moolenaar endfor 321e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 322e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 323e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 324e3e3828fSBram Moolenaar \ '> Xtab2', 325e3e3828fSBram Moolenaar \ 'Tab page 2', 326e3e3828fSBram Moolenaar \ ' Xtab1'], a) 327e3e3828fSBram Moolenaar 328*7f279765SBram Moolenaar " brief sleep to avoid causing a double-click 329*7f279765SBram Moolenaar sleep 20m 330e3e3828fSBram Moolenaar %bwipe! 331e3e3828fSBram Moolenaar endfor 332e3e3828fSBram Moolenaar 333e3e3828fSBram Moolenaar let &mouse = save_mouse 334e3e3828fSBram Moolenaar let &term = save_term 335e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 336e3e3828fSBram Moolenaar set mousetime& 337e3e3828fSBram Moolenaarendfunc 338e3e3828fSBram Moolenaar 339e3e3828fSBram Moolenaarfunc Test_xterm_mouse_double_click_to_create_tab() 340e3e3828fSBram Moolenaar let save_mouse = &mouse 341e3e3828fSBram Moolenaar let save_term = &term 342e3e3828fSBram Moolenaar let save_ttymouse = &ttymouse 343e3e3828fSBram Moolenaar " Set 'mousetime' to a small value, so that double-click works but we don't 344e3e3828fSBram Moolenaar " have to wait long to avoid a triple-click. 345e3e3828fSBram Moolenaar set mouse=a term=xterm mousetime=100 346e3e3828fSBram Moolenaar let row = 1 347e3e3828fSBram Moolenaar let col = 10 348e3e3828fSBram Moolenaar 349e3e3828fSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 350e3e3828fSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 351e3e3828fSBram Moolenaar e Xtab1 352e3e3828fSBram Moolenaar tabnew Xtab2 353e3e3828fSBram Moolenaar 354e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 355e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 356e3e3828fSBram Moolenaar \ ' Xtab1', 357e3e3828fSBram Moolenaar \ 'Tab page 2', 358e3e3828fSBram Moolenaar \ '> Xtab2'], a) 359e3e3828fSBram Moolenaar 360e3e3828fSBram Moolenaar redraw 361e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 362e3e3828fSBram Moolenaar " Check getcharmod() to verify that first click is not 363e3e3828fSBram Moolenaar " interpreted as a spurious double-click. 364e3e3828fSBram Moolenaar call assert_equal(0, getcharmod()) 365e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 366e3e3828fSBram Moolenaar call MouseLeftClick(row, col) 367e3e3828fSBram Moolenaar call assert_equal(32, getcharmod()) " double-click 368e3e3828fSBram Moolenaar call MouseLeftRelease(row, col) 369e3e3828fSBram Moolenaar let a = split(execute(':tabs'), "\n") 370e3e3828fSBram Moolenaar call assert_equal(['Tab page 1', 371e3e3828fSBram Moolenaar \ ' Xtab1', 372e3e3828fSBram Moolenaar \ 'Tab page 2', 373e3e3828fSBram Moolenaar \ '> [No Name]', 374e3e3828fSBram Moolenaar \ 'Tab page 3', 375e3e3828fSBram Moolenaar \ ' Xtab2'], a) 376e3e3828fSBram Moolenaar 377e3e3828fSBram Moolenaar if ttymouse_val !=# 'sgr' 378e3e3828fSBram Moolenaar " We need to sleep, or else MouseLeftClick() in next loop 379e3e3828fSBram Moolenaar " iteration will be interpreted as a spurious triple-click. 380e3e3828fSBram Moolenaar sleep 100m 381e3e3828fSBram Moolenaar endif 382e3e3828fSBram Moolenaar %bwipe! 383e3e3828fSBram Moolenaar endfor 384e3e3828fSBram Moolenaar 385e3e3828fSBram Moolenaar let &mouse = save_mouse 386e3e3828fSBram Moolenaar let &term = save_term 387e3e3828fSBram Moolenaar let &ttymouse = save_ttymouse 388e3e3828fSBram Moolenaar set mousetime& 389e3e3828fSBram Moolenaarendfunc 390