root/src/noitedit/map.c

Revision 2c4eb5b5fbb052c18d52a989026b447982cc17c3, 42.1 kB (checked in by Theo Schlossnagle <jesus@omniti.com>, 6 years ago)

pull header-space into the noitedir dir, this makes it stand apart from libedit more trivially.

  • Property mode set to 100644
Line 
1 /*      $NetBSD: map.c,v 1.14 2001/01/09 17:22:09 jdolecek Exp $        */
2
3 /*-
4  * Copyright (c) 1992, 1993
5  *      The Regents of the University of California.  All rights reserved.
6  *
7  * This code is derived from software contributed to Berkeley by
8  * Christos Zoulas of Cornell University.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. All advertising materials mentioning features or use of this software
19  *    must display the following acknowledgement:
20  *      This product includes software developed by the University of
21  *      California, Berkeley and its contributors.
22  * 4. Neither the name of the University nor the names of its contributors
23  *    may be used to endorse or promote products derived from this software
24  *    without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36  * SUCH DAMAGE.
37  */
38
39 #include "noitedit/compat.h"
40 #if !defined(lint) && !defined(SCCSID)
41 #if 0
42 static char sccsid[] = "@(#)map.c       8.1 (Berkeley) 6/4/93";
43 #else
44 __RCSID("$NetBSD: map.c,v 1.14 2001/01/09 17:22:09 jdolecek Exp $");
45 #endif
46 #endif /* not lint && not SCCSID */
47
48 /*
49  * map.c: Editor function definitions
50  */
51 #include "noitedit/sys.h"
52 #include <stdlib.h>
53 #include "noitedit/el.h"
54
55 #define N_KEYS 256
56
57 private void    map_print_key(EditLine *, el_action_t *, char *);
58 private void    map_print_some_keys(EditLine *, el_action_t *, int, int);
59 private void    map_print_all_keys(EditLine *);
60 private void    map_init_nls(EditLine *);
61 private void    map_init_meta(EditLine *);
62
63 /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
64
65
66 private const el_action_t  el_map_emacs[] = {
67         /*   0 */       EM_SET_MARK,            /* ^@ */
68         /*   1 */       ED_MOVE_TO_BEG,         /* ^A */
69         /*   2 */       ED_PREV_CHAR,           /* ^B */
70         /*   3 */       ED_TTY_SIGINT,          /* ^C */
71         /*   4 */       EM_DELETE_OR_LIST,      /* ^D */
72         /*   5 */       ED_MOVE_TO_END,         /* ^E */
73         /*   6 */       ED_NEXT_CHAR,           /* ^F */
74         /*   7 */       ED_UNASSIGNED,          /* ^G */
75         /*   8 */       ED_DELETE_PREV_CHAR,    /* ^H */
76         /*   9 */       ED_UNASSIGNED,          /* ^I */
77         /*  10 */       ED_NEWLINE,             /* ^J */
78         /*  11 */       ED_KILL_LINE,           /* ^K */
79         /*  12 */       ED_CLEAR_SCREEN,        /* ^L */
80         /*  13 */       ED_NEWLINE,             /* ^M */
81         /*  14 */       ED_NEXT_HISTORY,        /* ^N */
82         /*  15 */       ED_TTY_FLUSH_OUTPUT,    /* ^O */
83         /*  16 */       ED_PREV_HISTORY,        /* ^P */
84         /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
85         /*  18 */       ED_REDISPLAY,           /* ^R */
86         /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
87         /*  20 */       ED_TRANSPOSE_CHARS,     /* ^T */
88         /*  21 */       EM_KILL_LINE,           /* ^U */
89         /*  22 */       ED_QUOTED_INSERT,       /* ^V */
90         /*  23 */       EM_KILL_REGION,         /* ^W */
91         /*  24 */       ED_SEQUENCE_LEAD_IN,    /* ^X */
92         /*  25 */       EM_YANK,                /* ^Y */
93         /*  26 */       ED_TTY_SIGTSTP,         /* ^Z */
94         /*  27 */       EM_META_NEXT,           /* ^[ */
95         /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
96         /*  29 */       ED_TTY_DSUSP,           /* ^] */
97         /*  30 */       ED_UNASSIGNED,          /* ^^ */
98         /*  31 */       ED_UNASSIGNED,          /* ^_ */
99         /*  32 */       ED_INSERT,              /* SPACE */
100         /*  33 */       ED_INSERT,              /* ! */
101         /*  34 */       ED_INSERT,              /* " */
102         /*  35 */       ED_INSERT,              /* # */
103         /*  36 */       ED_INSERT,              /* $ */
104         /*  37 */       ED_INSERT,              /* % */
105         /*  38 */       ED_INSERT,              /* & */
106         /*  39 */       ED_INSERT,              /* ' */
107         /*  40 */       ED_INSERT,              /* ( */
108         /*  41 */       ED_INSERT,              /* ) */
109         /*  42 */       ED_INSERT,              /* * */
110         /*  43 */       ED_INSERT,              /* + */
111         /*  44 */       ED_INSERT,              /* , */
112         /*  45 */       ED_INSERT,              /* - */
113         /*  46 */       ED_INSERT,              /* . */
114         /*  47 */       ED_INSERT,              /* / */
115         /*  48 */       ED_DIGIT,               /* 0 */
116         /*  49 */       ED_DIGIT,               /* 1 */
117         /*  50 */       ED_DIGIT,               /* 2 */
118         /*  51 */       ED_DIGIT,               /* 3 */
119         /*  52 */       ED_DIGIT,               /* 4 */
120         /*  53 */       ED_DIGIT,               /* 5 */
121         /*  54 */       ED_DIGIT,               /* 6 */
122         /*  55 */       ED_DIGIT,               /* 7 */
123         /*  56 */       ED_DIGIT,               /* 8 */
124         /*  57 */       ED_DIGIT,               /* 9 */
125         /*  58 */       ED_INSERT,              /* : */
126         /*  59 */       ED_INSERT,              /* ; */
127         /*  60 */       ED_INSERT,              /* < */
128         /*  61 */       ED_INSERT,              /* = */
129         /*  62 */       ED_INSERT,              /* > */
130         /*  63 */       ED_INSERT,              /* ? */
131         /*  64 */       ED_INSERT,              /* @ */
132         /*  65 */       ED_INSERT,              /* A */
133         /*  66 */       ED_INSERT,              /* B */
134         /*  67 */       ED_INSERT,              /* C */
135         /*  68 */       ED_INSERT,              /* D */
136         /*  69 */       ED_INSERT,              /* E */
137         /*  70 */       ED_INSERT,              /* F */
138         /*  71 */       ED_INSERT,              /* G */
139         /*  72 */       ED_INSERT,              /* H */
140         /*  73 */       ED_INSERT,              /* I */
141         /*  74 */       ED_INSERT,              /* J */
142         /*  75 */       ED_INSERT,              /* K */
143         /*  76 */       ED_INSERT,              /* L */
144         /*  77 */       ED_INSERT,              /* M */
145         /*  78 */       ED_INSERT,              /* N */
146         /*  79 */       ED_INSERT,              /* O */
147         /*  80 */       ED_INSERT,              /* P */
148         /*  81 */       ED_INSERT,              /* Q */
149         /*  82 */       ED_INSERT,              /* R */
150         /*  83 */       ED_INSERT,              /* S */
151         /*  84 */       ED_INSERT,              /* T */
152         /*  85 */       ED_INSERT,              /* U */
153         /*  86 */       ED_INSERT,              /* V */
154         /*  87 */       ED_INSERT,              /* W */
155         /*  88 */       ED_INSERT,              /* X */
156         /*  89 */       ED_INSERT,              /* Y */
157         /*  90 */       ED_INSERT,              /* Z */
158         /*  91 */       ED_INSERT,              /* [ */
159         /*  92 */       ED_INSERT,              /* \ */
160         /*  93 */       ED_INSERT,              /* ] */
161         /*  94 */       ED_INSERT,              /* ^ */
162         /*  95 */       ED_INSERT,              /* _ */
163         /*  96 */       ED_INSERT,              /* ` */
164         /*  97 */       ED_INSERT,              /* a */
165         /*  98 */       ED_INSERT,              /* b */
166         /*  99 */       ED_INSERT,              /* c */
167         /* 100 */       ED_INSERT,              /* d */
168         /* 101 */       ED_INSERT,              /* e */
169         /* 102 */       ED_INSERT,              /* f */
170         /* 103 */       ED_INSERT,              /* g */
171         /* 104 */       ED_INSERT,              /* h */
172         /* 105 */       ED_INSERT,              /* i */
173         /* 106 */       ED_INSERT,              /* j */
174         /* 107 */       ED_INSERT,              /* k */
175         /* 108 */       ED_INSERT,              /* l */
176         /* 109 */       ED_INSERT,              /* m */
177         /* 110 */       ED_INSERT,              /* n */
178         /* 111 */       ED_INSERT,              /* o */
179         /* 112 */       ED_INSERT,              /* p */
180         /* 113 */       ED_INSERT,              /* q */
181         /* 114 */       ED_INSERT,              /* r */
182         /* 115 */       ED_INSERT,              /* s */
183         /* 116 */       ED_INSERT,              /* t */
184         /* 117 */       ED_INSERT,              /* u */
185         /* 118 */       ED_INSERT,              /* v */
186         /* 119 */       ED_INSERT,              /* w */
187         /* 120 */       ED_INSERT,              /* x */
188         /* 121 */       ED_INSERT,              /* y */
189         /* 122 */       ED_INSERT,              /* z */
190         /* 123 */       ED_INSERT,              /* { */
191         /* 124 */       ED_INSERT,              /* | */
192         /* 125 */       ED_INSERT,              /* } */
193         /* 126 */       ED_INSERT,              /* ~ */
194         /* 127 */       ED_DELETE_PREV_CHAR,    /* ^? */
195         /* 128 */       ED_UNASSIGNED,          /* M-^@ */
196         /* 129 */       ED_UNASSIGNED,          /* M-^A */
197         /* 130 */       ED_UNASSIGNED,          /* M-^B */
198         /* 131 */       ED_UNASSIGNED,          /* M-^C */
199         /* 132 */       ED_UNASSIGNED,          /* M-^D */
200         /* 133 */       ED_UNASSIGNED,          /* M-^E */
201         /* 134 */       ED_UNASSIGNED,          /* M-^F */
202         /* 135 */       ED_UNASSIGNED,          /* M-^G */
203         /* 136 */       ED_DELETE_PREV_WORD,    /* M-^H */
204         /* 137 */       ED_UNASSIGNED,          /* M-^I */
205         /* 138 */       ED_UNASSIGNED,          /* M-^J */
206         /* 139 */       ED_UNASSIGNED,          /* M-^K */
207         /* 140 */       ED_CLEAR_SCREEN,        /* M-^L */
208         /* 141 */       ED_UNASSIGNED,          /* M-^M */
209         /* 142 */       ED_UNASSIGNED,          /* M-^N */
210         /* 143 */       ED_UNASSIGNED,          /* M-^O */
211         /* 144 */       ED_UNASSIGNED,          /* M-^P */
212         /* 145 */       ED_UNASSIGNED,          /* M-^Q */
213         /* 146 */       ED_UNASSIGNED,          /* M-^R */
214         /* 147 */       ED_UNASSIGNED,          /* M-^S */
215         /* 148 */       ED_UNASSIGNED,          /* M-^T */
216         /* 149 */       ED_UNASSIGNED,          /* M-^U */
217         /* 150 */       ED_UNASSIGNED,          /* M-^V */
218         /* 151 */       ED_UNASSIGNED,          /* M-^W */
219         /* 152 */       ED_UNASSIGNED,          /* M-^X */
220         /* 153 */       ED_UNASSIGNED,          /* M-^Y */
221         /* 154 */       ED_UNASSIGNED,          /* M-^Z */
222         /* 155 */       ED_UNASSIGNED,          /* M-^[ */
223         /* 156 */       ED_UNASSIGNED,          /* M-^\ */
224         /* 157 */       ED_UNASSIGNED,          /* M-^] */
225         /* 158 */       ED_UNASSIGNED,          /* M-^^ */
226         /* 159 */       EM_COPY_PREV_WORD,      /* M-^_ */
227         /* 160 */       ED_UNASSIGNED,          /* M-SPACE */
228         /* 161 */       ED_UNASSIGNED,          /* M-! */
229         /* 162 */       ED_UNASSIGNED,          /* M-" */
230         /* 163 */       ED_UNASSIGNED,          /* M-# */
231         /* 164 */       ED_UNASSIGNED,          /* M-$ */
232         /* 165 */       ED_UNASSIGNED,          /* M-% */
233         /* 166 */       ED_UNASSIGNED,          /* M-& */
234         /* 167 */       ED_UNASSIGNED,          /* M-' */
235         /* 168 */       ED_UNASSIGNED,          /* M-( */
236         /* 169 */       ED_UNASSIGNED,          /* M-) */
237         /* 170 */       ED_UNASSIGNED,          /* M-* */
238         /* 171 */       ED_UNASSIGNED,          /* M-+ */
239         /* 172 */       ED_UNASSIGNED,          /* M-, */
240         /* 173 */       ED_UNASSIGNED,          /* M-- */
241         /* 174 */       ED_UNASSIGNED,          /* M-. */
242         /* 175 */       ED_UNASSIGNED,          /* M-/ */
243         /* 176 */       ED_ARGUMENT_DIGIT,      /* M-0 */
244         /* 177 */       ED_ARGUMENT_DIGIT,      /* M-1 */
245         /* 178 */       ED_ARGUMENT_DIGIT,      /* M-2 */
246         /* 179 */       ED_ARGUMENT_DIGIT,      /* M-3 */
247         /* 180 */       ED_ARGUMENT_DIGIT,      /* M-4 */
248         /* 181 */       ED_ARGUMENT_DIGIT,      /* M-5 */
249         /* 182 */       ED_ARGUMENT_DIGIT,      /* M-6 */
250         /* 183 */       ED_ARGUMENT_DIGIT,      /* M-7 */
251         /* 184 */       ED_ARGUMENT_DIGIT,      /* M-8 */
252         /* 185 */       ED_ARGUMENT_DIGIT,      /* M-9 */
253         /* 186 */       ED_UNASSIGNED,          /* M-: */
254         /* 187 */       ED_UNASSIGNED,          /* M-; */
255         /* 188 */       ED_UNASSIGNED,          /* M-< */
256         /* 189 */       ED_UNASSIGNED,          /* M-= */
257         /* 190 */       ED_UNASSIGNED,          /* M-> */
258         /* 191 */       ED_UNASSIGNED,          /* M-? */
259         /* 192 */       ED_UNASSIGNED,          /* M-@ */
260         /* 193 */       ED_UNASSIGNED,          /* M-A */
261         /* 194 */       ED_PREV_WORD,           /* M-B */
262         /* 195 */       EM_CAPITOL_CASE,        /* M-C */
263         /* 196 */       EM_DELETE_NEXT_WORD,    /* M-D */
264         /* 197 */       ED_UNASSIGNED,          /* M-E */
265         /* 198 */       EM_NEXT_WORD,           /* M-F */
266         /* 199 */       ED_UNASSIGNED,          /* M-G */
267         /* 200 */       ED_UNASSIGNED,          /* M-H */
268         /* 201 */       ED_UNASSIGNED,          /* M-I */
269         /* 202 */       ED_UNASSIGNED,          /* M-J */
270         /* 203 */       ED_UNASSIGNED,          /* M-K */
271         /* 204 */       EM_LOWER_CASE,          /* M-L */
272         /* 205 */       ED_UNASSIGNED,          /* M-M */
273         /* 206 */       ED_SEARCH_NEXT_HISTORY, /* M-N */
274         /* 207 */       ED_SEQUENCE_LEAD_IN,    /* M-O */
275         /* 208 */       ED_SEARCH_PREV_HISTORY, /* M-P */
276         /* 209 */       ED_UNASSIGNED,          /* M-Q */
277         /* 210 */       ED_UNASSIGNED,          /* M-R */
278         /* 211 */       ED_UNASSIGNED,          /* M-S */
279         /* 212 */       ED_UNASSIGNED,          /* M-T */
280         /* 213 */       EM_UPPER_CASE,          /* M-U */
281         /* 214 */       ED_UNASSIGNED,          /* M-V */
282         /* 215 */       EM_COPY_REGION,         /* M-W */
283         /* 216 */       ED_COMMAND,             /* M-X */
284         /* 217 */       ED_UNASSIGNED,          /* M-Y */
285         /* 218 */       ED_UNASSIGNED,          /* M-Z */
286         /* 219 */       ED_SEQUENCE_LEAD_IN,    /* M-[ */
287         /* 220 */       ED_UNASSIGNED,          /* M-\ */
288         /* 221 */       ED_UNASSIGNED,          /* M-] */
289         /* 222 */       ED_UNASSIGNED,          /* M-^ */
290         /* 223 */       ED_UNASSIGNED,          /* M-_ */
291         /* 223 */       ED_UNASSIGNED,          /* M-` */
292         /* 224 */       ED_UNASSIGNED,          /* M-a */
293         /* 225 */       ED_PREV_WORD,           /* M-b */
294         /* 226 */       EM_CAPITOL_CASE,        /* M-c */
295         /* 227 */       EM_DELETE_NEXT_WORD,    /* M-d */
296         /* 228 */       ED_UNASSIGNED,          /* M-e */
297         /* 229 */       EM_NEXT_WORD,           /* M-f */
298         /* 230 */       ED_UNASSIGNED,          /* M-g */
299         /* 231 */       ED_UNASSIGNED,          /* M-h */
300         /* 232 */       ED_UNASSIGNED,          /* M-i */
301         /* 233 */       ED_UNASSIGNED,          /* M-j */
302         /* 234 */       ED_UNASSIGNED,          /* M-k */
303         /* 235 */       EM_LOWER_CASE,          /* M-l */
304         /* 236 */       ED_UNASSIGNED,          /* M-m */
305         /* 237 */       ED_SEARCH_NEXT_HISTORY, /* M-n */
306         /* 238 */       ED_UNASSIGNED,          /* M-o */
307         /* 239 */       ED_SEARCH_PREV_HISTORY, /* M-p */
308         /* 240 */       ED_UNASSIGNED,          /* M-q */
309         /* 241 */       ED_UNASSIGNED,          /* M-r */
310         /* 242 */       ED_UNASSIGNED,          /* M-s */
311         /* 243 */       ED_UNASSIGNED,          /* M-t */
312         /* 244 */       EM_UPPER_CASE,          /* M-u */
313         /* 245 */       ED_UNASSIGNED,          /* M-v */
314         /* 246 */       EM_COPY_REGION,         /* M-w */
315         /* 247 */       ED_COMMAND,             /* M-x */
316         /* 248 */       ED_UNASSIGNED,          /* M-y */
317         /* 249 */       ED_UNASSIGNED,          /* M-z */
318         /* 250 */       ED_UNASSIGNED,          /* M-{ */
319         /* 251 */       ED_UNASSIGNED,          /* M-| */
320         /* 252 */       ED_UNASSIGNED,          /* M-} */
321         /* 253 */       ED_UNASSIGNED,          /* M-~ */
322         /* 254 */       ED_DELETE_PREV_WORD     /* M-^? */
323         /* 255 */
324 };
325
326
327 /*
328  * keymap table for vi.  Each index into above tbl; should be
329  * N_KEYS entries long.  Vi mode uses a sticky-extend to do command mode:
330  * insert mode characters are in the normal keymap, and command mode
331  * in the extended keymap.
332  */
333 private const el_action_t  el_map_vi_insert[] = {
334 #ifdef KSHVI
335         /*   0 */       ED_UNASSIGNED,          /* ^@ */
336         /*   1 */       ED_INSERT,              /* ^A */
337         /*   2 */       ED_INSERT,              /* ^B */
338         /*   3 */       ED_INSERT,              /* ^C */
339         /*   4 */       VI_LIST_OR_EOF,         /* ^D */
340         /*   5 */       ED_INSERT,              /* ^E */
341         /*   6 */       ED_INSERT,              /* ^F */
342         /*   7 */       ED_INSERT,              /* ^G */
343         /*   8 */       VI_DELETE_PREV_CHAR,    /* ^H */   /* BackSpace key */
344         /*   9 */       ED_INSERT,              /* ^I */   /* Tab Key  */
345         /*  10 */       ED_NEWLINE,             /* ^J */
346         /*  11 */       ED_INSERT,              /* ^K */
347         /*  12 */       ED_INSERT,              /* ^L */
348         /*  13 */       ED_NEWLINE,             /* ^M */
349         /*  14 */       ED_INSERT,              /* ^N */
350         /*  15 */       ED_INSERT,              /* ^O */
351         /*  16 */       ED_INSERT,              /* ^P */
352         /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
353         /*  18 */       ED_INSERT,              /* ^R */
354         /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
355         /*  20 */       ED_INSERT,              /* ^T */
356         /*  21 */       VI_KILL_LINE_PREV,      /* ^U */
357         /*  22 */       ED_QUOTED_INSERT,       /* ^V */
358         /*  23 */       ED_DELETE_PREV_WORD,    /* ^W */
359                 /* ED_DELETE_PREV_WORD: Only until strt edit pos */
360         /*  24 */       ED_INSERT,              /* ^X */
361         /*  25 */       ED_INSERT,              /* ^Y */
362         /*  26 */       ED_INSERT,              /* ^Z */
363         /*  27 */       VI_COMMAND_MODE,        /* ^[ */  /* [ Esc ] key */
364         /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
365         /*  29 */       ED_INSERT,              /* ^] */
366         /*  30 */       ED_INSERT,              /* ^^ */
367         /*  31 */       ED_INSERT,              /* ^_ */
368 #else /* !KSHVI */
369                                 /*
370                                  * NOTE: These mappings do NOT Correspond well
371                                  * to the KSH VI editing assignments.
372                                  * On the other and they are convenient and
373                                  * many people have have gotten used to them.
374                                  */
375         /*   0 */       ED_UNASSIGNED,          /* ^@ */
376         /*   1 */       ED_MOVE_TO_BEG,         /* ^A */
377         /*   2 */       ED_PREV_CHAR,           /* ^B */
378         /*   3 */       ED_TTY_SIGINT,          /* ^C */
379         /*   4 */       VI_LIST_OR_EOF,         /* ^D */
380         /*   5 */       ED_MOVE_TO_END,         /* ^E */
381         /*   6 */       ED_NEXT_CHAR,           /* ^F */
382         /*   7 */       ED_UNASSIGNED,          /* ^G */
383         /*   8 */       ED_DELETE_PREV_CHAR,    /* ^H */   /* BackSpace key */
384         /*   9 */       ED_UNASSIGNED,          /* ^I */   /* Tab Key */
385         /*  10 */       ED_NEWLINE,             /* ^J */
386         /*  11 */       ED_KILL_LINE,           /* ^K */
387         /*  12 */       ED_CLEAR_SCREEN,        /* ^L */
388         /*  13 */       ED_NEWLINE,             /* ^M */
389         /*  14 */       ED_NEXT_HISTORY,        /* ^N */
390         /*  15 */       ED_TTY_FLUSH_OUTPUT,    /* ^O */
391         /*  16 */       ED_PREV_HISTORY,        /* ^P */
392         /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
393         /*  18 */       ED_REDISPLAY,           /* ^R */
394         /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
395         /*  20 */       ED_TRANSPOSE_CHARS,     /* ^T */
396         /*  21 */       VI_KILL_LINE_PREV,      /* ^U */
397         /*  22 */       ED_QUOTED_INSERT,       /* ^V */
398         /*  23 */       ED_DELETE_PREV_WORD,    /* ^W */
399         /*  24 */       ED_UNASSIGNED,          /* ^X */
400         /*  25 */       ED_TTY_DSUSP,           /* ^Y */
401         /*  26 */       ED_TTY_SIGTSTP,         /* ^Z */
402         /*  27 */       VI_COMMAND_MODE,        /* ^[ */
403         /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
404         /*  29 */       ED_UNASSIGNED,          /* ^] */
405         /*  30 */       ED_UNASSIGNED,          /* ^^ */
406         /*  31 */       ED_UNASSIGNED,          /* ^_ */
407 #endif  /* KSHVI */
408         /*  32 */       ED_INSERT,              /* SPACE */
409         /*  33 */       ED_INSERT,              /* ! */
410         /*  34 */       ED_INSERT,              /* " */
411         /*  35 */       ED_INSERT,              /* # */
412         /*  36 */       ED_INSERT,              /* $ */
413         /*  37 */       ED_INSERT,              /* % */
414         /*  38 */       ED_INSERT,              /* & */
415         /*  39 */       ED_INSERT,              /* ' */
416         /*  40 */       ED_INSERT,              /* ( */
417         /*  41 */       ED_INSERT,              /* ) */
418         /*  42 */       ED_INSERT,              /* * */
419         /*  43 */       ED_INSERT,              /* + */
420         /*  44 */       ED_INSERT,              /* , */
421         /*  45 */       ED_INSERT,              /* - */
422         /*  46 */       ED_INSERT,              /* . */
423         /*  47 */       ED_INSERT,              /* / */
424         /*  48 */       ED_INSERT,              /* 0 */
425         /*  49 */       ED_INSERT,              /* 1 */
426         /*  50 */       ED_INSERT,              /* 2 */
427         /*  51 */       ED_INSERT,              /* 3 */
428         /*  52 */       ED_INSERT,              /* 4 */
429         /*  53 */       ED_INSERT,              /* 5 */
430         /*  54 */       ED_INSERT,              /* 6 */
431         /*  55 */       ED_INSERT,              /* 7 */
432         /*  56 */       ED_INSERT,              /* 8 */
433         /*  57 */       ED_INSERT,              /* 9 */
434         /*  58 */       ED_INSERT,              /* : */
435         /*  59 */       ED_INSERT,              /* ; */
436         /*  60 */       ED_INSERT,              /* < */
437         /*  61 */       ED_INSERT,              /* = */
438         /*  62 */       ED_INSERT,              /* > */
439         /*  63 */       ED_INSERT,              /* ? */
440         /*  64 */       ED_INSERT,              /* @ */
441         /*  65 */       ED_INSERT,              /* A */
442         /*  66 */       ED_INSERT,              /* B */
443         /*  67 */       ED_INSERT,              /* C */
444         /*  68 */       ED_INSERT,              /* D */
445         /*  69 */       ED_INSERT,              /* E */
446         /*  70 */       ED_INSERT,              /* F */
447         /*  71 */       ED_INSERT,              /* G */
448         /*  72 */       ED_INSERT,              /* H */
449         /*  73 */       ED_INSERT,              /* I */
450         /*  74 */       ED_INSERT,              /* J */
451         /*  75 */       ED_INSERT,              /* K */
452         /*  76 */       ED_INSERT,              /* L */
453         /*  77 */       ED_INSERT,              /* M */
454         /*  78 */       ED_INSERT,              /* N */
455         /*  79 */       ED_INSERT,              /* O */
456         /*  80 */       ED_INSERT,              /* P */
457         /*  81 */       ED_INSERT,              /* Q */
458         /*  82 */       ED_INSERT,              /* R */
459         /*  83 */       ED_INSERT,              /* S */
460         /*  84 */       ED_INSERT,              /* T */
461         /*  85 */       ED_INSERT,              /* U */
462         /*  86 */       ED_INSERT,              /* V */
463         /*  87 */       ED_INSERT,              /* W */
464         /*  88 */       ED_INSERT,              /* X */
465         /*  89 */       ED_INSERT,              /* Y */
466         /*  90 */       ED_INSERT,              /* Z */
467         /*  91 */       ED_INSERT,              /* [ */
468         /*  92 */       ED_INSERT,              /* \ */
469         /*  93 */       ED_INSERT,              /* ] */
470         /*  94 */       ED_INSERT,              /* ^ */
471         /*  95 */       ED_INSERT,              /* _ */
472         /*  96 */       ED_INSERT,              /* ` */
473         /*  97 */       ED_INSERT,              /* a */
474         /*  98 */       ED_INSERT,              /* b */
475         /*  99 */       ED_INSERT,              /* c */
476         /* 100 */       ED_INSERT,              /* d */
477         /* 101 */       ED_INSERT,              /* e */
478         /* 102 */       ED_INSERT,              /* f */
479         /* 103 */       ED_INSERT,              /* g */
480         /* 104 */       ED_INSERT,              /* h */
481         /* 105 */       ED_INSERT,              /* i */
482         /* 106 */       ED_INSERT,              /* j */
483         /* 107 */       ED_INSERT,              /* k */
484         /* 108 */       ED_INSERT,              /* l */
485         /* 109 */       ED_INSERT,              /* m */
486         /* 110 */       ED_INSERT,              /* n */
487         /* 111 */       ED_INSERT,              /* o */
488         /* 112 */       ED_INSERT,              /* p */
489         /* 113 */       ED_INSERT,              /* q */
490         /* 114 */       ED_INSERT,              /* r */
491         /* 115 */       ED_INSERT,              /* s */
492         /* 116 */       ED_INSERT,              /* t */
493         /* 117 */       ED_INSERT,              /* u */
494         /* 118 */       ED_INSERT,              /* v */
495         /* 119 */       ED_INSERT,              /* w */
496         /* 120 */       ED_INSERT,              /* x */
497         /* 121 */       ED_INSERT,              /* y */
498         /* 122 */       ED_INSERT,              /* z */
499         /* 123 */       ED_INSERT,              /* { */
500         /* 124 */       ED_INSERT,              /* | */
501         /* 125 */       ED_INSERT,              /* } */
502         /* 126 */       ED_INSERT,              /* ~ */
503         /* 127 */       ED_DELETE_PREV_CHAR,    /* ^? */
504         /* 128 */       ED_UNASSIGNED,          /* M-^@ */
505         /* 129 */       ED_UNASSIGNED,          /* M-^A */
506         /* 130 */       ED_UNASSIGNED,          /* M-^B */
507         /* 131 */       ED_UNASSIGNED,          /* M-^C */
508         /* 132 */       ED_UNASSIGNED,          /* M-^D */
509         /* 133 */       ED_UNASSIGNED,          /* M-^E */
510         /* 134 */       ED_UNASSIGNED,          /* M-^F */
511         /* 135 */       ED_UNASSIGNED,          /* M-^G */
512         /* 136 */       ED_UNASSIGNED,          /* M-^H */
513         /* 137 */       ED_UNASSIGNED,          /* M-^I */
514         /* 138 */       ED_UNASSIGNED,          /* M-^J */
515         /* 139 */       ED_UNASSIGNED,          /* M-^K */
516         /* 140 */       ED_UNASSIGNED,          /* M-^L */
517         /* 141 */       ED_UNASSIGNED,          /* M-^M */
518         /* 142 */       ED_UNASSIGNED,          /* M-^N */
519         /* 143 */       ED_UNASSIGNED,          /* M-^O */
520         /* 144 */       ED_UNASSIGNED,          /* M-^P */
521         /* 145 */       ED_UNASSIGNED,          /* M-^Q */
522         /* 146 */       ED_UNASSIGNED,          /* M-^R */
523         /* 147 */       ED_UNASSIGNED,          /* M-^S */
524         /* 148 */       ED_UNASSIGNED,          /* M-^T */
525         /* 149 */       ED_UNASSIGNED,          /* M-^U */
526         /* 150 */       ED_UNASSIGNED,          /* M-^V */
527         /* 151 */       ED_UNASSIGNED,          /* M-^W */
528         /* 152 */       ED_UNASSIGNED,          /* M-^X */
529         /* 153 */       ED_UNASSIGNED,          /* M-^Y */
530         /* 154 */       ED_UNASSIGNED,          /* M-^Z */
531         /* 155 */       ED_UNASSIGNED,          /* M-^[ */
532         /* 156 */       ED_UNASSIGNED,          /* M-^\ */
533         /* 157 */       ED_UNASSIGNED,          /* M-^] */
534         /* 158 */       ED_UNASSIGNED,          /* M-^^ */
535         /* 159 */       ED_UNASSIGNED,          /* M-^_ */
536         /* 160 */       ED_UNASSIGNED,          /* M-SPACE */
537         /* 161 */       ED_UNASSIGNED,          /* M-! */
538         /* 162 */       ED_UNASSIGNED,          /* M-" */
539         /* 163 */       ED_UNASSIGNED,          /* M-# */
540         /* 164 */       ED_UNASSIGNED,          /* M-$ */
541         /* 165 */       ED_UNASSIGNED,          /* M-% */
542         /* 166 */       ED_UNASSIGNED,          /* M-& */
543         /* 167 */       ED_UNASSIGNED,          /* M-' */
544         /* 168 */       ED_UNASSIGNED,          /* M-( */
545         /* 169 */       ED_UNASSIGNED,          /* M-) */
546         /* 170 */       ED_UNASSIGNED,          /* M-* */
547         /* 171 */       ED_UNASSIGNED,          /* M-+ */
548         /* 172 */       ED_UNASSIGNED,          /* M-, */
549         /* 173 */       ED_UNASSIGNED,          /* M-- */
550         /* 174 */       ED_UNASSIGNED,          /* M-. */
551         /* 175 */       ED_UNASSIGNED,          /* M-/ */
552         /* 176 */       ED_UNASSIGNED,          /* M-0 */
553         /* 177 */       ED_UNASSIGNED,          /* M-1 */
554         /* 178 */       ED_UNASSIGNED,          /* M-2 */
555         /* 179 */       ED_UNASSIGNED,          /* M-3 */
556         /* 180 */       ED_UNASSIGNED,          /* M-4 */
557         /* 181 */       ED_UNASSIGNED,          /* M-5 */
558         /* 182 */       ED_UNASSIGNED,          /* M-6 */
559         /* 183 */       ED_UNASSIGNED,          /* M-7 */
560         /* 184 */       ED_UNASSIGNED,          /* M-8 */
561         /* 185 */       ED_UNASSIGNED,          /* M-9 */
562         /* 186 */       ED_UNASSIGNED,          /* M-: */
563         /* 187 */       ED_UNASSIGNED,          /* M-; */
564         /* 188 */       ED_UNASSIGNED,          /* M-< */
565         /* 189 */       ED_UNASSIGNED,          /* M-= */
566         /* 190 */       ED_UNASSIGNED,          /* M-> */
567         /* 191 */       ED_UNASSIGNED,          /* M-? */
568         /* 192 */       ED_UNASSIGNED,          /* M-@ */
569         /* 193 */       ED_UNASSIGNED,          /* M-A */
570         /* 194 */       ED_UNASSIGNED,          /* M-B */
571         /* 195 */       ED_UNASSIGNED,          /* M-C */
572         /* 196 */       ED_UNASSIGNED,          /* M-D */
573         /* 197 */       ED_UNASSIGNED,          /* M-E */
574         /* 198 */       ED_UNASSIGNED,          /* M-F */
575         /* 199 */       ED_UNASSIGNED,          /* M-G */
576         /* 200 */       ED_UNASSIGNED,          /* M-H */
577         /* 201 */       ED_UNASSIGNED,          /* M-I */
578         /* 202 */       ED_UNASSIGNED,          /* M-J */
579         /* 203 */       ED_UNASSIGNED,          /* M-K */
580         /* 204 */       ED_UNASSIGNED,          /* M-L */
581         /* 205 */       ED_UNASSIGNED,          /* M-M */
582         /* 206 */       ED_UNASSIGNED,          /* M-N */
583         /* 207 */       ED_UNASSIGNED,          /* M-O */
584         /* 208 */       ED_UNASSIGNED,          /* M-P */
585         /* 209 */       ED_UNASSIGNED,          /* M-Q */
586         /* 210 */       ED_UNASSIGNED,          /* M-R */
587         /* 211 */       ED_UNASSIGNED,          /* M-S */
588         /* 212 */       ED_UNASSIGNED,          /* M-T */
589         /* 213 */       ED_UNASSIGNED,          /* M-U */
590         /* 214 */       ED_UNASSIGNED,          /* M-V */
591         /* 215 */       ED_UNASSIGNED,          /* M-W */
592         /* 216 */       ED_UNASSIGNED,          /* M-X */
593         /* 217 */       ED_UNASSIGNED,          /* M-Y */
594         /* 218 */       ED_UNASSIGNED,          /* M-Z */
595         /* 219 */       ED_UNASSIGNED,          /* M-[ */
596         /* 220 */       ED_UNASSIGNED,          /* M-\ */
597         /* 221 */       ED_UNASSIGNED,          /* M-] */
598         /* 222 */       ED_UNASSIGNED,          /* M-^ */
599         /* 223 */       ED_UNASSIGNED,          /* M-_ */
600         /* 224 */       ED_UNASSIGNED,          /* M-` */
601         /* 225 */       ED_UNASSIGNED,          /* M-a */
602         /* 226 */       ED_UNASSIGNED,          /* M-b */
603         /* 227 */       ED_UNASSIGNED,          /* M-c */
604         /* 228 */       ED_UNASSIGNED,          /* M-d */
605         /* 229 */       ED_UNASSIGNED,          /* M-e */
606         /* 230 */       ED_UNASSIGNED,          /* M-f */
607         /* 231 */       ED_UNASSIGNED,          /* M-g */
608         /* 232 */       ED_UNASSIGNED,          /* M-h */
609         /* 233 */       ED_UNASSIGNED,          /* M-i */
610         /* 234 */       ED_UNASSIGNED,          /* M-j */
611         /* 235 */       ED_UNASSIGNED,          /* M-k */
612         /* 236 */       ED_UNASSIGNED,          /* M-l */
613         /* 237 */       ED_UNASSIGNED,          /* M-m */
614         /* 238 */       ED_UNASSIGNED,          /* M-n */
615         /* 239 */       ED_UNASSIGNED,          /* M-o */
616         /* 240 */       ED_UNASSIGNED,          /* M-p */
617         /* 241 */       ED_UNASSIGNED,          /* M-q */
618         /* 242 */       ED_UNASSIGNED,          /* M-r */
619         /* 243 */       ED_UNASSIGNED,          /* M-s */
620         /* 244 */       ED_UNASSIGNED,          /* M-t */
621         /* 245 */       ED_UNASSIGNED,          /* M-u */
622         /* 246 */       ED_UNASSIGNED,          /* M-v */
623         /* 247 */       ED_UNASSIGNED,          /* M-w */
624         /* 248 */       ED_UNASSIGNED,          /* M-x */
625         /* 249 */       ED_UNASSIGNED,          /* M-y */
626         /* 250 */       ED_UNASSIGNED,          /* M-z */
627         /* 251 */       ED_UNASSIGNED,          /* M-{ */
628         /* 252 */       ED_UNASSIGNED,          /* M-| */
629         /* 253 */       ED_UNASSIGNED,          /* M-} */
630         /* 254 */       ED_UNASSIGNED,          /* M-~ */
631         /* 255 */       ED_UNASSIGNED           /* M-^? */
632 };
633
634 private const el_action_t el_map_vi_command[] = {
635         /*   0 */       ED_UNASSIGNED,          /* ^@ */
636         /*   1 */       ED_MOVE_TO_BEG,         /* ^A */
637         /*   2 */       ED_UNASSIGNED,          /* ^B */
638         /*   3 */       ED_TTY_SIGINT,          /* ^C */
639         /*   4 */       ED_UNASSIGNED,          /* ^D */
640         /*   5 */       ED_MOVE_TO_END,         /* ^E */
641         /*   6 */       ED_UNASSIGNED,          /* ^F */
642         /*   7 */       ED_UNASSIGNED,          /* ^G */
643         /*   8 */       ED_PREV_CHAR,           /* ^H */
644         /*   9 */       ED_UNASSIGNED,          /* ^I */
645         /*  10 */       ED_NEWLINE,             /* ^J */
646         /*  11 */       ED_KILL_LINE,           /* ^K */
647         /*  12 */       ED_CLEAR_SCREEN,        /* ^L */
648         /*  13 */       ED_NEWLINE,             /* ^M */
649         /*  14 */       ED_NEXT_HISTORY,        /* ^N */
650         /*  15 */       ED_TTY_FLUSH_OUTPUT,    /* ^O */
651         /*  16 */       ED_PREV_HISTORY,        /* ^P */
652         /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
653         /*  18 */       ED_REDISPLAY,           /* ^R */
654         /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
655         /*  20 */       ED_UNASSIGNED,          /* ^T */
656         /*  21 */       VI_KILL_LINE_PREV,      /* ^U */
657         /*  22 */       ED_UNASSIGNED,          /* ^V */
658         /*  23 */       ED_DELETE_PREV_WORD,    /* ^W */
659         /*  24 */       ED_UNASSIGNED,          /* ^X */
660         /*  25 */       ED_UNASSIGNED,          /* ^Y */
661         /*  26 */       ED_UNASSIGNED,          /* ^Z */
662         /*  27 */       EM_META_NEXT,           /* ^[ */
663         /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
664         /*  29 */       ED_UNASSIGNED,          /* ^] */
665         /*  30 */       ED_UNASSIGNED,          /* ^^ */
666         /*  31 */       ED_UNASSIGNED,          /* ^_ */
667         /*  32 */       ED_NEXT_CHAR,           /* SPACE */
668         /*  33 */       ED_UNASSIGNED,          /* ! */
669         /*  34 */       ED_UNASSIGNED,          /* " */
670         /*  35 */       ED_UNASSIGNED,          /* # */
671         /*  36 */       ED_MOVE_TO_END,         /* $ */
672         /*  37 */       ED_UNASSIGNED,          /* % */
673         /*  38 */       ED_UNASSIGNED,          /* & */
674         /*  39 */       ED_UNASSIGNED,          /* ' */
675         /*  40 */       ED_UNASSIGNED,          /* ( */
676         /*  41 */       ED_UNASSIGNED,          /* ) */
677         /*  42 */       ED_UNASSIGNED,          /* * */
678         /*  43 */       ED_NEXT_HISTORY,        /* + */
679         /*  44 */       VI_REPEAT_PREV_CHAR,    /* , */
680         /*  45 */       ED_PREV_HISTORY,        /* - */
681         /*  46 */       ED_UNASSIGNED,          /* . */
682         /*  47 */       VI_SEARCH_PREV,         /* / */
683         /*  48 */       VI_ZERO,                /* 0 */
684         /*  49 */       ED_ARGUMENT_DIGIT,      /* 1 */
685         /*  50 */       ED_ARGUMENT_DIGIT,      /* 2 */
686         /*  51 */       ED_ARGUMENT_DIGIT,      /* 3 */
687         /*  52 */       ED_ARGUMENT_DIGIT,      /* 4 */
688         /*  53 */       ED_ARGUMENT_DIGIT,      /* 5 */
689         /*  54 */       ED_ARGUMENT_DIGIT,      /* 6 */
690         /*  55 */       ED_ARGUMENT_DIGIT,      /* 7 */
691         /*  56 */       ED_ARGUMENT_DIGIT,      /* 8 */
692         /*  57 */       ED_ARGUMENT_DIGIT,      /* 9 */
693         /*  58 */       ED_COMMAND,             /* : */
694         /*  59 */       VI_REPEAT_NEXT_CHAR,    /* ; */
695         /*  60 */       ED_UNASSIGNED,          /* < */
696         /*  61 */       ED_UNASSIGNED,          /* = */
697         /*  62 */       ED_UNASSIGNED,          /* > */
698         /*  63 */       VI_SEARCH_NEXT,         /* ? */
699         /*  64 */       ED_UNASSIGNED,          /* @ */
700         /*  65 */       VI_ADD_AT_EOL,          /* A */
701         /*  66 */       VI_PREV_SPACE_WORD,     /* B */
702         /*  67 */       VI_CHANGE_TO_EOL,       /* C */
703         /*  68 */       ED_KILL_LINE,           /* D */
704         /*  69 */       VI_TO_END_WORD,         /* E */
705         /*  70 */       VI_PREV_CHAR,           /* F */
706         /*  71 */       ED_UNASSIGNED,          /* G */
707         /*  72 */       ED_UNASSIGNED,          /* H */
708         /*  73 */       VI_INSERT_AT_BOL,       /* I */
709         /*  74 */       ED_SEARCH_NEXT_HISTORY, /* J */
710         /*  75 */       ED_SEARCH_PREV_HISTORY, /* K */
711         /*  76 */       ED_UNASSIGNED,          /* L */
712         /*  77 */       ED_UNASSIGNED,          /* M */
713         /*  78 */       VI_REPEAT_SEARCH_PREV,  /* N */
714         /*  79 */       ED_SEQUENCE_LEAD_IN,    /* O */
715         /*  80 */       VI_PASTE_PREV,          /* P */
716         /*  81 */       ED_UNASSIGNED,          /* Q */
717         /*  82 */       VI_REPLACE_MODE,        /* R */
718         /*  83 */       VI_SUBSTITUTE_LINE,     /* S */
719         /*  84 */       VI_TO_PREV_CHAR,        /* T */
720         /*  85 */       ED_UNASSIGNED,          /* U */
721         /*  86 */       ED_UNASSIGNED,          /* V */
722         /*  87 */       VI_NEXT_SPACE_WORD,     /* W */
723         /*  88 */       ED_DELETE_PREV_CHAR,    /* X */
724         /*  89 */       ED_UNASSIGNED,          /* Y */
725         /*  90 */       ED_UNASSIGNED,          /* Z */
726         /*  91 */       ED_SEQUENCE_LEAD_IN,    /* [ */
727         /*  92 */       ED_UNASSIGNED,          /* \ */
728         /*  93 */       ED_UNASSIGNED,          /* ] */
729         /*  94 */       ED_MOVE_TO_BEG,         /* ^ */
730         /*  95 */       ED_UNASSIGNED,          /* _ */
731         /*  96 */       ED_UNASSIGNED,          /* ` */
732         /*  97 */       VI_ADD,                 /* a */
733         /*  98 */       VI_PREV_WORD,           /* b */
734         /*  99 */       VI_CHANGE_META,         /* c */
735         /* 100 */       VI_DELETE_META,         /* d */
736         /* 101 */       VI_END_WORD,            /* e */
737         /* 102 */       VI_NEXT_CHAR,           /* f */
738         /* 103 */       ED_UNASSIGNED,          /* g */
739         /* 104 */       ED_PREV_CHAR,           /* h */
740         /* 105 */       VI_INSERT,              /* i */
741         /* 106 */       ED_NEXT_HISTORY,        /* j */
742         /* 107 */       ED_PREV_HISTORY,        /* k */
743         /* 108 */       ED_NEXT_CHAR,           /* l */
744         /* 109 */       ED_UNASSIGNED,          /* m */
745         /* 110 */       VI_REPEAT_SEARCH_NEXT,  /* n */
746         /* 111 */       ED_UNASSIGNED,          /* o */
747         /* 112 */       VI_PASTE_NEXT,          /* p */
748         /* 113 */       ED_UNASSIGNED,          /* q */
749         /* 114 */       VI_REPLACE_CHAR,        /* r */
750         /* 115 */       VI_SUBSTITUTE_CHAR,     /* s */
751         /* 116 */       VI_TO_NEXT_CHAR,        /* t */
752         /* 117 */       VI_UNDO,                /* u */
753         /* 118 */       ED_UNASSIGNED,          /* v */
754         /* 119 */       VI_NEXT_WORD,           /* w */
755         /* 120 */       ED_DELETE_NEXT_CHAR,    /* x */
756         /* 121 */       ED_UNASSIGNED,          /* y */
757         /* 122 */       ED_UNASSIGNED,          /* z */
758         /* 123 */       ED_UNASSIGNED,          /* { */
759         /* 124 */       ED_UNASSIGNED,          /* | */
760         /* 125 */       ED_UNASSIGNED,          /* } */
761         /* 126 */       VI_CHANGE_CASE,         /* ~ */
762         /* 127 */       ED_DELETE_PREV_CHAR,    /* ^? */
763         /* 128 */       ED_UNASSIGNED,          /* M-^@ */
764         /* 129 */       ED_UNASSIGNED,          /* M-^A */
765         /* 130 */       ED_UNASSIGNED,          /* M-^B */
766         /* 131 */       ED_UNASSIGNED,          /* M-^C */
767         /* 132 */       ED_UNASSIGNED,          /* M-^D */
768         /* 133 */       ED_UNASSIGNED,          /* M-^E */
769         /* 134 */       ED_UNASSIGNED,          /* M-^F */
770         /* 135 */       ED_UNASSIGNED,          /* M-^G */
771         /* 136 */       ED_UNASSIGNED,          /* M-^H */
772         /* 137 */       ED_UNASSIGNED,          /* M-^I */
773         /* 138 */       ED_UNASSIGNED,          /* M-^J */
774         /* 139 */       ED_UNASSIGNED,          /* M-^K */
775         /* 140 */       ED_UNASSIGNED,          /* M-^L */
776         /* 141 */       ED_UNASSIGNED,          /* M-^M */
777         /* 142 */       ED_UNASSIGNED,          /* M-^N */
778         /* 143 */       ED_UNASSIGNED,          /* M-^O */
779         /* 144 */       ED_UNASSIGNED,          /* M-^P */
780         /* 145 */       ED_UNASSIGNED,          /* M-^Q */
781         /* 146 */       ED_UNASSIGNED,          /* M-^R */
782         /* 147 */       ED_UNASSIGNED,          /* M-^S */
783         /* 148 */       ED_UNASSIGNED,          /* M-^T */
784         /* 149 */       ED_UNASSIGNED,          /* M-^U */
785         /* 150 */       ED_UNASSIGNED,          /* M-^V */
786         /* 151 */       ED_UNASSIGNED,          /* M-^W */
787         /* 152 */       ED_UNASSIGNED,          /* M-^X */
788         /* 153 */       ED_UNASSIGNED,          /* M-^Y */
789         /* 154 */       ED_UNASSIGNED,          /* M-^Z */
790         /* 155 */       ED_UNASSIGNED,          /* M-^[ */
791         /* 156 */       ED_UNASSIGNED,          /* M-^\ */
792         /* 157 */       ED_UNASSIGNED,          /* M-^] */
793         /* 158 */       ED_UNASSIGNED,          /* M-^^ */
794         /* 159 */       ED_UNASSIGNED,          /* M-^_ */
795         /* 160 */       ED_UNASSIGNED,          /* M-SPACE */
796         /* 161 */       ED_UNASSIGNED,          /* M-! */
797         /* 162 */       ED_UNASSIGNED,          /* M-" */
798         /* 163 */       ED_UNASSIGNED,          /* M-# */
799         /* 164 */       ED_UNASSIGNED,          /* M-$ */
800         /* 165 */       ED_UNASSIGNED,          /* M-% */
801         /* 166 */       ED_UNASSIGNED,          /* M-& */
802         /* 167 */       ED_UNASSIGNED,          /* M-' */
803         /* 168 */       ED_UNASSIGNED,          /* M-( */
804         /* 169 */       ED_UNASSIGNED,          /* M-) */
805         /* 170 */       ED_UNASSIGNED,          /* M-* */
806         /* 171 */       ED_UNASSIGNED,          /* M-+ */
807         /* 172 */       ED_UNASSIGNED,          /* M-, */
808         /* 173 */       ED_UNASSIGNED,          /* M-- */
809         /* 174 */       ED_UNASSIGNED,          /* M-. */
810         /* 175 */       ED_UNASSIGNED,          /* M-/ */
811         /* 176 */       ED_UNASSIGNED,          /* M-0 */
812         /* 177 */       ED_UNASSIGNED,          /* M-1 */
813         /* 178 */       ED_UNASSIGNED,          /* M-2 */
814         /* 179 */       ED_UNASSIGNED,          /* M-3 */
815         /* 180 */       ED_UNASSIGNED,          /* M-4 */
816         /* 181 */       ED_UNASSIGNED,          /* M-5 */
817         /* 182 */       ED_UNASSIGNED,          /* M-6 */
818         /* 183 */       ED_UNASSIGNED,          /* M-7 */
819         /* 184 */       ED_UNASSIGNED,          /* M-8 */
820         /* 185 */       ED_UNASSIGNED,          /* M-9 */
821         /* 186 */       ED_UNASSIGNED,          /* M-: */
822         /* 187 */       ED_UNASSIGNED,          /* M-; */
823         /* 188 */       ED_UNASSIGNED,          /* M-< */
824         /* 189 */       ED_UNASSIGNED,          /* M-= */
825         /* 190 */       ED_UNASSIGNED,          /* M-> */
826         /* 191 */       ED_UNASSIGNED,          /* M-? */
827         /* 192 */       ED_UNASSIGNED,          /* M-@ */
828         /* 193 */       ED_UNASSIGNED,          /* M-A */
829         /* 194 */       ED_UNASSIGNED,          /* M-B */
830         /* 195 */       ED_UNASSIGNED,          /* M-C */
831         /* 196 */       ED_UNASSIGNED,          /* M-D */
832         /* 197 */       ED_UNASSIGNED,          /* M-E */
833         /* 198 */       ED_UNASSIGNED,          /* M-F */
834         /* 199 */       ED_UNASSIGNED,          /* M-G */
835         /* 200 */       ED_UNASSIGNED,          /* M-H */
836         /* 201 */       ED_UNASSIGNED,          /* M-I */
837         /* 202 */       ED_UNASSIGNED,          /* M-J */
838         /* 203 */       ED_UNASSIGNED,          /* M-K */
839         /* 204 */       ED_UNASSIGNED,          /* M-L */
840         /* 205 */       ED_UNASSIGNED,          /* M-M */
841         /* 206 */       ED_UNASSIGNED,          /* M-N */
842         /* 207 */       ED_SEQUENCE_LEAD_IN,    /* M-O */
843         /* 208 */       ED_UNASSIGNED,          /* M-P */
844         /* 209 */       ED_UNASSIGNED,          /* M-Q */
845         /* 210 */       ED_UNASSIGNED,          /* M-R */
846         /* 211 */       ED_UNASSIGNED,          /* M-S */
847         /* 212 */       ED_UNASSIGNED,          /* M-T */
848         /* 213 */       ED_UNASSIGNED,          /* M-U */
849         /* 214 */       ED_UNASSIGNED,          /* M-V */
850         /* 215 */       ED_UNASSIGNED,          /* M-W */
851         /* 216 */       ED_UNASSIGNED,          /* M-X */
852         /* 217 */       ED_UNASSIGNED,          /* M-Y */
853         /* 218 */       ED_UNASSIGNED,          /* M-Z */
854         /* 219 */       ED_SEQUENCE_LEAD_IN,    /* M-[ */
855         /* 220 */       ED_UNASSIGNED,          /* M-\ */
856         /* 221 */       ED_UNASSIGNED,          /* M-] */
857         /* 222 */       ED_UNASSIGNED,          /* M-^ */
858         /* 223 */       ED_UNASSIGNED,          /* M-_ */
859         /* 224 */       ED_UNASSIGNED,          /* M-` */
860         /* 225 */       ED_UNASSIGNED,          /* M-a */
861         /* 226 */       ED_UNASSIGNED,          /* M-b */
862         /* 227 */       ED_UNASSIGNED,          /* M-c */
863         /* 228 */       ED_UNASSIGNED,          /* M-d */
864         /* 229 */       ED_UNASSIGNED,          /* M-e */
865         /* 230 */       ED_UNASSIGNED,          /* M-f */
866         /* 231 */       ED_UNASSIGNED,          /* M-g */
867         /* 232 */       ED_UNASSIGNED,          /* M-h */
868         /* 233 */       ED_UNASSIGNED,          /* M-i */
869         /* 234 */       ED_UNASSIGNED,          /* M-j */
870         /* 235 */       ED_UNASSIGNED,          /* M-k */
871         /* 236 */       ED_UNASSIGNED,          /* M-l */
872         /* 237 */       ED_UNASSIGNED,          /* M-m */
873         /* 238 */       ED_UNASSIGNED,          /* M-n */
874         /* 239 */       ED_UNASSIGNED,          /* M-o */
875         /* 240 */       ED_UNASSIGNED,          /* M-p */
876         /* 241 */       ED_UNASSIGNED,          /* M-q */
877         /* 242 */       ED_UNASSIGNED,          /* M-r */
878         /* 243 */       ED_UNASSIGNED,          /* M-s */
879         /* 244 */       ED_UNASSIGNED,          /* M-t */
880         /* 245 */       ED_UNASSIGNED,          /* M-u */
881         /* 246 */       ED_UNASSIGNED,          /* M-v */
882         /* 247 */       ED_UNASSIGNED,          /* M-w */
883         /* 248 */       ED_UNASSIGNED,          /* M-x */
884         /* 249 */       ED_UNASSIGNED,          /* M-y */
885         /* 250 */       ED_UNASSIGNED,          /* M-z */
886         /* 251 */       ED_UNASSIGNED,          /* M-{ */
887         /* 252 */       ED_UNASSIGNED,          /* M-| */
888         /* 253 */       ED_UNASSIGNED,          /* M-} */
889         /* 254 */       ED_UNASSIGNED,          /* M-~ */
890         /* 255 */       ED_UNASSIGNED           /* M-^? */
891 };
892
893
894 /* map_init():
895  *      Initialize and allocate the maps
896  */
897 protected int
898 map_init(EditLine *el)
899 {
900
901         /*
902          * Make sure those are correct before starting.
903          */
904 #ifdef MAP_DEBUG
905         if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
906                 EL_ABORT((el->errfile, "Emacs map incorrect\n"));
907         if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
908                 EL_ABORT((el->errfile, "Vi command map incorrect\n"));
909         if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
910                 EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
911 #endif
912
913         el->el_map.alt = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS);
914         if (el->el_map.alt == NULL)
915                 return (-1);
916         el->el_map.key = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS);
917         if (el->el_map.key == NULL)
918                 return (-1);
919         el->el_map.emacs = el_map_emacs;
920         el->el_map.vic = el_map_vi_command;
921         el->el_map.vii = el_map_vi_insert;
922         el->el_map.help = (el_bindings_t *) el_malloc(sizeof(el_bindings_t) *
923             EL_NUM_FCNS);
924         if (el->el_map.help == NULL)
925                 return (-1);
926         (void) memcpy(el->el_map.help, help__get(),
927             sizeof(el_bindings_t) * EL_NUM_FCNS);
928         el->el_map.func = (el_func_t *)el_malloc(sizeof(el_func_t) *
929             EL_NUM_FCNS);
930         if (el->el_map.func == NULL)
931                 return (-1);
932         memcpy(el->el_map.func, func__get(), sizeof(el_func_t) * EL_NUM_FCNS);
933         el->el_map.nfunc = EL_NUM_FCNS;
934
935 #ifdef VIDEFAULT
936         map_init_vi(el);
937 #else
938         map_init_emacs(el);
939 #endif /* VIDEFAULT */
940         return (0);
941 }
942
943
944 /* map_end():
945  *      Free the space taken by the editor maps
946  */
947 protected void
948 map_end(EditLine *el)
949 {
950
951         el_free((ptr_t) el->el_map.alt);
952         el->el_map.alt = NULL;
953         el_free((ptr_t) el->el_map.key);
954         el->el_map.key = NULL;
955         el->el_map.emacs = NULL;
956         el->el_map.vic = NULL;
957         el->el_map.vii = NULL;
958         el_free((ptr_t) el->el_map.help);
959         el->el_map.help = NULL;
960         el_free((ptr_t) el->el_map.func);
961         el->el_map.func = NULL;
962 }
963
964
965 /* map_init_nls():
966  *      Find all the printable keys and bind them to self insert
967  */
968 private void
969 map_init_nls(EditLine *el)
970 {
971         int i;
972
973         el_action_t *map = el->el_map.key;
974
975         for (i = 0200; i <= 0377; i++)
976                 if (isprint(i))
977                         map[i] = ED_INSERT;
978 }
979
980
981 /* map_init_meta():
982  *      Bind all the meta keys to the appropriate ESC-<key> sequence
983  */
984 private void
985 map_init_meta(EditLine *el)
986 {
987         char buf[3];
988         int i;
989         el_action_t *map = el->el_map.key;
990         el_action_t *alt = el->el_map.alt;
991
992         for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
993                 continue;
994
995         if (i > 0377) {
996                 for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
997                         continue;
998                 if (i > 0377) {
999                         i = 033;
1000                         if (el->el_map.type == MAP_VI)
1001                                 map = alt;
1002                 } else
1003                         map = alt;
1004         }
1005         buf[0] = (char) i;
1006         buf[2] = 0;
1007         for (i = 0200; i <= 0377; i++)
1008                 switch (map[i]) {
1009                 case ED_INSERT:
1010                 case ED_UNASSIGNED:
1011                 case ED_SEQUENCE_LEAD_IN:
1012                         break;
1013                 default:
1014                         buf[1] = i & 0177;
1015                         key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD);
1016                         break;
1017                 }
1018         map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
1019 }
1020
1021
1022 /* map_init_vi():
1023  *      Initialize the vi bindings
1024  */
1025 protected void
1026 map_init_vi(EditLine *el)
1027 {
1028         int i;
1029         el_action_t *key = el->el_map.key;
1030         el_action_t *alt = el->el_map.alt;
1031         const el_action_t *vii = el->el_map.vii;
1032         const el_action_t *vic = el->el_map.vic;
1033
1034         el->el_map.type = MAP_VI;
1035         el->el_map.current = el->el_map.key;
1036
1037         key_reset(el);
1038
1039         for (i = 0; i < N_KEYS; i++) {
1040                 key[i] = vii[i];
1041                 alt[i] = vic[i];
1042         }
1043
1044         map_init_meta(el);
1045         map_init_nls(el);
1046
1047         tty_bind_char(el, 1);
1048         term_bind_arrow(el);
1049 }
1050
1051
1052 /* map_init_emacs():
1053  *      Initialize the emacs bindings
1054  */
1055 protected void
1056 map_init_emacs(EditLine *el)
1057 {
1058         int i;
1059         char buf[3];
1060         el_action_t *key = el->el_map.key;
1061         el_action_t *alt = el->el_map.alt;
1062         const el_action_t *emacs = el->el_map.emacs;
1063
1064         el->el_map.type = MAP_EMACS;
1065         el->el_map.current = el->el_map.key;
1066         key_reset(el);
1067
1068         for (i = 0; i < N_KEYS; i++) {
1069                 key[i] = emacs[i];
1070                 alt[i] = ED_UNASSIGNED;
1071         }
1072
1073         map_init_meta(el);
1074         map_init_nls(el);
1075
1076         buf[0] = CONTROL('X');
1077         buf[1] = CONTROL('X');
1078         buf[2] = 0;
1079         key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
1080
1081         tty_bind_char(el, 1);
1082         term_bind_arrow(el);
1083 }
1084
1085
1086 /* map_set_editor():
1087  *      Set the editor
1088  */
1089 protected int
1090 map_set_editor(EditLine *el, char *editor)
1091 {
1092
1093         if (strcmp(editor, "emacs") == 0) {
1094                 map_init_emacs(el);
1095                 return (0);
1096         }
1097         if (strcmp(editor, "vi") == 0) {
1098                 map_init_vi(el);
1099                 return (0);
1100         }
1101         return (-1);
1102 }
1103
1104
1105 /* map_get_editor():
1106  *      Retrieve the editor
1107  */
1108 protected int
1109 map_get_editor(EditLine *el, const char **editor)
1110 {
1111
1112         if (editor == NULL)
1113                 return (-1);
1114         switch (el->el_map.type) {
1115         case MAP_EMACS:
1116                 *editor = "emacs";
1117                 return (0);
1118         case MAP_VI:
1119                 *editor = "vi";
1120                 return (0);
1121         }
1122         return (-1);
1123 }
1124
1125
1126 /* map_print_key():
1127  *      Print the function description for 1 key
1128  */
1129 private void
1130 map_print_key(EditLine *el, el_action_t *map, char *in)
1131 {
1132         char outbuf[EL_BUFSIZ];
1133         el_bindings_t *bp;
1134
1135         if (in[0] == '\0' || in[1] == '\0') {
1136                 (void) key__decode_str(in, outbuf, "");
1137                 for (bp = el->el_map.help; bp->name != NULL; bp++)
1138                         if (bp->func == map[(unsigned char) *in]) {
1139                                 (void) el->el_std_printf(el,
1140                                     "%s\t->\t%s\n", outbuf, bp->name);
1141                                 return;
1142                         }
1143         } else
1144                 key_print(el, in);
1145 }
1146
1147
1148 /* map_print_some_keys():
1149  *      Print keys from first to last
1150  */
1151 private void
1152 map_print_some_keys(EditLine *el, el_action_t *map, int first, int last)
1153 {
1154         el_bindings_t *bp;
1155         char firstbuf[2], lastbuf[2];
1156         char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
1157
1158         firstbuf[0] = first;
1159         firstbuf[1] = 0;
1160         lastbuf[0] = last;
1161         lastbuf[1] = 0;
1162         if (map[first] == ED_UNASSIGNED) {
1163                 if (first == last)
1164                         (void) el->el_std_printf(el,
1165                             "%-15s->  is undefined\n",
1166                             key__decode_str(firstbuf, unparsbuf, STRQQ));
1167                 return;
1168         }
1169         for (bp = el->el_map.help; bp->name != NULL; bp++) {
1170                 if (bp->func == map[first]) {
1171                         if (first == last) {
1172                                 (void) el->el_std_printf(el, "%-15s->  %s\n",
1173                                     key__decode_str(firstbuf, unparsbuf, STRQQ),
1174                                     bp->name);
1175                         } else {
1176                                 (void) el->el_std_printf(el,
1177                                     "%-4s to %-7s->  %s\n",
1178                                     key__decode_str(firstbuf, unparsbuf, STRQQ),
1179                                     key__decode_str(lastbuf, extrabuf, STRQQ),
1180                                     bp->name);
1181                         }
1182                         return;
1183                 }
1184         }
1185 #ifdef MAP_DEBUG
1186         if (map == el->el_map.key) {
1187                 (void) el->el_std_printf(el,
1188                     "BUG!!! %s isn't bound to anything.\n",
1189                     key__decode_str(firstbuf, unparsbuf, STRQQ));
1190                 (void) el->el_std_printf(el, "el->el_map.key[%d] == %d\n",
1191                     first, el->el_map.key[first]);
1192         } else {
1193                 (void) el->el_std_printf(el,
1194                     "BUG!!! %s isn't bound to anything.\n",
1195                     key__decode_str(firstbuf, unparsbuf, STRQQ));
1196                 (void) el->el_std_printf(el, "el->el_map.alt[%d] == %d\n",
1197                     first, el->el_map.alt[first]);
1198         }
1199 #endif
1200         EL_ABORT((el, "Error printing keys\n"));
1201 }
1202
1203
1204 /* map_print_all_keys():
1205  *      Print the function description for all keys.
1206  */
1207 private void
1208 map_print_all_keys(EditLine *el)
1209 {
1210         int prev, i;
1211
1212         (void) el->el_std_printf(el, "Standard key bindings\n");
1213         prev = 0;
1214         for (i = 0; i < N_KEYS; i++) {
1215                 if (el->el_map.key[prev] == el->el_map.key[i])
1216                         continue;
1217                 map_print_some_keys(el, el->el_map.key, prev, i - 1);
1218                 prev = i;
1219         }
1220         map_print_some_keys(el, el->el_map.key, prev, i - 1);
1221
1222         (void) el->el_std_printf(el, "Alternative key bindings\n");
1223         prev = 0;
1224         for (i = 0; i < N_KEYS; i++) {
1225                 if (el->el_map.alt[prev] == el->el_map.alt[i])
1226                         continue;
1227                 map_print_some_keys(el, el->el_map.alt, prev, i - 1);
1228                 prev = i;
1229         }
1230         map_print_some_keys(el, el->el_map.alt, prev, i - 1);
1231
1232         (void) el->el_std_printf(el, "Multi-character bindings\n");
1233         key_print(el, "");
1234         (void) el->el_std_printf(el, "Arrow key bindings\n");
1235         term_print_arrow(el, "");
1236 }
1237
1238
1239 /* map_bind():
1240  *      Add/remove/change bindings
1241  */
1242 protected int
1243 map_bind(EditLine *el, int argc, char **argv)
1244 {
1245         el_action_t *map;
1246         int ntype, rem;
1247         char *p;
1248         char inbuf[EL_BUFSIZ];
1249         char outbuf[EL_BUFSIZ];
1250         char *in = NULL;
1251         char *out = NULL;
1252         el_bindings_t *bp;
1253         int cmd;
1254         int key;
1255
1256         if (argv == NULL)
1257                 return (-1);
1258
1259         map = el->el_map.key;
1260         ntype = XK_CMD;
1261         key = rem = 0;
1262         for (argc = 1; (p = argv[argc]) != NULL; argc++)
1263                 if (p[0] == '-')
1264                         switch (p[1]) {
1265                         case 'a':
1266                                 map = el->el_map.alt;
1267                                 break;
1268
1269                         case 's':
1270                                 ntype = XK_STR;
1271                                 break;
1272 #ifdef notyet
1273                         case 'c':
1274                                 ntype = XK_EXE;
1275                                 break;
1276 #endif
1277                         case 'k':
1278                                 key = 1;
1279                                 break;
1280
1281                         case 'r':
1282                                 rem = 1;
1283                                 break;
1284
1285                         case 'v':
1286                                 map_init_vi(el);
1287                                 return (0);
1288
1289                         case 'e':
1290                                 map_init_emacs(el);
1291                                 return (0);
1292
1293                         case 'l':
1294                                 for (bp = el->el_map.help; bp->name != NULL;
1295                                     bp++)
1296                                         (void) el->el_std_printf(el,
1297                                             "%s\n\t%s\n",
1298                                             bp->name, bp->description);
1299                                 return (0);
1300                         default:
1301                                 (void) el->el_err_printf(el,
1302                                     "%s: Invalid switch `%c'.\n",
1303                                     argv[0], p[1]);
1304                         }
1305                 else
1306                         break;
1307
1308         if (argv[argc] == NULL) {
1309                 map_print_all_keys(el);
1310                 return (0);
1311         }
1312         if (key)
1313                 in = argv[argc++];
1314         else if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
1315                 (void) el->el_err_printf(el,
1316                     "%s: Invalid \\ or ^ in instring.\n",
1317                     argv[0]);
1318                 return (-1);
1319         }
1320         if (rem) {
1321                 if (key) {
1322                         (void) term_clear_arrow(el, in);
1323                         return (-1);
1324                 }
1325                 if (in[1])
1326                         (void) key_delete(el, in);
1327                 else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
1328                         (void) key_delete(el, in);
1329                 else
1330                         map[(unsigned char) *in] = ED_UNASSIGNED;
1331                 return (0);
1332         }
1333         if (argv[argc] == NULL) {
1334                 if (key)
1335                         term_print_arrow(el, in);
1336                 else
1337                         map_print_key(el, map, in);
1338                 return (0);
1339         }
1340 #ifdef notyet
1341         if (argv[argc + 1] != NULL) {
1342                 bindkey_usage();
1343                 return (-1);
1344         }
1345 #endif
1346
1347         switch (ntype) {
1348         case XK_STR:
1349         case XK_EXE:
1350                 if ((out = parse__string(outbuf, argv[argc])) == NULL) {
1351                         (void) el->el_err_printf(el,
1352                             "%s: Invalid \\ or ^ in outstring.\n", argv[0]);
1353                         return (-1);
1354                 }
1355                 if (key)
1356                         term_set_arrow(el, in, key_map_str(el, out), ntype);
1357                 else
1358                         key_add(el, in, key_map_str(el, out), ntype);
1359                 map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
1360                 break;
1361
1362         case XK_CMD:
1363                 if ((cmd = parse_cmd(el, argv[argc])) == -1) {
1364                         (void) el->el_err_printf(el,
1365                             "%s: Invalid command `%s'.\n", argv[0], argv[argc]);
1366                         return (-1);
1367                 }
1368                 if (key)
1369                         term_set_arrow(el, in, key_map_str(el, out), ntype);
1370                 else {
1371                         if (in[1]) {
1372                                 key_add(el, in, key_map_cmd(el, cmd), ntype);
1373                                 map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
1374                         } else {
1375                                 key_clear(el, map, in);
1376                                 map[(unsigned char) *in] = cmd;
1377                         }
1378                 }
1379                 break;
1380
1381         default:
1382                 EL_ABORT((el, "Bad XK_ type\n", ntype));
1383                 break;
1384         }
1385         return (0);
1386 }
1387
1388
1389 /* map_addfunc():
1390  *      add a user defined function
1391  */
1392 protected int
1393 map_addfunc(EditLine *el, const char *name, const char *help, el_func_t func)
1394 {
1395         void *p;
1396         int nf = el->el_map.nfunc + 2;
1397
1398         if (name == NULL || help == NULL || func == NULL)
1399                 return (-1);
1400
1401         if ((p = el_realloc(el->el_map.func, nf * sizeof(el_func_t))) == NULL)
1402                 return (-1);
1403         el->el_map.func = (el_func_t *) p;
1404         if ((p = el_realloc(el->el_map.help, nf * sizeof(el_bindings_t)))
1405             == NULL)
1406                 return (-1);
1407         el->el_map.help = (el_bindings_t *) p;
1408
1409         nf = el->el_map.nfunc;
1410         el->el_map.func[nf] = func;
1411
1412         el->el_map.help[nf].name = name;
1413         el->el_map.help[nf].func = nf;
1414         el->el_map.help[nf].description = help;
1415         el->el_map.help[++nf].name = NULL;
1416         el->el_map.nfunc++;
1417
1418         return (0);
1419 }
Note: See TracBrowser for help on using the browser.