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