browser: derive support from surrounding versions
[sheet.git] / vi.inc.pl
1 use utf8;
2 {
3
4 '' => {
5         "\e"=> ["mo mode"],
6         '~' => ["co undo"],
7         '!' => ["co argm undo modec"],
8         '@' => ["co arg undo"],
9         '#' => ["pm ext vim6"],
10         '$' => ["pm"],
11         '%' => ["pm"],
12         '^' => ["pm"],
13         '&' => ["co undo"],
14         '*' => ["pm ext vim6"],
15         '(' => ['pm'],
16         ')' => ['pm'],
17         '_' => ["pm"],
18         '+' => ["pm"],
19         '`' => ["pm arg"],
20         '0' => ["pm"],
21         '^^'=> ["co"],
22         '-' => ["pm"],
23         '=' => ['co argm undo'],
24         '?' => ["pm arg modec"],
25         ';' => ["pm"],
26         ':' => ["co modec"],
27         "'" => ["pm arg"],
28         '"' => ['co arg'],
29         '\\' => ['me arg'],
30         '^\\' => ["mo arg"],
31         ',' => ["pm"],
32         '<' => ["co argm undo"],
33         '.' => ["co undo"],
34         '>' => ["co argm undo"],
35         '/' => ["pm arg modec"],
36         '[' => ["me arg mode["],
37         '{' => ["pm"],
38         ']' => ["me arg mode]"],
39         '}' => ["pm"],
40         '^]'=> ["po"],
41         '|' => ["pm"],
42
43         'a' => ["mi undo modei"],
44         'A' => ["mi undo modei"],
45         '^a'=> ["co undo"],
46         'b' => ["pm"],
47         'B' => ["pm"],
48         '^b'=> ["pm"],
49         'c' => ["mi argm undo modei"],
50         'C' => ["mi undo modei"],
51         '^c'=> ["co"],
52         'd' => ["co argm undo"],
53         'D' => ["co undo"],
54         '^d'=> ["po"],
55         'e' => ["pm"],
56         'E' => ["pm"],
57         '^e'=> ["po"],
58         'f' => ["pm arg"],
59         'F' => ["pm arg"],
60         '^f'=> ["pm"],
61         'g' => ["me arg modeg"],
62         'G' => ["pm"],
63         '^g'=> ["ci"],
64         'h' => ["pm"],
65         'H' => ["pm"],
66         '^h'=> "h",
67         'i' => ["mi undo modei"],
68         'I' => ["mi undo modei"],
69         '^i'=> ["pm ext vim6"],
70         'j' => ["pm"],
71         'J' => ["co undo"],
72         '^j'=> "j",
73         'k' => ["pm"],
74         'K' => ["co"],
75         'l' => ["pm"],
76         'L' => ["pm"],
77         '^l'=> ["ci"],
78         'm' => ["co arg"],
79         'M' => ["pm"],
80         '^m'=> "+",
81         'n' => ["pm"],
82         'N' => ["pm"],
83         '^n'=> "j",
84         'o' => ["mi undo modei"],
85         'O' => ["mi undo modei"],
86         '^o'=> ["pm ext vim6"],
87         'p' => ["co undo"],
88         'P' => ["co undo"],
89         '^p'=> "k",
90         'q' => ["mo arg"],
91         'Q' => ["mo"],
92         '^q'=> ["ci"], # or ^v
93         'r' => ["co arg undo"],
94         'R' => ["mi undo modei"],
95         '^r'=> ["co undo ext vim6"],
96         's' => ["mi undo modei"],
97         'S' => ["mi undo modei"],
98         '^s'=> ["ci"],
99         't' => ["pm arg"],
100         'T' => ["pm"],
101         '^t'=> ["po"],
102         'u' => ["co undo"],
103         'U' => ["co undo"],
104         '^u'=> ["po"],
105         'v' => ["mv modev"],
106         'V' => ["mv modev"],
107         '^v'=> ["mv modev ext vim6"],
108         'w' => ["pm"],
109         'W' => ["pm"],
110         '^w'=> ["me arg mode^w"],
111         'x' => ["co undo"],
112         'X' => ["co undo"],
113         '^x'=> ["co undo"],
114         'y' => ["co argm"],
115         'Y' => ["co"],
116         '^y'=> ["po"],
117         'z' => ["me arg modez"],
118         'Z' => ["me arg modeZ"],
119         '^z'=> ["ci"],
120 }, # normal mode
121
122 g => {
123         lead => "g",
124
125         '~' => ["co argm ext vim6"],
126         '@' => ["co ext vim7 new"],
127         '#' => ["pm ext vim6"],
128         '$' => ["pm"],
129         '^' => ["pm ext vim6"],
130         '&' => ["co"],
131         '*' => ["pm ext vim6"],
132         '_' => ["pm ext vim6"],
133         '+' => ["co ext vim7 new"],
134         '`' => ["pm ext vim6 arg"],
135         '8' => ["ci"],
136         '0' => ["pm ext vim6"],
137         '-' => ["co ext vim7 new"],
138         '^['=> ["mo mode"],
139         ']' => ["po"],
140         '^]'=> ["po"],
141         ';' => ["pm"],
142         "'" => ["pm ext vim6 arg"],
143         '<' => ["co ext vim7 new"],
144         '?' => ["co argm ext vim6"],
145         ',' => ["pm"],
146
147         'a' => ["ci"],
148         '^a'=> ["ci"],
149         'd' => ["pm ext vim6"],
150         'D' => ["pm ext vim6"],
151         'e' => ["pm"],
152         'E' => ["pm"],
153         'f' => ["co ext vim6"],
154         'F' => ["co ext vim7 new"],
155         'g' => ["pm"],
156         '^g'=> ["ci"],
157         'h' => ["mv modev"],
158         'H' => ["mv modev"],
159         '^h'=> ["mv modev ext vim6"],
160         'i' => ["mi undo modei"],
161         'I' => ["mi undo modei"],
162         'j' => ["pm ext vim6"],
163         'J' => ["co"],
164         'k' => ["pm ext vim6"],
165         'm' => ["pm ext vim6"],
166         'o' => ["pm"],
167         'p' => ["co undo"],
168         'P' => ["co"],
169         'q' => ["co argm"],
170         'Q' => ["mo ext vim6"],
171         'r' => ["co arg"],
172         'R' => ["mi undo modei"],
173         's' => ["ci ext vim6"],
174         't' => ["po ext vim7 new"],
175         'T' => ["po ext vim7 new"],
176         'u' => ["co argm ext vim6"], # XXX undo?
177         'U' => ["co undo argm ext vim6"],
178         'v' => ['mv modev'],
179         'V' => ["co"],
180         'w' => ["co argm ext vim7 new"],
181         'x' => ["co ext vim7 new"],
182 }, # mode g
183
184 Z => {
185         lead => "Z",
186
187         '^['=> ["mo mode"],
188
189         'Q' => ["co ext vim6"],
190         'Z' => ["co"],
191 }, # mode Z
192
193 z => {
194         lead => "z",
195
196         '^' => ["po"],
197         '+' => ["po"],
198         '-' => ["po"],
199         '=' => ["co ext vim7 new"],
200         '.' => ["po"],
201         '^['=> ["mo mode"],
202
203         'a' => ["co ext vim6 folding"],
204         'A' => ["co ext vim6 folding"],
205         'b' => ["po"],
206         'c' => ["co ext vim6 folding"],
207         'C' => ["co ext vim6 folding"],
208         'd' => ["co ext vim6 folding"],
209         'D' => ["co ext vim6 folding"],
210         'e' => ["po"],
211         'E' => ["co ext vim6 folding"],
212         'f' => ["co argm ext vim6 folding"],
213         'F' => ["co ext vim6 folding"],
214         'g' => ["co ext vim7 new"],
215         'G' => ["co ext vim7 new"],
216         'h' => ["po"],
217         'H' => ["po"],
218         'i' => ["co ext vim6 folding"],
219         'j' => ["pm ext vim6 folding"],
220         'k' => ["pm ext vim6 folding"],
221         'l' => ["po"],
222         'L' => ["po"],
223         '^m'=> ["po"],
224         'm' => ["co ext vim6 folding"],
225         'M' => ["co ext vim6 folding"],
226         'n' => ["co ext vim6 folding"],
227         'N' => ["co ext vim6 folding"],
228         'o' => ["co ext vim6 folding"],
229         'O' => ["co ext vim6 folding"],
230         'r' => ["co ext vim6 folding"],
231         'R' => ["co ext vim6 folding"],
232         's' => ["po"],
233         't' => ["po"],
234         'u' => ["co arg ext vim7 new"],
235         'v' => ["co ext vim6 folding"],
236         'w' => ["co ext vim7 new"],
237         'W' => ["co ext vim7 new"],
238         'x' => ["co ext vim6 folding"],
239         'X' => ["co ext vim6 folding"],
240         'z' => ["po"],
241 }, # mode z
242
243 '[' => {
244         lead => "[",
245
246         "`" => ["pm ext vim6"],
247         '#' => ["pm"],
248         '(' => ["pm"],
249         '*' => "[/",
250         '/' => ["pm"],
251         "'" => "[` ^", # ext vim6
252         '{' => ["pm"],
253         '[' => ["pm"],
254         '^['=> ["mo mode"],
255         ']' => ["pm"],
256
257         'c' => ["pm"],
258         'd' => ["ci"],
259         'D' => ["co"],
260         '^d'=> ["po"],
261         'f' => "gf",  # deprecated
262         'i' => ['ci'],
263         'I' => ['co'],
264         '^i'=> ['po'],
265         'm' => ["pm"],
266         'p' => ["co"],
267         'P' => ["co"],
268         's' => ["po ext vim7 new"],
269         'S' => ["po ext vim7 new"],
270         'z' => ["pm ext vim6 folding"],
271 }, # mode [
272
273 ']' => {
274         lead => "]",
275
276         "`" => ["pm ext vim6"],
277         '#' => ["pm"],
278         ')' => ["pm"],
279         '*' => "]/",
280         "'" => "]` ^", # ext vim6
281         '/' => ["pm"],
282         '[' => ["pm"],
283         '^['=> ["mo mode"],
284         ']' => ["pm"],
285         '}' => ["pm"],
286
287         'c' => ["pm"],
288         'd' => ["ci"],
289         'D' => ["co"],
290         '^d'=> ["po"],
291         'f' => "gf",  # deprecated
292         'i' => ["ci"],
293         'I' => ["co"],
294         '^i'=> ["po"],
295         'm' => ["pm"],
296         'p' => ["co"],
297         'P' => "[p",
298         's' => ["po ext vim7 new"],
299         'S' => ["po ext vim7 new"],
300         'z' => ["pm ext vim6 folding"],
301 }, # mode ]
302
303 '^w' => {
304         lead => $ascii ? "'w"  : "ŵ",
305
306         '<' => ["po"],
307         '>' => ["po"],
308         '^' => ["co"],
309         '_' => ["po"],
310         '+' => ["po"],
311         '-' => ["po"],
312         '=' => ["po"],
313         '^['=> ["mo mode"],
314         ']' => ["po"],
315         '}' => ["po"],
316         '|' => ["po"],
317
318         'b' => ["po"],
319         'c' => ["po"],
320         '^c'=> ["mo mode"],
321         'd' => ["po"],
322         'f' => ["co"],
323         'F' => ["co ext vim7 new"],
324         'g' => ["me arg mode^wg"],
325         'h' => ["po"],
326         'H' => ["po"],
327         'i' => ["po"],
328         'j' => ["po"],
329         'J' => ["po"],
330         'k' => ["po"],
331         'K' => ["po"],
332         'l' => ["po"],
333         'L' => ["po"],
334         'n' => ["co"],
335         'o' => ["po"],
336         'p' => ["po"],
337         'P' => ["po"],
338         'q' => ["co"],
339         'r' => ["po"],
340         'R' => ["po"],
341         's' => ["po"],
342         'S' => "^ws",
343         't' => ["po"],
344         'v' => ["po"],
345         'w' => ["po"],
346         'W' => ["po"],
347         'x' => ["po"],
348         'z' => ["po"],
349 }, # mode ^w
350
351 '^wg' => {
352         lead => $ascii ? "'wg" : "ŵg",
353
354         '^['=> ["mo mode"],
355         ']' => ["po"],
356         '}' => ["po"],
357         '^]'=> ["po"],
358         'f' => ["co ext vim7 new"],
359         'F' => ["co ext vim7 new"],
360 }, # mode ^w g
361
362 v => {
363         '!' => ["co"],
364         ':' => ["mo modec"],
365         '<' => ["co"],
366         '=' => ['co undo'],
367         '>' => ['co'],
368         '~' => ["co ext vim6"],
369         '^['=> ["mo mode"],
370         '^]'=> ["po"],
371         '^\\'=>'^\\',
372
373         'a' => ['me modeva arg ext vim6'],
374         'A' => ['mi modei ext vim6'],
375         'c' => ['mi modei ext vim6'],
376         'C' => ['mi modei ext vim6'],
377         '^c'=> ["mo mode"],
378         'd' => ["co ext vim6"],
379         'D' => ["co ext vim6"],
380         'g' => ["me arg modevg"],
381         '^g'=> ["mv"],
382         '^h'=> ['co'],
383         'i' => ["me modeva arg ext vim6"],
384         'I' => ["mi modei ext vim6"], # block
385         'J' => ["co"],
386         'K' => ['co'],
387         'o' => ["pm"],
388         'O' => ["pm"],
389         '^o'=> ["mv"],
390         'p' => ['co'],
391         'P' => ['co'],
392         '^q'=> "^q",
393         'r' => ['co arg'],
394         'R' => "vS",  # "might change in future"
395         '^s'=> "^s",
396         's' => "vc",
397         'S' => ['mi modei ext vim6'],
398         'u' => ["co ext vim6"],
399         'U' => ["co ext vim6"],
400         'v' => ["mv"],
401         'V' => ["mv"],
402         '^v'=> ["mv ext vim6"],
403         'x' => "vd",
404         'X' => "vD",
405         'y' => ["co"],
406         'Y' => ["co"],
407
408         map {$_ => $_} qw(
409                 b B ^b ^d e E ^e f F ^f G h H ^i j ^j k l L m M ^m
410                 n N ^n ^p q ^s t T ^u w W ^w ^y z ^z
411                 ` # $ % ^ * ( 0 ) [ { ] } ; / ? + - _ |
412         ) # a lot like normal mode
413 }, # mode v
414
415 vg => {
416         lead => "g",
417
418         '^['=> ["mv modev"],
419         '?' => ["co ext vim6"],
420         'J' => ['co ext vim6'],
421         'q' => ["co ext vim6"],
422         'v' => 'gv',
423         'w' => ['co ext vim7 new'],
424 }, # mode v g
425
426 va => {
427         '(' => 'vab',
428         ')' => 'vab',
429         '`' => "va'",
430         "'" => ['pm ext vim7 new'],
431         '"' => "va'",
432         '<' => ['pm ext vim6'],
433         '>' => 'va&lt;',
434         '[' => ['pm ext vim6'],
435         '{' => 'vaB',
436         '^['=> ['mv modev'],
437         ']' => 'va[',
438         '}' => 'vaB',
439
440         'b' => ['pm ext vim6'],
441         'B' => ['pm ext vim6'],
442         'p' => ['pm ext vim6'],
443         's' => ['pm ext vim6'],
444         't' => ['pm ext vim7 new'],
445         'w' => ['pm ext vim6'],
446         'W' => ['pm ext vim6'],
447 }, # mode v a
448
449 #c => {
450 #       desc => "command-line mode",
451 #
452 #       '^_' => 'i^_',
453 #       '^^' => 'i^^',
454 #       '^\\'=>'^\\',
455 #       '^a' => [""], #todo
456 #       '^b' => ["po"],
457 #       '^c' => 'i^c',
458 #       '^d' => [""], #todo
459 #       '^e' => ["po"],
460 #       '^h' => 'i^h',
461 #       '^j' => ["co"],
462 #       '^k' => 'i^k',
463 #       '^l' => [""], #todo
464 #       '^n' => [""], #todo
465 #       '^p' => [""], #todo
466 #       '^r' => 'i^r', # and then some...
467 #            ## ["co arg ext vim6"],
468 #       '^q' => '^q',
469 #       '^u' => 'i^u',
470 #       '^v' => 'i^v',
471 #       '^w' => 'i^w',
472 #       '^y' => ["co"],
473 #}, # mode c
474
475 i => {
476         '^@' => ["co"],
477         '^^' => ["co ext vim6"],
478         '^[' => ["mo mode"],
479         '^]' => ["co ext vim6"],
480         '^_' => ["co ext vim6"],
481         '^\\'=>'^\\',
482
483         '^a' => ["co ext vim6"],
484         '^b' => ["no ext vim6"],
485         '^c' => ["mo mode"],
486         '^d' => ['co'],
487         '^e' => ["co ext vim6"],
488         '^f' => ['co'],
489         '^g' => ["me modei^g arg"],
490         '^h' => ["co"],
491         '^i' => ["co"],
492         '^j' => ["co"],
493         '^k' => ['co arg arg ext vim6 linkdigraphs'],
494         '^l' => ["mo mode ext vim6"],  # insertmode only
495         '^m' => ["co"],
496         '^n' => ["pm ext vim6"],
497         '^o' => ['co'],
498         '^p' => ["pm ext vim6"],
499         '^q' => "^q",  # or i^v
500         '^r' => ['co arg ext vim6'],
501         '^s' => "^s",
502         '^t' => ["co"],
503         '^u' => ["co"],
504         '^v' => ['co linkcharset'],
505         '^w' => ["co"],
506         '^x' => ['me arg modei^x ext vim6'],
507         '^y' => ["co ext vim6"],
508         '^z' => ["ci ext vim6"],  # insertmode only
509 }, # modei
510
511 'i^g' => {
512         lead => $ascii ? "'g"  : "ĝ",
513
514         'k' => ['pm'],
515         'j' => ['pm'],
516         'u' => ['co'],
517         # other keys (even esc) are not recognized
518 }, # mode i ^g
519
520 'i^x' => {
521         lead => $ascii ? "'x"  : "x̂",
522
523         '^[' => ["mo mode"], # yes, it really leaves insert mode
524         '^]' => ['co'],
525         '^d' => ['co'],
526         '^e' => ["po"],
527         '^f' => ['co'],
528         '^i' => ['co'],
529         '^k' => ['co'],
530         '^l' => ['co'],
531         '^n' => ['co'],
532         '^o' => ['co ext vim7 new'],
533         '^p' => ['co'],
534         '^s' => ['co'],
535          's' => 'i^x^s',
536         '^t' => ['co'],
537         '^u' => ['co ext vim7 new'],
538         '^v' => ['co'],
539         '^y' => ["po"],
540 }, # mode i ^x
541
542 # XXX ex mode if you want to go completely wild
543 }