xref: /vim-8.2.3635/src/testdir/mouse.vim (revision 2764d06a)
1515545e1SBram Moolenaar" Helper functions for generating mouse events
2515545e1SBram Moolenaar
3515545e1SBram Moolenaar" xterm2 and sgr always work, urxvt is optional.
4515545e1SBram Moolenaarlet g:Ttymouse_values = ['xterm2', 'sgr']
5515545e1SBram Moolenaarif has('mouse_urxvt')
6515545e1SBram Moolenaar  call add(g:Ttymouse_values, 'urxvt')
7515545e1SBram Moolenaarendif
8515545e1SBram Moolenaar
9515545e1SBram Moolenaar" dec doesn't support all the functionality
10515545e1SBram Moolenaarif has('mouse_dec')
11515545e1SBram Moolenaar  let g:Ttymouse_dec = ['dec']
12515545e1SBram Moolenaarelse
13515545e1SBram Moolenaar  let g:Ttymouse_dec = []
14515545e1SBram Moolenaarendif
15515545e1SBram Moolenaar
16515545e1SBram Moolenaar" netterm only supports left click
17515545e1SBram Moolenaarif has('mouse_netterm')
18515545e1SBram Moolenaar  let g:Ttymouse_netterm = ['netterm']
19515545e1SBram Moolenaarelse
20515545e1SBram Moolenaar  let g:Ttymouse_netterm = []
21515545e1SBram Moolenaarendif
22515545e1SBram Moolenaar
23515545e1SBram Moolenaar" Helper function to emit a terminal escape code.
24515545e1SBram Moolenaarfunc TerminalEscapeCode(code, row, col, m)
25515545e1SBram Moolenaar  if &ttymouse ==# 'xterm2'
26515545e1SBram Moolenaar    " need to use byte encoding here.
27515545e1SBram Moolenaar    let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20])
28515545e1SBram Moolenaar    if has('iconv')
29515545e1SBram Moolenaar      let bytes = str->iconv('utf-8', 'latin1')
30515545e1SBram Moolenaar    else
31515545e1SBram Moolenaar      " Hopefully the numbers are not too big.
32515545e1SBram Moolenaar      let bytes = str
33515545e1SBram Moolenaar    endif
34515545e1SBram Moolenaar    return "\<Esc>[M" .. bytes
35515545e1SBram Moolenaar  elseif &ttymouse ==# 'sgr'
36515545e1SBram Moolenaar    return printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m)
37515545e1SBram Moolenaar  elseif &ttymouse ==# 'urxvt'
38515545e1SBram Moolenaar    return printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row)
39515545e1SBram Moolenaar  endif
40515545e1SBram Moolenaarendfunc
41515545e1SBram Moolenaar
42515545e1SBram Moolenaarfunc DecEscapeCode(code, down, row, col)
43515545e1SBram Moolenaar    return printf("\<Esc>[%d;%d;%d;%d&w", a:code, a:down, a:row, a:col)
44515545e1SBram Moolenaarendfunc
45515545e1SBram Moolenaar
46515545e1SBram Moolenaarfunc NettermEscapeCode(row, col)
47515545e1SBram Moolenaar    return printf("\<Esc>}%d,%d\r", a:row, a:col)
48515545e1SBram Moolenaarendfunc
49515545e1SBram Moolenaar
50515545e1SBram Moolenaarfunc MouseLeftClickCode(row, col)
51515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
52515545e1SBram Moolenaar    return DecEscapeCode(2, 4, a:row, a:col)
53515545e1SBram Moolenaar  elseif &ttymouse ==# 'netterm'
54515545e1SBram Moolenaar    return NettermEscapeCode(a:row, a:col)
55515545e1SBram Moolenaar  else
56515545e1SBram Moolenaar    return TerminalEscapeCode(0, a:row, a:col, 'M')
57515545e1SBram Moolenaar  endif
58515545e1SBram Moolenaarendfunc
59515545e1SBram Moolenaar
60515545e1SBram Moolenaarfunc MouseLeftClick(row, col)
61515545e1SBram Moolenaar  call feedkeys(MouseLeftClickCode(a:row, a:col), 'Lx!')
62515545e1SBram Moolenaarendfunc
63515545e1SBram Moolenaar
64515545e1SBram Moolenaarfunc MouseMiddleClickCode(row, col)
65515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
66515545e1SBram Moolenaar    return DecEscapeCode(4, 2, a:row, a:col)
67515545e1SBram Moolenaar  else
68515545e1SBram Moolenaar    return TerminalEscapeCode(1, a:row, a:col, 'M')
69515545e1SBram Moolenaar  endif
70515545e1SBram Moolenaarendfunc
71515545e1SBram Moolenaar
72515545e1SBram Moolenaarfunc MouseMiddleClick(row, col)
73515545e1SBram Moolenaar  call feedkeys(MouseMiddleClickCode(a:row, a:col), 'Lx!')
74515545e1SBram Moolenaarendfunc
75515545e1SBram Moolenaar
76515545e1SBram Moolenaarfunc MouseRightClickCode(row, col)
77515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
78515545e1SBram Moolenaar    return DecEscapeCode(6, 1, a:row, a:col)
79515545e1SBram Moolenaar  else
80515545e1SBram Moolenaar    return TerminalEscapeCode(2, a:row, a:col, 'M')
81515545e1SBram Moolenaar  endif
82515545e1SBram Moolenaarendfunc
83515545e1SBram Moolenaar
84515545e1SBram Moolenaarfunc MouseRightClick(row, col)
85515545e1SBram Moolenaar  call feedkeys(MouseRightClickCode(a:row, a:col), 'Lx!')
86515545e1SBram Moolenaarendfunc
87515545e1SBram Moolenaar
88515545e1SBram Moolenaarfunc MouseCtrlLeftClickCode(row, col)
89515545e1SBram Moolenaar  let ctrl = 0x10
90515545e1SBram Moolenaar  return TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M')
91515545e1SBram Moolenaarendfunc
92515545e1SBram Moolenaar
93515545e1SBram Moolenaarfunc MouseCtrlLeftClick(row, col)
94515545e1SBram Moolenaar  call feedkeys(MouseCtrlLeftClickCode(a:row, a:col), 'Lx!')
95515545e1SBram Moolenaarendfunc
96515545e1SBram Moolenaar
97515545e1SBram Moolenaarfunc MouseCtrlRightClickCode(row, col)
98515545e1SBram Moolenaar  let ctrl = 0x10
99515545e1SBram Moolenaar  return TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M')
100515545e1SBram Moolenaarendfunc
101515545e1SBram Moolenaar
102515545e1SBram Moolenaarfunc MouseCtrlRightClick(row, col)
103515545e1SBram Moolenaar  call feedkeys(MouseCtrlRightClickCode(a:row, a:col), 'Lx!')
104515545e1SBram Moolenaarendfunc
105515545e1SBram Moolenaar
106*2764d06aSBram Moolenaarfunc MouseAltLeftClickCode(row, col)
107*2764d06aSBram Moolenaar  let alt = 0x8
108*2764d06aSBram Moolenaar  return TerminalEscapeCode(0 + alt, a:row, a:col, 'M')
109*2764d06aSBram Moolenaarendfunc
110*2764d06aSBram Moolenaar
111*2764d06aSBram Moolenaarfunc MouseAltLeftClick(row, col)
112*2764d06aSBram Moolenaar  call feedkeys(MouseAltLeftClickCode(a:row, a:col), 'Lx!')
113*2764d06aSBram Moolenaarendfunc
114*2764d06aSBram Moolenaar
115*2764d06aSBram Moolenaarfunc MouseAltRightClickCode(row, col)
116*2764d06aSBram Moolenaar  let alt = 0x8
117*2764d06aSBram Moolenaar  return TerminalEscapeCode(2 + alt, a:row, a:col, 'M')
118*2764d06aSBram Moolenaarendfunc
119*2764d06aSBram Moolenaar
120*2764d06aSBram Moolenaarfunc MouseAltRightClick(row, col)
121*2764d06aSBram Moolenaar  call feedkeys(MouseAltRightClickCode(a:row, a:col), 'Lx!')
122*2764d06aSBram Moolenaarendfunc
123*2764d06aSBram Moolenaar
124515545e1SBram Moolenaarfunc MouseLeftReleaseCode(row, col)
125515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
126515545e1SBram Moolenaar    return DecEscapeCode(3, 0, a:row, a:col)
127515545e1SBram Moolenaar  elseif &ttymouse ==# 'netterm'
128515545e1SBram Moolenaar    return ''
129515545e1SBram Moolenaar  else
130515545e1SBram Moolenaar    return TerminalEscapeCode(3, a:row, a:col, 'm')
131515545e1SBram Moolenaar  endif
132515545e1SBram Moolenaarendfunc
133515545e1SBram Moolenaar
134515545e1SBram Moolenaarfunc MouseLeftRelease(row, col)
135515545e1SBram Moolenaar  call feedkeys(MouseLeftReleaseCode(a:row, a:col), 'Lx!')
136515545e1SBram Moolenaarendfunc
137515545e1SBram Moolenaar
138515545e1SBram Moolenaarfunc MouseMiddleReleaseCode(row, col)
139515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
140515545e1SBram Moolenaar    return DecEscapeCode(5, 0, a:row, a:col)
141515545e1SBram Moolenaar  else
142515545e1SBram Moolenaar    return TerminalEscapeCode(3, a:row, a:col, 'm')
143515545e1SBram Moolenaar  endif
144515545e1SBram Moolenaarendfunc
145515545e1SBram Moolenaar
146515545e1SBram Moolenaarfunc MouseMiddleRelease(row, col)
147515545e1SBram Moolenaar  call feedkeys(MouseMiddleReleaseCode(a:row, a:col), 'Lx!')
148515545e1SBram Moolenaarendfunc
149515545e1SBram Moolenaar
150515545e1SBram Moolenaarfunc MouseRightReleaseCode(row, col)
151515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
152515545e1SBram Moolenaar    return DecEscapeCode(7, 0, a:row, a:col)
153515545e1SBram Moolenaar  else
154515545e1SBram Moolenaar    return TerminalEscapeCode(3, a:row, a:col, 'm')
155515545e1SBram Moolenaar  endif
156515545e1SBram Moolenaarendfunc
157515545e1SBram Moolenaar
158515545e1SBram Moolenaarfunc MouseRightRelease(row, col)
159515545e1SBram Moolenaar  call feedkeys(MouseRightReleaseCode(a:row, a:col), 'Lx!')
160515545e1SBram Moolenaarendfunc
161515545e1SBram Moolenaar
162515545e1SBram Moolenaarfunc MouseLeftDragCode(row, col)
163515545e1SBram Moolenaar  if &ttymouse ==# 'dec'
164515545e1SBram Moolenaar    return DecEscapeCode(1, 4, a:row, a:col)
165515545e1SBram Moolenaar  else
166515545e1SBram Moolenaar    return TerminalEscapeCode(0x20, a:row, a:col, 'M')
167515545e1SBram Moolenaar  endif
168515545e1SBram Moolenaarendfunc
169515545e1SBram Moolenaar
170515545e1SBram Moolenaarfunc MouseLeftDrag(row, col)
171515545e1SBram Moolenaar  call feedkeys(MouseLeftDragCode(a:row, a:col), 'Lx!')
172515545e1SBram Moolenaarendfunc
173515545e1SBram Moolenaar
174515545e1SBram Moolenaarfunc MouseWheelUpCode(row, col)
175515545e1SBram Moolenaar  return TerminalEscapeCode(0x40, a:row, a:col, 'M')
176515545e1SBram Moolenaarendfunc
177515545e1SBram Moolenaar
178515545e1SBram Moolenaarfunc MouseWheelUp(row, col)
179515545e1SBram Moolenaar  call feedkeys(MouseWheelUpCode(a:row, a:col), 'Lx!')
180515545e1SBram Moolenaarendfunc
181515545e1SBram Moolenaar
182515545e1SBram Moolenaarfunc MouseWheelDownCode(row, col)
183515545e1SBram Moolenaar  return TerminalEscapeCode(0x41, a:row, a:col, 'M')
184515545e1SBram Moolenaarendfunc
185515545e1SBram Moolenaar
186515545e1SBram Moolenaarfunc MouseWheelDown(row, col)
187515545e1SBram Moolenaar  call feedkeys(MouseWheelDownCode(a:row, a:col), 'Lx!')
188515545e1SBram Moolenaarendfunc
189515545e1SBram Moolenaar
190d58d4f90SBram Moolenaarfunc MouseWheelLeftCode(row, col)
191d58d4f90SBram Moolenaar  return TerminalEscapeCode(0x42, a:row, a:col, 'M')
192d58d4f90SBram Moolenaarendfunc
193d58d4f90SBram Moolenaar
194d58d4f90SBram Moolenaarfunc MouseWheelLeft(row, col)
195d58d4f90SBram Moolenaar  call feedkeys(MouseWheelLeftCode(a:row, a:col), 'Lx!')
196d58d4f90SBram Moolenaarendfunc
197d58d4f90SBram Moolenaar
198d58d4f90SBram Moolenaarfunc MouseWheelRightCode(row, col)
199d58d4f90SBram Moolenaar  return TerminalEscapeCode(0x43, a:row, a:col, 'M')
200d58d4f90SBram Moolenaarendfunc
201d58d4f90SBram Moolenaar
202d58d4f90SBram Moolenaarfunc MouseWheelRight(row, col)
203d58d4f90SBram Moolenaar  call feedkeys(MouseWheelRightCode(a:row, a:col), 'Lx!')
204d58d4f90SBram Moolenaarendfunc
205d58d4f90SBram Moolenaar
206515545e1SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
207