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 121*c8b3ddabSBram Moolenaar 122*c8b3ddabSBram Moolenaar if ttymouse_val ==# 'xterm' && row > 223 123*c8b3ddabSBram Moolenaar " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported. 124*c8b3ddabSBram Moolenaar continue 125*c8b3ddabSBram Moolenaar endif 126*c8b3ddabSBram Moolenaar 1273fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1283fb01a53SBram Moolenaar 1293fb01a53SBram Moolenaar let row -= 1 1303fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1313fb01a53SBram Moolenaar call assert_equal(rowseparator - 1, winheight(0) + 1) 1323fb01a53SBram Moolenaar let row += 1 1333fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1343fb01a53SBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1) 1353fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1363fb01a53SBram Moolenaar call assert_equal(rowseparator, winheight(0) + 1) 1373fb01a53SBram Moolenaar 1383fb01a53SBram Moolenaar bwipe! 1393fb01a53SBram Moolenaar 1403fb01a53SBram Moolenaar " Split vertically and test dragging the vertical window separator. 1413fb01a53SBram Moolenaar vsplit 1423fb01a53SBram Moolenaar let colseparator = winwidth(0) + 1 1433fb01a53SBram Moolenaar 1443fb01a53SBram Moolenaar let row = 1 1453fb01a53SBram Moolenaar let col = colseparator 1463fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1473fb01a53SBram Moolenaar let col -= 1 1483fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1493fb01a53SBram Moolenaar call assert_equal(colseparator - 1, winwidth(0) + 1) 1503fb01a53SBram Moolenaar let col += 1 1513fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1523fb01a53SBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1) 1533fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1543fb01a53SBram Moolenaar call assert_equal(colseparator, winwidth(0) + 1) 1553fb01a53SBram Moolenaar 1563fb01a53SBram Moolenaar bwipe! 1573fbd2d7cSBram Moolenaar endfor 1583fbd2d7cSBram Moolenaar 1593fbd2d7cSBram Moolenaar let &mouse = save_mouse 1603fbd2d7cSBram Moolenaar let &term = save_term 1613fbd2d7cSBram Moolenaar let &ttymouse = save_ttymouse 1623fbd2d7cSBram Moolenaarendfunc 1633fbd2d7cSBram Moolenaar 1643fbd2d7cSBram Moolenaarfunc Test_xterm_mouse_drag_statusline() 1653fbd2d7cSBram Moolenaar let save_mouse = &mouse 1663fbd2d7cSBram Moolenaar let save_term = &term 1673fbd2d7cSBram Moolenaar let save_ttymouse = &ttymouse 1683fbd2d7cSBram Moolenaar set mouse=a term=xterm 1693fbd2d7cSBram Moolenaar 1703fbd2d7cSBram Moolenaar for ttymouse_val in ['xterm', 'sgr'] 1713fbd2d7cSBram Moolenaar exe 'set ttymouse=' . ttymouse_val 1723fbd2d7cSBram Moolenaar 1733fbd2d7cSBram Moolenaar call assert_equal(1, &cmdheight) 1743fbd2d7cSBram Moolenaar let rowstatusline = winheight(0) + 1 1753fbd2d7cSBram Moolenaar let row = rowstatusline 1763fbd2d7cSBram Moolenaar let col = 1 177*c8b3ddabSBram Moolenaar 178*c8b3ddabSBram Moolenaar if ttymouse_val ==# 'xterm' && row > 223 179*c8b3ddabSBram Moolenaar " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported. 180*c8b3ddabSBram Moolenaar continue 181*c8b3ddabSBram Moolenaar endif 182*c8b3ddabSBram Moolenaar 1833fbd2d7cSBram Moolenaar call MouseLeftClick(row, col) 1843fbd2d7cSBram Moolenaar let row -= 1 1853fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1863fbd2d7cSBram Moolenaar call assert_equal(2, &cmdheight) 1873fbd2d7cSBram Moolenaar call assert_equal(rowstatusline - 1, winheight(0) + 1) 1883fbd2d7cSBram Moolenaar let row += 1 1893fbd2d7cSBram Moolenaar call MouseLeftDrag(row, col) 1903fbd2d7cSBram Moolenaar call assert_equal(1, &cmdheight) 1913fbd2d7cSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1) 1923fbd2d7cSBram Moolenaar call MouseLeftRelease(row, col) 1933fbd2d7cSBram Moolenaar call assert_equal(1, &cmdheight) 1943fbd2d7cSBram Moolenaar call assert_equal(rowstatusline, winheight(0) + 1) 1953fbd2d7cSBram Moolenaar endfor 1963fbd2d7cSBram Moolenaar 1973fb01a53SBram Moolenaar let &mouse = save_mouse 1983fb01a53SBram Moolenaar let &term = save_term 1993fb01a53SBram Moolenaar let &ttymouse = save_ttymouse 2003fb01a53SBram Moolenaarendfunc 201