Mercurial > vim
comparison src/testdir/mouse.vim @ 19738:0208534b8a84 v8.2.0425
patch 8.2.0425: code for modeless selection not sufficiently tested
Commit: https://github.com/vim/vim/commit/515545e11f523d14343b1e588dc0b9bd3d362bc2
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 22 14:08:59 2020 +0100
patch 8.2.0425: code for modeless selection not sufficiently tested
Problem: Code for modeless selection not sufficiently tested.
Solution: Add tests. Move mouse code functionality to a common script file.
(Yegappan Lakshmanan, closes #5821)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 22 Mar 2020 14:15:04 +0100 |
parents | |
children | d0265fdadec9 |
comparison
equal
deleted
inserted
replaced
19737:5591829276ff | 19738:0208534b8a84 |
---|---|
1 " Helper functions for generating mouse events | |
2 | |
3 " xterm2 and sgr always work, urxvt is optional. | |
4 let g:Ttymouse_values = ['xterm2', 'sgr'] | |
5 if has('mouse_urxvt') | |
6 call add(g:Ttymouse_values, 'urxvt') | |
7 endif | |
8 | |
9 " dec doesn't support all the functionality | |
10 if has('mouse_dec') | |
11 let g:Ttymouse_dec = ['dec'] | |
12 else | |
13 let g:Ttymouse_dec = [] | |
14 endif | |
15 | |
16 " netterm only supports left click | |
17 if has('mouse_netterm') | |
18 let g:Ttymouse_netterm = ['netterm'] | |
19 else | |
20 let g:Ttymouse_netterm = [] | |
21 endif | |
22 | |
23 " Helper function to emit a terminal escape code. | |
24 func TerminalEscapeCode(code, row, col, m) | |
25 if &ttymouse ==# 'xterm2' | |
26 " need to use byte encoding here. | |
27 let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) | |
28 if has('iconv') | |
29 let bytes = str->iconv('utf-8', 'latin1') | |
30 else | |
31 " Hopefully the numbers are not too big. | |
32 let bytes = str | |
33 endif | |
34 return "\<Esc>[M" .. bytes | |
35 elseif &ttymouse ==# 'sgr' | |
36 return printf("\<Esc>[<%d;%d;%d%s", a:code, a:col, a:row, a:m) | |
37 elseif &ttymouse ==# 'urxvt' | |
38 return printf("\<Esc>[%d;%d;%dM", a:code + 0x20, a:col, a:row) | |
39 endif | |
40 endfunc | |
41 | |
42 func DecEscapeCode(code, down, row, col) | |
43 return printf("\<Esc>[%d;%d;%d;%d&w", a:code, a:down, a:row, a:col) | |
44 endfunc | |
45 | |
46 func NettermEscapeCode(row, col) | |
47 return printf("\<Esc>}%d,%d\r", a:row, a:col) | |
48 endfunc | |
49 | |
50 func MouseLeftClickCode(row, col) | |
51 if &ttymouse ==# 'dec' | |
52 return DecEscapeCode(2, 4, a:row, a:col) | |
53 elseif &ttymouse ==# 'netterm' | |
54 return NettermEscapeCode(a:row, a:col) | |
55 else | |
56 return TerminalEscapeCode(0, a:row, a:col, 'M') | |
57 endif | |
58 endfunc | |
59 | |
60 func MouseLeftClick(row, col) | |
61 call feedkeys(MouseLeftClickCode(a:row, a:col), 'Lx!') | |
62 endfunc | |
63 | |
64 func MouseMiddleClickCode(row, col) | |
65 if &ttymouse ==# 'dec' | |
66 return DecEscapeCode(4, 2, a:row, a:col) | |
67 else | |
68 return TerminalEscapeCode(1, a:row, a:col, 'M') | |
69 endif | |
70 endfunc | |
71 | |
72 func MouseMiddleClick(row, col) | |
73 call feedkeys(MouseMiddleClickCode(a:row, a:col), 'Lx!') | |
74 endfunc | |
75 | |
76 func MouseRightClickCode(row, col) | |
77 if &ttymouse ==# 'dec' | |
78 return DecEscapeCode(6, 1, a:row, a:col) | |
79 else | |
80 return TerminalEscapeCode(2, a:row, a:col, 'M') | |
81 endif | |
82 endfunc | |
83 | |
84 func MouseRightClick(row, col) | |
85 call feedkeys(MouseRightClickCode(a:row, a:col), 'Lx!') | |
86 endfunc | |
87 | |
88 func MouseCtrlLeftClickCode(row, col) | |
89 let ctrl = 0x10 | |
90 return TerminalEscapeCode(0 + ctrl, a:row, a:col, 'M') | |
91 endfunc | |
92 | |
93 func MouseCtrlLeftClick(row, col) | |
94 call feedkeys(MouseCtrlLeftClickCode(a:row, a:col), 'Lx!') | |
95 endfunc | |
96 | |
97 func MouseCtrlRightClickCode(row, col) | |
98 let ctrl = 0x10 | |
99 return TerminalEscapeCode(2 + ctrl, a:row, a:col, 'M') | |
100 endfunc | |
101 | |
102 func MouseCtrlRightClick(row, col) | |
103 call feedkeys(MouseCtrlRightClickCode(a:row, a:col), 'Lx!') | |
104 endfunc | |
105 | |
106 func MouseLeftReleaseCode(row, col) | |
107 if &ttymouse ==# 'dec' | |
108 return DecEscapeCode(3, 0, a:row, a:col) | |
109 elseif &ttymouse ==# 'netterm' | |
110 return '' | |
111 else | |
112 return TerminalEscapeCode(3, a:row, a:col, 'm') | |
113 endif | |
114 endfunc | |
115 | |
116 func MouseLeftRelease(row, col) | |
117 call feedkeys(MouseLeftReleaseCode(a:row, a:col), 'Lx!') | |
118 endfunc | |
119 | |
120 func MouseMiddleReleaseCode(row, col) | |
121 if &ttymouse ==# 'dec' | |
122 return DecEscapeCode(5, 0, a:row, a:col) | |
123 else | |
124 return TerminalEscapeCode(3, a:row, a:col, 'm') | |
125 endif | |
126 endfunc | |
127 | |
128 func MouseMiddleRelease(row, col) | |
129 call feedkeys(MouseMiddleReleaseCode(a:row, a:col), 'Lx!') | |
130 endfunc | |
131 | |
132 func MouseRightReleaseCode(row, col) | |
133 if &ttymouse ==# 'dec' | |
134 return DecEscapeCode(7, 0, a:row, a:col) | |
135 else | |
136 return TerminalEscapeCode(3, a:row, a:col, 'm') | |
137 endif | |
138 endfunc | |
139 | |
140 func MouseRightRelease(row, col) | |
141 call feedkeys(MouseRightReleaseCode(a:row, a:col), 'Lx!') | |
142 endfunc | |
143 | |
144 func MouseLeftDragCode(row, col) | |
145 if &ttymouse ==# 'dec' | |
146 return DecEscapeCode(1, 4, a:row, a:col) | |
147 else | |
148 return TerminalEscapeCode(0x20, a:row, a:col, 'M') | |
149 endif | |
150 endfunc | |
151 | |
152 func MouseLeftDrag(row, col) | |
153 call feedkeys(MouseLeftDragCode(a:row, a:col), 'Lx!') | |
154 endfunc | |
155 | |
156 func MouseWheelUpCode(row, col) | |
157 return TerminalEscapeCode(0x40, a:row, a:col, 'M') | |
158 endfunc | |
159 | |
160 func MouseWheelUp(row, col) | |
161 call feedkeys(MouseWheelUpCode(a:row, a:col), 'Lx!') | |
162 endfunc | |
163 | |
164 func MouseWheelDownCode(row, col) | |
165 return TerminalEscapeCode(0x41, a:row, a:col, 'M') | |
166 endfunc | |
167 | |
168 func MouseWheelDown(row, col) | |
169 call feedkeys(MouseWheelDownCode(a:row, a:col), 'Lx!') | |
170 endfunc | |
171 | |
172 " vim: shiftwidth=2 sts=2 expandtab |