comparison src/testdir/test_termcodes.vim @ 16487:a4732cdcfaaf v8.1.1247

patch 8.1.1247: urxvt mouse codes are not tested commit https://github.com/vim/vim/commit/d0621d85a6ceb17e1e6fb17415c3f94a755aaafa Author: Bram Moolenaar <Bram@vim.org> Date: Thu May 2 21:12:19 2019 +0200 patch 8.1.1247: urxvt mouse codes are not tested Problem: Urxvt mouse codes are not tested. Solution: Also set 'ttymouse' to "urxvt" in the termcodes test.
author Bram Moolenaar <Bram@vim.org>
date Thu, 02 May 2019 21:15:05 +0200
parents 8428e0edba1b
children 42910f306377
comparison
equal deleted inserted replaced
16486:2a84ef3a5cde 16487:a4732cdcfaaf
5 finish 5 finish
6 endif 6 endif
7 7
8 source shared.vim 8 source shared.vim
9 9
10 " xterm2 and sgr always work, urxvt is optional.
11 let s:test_ttymouse = ['xterm2', 'sgr']
12 if has('mouse_urxvt')
13 call add(s:test_ttymouse, 'urxvt')
14 endif
15
10 " Helper function to emit a terminal escape code. 16 " Helper function to emit a terminal escape code.
11 func TerminalEscapeCode(code_xterm, code_sgr, row, col, m) 17 func TerminalEscapeCode(code, row, col, m)
12 if &ttymouse ==# 'xterm2' 18 if &ttymouse ==# 'xterm2'
13 " need to use byte encoding here. 19 " need to use byte encoding here.
14 let str = list2str([a:code_xterm, a:col + 0x20, a:row + 0x20]) 20 let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20])
15 if has('iconv') 21 if has('iconv')
16 let bytes = iconv(str, 'utf-8', 'latin1') 22 let bytes = iconv(str, 'utf-8', 'latin1')
17 else 23 else
18 " Hopefully the numbers are not too big. 24 " Hopefully the numbers are not too big.
19 let bytes = str 25 let bytes = str
20 endif 26 endif
21 call feedkeys("\<Esc>[M" .. bytes, 'Lx!') 27 call feedkeys("\<Esc>[M" .. bytes, 'Lx!')
22 elseif &ttymouse ==# 'sgr' 28 elseif &ttymouse ==# 'sgr'
23 call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code_sgr, a:col, a:row, a:m), 'Lx!') 29 call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m), 'Lx!')
30 elseif &ttymouse ==# 'urxvt'
31 call feedkeys(printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row), 'Lx!')
24 endif 32 endif
25 endfunc 33 endfunc
26 34
27 func MouseLeftClick(row, col) 35 func MouseLeftClick(row, col)
28 call TerminalEscapeCode(0x20, 0, a:row, a:col, 'M') 36 call TerminalEscapeCode(0, a:row, a:col, 'M')
29 endfunc 37 endfunc
30 38
31 func MouseMiddleClick(row, col) 39 func MouseMiddleClick(row, col)
32 call TerminalEscapeCode(0x21, 1, a:row, a:col, 'M') 40 call TerminalEscapeCode(1, a:row, a:col, 'M')
33 endfunc 41 endfunc
34 42
35 func MouseCtrlLeftClick(row, col) 43 func MouseCtrlLeftClick(row, col)
36 let ctrl = 0x10 44 let ctrl = 0x10
37 call TerminalEscapeCode(0x20 + ctrl, 0 + ctrl, a:row, a:col, 'M') 45 call TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M')
38 endfunc 46 endfunc
39 47
40 func MouseCtrlRightClick(row, col) 48 func MouseCtrlRightClick(row, col)
41 let ctrl = 0x10 49 let ctrl = 0x10
42 call TerminalEscapeCode(0x22 + ctrl, 2 + ctrl, a:row, a:col, 'M') 50 call TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M')
43 endfunc 51 endfunc
44 52
45 func MouseLeftRelease(row, col) 53 func MouseLeftRelease(row, col)
46 call TerminalEscapeCode(0x23, 3, a:row, a:col, 'm') 54 call TerminalEscapeCode(3, a:row, a:col, 'm')
47 endfunc 55 endfunc
48 56
49 func MouseMiddleRelease(row, col) 57 func MouseMiddleRelease(row, col)
50 call TerminalEscapeCode(0x23, 3, a:row, a:col, 'm') 58 call TerminalEscapeCode(3, a:row, a:col, 'm')
51 endfunc 59 endfunc
52 60
53 func MouseRightRelease(row, col) 61 func MouseRightRelease(row, col)
54 call TerminalEscapeCode(0x23, 3, a:row, a:col, 'm') 62 call TerminalEscapeCode(3, a:row, a:col, 'm')
55 endfunc 63 endfunc
56 64
57 func MouseLeftDrag(row, col) 65 func MouseLeftDrag(row, col)
58 call TerminalEscapeCode(0x43, 0x20, a:row, a:col, 'M') 66 call TerminalEscapeCode(0x20, a:row, a:col, 'M')
59 endfunc 67 endfunc
60 68
61 func MouseWheelUp(row, col) 69 func MouseWheelUp(row, col)
62 call TerminalEscapeCode(0x40, 0x40, a:row, a:col, 'M') 70 call TerminalEscapeCode(0x40, a:row, a:col, 'M')
63 endfunc 71 endfunc
64 72
65 func MouseWheelDown(row, col) 73 func MouseWheelDown(row, col)
66 call TerminalEscapeCode(0x41, 0x41, a:row, a:col, 'M') 74 call TerminalEscapeCode(0x41, a:row, a:col, 'M')
67 endfunc 75 endfunc
68 76
69 func Test_xterm_mouse_left_click() 77 func Test_xterm_mouse_left_click()
70 new 78 new
71 let save_mouse = &mouse 79 let save_mouse = &mouse
72 let save_term = &term 80 let save_term = &term
73 let save_ttymouse = &ttymouse 81 let save_ttymouse = &ttymouse
74 set mouse=a term=xterm 82 set mouse=a term=xterm
75 call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) 83 call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
76 84
77 for ttymouse_val in ['xterm2', 'sgr'] 85 for ttymouse_val in s:test_ttymouse
78 let msg = 'ttymouse=' .. ttymouse_val 86 let msg = 'ttymouse=' .. ttymouse_val
79 exe 'set ttymouse=' .. ttymouse_val 87 exe 'set ttymouse=' .. ttymouse_val
80 go 88 go
81 call assert_equal([0, 1, 1, 0], getpos('.'), msg) 89 call assert_equal([0, 1, 1, 0], getpos('.'), msg)
82 let row = 2 90 let row = 2
97 let save_mouse = &mouse 105 let save_mouse = &mouse
98 let save_term = &term 106 let save_term = &term
99 let save_ttymouse = &ttymouse 107 let save_ttymouse = &ttymouse
100 set mouse=a term=xterm 108 set mouse=a term=xterm
101 109
102 for ttymouse_val in ['xterm2', 'sgr'] 110 for ttymouse_val in s:test_ttymouse
103 let msg = 'ttymouse=' .. ttymouse_val 111 let msg = 'ttymouse=' .. ttymouse_val
104 exe 'set ttymouse=' .. ttymouse_val 112 exe 'set ttymouse=' .. ttymouse_val
105 help 113 help
106 /usr_02.txt 114 /usr_02.txt
107 norm! zt 115 norm! zt
136 let save_ttymouse = &ttymouse 144 let save_ttymouse = &ttymouse
137 let save_quotestar = @* 145 let save_quotestar = @*
138 let @* = 'abc' 146 let @* = 'abc'
139 set mouse=a term=xterm 147 set mouse=a term=xterm
140 148
141 for ttymouse_val in ['xterm2', 'sgr'] 149 for ttymouse_val in s:test_ttymouse
142 let msg = 'ttymouse=' .. ttymouse_val 150 let msg = 'ttymouse=' .. ttymouse_val
143 exe 'set ttymouse=' .. ttymouse_val 151 exe 'set ttymouse=' .. ttymouse_val
144 call setline(1, ['123456789', '123456789']) 152 call setline(1, ['123456789', '123456789'])
145 153
146 " Middle-click in the middle of the line pastes text where clicked. 154 " Middle-click in the middle of the line pastes text where clicked.
177 let save_term = &term 185 let save_term = &term
178 let save_ttymouse = &ttymouse 186 let save_ttymouse = &ttymouse
179 set mouse=a term=xterm 187 set mouse=a term=xterm
180 call setline(1, range(1, 100)) 188 call setline(1, range(1, 100))
181 189
182 for ttymouse_val in ['xterm2', 'sgr'] 190 for ttymouse_val in s:test_ttymouse
183 let msg = 'ttymouse=' .. ttymouse_val 191 let msg = 'ttymouse=' .. ttymouse_val
184 exe 'set ttymouse=' .. ttymouse_val 192 exe 'set ttymouse=' .. ttymouse_val
185 go 193 go
186 call assert_equal(1, line('w0'), msg) 194 call assert_equal(1, line('w0'), msg)
187 call assert_equal([0, 1, 1, 0], getpos('.'), msg) 195 call assert_equal([0, 1, 1, 0], getpos('.'), msg)
213 let save_mouse = &mouse 221 let save_mouse = &mouse
214 let save_term = &term 222 let save_term = &term
215 let save_ttymouse = &ttymouse 223 let save_ttymouse = &ttymouse
216 set mouse=a term=xterm 224 set mouse=a term=xterm
217 225
218 for ttymouse_val in ['xterm2', 'sgr'] 226 for ttymouse_val in s:test_ttymouse
219 let msg = 'ttymouse=' .. ttymouse_val 227 let msg = 'ttymouse=' .. ttymouse_val
220 exe 'set ttymouse=' .. ttymouse_val 228 exe 'set ttymouse=' .. ttymouse_val
221 229
222 " Split horizontally and test dragging the horizontal window separator. 230 " Split horizontally and test dragging the horizontal window separator.
223 split 231 split
270 let save_term = &term 278 let save_term = &term
271 let save_ttymouse = &ttymouse 279 let save_ttymouse = &ttymouse
272 let save_laststatus = &laststatus 280 let save_laststatus = &laststatus
273 set mouse=a term=xterm laststatus=2 281 set mouse=a term=xterm laststatus=2
274 282
275 for ttymouse_val in ['xterm2', 'sgr'] 283 for ttymouse_val in s:test_ttymouse
276 let msg = 'ttymouse=' .. ttymouse_val 284 let msg = 'ttymouse=' .. ttymouse_val
277 exe 'set ttymouse=' .. ttymouse_val 285 exe 'set ttymouse=' .. ttymouse_val
278 286
279 call assert_equal(1, &cmdheight, msg) 287 call assert_equal(1, &cmdheight, msg)
280 let rowstatusline = winheight(0) + 1 288 let rowstatusline = winheight(0) + 1
311 let save_term = &term 319 let save_term = &term
312 let save_ttymouse = &ttymouse 320 let save_ttymouse = &ttymouse
313 set mouse=a term=xterm 321 set mouse=a term=xterm
314 let row = 1 322 let row = 1
315 323
316 for ttymouse_val in ['xterm2', 'sgr'] 324 for ttymouse_val in s:test_ttymouse
317 let msg = 'ttymouse=' .. ttymouse_val 325 let msg = 'ttymouse=' .. ttymouse_val
318 exe 'set ttymouse=' .. ttymouse_val 326 exe 'set ttymouse=' .. ttymouse_val
319 e Xfoo 327 e Xfoo
320 tabnew Xbar 328 tabnew Xbar
321 329
359 let save_ttymouse = &ttymouse 367 let save_ttymouse = &ttymouse
360 set mouse=a term=xterm 368 set mouse=a term=xterm
361 let row = 1 369 let row = 1
362 let col = &columns 370 let col = &columns
363 371
364 for ttymouse_val in ['xterm2', 'sgr'] 372 for ttymouse_val in s:test_ttymouse
365 if ttymouse_val ==# 'xterm2' && col > 223 373 if ttymouse_val ==# 'xterm2' && col > 223
366 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. 374 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported.
367 continue 375 continue
368 endif 376 endif
369 let msg = 'ttymouse=' .. ttymouse_val 377 let msg = 'ttymouse=' .. ttymouse_val
405 let save_ttymouse = &ttymouse 413 let save_ttymouse = &ttymouse
406 " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop 414 " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop
407 set mouse=a term=xterm mousetime=1 415 set mouse=a term=xterm mousetime=1
408 let row = 1 416 let row = 1
409 417
410 for ttymouse_val in ['xterm2', 'sgr'] 418 for ttymouse_val in s:test_ttymouse
411 let msg = 'ttymouse=' .. ttymouse_val 419 let msg = 'ttymouse=' .. ttymouse_val
412 exe 'set ttymouse=' .. ttymouse_val 420 exe 'set ttymouse=' .. ttymouse_val
413 e Xtab1 421 e Xtab1
414 tabnew Xtab2 422 tabnew Xtab2
415 423
454 " have to wait long to avoid a triple-click. 462 " have to wait long to avoid a triple-click.
455 set mouse=a term=xterm mousetime=100 463 set mouse=a term=xterm mousetime=100
456 let row = 1 464 let row = 1
457 let col = 10 465 let col = 10
458 466
459 for ttymouse_val in ['xterm2', 'sgr'] 467 let round = 0
468 for ttymouse_val in s:test_ttymouse
460 let msg = 'ttymouse=' .. ttymouse_val 469 let msg = 'ttymouse=' .. ttymouse_val
461 exe 'set ttymouse=' .. ttymouse_val 470 exe 'set ttymouse=' .. ttymouse_val
462 e Xtab1 471 e Xtab1
463 tabnew Xtab2 472 tabnew Xtab2
473
474 if round > 0
475 " We need to sleep, or else the first MouseLeftClick() will be
476 " interpreted as a spurious triple-click.
477 sleep 100m
478 endif
479 let round += 1
464 480
465 let a = split(execute(':tabs'), "\n") 481 let a = split(execute(':tabs'), "\n")
466 call assert_equal(['Tab page 1', 482 call assert_equal(['Tab page 1',
467 \ ' Xtab1', 483 \ ' Xtab1',
468 \ 'Tab page 2', 484 \ 'Tab page 2',
483 \ 'Tab page 2', 499 \ 'Tab page 2',
484 \ '> [No Name]', 500 \ '> [No Name]',
485 \ 'Tab page 3', 501 \ 'Tab page 3',
486 \ ' Xtab2'], a, msg) 502 \ ' Xtab2'], a, msg)
487 503
488 if ttymouse_val !=# 'sgr'
489 " We need to sleep, or else MouseLeftClick() in next loop
490 " iteration will be interpreted as a spurious triple-click.
491 sleep 100m
492 endif
493 %bwipe! 504 %bwipe!
494 endfor 505 endfor
495 506
496 let &mouse = save_mouse 507 let &mouse = save_mouse
497 let &term = save_term 508 let &term = save_term