mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #23364 from zeertzjq/vim-8.1.1155
vim-patch:8.1.{partial:1155,1160,1165,1167,1175,1176,1178,1179,1181,1216,1223,1244,1247,1248,.2106,2148,2306},9.0.0825
This commit is contained in:
commit
d8cc98caae
@ -1,5 +1,9 @@
|
|||||||
" Helper functions for generating mouse events
|
" Helper functions for generating mouse events
|
||||||
|
|
||||||
|
let g:Ttymouse_values = ['sgr']
|
||||||
|
let g:Ttymouse_dec = []
|
||||||
|
let g:Ttymouse_netterm = []
|
||||||
|
|
||||||
func MouseLeftClick(row, col)
|
func MouseLeftClick(row, col)
|
||||||
call nvim_input_mouse('left', 'press', '', 0, a:row - 1, a:col - 1)
|
call nvim_input_mouse('left', 'press', '', 0, a:row - 1, a:col - 1)
|
||||||
call getchar(1)
|
call getchar(1)
|
||||||
|
@ -12,6 +12,7 @@ if exists('s:did_load')
|
|||||||
set laststatus=1
|
set laststatus=1
|
||||||
set listchars=eol:$
|
set listchars=eol:$
|
||||||
set joinspaces
|
set joinspaces
|
||||||
|
set mousemodel=extend
|
||||||
set nohidden nosmarttab noautoindent noautoread noruler noshowcmd
|
set nohidden nosmarttab noautoindent noautoread noruler noshowcmd
|
||||||
set nohlsearch noincsearch
|
set nohlsearch noincsearch
|
||||||
set nrformats=bin,octal,hex
|
set nrformats=bin,octal,hex
|
||||||
|
@ -163,7 +163,7 @@ endfunc
|
|||||||
" Test double/triple/quadruple click to start 'select' mode
|
" Test double/triple/quadruple click to start 'select' mode
|
||||||
func Test_term_mouse_multiple_clicks_to_select_mode()
|
func Test_term_mouse_multiple_clicks_to_select_mode()
|
||||||
let save_mouse = &mouse
|
let save_mouse = &mouse
|
||||||
" let save_term = &term
|
let save_term = &term
|
||||||
" let save_ttymouse = &ttymouse
|
" let save_ttymouse = &ttymouse
|
||||||
" call test_override('no_query_mouse', 1)
|
" call test_override('no_query_mouse', 1)
|
||||||
" set mouse=a term=xterm mousetime=200
|
" set mouse=a term=xterm mousetime=200
|
||||||
@ -171,10 +171,9 @@ func Test_term_mouse_multiple_clicks_to_select_mode()
|
|||||||
set selectmode=mouse
|
set selectmode=mouse
|
||||||
new
|
new
|
||||||
|
|
||||||
" for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
" let msg = 'ttymouse=' .. ttymouse_val
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
" exe 'set ttymouse=' .. ttymouse_val
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
let msg = ''
|
|
||||||
|
|
||||||
" Single-click and drag should 'select' the characters
|
" Single-click and drag should 'select' the characters
|
||||||
call setline(1, ['foo [foo bar] foo', 'foo'])
|
call setline(1, ['foo [foo bar] foo', 'foo'])
|
||||||
@ -247,7 +246,7 @@ func Test_term_mouse_multiple_clicks_to_select_mode()
|
|||||||
call assert_equal("\<c-s>", mode(), msg)
|
call assert_equal("\<c-s>", mode(), msg)
|
||||||
norm! x
|
norm! x
|
||||||
call assert_equal(['axaa', 'bxbb'], getline(1, '$'), msg)
|
call assert_equal(['axaa', 'bxbb'], getline(1, '$'), msg)
|
||||||
" endfor
|
endfor
|
||||||
|
|
||||||
let &mouse = save_mouse
|
let &mouse = save_mouse
|
||||||
" let &term = save_term
|
" let &term = save_term
|
||||||
|
@ -1,4 +1,792 @@
|
|||||||
|
|
||||||
|
source check.vim
|
||||||
|
" CheckNotGui
|
||||||
|
" CheckUnix
|
||||||
|
|
||||||
|
source shared.vim
|
||||||
|
source mouse.vim
|
||||||
|
source view_util.vim
|
||||||
|
source term_util.vim
|
||||||
|
|
||||||
|
func Test_term_mouse_left_click()
|
||||||
|
new
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
go
|
||||||
|
call assert_equal([0, 1, 1, 0], getpos('.'), msg)
|
||||||
|
let row = 2
|
||||||
|
let col = 6
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal([0, 2, 6, 0], getpos('.'), msg)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_xterm_mouse_right_click_extends_visual()
|
||||||
|
if has('mac')
|
||||||
|
" throw "Skipped: test right click in visual mode does not work on macOs (why?)"
|
||||||
|
endif
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
for visual_mode in ["v", "V", "\<C-V>"]
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'visual=' .. visual_mode .. ' ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
|
||||||
|
call setline(1, repeat([repeat('-', 7)], 7))
|
||||||
|
call MouseLeftClick(4, 4)
|
||||||
|
call MouseLeftRelease(4, 4)
|
||||||
|
exe "norm! " .. visual_mode
|
||||||
|
|
||||||
|
" Right click extends top left of visual area.
|
||||||
|
call MouseRightClick(2, 2)
|
||||||
|
call MouseRightRelease(2, 2)
|
||||||
|
|
||||||
|
" Right click extends bottom bottom right of visual area.
|
||||||
|
call MouseRightClick(6, 6)
|
||||||
|
call MouseRightRelease(6, 6)
|
||||||
|
norm! r1gv
|
||||||
|
|
||||||
|
" Right click shrinks top left of visual area.
|
||||||
|
call MouseRightClick(3, 3)
|
||||||
|
call MouseRightRelease(3, 3)
|
||||||
|
|
||||||
|
" Right click shrinks bottom right of visual area.
|
||||||
|
call MouseRightClick(5, 5)
|
||||||
|
call MouseRightRelease(5, 5)
|
||||||
|
norm! r2
|
||||||
|
|
||||||
|
if visual_mode ==# 'v'
|
||||||
|
call assert_equal(['-------',
|
||||||
|
\ '-111111',
|
||||||
|
\ '1122222',
|
||||||
|
\ '2222222',
|
||||||
|
\ '2222211',
|
||||||
|
\ '111111-',
|
||||||
|
\ '-------'], getline(1, '$'), msg)
|
||||||
|
elseif visual_mode ==# 'V'
|
||||||
|
call assert_equal(['-------',
|
||||||
|
\ '1111111',
|
||||||
|
\ '2222222',
|
||||||
|
\ '2222222',
|
||||||
|
\ '2222222',
|
||||||
|
\ '1111111',
|
||||||
|
\ '-------'], getline(1, '$'), msg)
|
||||||
|
else
|
||||||
|
call assert_equal(['-------',
|
||||||
|
\ '-11111-',
|
||||||
|
\ '-12221-',
|
||||||
|
\ '-12221-',
|
||||||
|
\ '-12221-',
|
||||||
|
\ '-11111-',
|
||||||
|
\ '-------'], getline(1, '$'), msg)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back.
|
||||||
|
func Test_xterm_mouse_ctrl_click()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
" help
|
||||||
|
help usr_toc.txt
|
||||||
|
/usr_02.txt
|
||||||
|
norm! zt
|
||||||
|
let row = 1
|
||||||
|
let col = 1
|
||||||
|
call MouseCtrlLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_match('usr_02.txt$', bufname('%'), msg)
|
||||||
|
call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg)
|
||||||
|
|
||||||
|
call MouseCtrlRightClick(row, col)
|
||||||
|
call MouseRightRelease(row, col)
|
||||||
|
" call assert_match('help.txt$', bufname('%'), msg)
|
||||||
|
call assert_match('usr_toc.txt$', bufname('%'), msg)
|
||||||
|
call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg)
|
||||||
|
|
||||||
|
helpclose
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_middle_click()
|
||||||
|
CheckFeature clipboard_working
|
||||||
|
|
||||||
|
new
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
let save_quotestar = @*
|
||||||
|
let @* = 'abc'
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
call setline(1, ['123456789', '123456789'])
|
||||||
|
|
||||||
|
" Middle-click in the middle of the line pastes text where clicked.
|
||||||
|
let row = 1
|
||||||
|
let col = 6
|
||||||
|
call MouseMiddleClick(row, col)
|
||||||
|
call MouseMiddleRelease(row, col)
|
||||||
|
call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg)
|
||||||
|
|
||||||
|
" Middle-click beyond end of the line pastes text at the end of the line.
|
||||||
|
let col = 20
|
||||||
|
call MouseMiddleClick(row, col)
|
||||||
|
call MouseMiddleRelease(row, col)
|
||||||
|
call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg)
|
||||||
|
|
||||||
|
" Middle-click beyond the last line pastes in the last line.
|
||||||
|
let row = 5
|
||||||
|
let col = 3
|
||||||
|
call MouseMiddleClick(row, col)
|
||||||
|
call MouseMiddleRelease(row, col)
|
||||||
|
call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
let @* = save_quotestar
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" TODO: for unclear reasons this test fails if it comes after
|
||||||
|
" Test_xterm_mouse_ctrl_click()
|
||||||
|
func Test_1xterm_mouse_wheel()
|
||||||
|
new
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
call setline(1, range(1, 100))
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
go
|
||||||
|
call assert_equal(1, line('w0'), msg)
|
||||||
|
call assert_equal([0, 1, 1, 0], getpos('.'), msg)
|
||||||
|
|
||||||
|
call MouseWheelDown(1, 1)
|
||||||
|
call assert_equal(4, line('w0'), msg)
|
||||||
|
call assert_equal([0, 4, 1, 0], getpos('.'), msg)
|
||||||
|
|
||||||
|
call MouseWheelDown(1, 1)
|
||||||
|
call assert_equal(7, line('w0'), msg)
|
||||||
|
call assert_equal([0, 7, 1, 0], getpos('.'), msg)
|
||||||
|
|
||||||
|
call MouseWheelUp(1, 1)
|
||||||
|
call assert_equal(4, line('w0'), msg)
|
||||||
|
call assert_equal([0, 7, 1, 0], getpos('.'), msg)
|
||||||
|
|
||||||
|
call MouseWheelUp(1, 1)
|
||||||
|
call assert_equal(1, line('w0'), msg)
|
||||||
|
call assert_equal([0, 7, 1, 0], getpos('.'), msg)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test that dragging beyond the window (at the bottom and at the top)
|
||||||
|
" scrolls window content by the number of of lines beyond the window.
|
||||||
|
func Test_term_mouse_drag_beyond_window()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
let col = 1
|
||||||
|
call setline(1, range(1, 100))
|
||||||
|
|
||||||
|
" Split into 3 windows, and go into the middle window
|
||||||
|
" so we test dragging mouse below and above the window.
|
||||||
|
2split
|
||||||
|
wincmd j
|
||||||
|
2split
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
|
||||||
|
" Line #10 at the top.
|
||||||
|
norm! 10zt
|
||||||
|
redraw
|
||||||
|
call assert_equal(10, winsaveview().topline, msg)
|
||||||
|
call assert_equal(2, winheight(0), msg)
|
||||||
|
|
||||||
|
let row = 4
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call assert_equal(10, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
" Drag downwards. We're still in the window so topline should
|
||||||
|
" not change yet.
|
||||||
|
let row += 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(10, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
" We now leave the window at the bottom, so the window content should
|
||||||
|
" scroll by 1 line, then 2 lines (etc) as we drag further away.
|
||||||
|
let row += 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(11, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
let row += 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(13, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
" Now drag upwards.
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(14, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
" We're now back in the window so the topline should not change.
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(14, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(14, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
" We now leave the window at the top so the window content should
|
||||||
|
" scroll by 1 line, then 2, then 3 (etc) in the opposite direction.
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(13, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(11, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(8, winsaveview().topline, msg)
|
||||||
|
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal(8, winsaveview().topline, msg)
|
||||||
|
call assert_equal(2, winheight(0), msg)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_drag_window_separator()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
|
||||||
|
" Split horizontally and test dragging the horizontal window separator.
|
||||||
|
split
|
||||||
|
let rowseparator = winheight(0) + 1
|
||||||
|
let row = rowseparator
|
||||||
|
let col = 1
|
||||||
|
|
||||||
|
" When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported.
|
||||||
|
if ttymouse_val !=# 'xterm2' || row <= 223
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
|
||||||
|
let row += 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(rowseparator, winheight(0) + 1, msg)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal(rowseparator, winheight(0) + 1, msg)
|
||||||
|
endif
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
" Split vertically and test dragging the vertical window separator.
|
||||||
|
vsplit
|
||||||
|
let colseparator = winwidth(0) + 1
|
||||||
|
let row = 1
|
||||||
|
let col = colseparator
|
||||||
|
|
||||||
|
" When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported.
|
||||||
|
if ttymouse_val !=# 'xterm2' || col <= 223
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
let col -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(colseparator - 1, winwidth(0) + 1, msg)
|
||||||
|
let col += 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(colseparator, winwidth(0) + 1, msg)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal(colseparator, winwidth(0) + 1, msg)
|
||||||
|
endif
|
||||||
|
bwipe!
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_drag_statusline()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
let save_laststatus = &laststatus
|
||||||
|
" set mouse=a term=xterm laststatus=2
|
||||||
|
set mouse=a laststatus=2
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
|
||||||
|
call assert_equal(1, &cmdheight, msg)
|
||||||
|
let rowstatusline = winheight(0) + 1
|
||||||
|
let row = rowstatusline
|
||||||
|
let col = 1
|
||||||
|
|
||||||
|
if ttymouse_val ==# 'xterm2' && row > 223
|
||||||
|
" When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
let row -= 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(2, &cmdheight, msg)
|
||||||
|
call assert_equal(rowstatusline - 1, winheight(0) + 1, msg)
|
||||||
|
let row += 1
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
call assert_equal(1, &cmdheight, msg)
|
||||||
|
call assert_equal(rowstatusline, winheight(0) + 1, msg)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal(1, &cmdheight, msg)
|
||||||
|
call assert_equal(rowstatusline, winheight(0) + 1, msg)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
let &laststatus = save_laststatus
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_click_tab()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
let row = 1
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
e Xfoo
|
||||||
|
tabnew Xbar
|
||||||
|
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '# Xfoo',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xbar'], a, msg)
|
||||||
|
|
||||||
|
" Test clicking on tab names in the tabline at the top.
|
||||||
|
let col = 2
|
||||||
|
redraw
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '> Xfoo',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '# Xbar'], a, msg)
|
||||||
|
|
||||||
|
let col = 9
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '# Xfoo',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xbar'], a, msg)
|
||||||
|
|
||||||
|
%bwipe!
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_click_X_to_close_tab()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm
|
||||||
|
set mouse=a
|
||||||
|
let row = 1
|
||||||
|
let col = &columns
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm
|
||||||
|
if ttymouse_val ==# 'xterm2' && col > 223
|
||||||
|
" When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
e Xtab1
|
||||||
|
tabnew Xtab2
|
||||||
|
tabnew Xtab3
|
||||||
|
tabn 2
|
||||||
|
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ ' Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab2',
|
||||||
|
\ 'Tab page 3',
|
||||||
|
\ '# Xtab3'], a, msg)
|
||||||
|
|
||||||
|
" Click on "X" in tabline to close current tab i.e. Xtab2.
|
||||||
|
redraw
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ ' Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab3'], a, msg)
|
||||||
|
|
||||||
|
%bwipe!
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_drag_to_move_tab()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" Set 'mousetime' to 1 to avoid recognizing a double-click in the loop
|
||||||
|
" set mouse=a term=xterm mousetime=1
|
||||||
|
set mouse=a mousetime=0
|
||||||
|
let row = 1
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
e Xtab1
|
||||||
|
tabnew Xtab2
|
||||||
|
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '# Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab2'], a, msg)
|
||||||
|
redraw
|
||||||
|
|
||||||
|
" Click in tab2 and drag it to tab1.
|
||||||
|
" Check getcharmod() to verify that click is not
|
||||||
|
" interpreted as a spurious double-click.
|
||||||
|
call MouseLeftClick(row, 10)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
for col in [9, 8, 7, 6]
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
endfor
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '> Xtab2',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '# Xtab1'], a, msg)
|
||||||
|
|
||||||
|
" Switch to tab1
|
||||||
|
tabnext
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '# Xtab2',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab1'], a, msg)
|
||||||
|
|
||||||
|
" Click in tab2 and drag it to tab1.
|
||||||
|
" This time it is non-current tab.
|
||||||
|
call MouseLeftClick(row, 6)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
for col in [7, 8, 9, 10]
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
endfor
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '# Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab2'], a, msg)
|
||||||
|
|
||||||
|
" Click elsewhere so that click in next iteration is not
|
||||||
|
" interpreted as unwanted double-click.
|
||||||
|
call MouseLeftClick(row, 11)
|
||||||
|
call MouseLeftRelease(row, 11)
|
||||||
|
|
||||||
|
%bwipe!
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
set mousetime&
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_term_mouse_double_click_to_create_tab()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" Set 'mousetime' to a small value, so that double-click works but we don't
|
||||||
|
" have to wait long to avoid a triple-click.
|
||||||
|
" set mouse=a term=xterm mousetime=200
|
||||||
|
set mouse=a mousetime=200
|
||||||
|
let row = 1
|
||||||
|
let col = 10
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
e Xtab1
|
||||||
|
tabnew Xtab2
|
||||||
|
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ '# Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab2'], a, msg)
|
||||||
|
|
||||||
|
redraw
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
" Check getcharmod() to verify that first click is not
|
||||||
|
" interpreted as a spurious double-click.
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call assert_equal(32, getcharmod(), msg) " double-click
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ ' Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> [No Name]',
|
||||||
|
\ 'Tab page 3',
|
||||||
|
\ '# Xtab2'], a, msg)
|
||||||
|
|
||||||
|
" Click elsewhere so that click in next iteration is not
|
||||||
|
" interpreted as unwanted double click.
|
||||||
|
call MouseLeftClick(row, col + 1)
|
||||||
|
call MouseLeftRelease(row, col + 1)
|
||||||
|
|
||||||
|
%bwipe!
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
set mousetime&
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test double/triple/quadruple click in normal mode to visually select.
|
||||||
|
func Test_term_mouse_multiple_clicks_to_visually_select()
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
" call test_override('no_query_mouse', 1)
|
||||||
|
" set mouse=a term=xterm mousetime=200
|
||||||
|
set mouse=a mousetime=200
|
||||||
|
new
|
||||||
|
|
||||||
|
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
|
||||||
|
let msg = 'ttymouse=' .. ttymouse_val
|
||||||
|
" exe 'set ttymouse=' .. ttymouse_val
|
||||||
|
call setline(1, ['foo [foo bar] foo', 'foo'])
|
||||||
|
|
||||||
|
" Double-click on word should visually select the word.
|
||||||
|
call MouseLeftClick(1, 2)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
call MouseLeftRelease(1, 2)
|
||||||
|
call MouseLeftClick(1, 2)
|
||||||
|
call assert_equal(32, getcharmod(), msg) " double-click
|
||||||
|
call MouseLeftRelease(1, 2)
|
||||||
|
call assert_equal('v', mode(), msg)
|
||||||
|
norm! r1
|
||||||
|
call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg)
|
||||||
|
|
||||||
|
" Double-click on opening square bracket should visually
|
||||||
|
" select the whole [foo bar].
|
||||||
|
call MouseLeftClick(1, 5)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
call MouseLeftRelease(1, 5)
|
||||||
|
call MouseLeftClick(1, 5)
|
||||||
|
call assert_equal(32, getcharmod(), msg) " double-click
|
||||||
|
call MouseLeftRelease(1, 5)
|
||||||
|
call assert_equal('v', mode(), msg)
|
||||||
|
norm! r2
|
||||||
|
call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg)
|
||||||
|
|
||||||
|
" Triple-click should visually select the whole line.
|
||||||
|
call MouseLeftClick(1, 3)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
call MouseLeftRelease(1, 3)
|
||||||
|
call MouseLeftClick(1, 3)
|
||||||
|
call assert_equal(32, getcharmod(), msg) " double-click
|
||||||
|
call MouseLeftRelease(1, 3)
|
||||||
|
call MouseLeftClick(1, 3)
|
||||||
|
call assert_equal(64, getcharmod(), msg) " triple-click
|
||||||
|
call MouseLeftRelease(1, 3)
|
||||||
|
call assert_equal('V', mode(), msg)
|
||||||
|
norm! r3
|
||||||
|
call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg)
|
||||||
|
|
||||||
|
" Quadruple-click should start visual block select.
|
||||||
|
call MouseLeftClick(1, 2)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
call MouseLeftRelease(1, 2)
|
||||||
|
call MouseLeftClick(1, 2)
|
||||||
|
call assert_equal(32, getcharmod(), msg) " double-click
|
||||||
|
call MouseLeftRelease(1, 2)
|
||||||
|
call MouseLeftClick(1, 2)
|
||||||
|
call assert_equal(64, getcharmod(), msg) " triple-click
|
||||||
|
call MouseLeftRelease(1, 2)
|
||||||
|
call MouseLeftClick(1, 2)
|
||||||
|
call assert_equal(96, getcharmod(), msg) " quadruple-click
|
||||||
|
call MouseLeftRelease(1, 2)
|
||||||
|
call assert_equal("\<c-v>", mode(), msg)
|
||||||
|
norm! r4
|
||||||
|
call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let &mouse = save_mouse
|
||||||
|
" let &term = save_term
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
set mousetime&
|
||||||
|
" call test_override('no_query_mouse', 0)
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_xterm_mouse_click_in_fold_columns()
|
||||||
|
new
|
||||||
|
let save_mouse = &mouse
|
||||||
|
let save_term = &term
|
||||||
|
" let save_ttymouse = &ttymouse
|
||||||
|
let save_foldcolumn = &foldcolumn
|
||||||
|
" set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2
|
||||||
|
set mouse=a foldcolumn=3
|
||||||
|
|
||||||
|
" Create 2 nested folds.
|
||||||
|
call setline(1, range(1, 7))
|
||||||
|
2,6fold
|
||||||
|
norm! zR
|
||||||
|
4,5fold
|
||||||
|
call assert_equal([-1, -1, -1, 4, 4, -1, -1],
|
||||||
|
\ map(range(1, 7), 'foldclosed(v:val)'))
|
||||||
|
|
||||||
|
" Click in "+" of inner fold in foldcolumn should open it.
|
||||||
|
redraw
|
||||||
|
let row = 4
|
||||||
|
let col = 2
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal([-1, -1, -1, -1, -1, -1, -1],
|
||||||
|
\ map(range(1, 7), 'foldclosed(v:val)'))
|
||||||
|
|
||||||
|
" Click in "-" of outer fold in foldcolumn should close it.
|
||||||
|
redraw
|
||||||
|
let row = 2
|
||||||
|
let col = 1
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal([-1, 2, 2, 2, 2, 2, -1],
|
||||||
|
\ map(range(1, 7), 'foldclosed(v:val)'))
|
||||||
|
norm! zR
|
||||||
|
|
||||||
|
" Click in "|" of inner fold in foldcolumn should close it.
|
||||||
|
redraw
|
||||||
|
let row = 5
|
||||||
|
let col = 2
|
||||||
|
call MouseLeftClick(row, col)
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
call assert_equal([-1, -1, -1, 4, 4, -1, -1],
|
||||||
|
\ map(range(1, 7), 'foldclosed(v:val)'))
|
||||||
|
|
||||||
|
let &foldcolumn = save_foldcolumn
|
||||||
|
" Redraw at the end of the test to avoid interfering with other tests.
|
||||||
|
defer execute('redraw')
|
||||||
|
" let &ttymouse = save_ttymouse
|
||||||
|
" let &term = save_term
|
||||||
|
let &mouse = save_mouse
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for translation of special key codes (<xF1>, <xF2>, etc.)
|
" Test for translation of special key codes (<xF1>, <xF2>, etc.)
|
||||||
func Test_Keycode_Translation()
|
func Test_Keycode_Translation()
|
||||||
let keycodes = [
|
let keycodes = [
|
||||||
|
Loading…
Reference in New Issue
Block a user