xref: /csrg-svn/lib/libedit/map.c (revision 61275)
154222Sbostic /*-
2*61275Sbostic  * Copyright (c) 1992, 1993
3*61275Sbostic  *	The Regents of the University of California.  All rights reserved.
454222Sbostic  *
554222Sbostic  * This code is derived from software contributed to Berkeley by
654222Sbostic  * Christos Zoulas of Cornell University.
754222Sbostic  *
854222Sbostic  * %sccs.include.redist.c%
954222Sbostic  */
1054222Sbostic 
1154624Schristos #if !defined(lint) && !defined(SCCSID)
12*61275Sbostic static char sccsid[] = "@(#)map.c	8.1 (Berkeley) 06/04/93";
1354624Schristos #endif /* not lint && not SCCSID */
1454222Sbostic 
1554222Sbostic /*
1654624Schristos  * map.c: Editor function definitions
1754222Sbostic  */
1854222Sbostic #include "sys.h"
1954222Sbostic #include <stdlib.h>
2054222Sbostic #include "el.h"
2154222Sbostic 
2254222Sbostic #define N_KEYS 256
2354222Sbostic 
2454222Sbostic private void map_print_key	 __P((EditLine *, el_action_t *, char *));
2554222Sbostic private void map_print_some_keys __P((EditLine *, el_action_t *, int, int));
2654222Sbostic private void map_print_all_keys	 __P((EditLine *));
2754222Sbostic private void map_init_nls 	 __P((EditLine *));
2854222Sbostic private void map_init_meta	 __P((EditLine *));
2954222Sbostic 
3054222Sbostic /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
3154222Sbostic 
3254222Sbostic private el_action_t  el_map_emacs[] = {
3354222Sbostic     /*   0 */	EM_SET_MARK,		/* ^@ */
3454222Sbostic     /*   1 */	ED_MOVE_TO_BEG,		/* ^A */
3554222Sbostic     /*   2 */	ED_PREV_CHAR,		/* ^B */
3654222Sbostic     /*   3 */	ED_TTY_SIGINT,		/* ^C */
3754222Sbostic     /*   4 */	EM_DELETE_OR_LIST,	/* ^D */
3854222Sbostic     /*   5 */	ED_MOVE_TO_END,		/* ^E */
3954222Sbostic     /*   6 */	ED_NEXT_CHAR,		/* ^F */
4054222Sbostic     /*   7 */	ED_UNASSIGNED,		/* ^G */
4154222Sbostic     /*   8 */	ED_DELETE_PREV_CHAR,	/* ^H */
4254222Sbostic     /*   9 */	ED_UNASSIGNED,		/* ^I */
4354222Sbostic     /*  10 */	ED_NEWLINE,		/* ^J */
4454222Sbostic     /*  11 */	ED_KILL_LINE,		/* ^K */
4554222Sbostic     /*  12 */	ED_CLEAR_SCREEN,	/* ^L */
4654222Sbostic     /*  13 */	ED_NEWLINE,		/* ^M */
4754222Sbostic     /*  14 */	ED_NEXT_HISTORY,	/* ^N */
4854222Sbostic     /*  15 */	ED_TTY_FLUSH_OUTPUT,	/* ^O */
4954222Sbostic     /*  16 */	ED_PREV_HISTORY,	/* ^P */
5054222Sbostic     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
5154222Sbostic     /*  18 */	ED_REDISPLAY,		/* ^R */
5254222Sbostic     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
5354222Sbostic     /*  20 */	ED_TRANSPOSE_CHARS,	/* ^T */
5454222Sbostic     /*  21 */	EM_KILL_LINE,		/* ^U */
5554222Sbostic     /*  22 */	ED_QUOTED_INSERT,	/* ^V */
5654222Sbostic     /*  23 */	EM_KILL_REGION,		/* ^W */
5754222Sbostic     /*  24 */	ED_SEQUENCE_LEAD_IN,	/* ^X */
5854222Sbostic     /*  25 */	EM_YANK,		/* ^Y */
5954222Sbostic     /*  26 */	ED_TTY_SIGTSTP,		/* ^Z */
6054222Sbostic     /*  27 */	EM_META_NEXT,		/* ^[ */
6154222Sbostic     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
6254222Sbostic     /*  29 */	ED_TTY_DSUSP,		/* ^] */
6354222Sbostic     /*  30 */	ED_UNASSIGNED,		/* ^^ */
6454222Sbostic     /*  31 */	ED_UNASSIGNED,		/* ^_ */
6554222Sbostic     /*  32 */	ED_INSERT,		/* SPACE */
6654222Sbostic     /*  33 */	ED_INSERT,		/* ! */
6754222Sbostic     /*  34 */	ED_INSERT,		/* " */
6854222Sbostic     /*  35 */	ED_INSERT,		/* # */
6954222Sbostic     /*  36 */	ED_INSERT,		/* $ */
7054222Sbostic     /*  37 */	ED_INSERT,		/* % */
7154222Sbostic     /*  38 */	ED_INSERT,		/* & */
7254222Sbostic     /*  39 */	ED_INSERT,		/* ' */
7354222Sbostic     /*  40 */	ED_INSERT,		/* ( */
7454222Sbostic     /*  41 */	ED_INSERT,		/* ) */
7554222Sbostic     /*  42 */	ED_INSERT,		/* * */
7654222Sbostic     /*  43 */	ED_INSERT,		/* + */
7754222Sbostic     /*  44 */	ED_INSERT,		/* , */
7854222Sbostic     /*  45 */	ED_INSERT,		/* - */
7954222Sbostic     /*  46 */	ED_INSERT,		/* . */
8054222Sbostic     /*  47 */	ED_INSERT,		/* / */
8154222Sbostic     /*  48 */	ED_DIGIT,		/* 0 */
8254222Sbostic     /*  49 */	ED_DIGIT,		/* 1 */
8354222Sbostic     /*  50 */	ED_DIGIT,		/* 2 */
8454222Sbostic     /*  51 */	ED_DIGIT,		/* 3 */
8554222Sbostic     /*  52 */	ED_DIGIT,		/* 4 */
8654222Sbostic     /*  53 */	ED_DIGIT,		/* 5 */
8754222Sbostic     /*  54 */	ED_DIGIT,		/* 6 */
8854222Sbostic     /*  55 */	ED_DIGIT,		/* 7 */
8954222Sbostic     /*  56 */	ED_DIGIT,		/* 8 */
9054222Sbostic     /*  57 */	ED_DIGIT,		/* 9 */
9154222Sbostic     /*  58 */	ED_INSERT,		/* : */
9254222Sbostic     /*  59 */	ED_INSERT,		/* ; */
9354222Sbostic     /*  60 */	ED_INSERT,		/* < */
9454222Sbostic     /*  61 */	ED_INSERT,		/* = */
9554222Sbostic     /*  62 */	ED_INSERT,		/* > */
9654222Sbostic     /*  63 */	ED_INSERT,		/* ? */
9754222Sbostic     /*  64 */	ED_INSERT,		/* @ */
9854222Sbostic     /*  65 */	ED_INSERT,		/* A */
9954222Sbostic     /*  66 */	ED_INSERT,		/* B */
10054222Sbostic     /*  67 */	ED_INSERT,		/* C */
10154222Sbostic     /*  68 */	ED_INSERT,		/* D */
10254222Sbostic     /*  69 */	ED_INSERT,		/* E */
10354222Sbostic     /*  70 */	ED_INSERT,		/* F */
10454222Sbostic     /*  71 */	ED_INSERT,		/* G */
10554222Sbostic     /*  72 */	ED_INSERT,		/* H */
10654222Sbostic     /*  73 */	ED_INSERT,		/* I */
10754222Sbostic     /*  74 */	ED_INSERT,		/* J */
10854222Sbostic     /*  75 */	ED_INSERT,		/* K */
10954222Sbostic     /*  76 */	ED_INSERT,		/* L */
11054222Sbostic     /*  77 */	ED_INSERT,		/* M */
11154222Sbostic     /*  78 */	ED_INSERT,		/* N */
11254222Sbostic     /*  79 */	ED_INSERT,		/* O */
11354222Sbostic     /*  80 */	ED_INSERT,		/* P */
11454222Sbostic     /*  81 */	ED_INSERT,		/* Q */
11554222Sbostic     /*  82 */	ED_INSERT,		/* R */
11654222Sbostic     /*  83 */	ED_INSERT,		/* S */
11754222Sbostic     /*  84 */	ED_INSERT,		/* T */
11854222Sbostic     /*  85 */	ED_INSERT,		/* U */
11954222Sbostic     /*  86 */	ED_INSERT,		/* V */
12054222Sbostic     /*  87 */	ED_INSERT,		/* W */
12154222Sbostic     /*  88 */	ED_INSERT,		/* X */
12254222Sbostic     /*  89 */	ED_INSERT,		/* Y */
12354222Sbostic     /*  90 */	ED_INSERT,		/* Z */
12454222Sbostic     /*  91 */	ED_INSERT,		/* [ */
12554222Sbostic     /*  92 */	ED_INSERT,		/* \ */
12654222Sbostic     /*  93 */	ED_INSERT,		/* ] */
12754222Sbostic     /*  94 */	ED_INSERT,		/* ^ */
12854222Sbostic     /*  95 */	ED_INSERT,		/* _ */
12954222Sbostic     /*  96 */	ED_INSERT,		/* ` */
13054222Sbostic     /*  97 */	ED_INSERT,		/* a */
13154222Sbostic     /*  98 */	ED_INSERT,		/* b */
13254222Sbostic     /*  99 */	ED_INSERT,		/* c */
13354222Sbostic     /* 100 */	ED_INSERT,		/* d */
13454222Sbostic     /* 101 */	ED_INSERT,		/* e */
13554222Sbostic     /* 102 */	ED_INSERT,		/* f */
13654222Sbostic     /* 103 */	ED_INSERT,		/* g */
13754222Sbostic     /* 104 */	ED_INSERT,		/* h */
13854222Sbostic     /* 105 */	ED_INSERT,		/* i */
13954222Sbostic     /* 106 */	ED_INSERT,		/* j */
14054222Sbostic     /* 107 */	ED_INSERT,		/* k */
14154222Sbostic     /* 108 */	ED_INSERT,		/* l */
14254222Sbostic     /* 109 */	ED_INSERT,		/* m */
14354222Sbostic     /* 110 */	ED_INSERT,		/* n */
14454222Sbostic     /* 111 */	ED_INSERT,		/* o */
14554222Sbostic     /* 112 */	ED_INSERT,		/* p */
14654222Sbostic     /* 113 */	ED_INSERT,		/* q */
14754222Sbostic     /* 114 */	ED_INSERT,		/* r */
14854222Sbostic     /* 115 */	ED_INSERT,		/* s */
14954222Sbostic     /* 116 */	ED_INSERT,		/* t */
15054222Sbostic     /* 117 */	ED_INSERT,		/* u */
15154222Sbostic     /* 118 */	ED_INSERT,		/* v */
15254222Sbostic     /* 119 */	ED_INSERT,		/* w */
15354222Sbostic     /* 120 */	ED_INSERT,		/* x */
15454222Sbostic     /* 121 */	ED_INSERT,		/* y */
15554222Sbostic     /* 122 */	ED_INSERT,		/* z */
15654222Sbostic     /* 123 */	ED_INSERT,		/* { */
15754222Sbostic     /* 124 */	ED_INSERT,		/* | */
15854222Sbostic     /* 125 */	ED_INSERT,		/* } */
15954222Sbostic     /* 126 */	ED_INSERT,		/* ~ */
16054222Sbostic     /* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
16154222Sbostic     /* 128 */	ED_UNASSIGNED,		/* M-^@ */
16254222Sbostic     /* 129 */	ED_UNASSIGNED,		/* M-^A */
16354222Sbostic     /* 130 */	ED_UNASSIGNED,		/* M-^B */
16454222Sbostic     /* 131 */	ED_UNASSIGNED,		/* M-^C */
16554222Sbostic     /* 132 */	ED_UNASSIGNED,		/* M-^D */
16654222Sbostic     /* 133 */	ED_UNASSIGNED,		/* M-^E */
16754222Sbostic     /* 134 */	ED_UNASSIGNED,		/* M-^F */
16854222Sbostic     /* 135 */	ED_UNASSIGNED,		/* M-^G */
16954222Sbostic     /* 136 */	ED_DELETE_PREV_WORD,	/* M-^H */
17054222Sbostic     /* 137 */	ED_UNASSIGNED,		/* M-^I */
17154222Sbostic     /* 138 */	ED_UNASSIGNED,		/* M-^J */
17254222Sbostic     /* 139 */	ED_UNASSIGNED,		/* M-^K */
17354222Sbostic     /* 140 */	ED_CLEAR_SCREEN,		/* M-^L */
17454222Sbostic     /* 141 */	ED_UNASSIGNED,		/* M-^M */
17554222Sbostic     /* 142 */	ED_UNASSIGNED,		/* M-^N */
17654222Sbostic     /* 143 */	ED_UNASSIGNED,		/* M-^O */
17754222Sbostic     /* 144 */	ED_UNASSIGNED,		/* M-^P */
17854222Sbostic     /* 145 */	ED_UNASSIGNED,		/* M-^Q */
17954222Sbostic     /* 146 */	ED_UNASSIGNED,		/* M-^R */
18054222Sbostic     /* 147 */	ED_UNASSIGNED,		/* M-^S */
18154222Sbostic     /* 148 */	ED_UNASSIGNED,		/* M-^T */
18254222Sbostic     /* 149 */	ED_UNASSIGNED,		/* M-^U */
18354222Sbostic     /* 150 */	ED_UNASSIGNED,		/* M-^V */
18454222Sbostic     /* 151 */	ED_UNASSIGNED,		/* M-^W */
18554222Sbostic     /* 152 */	ED_UNASSIGNED,		/* M-^X */
18654222Sbostic     /* 153 */	ED_UNASSIGNED,		/* M-^Y */
18754222Sbostic     /* 154 */	ED_UNASSIGNED,		/* M-^Z */
18854222Sbostic     /* 155 */	ED_UNASSIGNED,		/* M-^[ */
18954222Sbostic     /* 156 */	ED_UNASSIGNED,		/* M-^\ */
19054222Sbostic     /* 157 */	ED_UNASSIGNED,		/* M-^] */
19154222Sbostic     /* 158 */	ED_UNASSIGNED,		/* M-^^ */
19254222Sbostic     /* 159 */	EM_COPY_PREV_WORD,	/* M-^_ */
19354222Sbostic     /* 160 */	ED_UNASSIGNED,		/* M-SPACE */
19454222Sbostic     /* 161 */	ED_UNASSIGNED,		/* M-! */
19554222Sbostic     /* 162 */	ED_UNASSIGNED,		/* M-" */
19654222Sbostic     /* 163 */	ED_UNASSIGNED,		/* M-# */
19754222Sbostic     /* 164 */	ED_UNASSIGNED,		/* M-$ */
19854222Sbostic     /* 165 */	ED_UNASSIGNED,		/* M-% */
19954222Sbostic     /* 166 */	ED_UNASSIGNED,		/* M-& */
20054222Sbostic     /* 167 */	ED_UNASSIGNED,		/* M-' */
20154222Sbostic     /* 168 */	ED_UNASSIGNED,		/* M-( */
20254222Sbostic     /* 169 */	ED_UNASSIGNED,		/* M-) */
20354222Sbostic     /* 170 */	ED_UNASSIGNED,		/* M-* */
20454222Sbostic     /* 171 */	ED_UNASSIGNED,		/* M-+ */
20554222Sbostic     /* 172 */	ED_UNASSIGNED,		/* M-, */
20654222Sbostic     /* 173 */	ED_UNASSIGNED,		/* M-- */
20754222Sbostic     /* 174 */	ED_UNASSIGNED,		/* M-. */
20854222Sbostic     /* 175 */	ED_UNASSIGNED,		/* M-/ */
20954222Sbostic     /* 176 */	ED_ARGUMENT_DIGIT,	/* M-0 */
21054222Sbostic     /* 177 */	ED_ARGUMENT_DIGIT,	/* M-1 */
21154222Sbostic     /* 178 */	ED_ARGUMENT_DIGIT,	/* M-2 */
21254222Sbostic     /* 179 */	ED_ARGUMENT_DIGIT,	/* M-3 */
21354222Sbostic     /* 180 */	ED_ARGUMENT_DIGIT,	/* M-4 */
21454222Sbostic     /* 181 */	ED_ARGUMENT_DIGIT,	/* M-5 */
21554222Sbostic     /* 182 */	ED_ARGUMENT_DIGIT,	/* M-6 */
21654222Sbostic     /* 183 */	ED_ARGUMENT_DIGIT,	/* M-7 */
21754222Sbostic     /* 184 */	ED_ARGUMENT_DIGIT,	/* M-8 */
21854222Sbostic     /* 185 */	ED_ARGUMENT_DIGIT,	/* M-9 */
21954222Sbostic     /* 186 */	ED_UNASSIGNED,		/* M-: */
22054222Sbostic     /* 187 */	ED_UNASSIGNED,		/* M-; */
22154222Sbostic     /* 188 */	ED_UNASSIGNED,		/* M-< */
22254222Sbostic     /* 189 */	ED_UNASSIGNED,		/* M-= */
22354222Sbostic     /* 190 */	ED_UNASSIGNED,		/* M-> */
22454222Sbostic     /* 191 */	ED_UNASSIGNED,		/* M-? */
22554222Sbostic     /* 192 */	ED_UNASSIGNED,		/* M-@ */
22654222Sbostic     /* 193 */	ED_UNASSIGNED,		/* M-A */
22754222Sbostic     /* 194 */	ED_PREV_WORD,		/* M-B */
22854222Sbostic     /* 195 */	EM_CAPITOL_CASE,		/* M-C */
22954222Sbostic     /* 196 */	EM_DELETE_NEXT_WORD,	/* M-D */
23054222Sbostic     /* 197 */	ED_UNASSIGNED,		/* M-E */
23154222Sbostic     /* 198 */	EM_NEXT_WORD,		/* M-F */
23254222Sbostic     /* 199 */	ED_UNASSIGNED,		/* M-G */
23354222Sbostic     /* 200 */	ED_UNASSIGNED,		/* M-H */
23454222Sbostic     /* 201 */	ED_UNASSIGNED,		/* M-I */
23554222Sbostic     /* 202 */	ED_UNASSIGNED,		/* M-J */
23654222Sbostic     /* 203 */	ED_UNASSIGNED,		/* M-K */
23754222Sbostic     /* 204 */	EM_LOWER_CASE,		/* M-L */
23854222Sbostic     /* 205 */	ED_UNASSIGNED,		/* M-M */
23954222Sbostic     /* 206 */	ED_SEARCH_NEXT_HISTORY,	/* M-N */
24054222Sbostic     /* 207 */	ED_SEQUENCE_LEAD_IN,	/* M-O */
24154222Sbostic     /* 208 */	ED_SEARCH_PREV_HISTORY,	/* M-P */
24254222Sbostic     /* 209 */	ED_UNASSIGNED,		/* M-Q */
24354222Sbostic     /* 210 */	ED_UNASSIGNED,		/* M-R */
24454222Sbostic     /* 211 */	ED_UNASSIGNED,		/* M-S */
24554222Sbostic     /* 212 */	ED_UNASSIGNED,		/* M-T */
24654222Sbostic     /* 213 */	EM_UPPER_CASE,		/* M-U */
24754222Sbostic     /* 214 */	ED_UNASSIGNED,		/* M-V */
24854222Sbostic     /* 215 */	EM_COPY_REGION,		/* M-W */
24954222Sbostic     /* 216 */	ED_COMMAND,		/* M-X */
25054222Sbostic     /* 217 */	ED_UNASSIGNED,		/* M-Y */
25154222Sbostic     /* 218 */	ED_UNASSIGNED,		/* M-Z */
25254222Sbostic     /* 219 */	ED_SEQUENCE_LEAD_IN,	/* M-[ */
25354222Sbostic     /* 220 */	ED_UNASSIGNED,		/* M-\ */
25454222Sbostic     /* 221 */	ED_UNASSIGNED,		/* M-] */
25554222Sbostic     /* 222 */	ED_UNASSIGNED,		/* M-^ */
25654222Sbostic     /* 223 */	ED_UNASSIGNED,		/* M-_ */
25754222Sbostic     /* 223 */	ED_UNASSIGNED,		/* M-` */
25854222Sbostic     /* 224 */	ED_UNASSIGNED,		/* M-a */
25954222Sbostic     /* 225 */	ED_PREV_WORD,		/* M-b */
26054222Sbostic     /* 226 */	EM_CAPITOL_CASE,	/* M-c */
26154222Sbostic     /* 227 */	EM_DELETE_NEXT_WORD,	/* M-d */
26254222Sbostic     /* 228 */	ED_UNASSIGNED,		/* M-e */
26354222Sbostic     /* 229 */	EM_NEXT_WORD,		/* M-f */
26454222Sbostic     /* 230 */	ED_UNASSIGNED,		/* M-g */
26554222Sbostic     /* 231 */	ED_UNASSIGNED,		/* M-h */
26654222Sbostic     /* 232 */	ED_UNASSIGNED,		/* M-i */
26754222Sbostic     /* 233 */	ED_UNASSIGNED,		/* M-j */
26854222Sbostic     /* 234 */	ED_UNASSIGNED,		/* M-k */
26954222Sbostic     /* 235 */	EM_LOWER_CASE,		/* M-l */
27054222Sbostic     /* 236 */	ED_UNASSIGNED,		/* M-m */
27154222Sbostic     /* 237 */	ED_SEARCH_NEXT_HISTORY,	/* M-n */
27254222Sbostic     /* 238 */	ED_UNASSIGNED,		/* M-o */
27354222Sbostic     /* 239 */	ED_SEARCH_PREV_HISTORY,	/* M-p */
27454222Sbostic     /* 240 */	ED_UNASSIGNED,		/* M-q */
27554222Sbostic     /* 241 */	ED_UNASSIGNED,		/* M-r */
27654222Sbostic     /* 242 */	ED_UNASSIGNED,		/* M-s */
27754222Sbostic     /* 243 */	ED_UNASSIGNED,		/* M-t */
27854222Sbostic     /* 244 */	EM_UPPER_CASE,		/* M-u */
27954222Sbostic     /* 245 */	ED_UNASSIGNED,		/* M-v */
28054222Sbostic     /* 246 */	EM_COPY_REGION,		/* M-w */
28154222Sbostic     /* 247 */	ED_COMMAND,		/* M-x */
28254222Sbostic     /* 248 */	ED_UNASSIGNED,		/* M-y */
28354222Sbostic     /* 249 */	ED_UNASSIGNED,		/* M-z */
28454222Sbostic     /* 250 */	ED_UNASSIGNED,		/* M-{ */
28554222Sbostic     /* 251 */	ED_UNASSIGNED,		/* M-| */
28654222Sbostic     /* 252 */	ED_UNASSIGNED,		/* M-} */
28754222Sbostic     /* 253 */	ED_UNASSIGNED,		/* M-~ */
28854222Sbostic     /* 254 */	ED_DELETE_PREV_WORD		/* M-^? */
28954222Sbostic     /* 255 */
29054222Sbostic };
29154222Sbostic 
29254222Sbostic /*
29354222Sbostic  * keymap table for vi.  Each index into above tbl; should be
29454222Sbostic  * N_KEYS entries long.  Vi mode uses a sticky-extend to do command mode:
29554222Sbostic  * insert mode characters are in the normal keymap, and command mode
29654222Sbostic  * in the extended keymap.
29754222Sbostic  */
29854222Sbostic private el_action_t  el_map_vi_insert[] = {
29954222Sbostic #ifdef KSHVI
30054222Sbostic     /*   0 */	ED_UNASSIGNED,		/* ^@ */
30154222Sbostic     /*   1 */	ED_INSERT,		/* ^A */
30254222Sbostic     /*   2 */	ED_INSERT,		/* ^B */
30354222Sbostic     /*   3 */	ED_INSERT,		/* ^C */
30454222Sbostic     /*   4 */	VI_LIST_OR_EOF,		/* ^D */
30554222Sbostic     /*   5 */	ED_INSERT,		/* ^E */
30654222Sbostic     /*   6 */	ED_INSERT,		/* ^F */
30754222Sbostic     /*   7 */	ED_INSERT,		/* ^G */
30854222Sbostic     /*   8 */	VI_DELETE_PREV_CHAR,	/* ^H */   /* BackSpace key */
30954624Schristos     /*   9 */	ED_INSERT,		/* ^I */   /* Tab Key  */
31054222Sbostic     /*  10 */	ED_NEWLINE,		/* ^J */
31154222Sbostic     /*  11 */	ED_INSERT,		/* ^K */
31254222Sbostic     /*  12 */	ED_INSERT,		/* ^L */
31354222Sbostic     /*  13 */	ED_NEWLINE,		/* ^M */
31454222Sbostic     /*  14 */	ED_INSERT,		/* ^N */
31554222Sbostic     /*  15 */	ED_INSERT,		/* ^O */
31654222Sbostic     /*  16 */	ED_INSERT,		/* ^P */
31754222Sbostic     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
31854222Sbostic     /*  18 */	ED_INSERT,		/* ^R */
31954222Sbostic     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
32054222Sbostic     /*  20 */	ED_INSERT,		/* ^T */
32154222Sbostic     /*  21 */	VI_KILL_LINE_PREV,	/* ^U */
32254222Sbostic     /*  22 */	ED_QUOTED_INSERT,	/* ^V */
32354222Sbostic     /*  23 */	ED_DELETE_PREV_WORD,	/* ^W */  /* Only until strt edit pos */
32454222Sbostic     /*  24 */	ED_INSERT,		/* ^X */
32554222Sbostic     /*  25 */	ED_INSERT,		/* ^Y */
32654222Sbostic     /*  26 */	ED_INSERT,		/* ^Z */
32754222Sbostic     /*  27 */	VI_COMMAND_MODE,	/* ^[ */  /* [ Esc ] key */
32854222Sbostic     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
32954222Sbostic     /*  29 */	ED_INSERT,		/* ^] */
33054222Sbostic     /*  30 */	ED_INSERT,		/* ^^ */
33154222Sbostic     /*  31 */	ED_INSERT,		/* ^_ */
33254222Sbostic #else /* !KSHVI */
33354222Sbostic     /*   0 */	ED_UNASSIGNED,		/* ^@ */   /* NOTE: These mappings do */
33454222Sbostic     /*   1 */	ED_MOVE_TO_BEG,		/* ^A */   /* NOT Correspond well to  */
33554222Sbostic     /*   2 */	ED_PREV_CHAR,		/* ^B */   /* the KSH VI editing as-  */
33654222Sbostic     /*   3 */	ED_TTY_SIGINT,		/* ^C */   /* signments. On the other */
33754222Sbostic     /*   4 */	VI_LIST_OR_EOF,		/* ^D */   /* hand they are convenient*/
33854222Sbostic     /*   5 */	ED_MOVE_TO_END,		/* ^E */   /* and many people have    */
33954222Sbostic     /*   6 */	ED_NEXT_CHAR,		/* ^F */   /* have gotten used to them*/
34054222Sbostic     /*   7 */	ED_UNASSIGNED,		/* ^G */
34154222Sbostic     /*   8 */	ED_DELETE_PREV_CHAR,	/* ^H */   /* BackSpace key */
34254222Sbostic     /*   9 */	ED_UNASSIGNED,		/* ^I */   /* Tab Key */
34354222Sbostic     /*  10 */	ED_NEWLINE,		/* ^J */
34454222Sbostic     /*  11 */	ED_KILL_LINE,		/* ^K */
34554222Sbostic     /*  12 */	ED_CLEAR_SCREEN,	/* ^L */
34654222Sbostic     /*  13 */	ED_NEWLINE,		/* ^M */
34754222Sbostic     /*  14 */	ED_NEXT_HISTORY,	/* ^N */
34854222Sbostic     /*  15 */	ED_TTY_FLUSH_OUTPUT,	/* ^O */
34954624Schristos     /*  16 */	ED_PREV_HISTORY,	/* ^P */
35054222Sbostic     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
35154222Sbostic     /*  18 */	ED_REDISPLAY,		/* ^R */
35254222Sbostic     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
35354222Sbostic     /*  20 */	ED_TRANSPOSE_CHARS,	/* ^T */
35454222Sbostic     /*  21 */	VI_KILL_LINE_PREV,	/* ^U */
35554222Sbostic     /*  22 */	ED_QUOTED_INSERT,	/* ^V */
35654222Sbostic     /*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
35754222Sbostic     /*  24 */	ED_UNASSIGNED,		/* ^X */
35854222Sbostic     /*  25 */	ED_TTY_DSUSP,		/* ^Y */
35954222Sbostic     /*  26 */	ED_TTY_SIGTSTP,		/* ^Z */
36054222Sbostic     /*  27 */	VI_COMMAND_MODE,	/* ^[ */
36154222Sbostic     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
36254222Sbostic     /*  29 */	ED_UNASSIGNED,		/* ^] */
36354222Sbostic     /*  30 */	ED_UNASSIGNED,		/* ^^ */
36454222Sbostic     /*  31 */	ED_UNASSIGNED,		/* ^_ */
36554222Sbostic #endif  /* KSHVI */
36654222Sbostic     /*  32 */	ED_INSERT,		/* SPACE */
36754222Sbostic     /*  33 */	ED_INSERT,		/* ! */
36854222Sbostic     /*  34 */	ED_INSERT,		/* " */
36954222Sbostic     /*  35 */	ED_INSERT,		/* # */
37054222Sbostic     /*  36 */	ED_INSERT,		/* $ */
37154222Sbostic     /*  37 */	ED_INSERT,		/* % */
37254222Sbostic     /*  38 */	ED_INSERT,		/* & */
37354222Sbostic     /*  39 */	ED_INSERT,		/* ' */
37454222Sbostic     /*  40 */	ED_INSERT,		/* ( */
37554222Sbostic     /*  41 */	ED_INSERT,		/* ) */
37654222Sbostic     /*  42 */	ED_INSERT,		/* * */
37754222Sbostic     /*  43 */	ED_INSERT,		/* + */
37854222Sbostic     /*  44 */	ED_INSERT,		/* , */
37954222Sbostic     /*  45 */	ED_INSERT,		/* - */
38054222Sbostic     /*  46 */	ED_INSERT,		/* . */
38154222Sbostic     /*  47 */	ED_INSERT,		/* / */
38254222Sbostic     /*  48 */	ED_INSERT,		/* 0 */
38354222Sbostic     /*  49 */	ED_INSERT,		/* 1 */
38454222Sbostic     /*  50 */	ED_INSERT,		/* 2 */
38554222Sbostic     /*  51 */	ED_INSERT,		/* 3 */
38654222Sbostic     /*  52 */	ED_INSERT,		/* 4 */
38754222Sbostic     /*  53 */	ED_INSERT,		/* 5 */
38854222Sbostic     /*  54 */	ED_INSERT,		/* 6 */
38954222Sbostic     /*  55 */	ED_INSERT,		/* 7 */
39054222Sbostic     /*  56 */	ED_INSERT,		/* 8 */
39154222Sbostic     /*  57 */	ED_INSERT,		/* 9 */
39254222Sbostic     /*  58 */	ED_INSERT,		/* : */
39354222Sbostic     /*  59 */	ED_INSERT,		/* ; */
39454222Sbostic     /*  60 */	ED_INSERT,		/* < */
39554222Sbostic     /*  61 */	ED_INSERT,		/* = */
39654222Sbostic     /*  62 */	ED_INSERT,		/* > */
39754222Sbostic     /*  63 */	ED_INSERT,		/* ? */
39854222Sbostic     /*  64 */	ED_INSERT,		/* @ */
39954222Sbostic     /*  65 */	ED_INSERT,		/* A */
40054222Sbostic     /*  66 */	ED_INSERT,		/* B */
40154222Sbostic     /*  67 */	ED_INSERT,		/* C */
40254222Sbostic     /*  68 */	ED_INSERT,		/* D */
40354222Sbostic     /*  69 */	ED_INSERT,		/* E */
40454222Sbostic     /*  70 */	ED_INSERT,		/* F */
40554222Sbostic     /*  71 */	ED_INSERT,		/* G */
40654222Sbostic     /*  72 */	ED_INSERT,		/* H */
40754222Sbostic     /*  73 */	ED_INSERT,		/* I */
40854222Sbostic     /*  74 */	ED_INSERT,		/* J */
40954222Sbostic     /*  75 */	ED_INSERT,		/* K */
41054222Sbostic     /*  76 */	ED_INSERT,		/* L */
41154222Sbostic     /*  77 */	ED_INSERT,		/* M */
41254222Sbostic     /*  78 */	ED_INSERT,		/* N */
41354222Sbostic     /*  79 */	ED_INSERT,		/* O */
41454222Sbostic     /*  80 */	ED_INSERT,		/* P */
41554222Sbostic     /*  81 */	ED_INSERT,		/* Q */
41654222Sbostic     /*  82 */	ED_INSERT,		/* R */
41754222Sbostic     /*  83 */	ED_INSERT,		/* S */
41854222Sbostic     /*  84 */	ED_INSERT,		/* T */
41954222Sbostic     /*  85 */	ED_INSERT,		/* U */
42054222Sbostic     /*  86 */	ED_INSERT,		/* V */
42154222Sbostic     /*  87 */	ED_INSERT,		/* W */
42254222Sbostic     /*  88 */	ED_INSERT,		/* X */
42354222Sbostic     /*  89 */	ED_INSERT,		/* Y */
42454222Sbostic     /*  90 */	ED_INSERT,		/* Z */
42554222Sbostic     /*  91 */	ED_INSERT,		/* [ */
42654222Sbostic     /*  92 */	ED_INSERT,		/* \ */
42754222Sbostic     /*  93 */	ED_INSERT,		/* ] */
42854222Sbostic     /*  94 */	ED_INSERT,		/* ^ */
42954222Sbostic     /*  95 */	ED_INSERT,		/* _ */
43054222Sbostic     /*  96 */	ED_INSERT,		/* ` */
43154222Sbostic     /*  97 */	ED_INSERT,		/* a */
43254222Sbostic     /*  98 */	ED_INSERT,		/* b */
43354222Sbostic     /*  99 */	ED_INSERT,		/* c */
43454222Sbostic     /* 100 */	ED_INSERT,		/* d */
43554222Sbostic     /* 101 */	ED_INSERT,		/* e */
43654222Sbostic     /* 102 */	ED_INSERT,		/* f */
43754222Sbostic     /* 103 */	ED_INSERT,		/* g */
43854222Sbostic     /* 104 */	ED_INSERT,		/* h */
43954222Sbostic     /* 105 */	ED_INSERT,		/* i */
44054222Sbostic     /* 106 */	ED_INSERT,		/* j */
44154222Sbostic     /* 107 */	ED_INSERT,		/* k */
44254222Sbostic     /* 108 */	ED_INSERT,		/* l */
44354222Sbostic     /* 109 */	ED_INSERT,		/* m */
44454222Sbostic     /* 110 */	ED_INSERT,		/* n */
44554222Sbostic     /* 111 */	ED_INSERT,		/* o */
44654222Sbostic     /* 112 */	ED_INSERT,		/* p */
44754222Sbostic     /* 113 */	ED_INSERT,		/* q */
44854222Sbostic     /* 114 */	ED_INSERT,		/* r */
44954222Sbostic     /* 115 */	ED_INSERT,		/* s */
45054222Sbostic     /* 116 */	ED_INSERT,		/* t */
45154222Sbostic     /* 117 */	ED_INSERT,		/* u */
45254222Sbostic     /* 118 */	ED_INSERT,		/* v */
45354222Sbostic     /* 119 */	ED_INSERT,		/* w */
45454222Sbostic     /* 120 */	ED_INSERT,		/* x */
45554222Sbostic     /* 121 */	ED_INSERT,		/* y */
45654222Sbostic     /* 122 */	ED_INSERT,		/* z */
45754222Sbostic     /* 123 */	ED_INSERT,		/* { */
45854222Sbostic     /* 124 */	ED_INSERT,		/* | */
45954222Sbostic     /* 125 */	ED_INSERT,		/* } */
46054222Sbostic     /* 126 */	ED_INSERT,		/* ~ */
46154222Sbostic     /* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
46254222Sbostic     /* 128 */	ED_UNASSIGNED,		/* M-^@ */
46354222Sbostic     /* 129 */	ED_UNASSIGNED,		/* M-^A */
46454222Sbostic     /* 130 */	ED_UNASSIGNED,		/* M-^B */
46554222Sbostic     /* 131 */	ED_UNASSIGNED,		/* M-^C */
46654222Sbostic     /* 132 */	ED_UNASSIGNED,		/* M-^D */
46754222Sbostic     /* 133 */	ED_UNASSIGNED,		/* M-^E */
46854222Sbostic     /* 134 */	ED_UNASSIGNED,		/* M-^F */
46954222Sbostic     /* 135 */	ED_UNASSIGNED,		/* M-^G */
47054222Sbostic     /* 136 */	ED_UNASSIGNED,		/* M-^H */
47154222Sbostic     /* 137 */	ED_UNASSIGNED,		/* M-^I */
47254222Sbostic     /* 138 */	ED_UNASSIGNED,		/* M-^J */
47354222Sbostic     /* 139 */	ED_UNASSIGNED,		/* M-^K */
47454222Sbostic     /* 140 */	ED_UNASSIGNED,		/* M-^L */
47554222Sbostic     /* 141 */	ED_UNASSIGNED,		/* M-^M */
47654222Sbostic     /* 142 */	ED_UNASSIGNED,		/* M-^N */
47754222Sbostic     /* 143 */	ED_UNASSIGNED,		/* M-^O */
47854222Sbostic     /* 144 */	ED_UNASSIGNED,		/* M-^P */
47954222Sbostic     /* 145 */	ED_UNASSIGNED,		/* M-^Q */
48054222Sbostic     /* 146 */	ED_UNASSIGNED,		/* M-^R */
48154222Sbostic     /* 147 */	ED_UNASSIGNED,		/* M-^S */
48254222Sbostic     /* 148 */	ED_UNASSIGNED,		/* M-^T */
48354222Sbostic     /* 149 */	ED_UNASSIGNED,		/* M-^U */
48454222Sbostic     /* 150 */	ED_UNASSIGNED,		/* M-^V */
48554222Sbostic     /* 151 */	ED_UNASSIGNED,		/* M-^W */
48654222Sbostic     /* 152 */	ED_UNASSIGNED,		/* M-^X */
48754222Sbostic     /* 153 */	ED_UNASSIGNED,		/* M-^Y */
48854222Sbostic     /* 154 */	ED_UNASSIGNED,		/* M-^Z */
48954222Sbostic     /* 155 */	ED_UNASSIGNED,		/* M-^[ */
49054222Sbostic     /* 156 */	ED_UNASSIGNED,		/* M-^\ */
49154222Sbostic     /* 157 */	ED_UNASSIGNED,		/* M-^] */
49254222Sbostic     /* 158 */	ED_UNASSIGNED,		/* M-^^ */
49354222Sbostic     /* 159 */	ED_UNASSIGNED,		/* M-^_ */
49454222Sbostic     /* 160 */	ED_UNASSIGNED,		/* M-SPACE */
49554222Sbostic     /* 161 */	ED_UNASSIGNED,		/* M-! */
49654222Sbostic     /* 162 */	ED_UNASSIGNED,		/* M-" */
49754222Sbostic     /* 163 */	ED_UNASSIGNED,		/* M-# */
49854222Sbostic     /* 164 */	ED_UNASSIGNED,		/* M-$ */
49954222Sbostic     /* 165 */	ED_UNASSIGNED,		/* M-% */
50054222Sbostic     /* 166 */	ED_UNASSIGNED,		/* M-& */
50154222Sbostic     /* 167 */	ED_UNASSIGNED,		/* M-' */
50254222Sbostic     /* 168 */	ED_UNASSIGNED,		/* M-( */
50354222Sbostic     /* 169 */	ED_UNASSIGNED,		/* M-) */
50454222Sbostic     /* 170 */	ED_UNASSIGNED,		/* M-* */
50554222Sbostic     /* 171 */	ED_UNASSIGNED,		/* M-+ */
50654222Sbostic     /* 172 */	ED_UNASSIGNED,		/* M-, */
50754222Sbostic     /* 173 */	ED_UNASSIGNED,		/* M-- */
50854222Sbostic     /* 174 */	ED_UNASSIGNED,		/* M-. */
50954222Sbostic     /* 175 */	ED_UNASSIGNED,		/* M-/ */
51054222Sbostic     /* 176 */	ED_UNASSIGNED,		/* M-0 */
51154222Sbostic     /* 177 */	ED_UNASSIGNED,		/* M-1 */
51254222Sbostic     /* 178 */	ED_UNASSIGNED,		/* M-2 */
51354222Sbostic     /* 179 */	ED_UNASSIGNED,		/* M-3 */
51454222Sbostic     /* 180 */	ED_UNASSIGNED,		/* M-4 */
51554222Sbostic     /* 181 */	ED_UNASSIGNED,		/* M-5 */
51654222Sbostic     /* 182 */	ED_UNASSIGNED,		/* M-6 */
51754222Sbostic     /* 183 */	ED_UNASSIGNED,		/* M-7 */
51854222Sbostic     /* 184 */	ED_UNASSIGNED,		/* M-8 */
51954222Sbostic     /* 185 */	ED_UNASSIGNED,		/* M-9 */
52054222Sbostic     /* 186 */	ED_UNASSIGNED,		/* M-: */
52154222Sbostic     /* 187 */	ED_UNASSIGNED,		/* M-; */
52254222Sbostic     /* 188 */	ED_UNASSIGNED,		/* M-< */
52354222Sbostic     /* 189 */	ED_UNASSIGNED,		/* M-= */
52454222Sbostic     /* 190 */	ED_UNASSIGNED,		/* M-> */
52554222Sbostic     /* 191 */	ED_UNASSIGNED,		/* M-? */
52654222Sbostic     /* 192 */	ED_UNASSIGNED,		/* M-@ */
52754222Sbostic     /* 193 */	ED_UNASSIGNED,		/* M-A */
52854222Sbostic     /* 194 */	ED_UNASSIGNED,		/* M-B */
52954222Sbostic     /* 195 */	ED_UNASSIGNED,		/* M-C */
53054222Sbostic     /* 196 */	ED_UNASSIGNED,		/* M-D */
53154222Sbostic     /* 197 */	ED_UNASSIGNED,		/* M-E */
53254222Sbostic     /* 198 */	ED_UNASSIGNED,		/* M-F */
53354222Sbostic     /* 199 */	ED_UNASSIGNED,		/* M-G */
53454222Sbostic     /* 200 */	ED_UNASSIGNED,		/* M-H */
53554222Sbostic     /* 201 */	ED_UNASSIGNED,		/* M-I */
53654222Sbostic     /* 202 */	ED_UNASSIGNED,		/* M-J */
53754222Sbostic     /* 203 */	ED_UNASSIGNED,		/* M-K */
53854222Sbostic     /* 204 */	ED_UNASSIGNED,		/* M-L */
53954222Sbostic     /* 205 */	ED_UNASSIGNED,		/* M-M */
54054222Sbostic     /* 206 */	ED_UNASSIGNED,		/* M-N */
54154222Sbostic     /* 207 */	ED_UNASSIGNED,		/* M-O */
54254222Sbostic     /* 208 */	ED_UNASSIGNED,		/* M-P */
54354222Sbostic     /* 209 */	ED_UNASSIGNED,		/* M-Q */
54454222Sbostic     /* 210 */	ED_UNASSIGNED,		/* M-R */
54554222Sbostic     /* 211 */	ED_UNASSIGNED,		/* M-S */
54654222Sbostic     /* 212 */	ED_UNASSIGNED,		/* M-T */
54754222Sbostic     /* 213 */	ED_UNASSIGNED,		/* M-U */
54854222Sbostic     /* 214 */	ED_UNASSIGNED,		/* M-V */
54954222Sbostic     /* 215 */	ED_UNASSIGNED,		/* M-W */
55054222Sbostic     /* 216 */	ED_UNASSIGNED,		/* M-X */
55154222Sbostic     /* 217 */	ED_UNASSIGNED,		/* M-Y */
55254222Sbostic     /* 218 */	ED_UNASSIGNED,		/* M-Z */
55354222Sbostic     /* 219 */	ED_UNASSIGNED,		/* M-[ */
55454222Sbostic     /* 220 */	ED_UNASSIGNED,		/* M-\ */
55554222Sbostic     /* 221 */	ED_UNASSIGNED,		/* M-] */
55654222Sbostic     /* 222 */	ED_UNASSIGNED,		/* M-^ */
55754222Sbostic     /* 223 */	ED_UNASSIGNED,		/* M-_ */
55854222Sbostic     /* 224 */	ED_UNASSIGNED,		/* M-` */
55954222Sbostic     /* 225 */	ED_UNASSIGNED,		/* M-a */
56054222Sbostic     /* 226 */	ED_UNASSIGNED,		/* M-b */
56154222Sbostic     /* 227 */	ED_UNASSIGNED,		/* M-c */
56254222Sbostic     /* 228 */	ED_UNASSIGNED,		/* M-d */
56354222Sbostic     /* 229 */	ED_UNASSIGNED,		/* M-e */
56454222Sbostic     /* 230 */	ED_UNASSIGNED,		/* M-f */
56554222Sbostic     /* 231 */	ED_UNASSIGNED,		/* M-g */
56654222Sbostic     /* 232 */	ED_UNASSIGNED,		/* M-h */
56754222Sbostic     /* 233 */	ED_UNASSIGNED,		/* M-i */
56854222Sbostic     /* 234 */	ED_UNASSIGNED,		/* M-j */
56954222Sbostic     /* 235 */	ED_UNASSIGNED,		/* M-k */
57054222Sbostic     /* 236 */	ED_UNASSIGNED,		/* M-l */
57154222Sbostic     /* 237 */	ED_UNASSIGNED,		/* M-m */
57254222Sbostic     /* 238 */	ED_UNASSIGNED,		/* M-n */
57354222Sbostic     /* 239 */	ED_UNASSIGNED,		/* M-o */
57454222Sbostic     /* 240 */	ED_UNASSIGNED,		/* M-p */
57554222Sbostic     /* 241 */	ED_UNASSIGNED,		/* M-q */
57654222Sbostic     /* 242 */	ED_UNASSIGNED,		/* M-r */
57754222Sbostic     /* 243 */	ED_UNASSIGNED,		/* M-s */
57854222Sbostic     /* 244 */	ED_UNASSIGNED,		/* M-t */
57954222Sbostic     /* 245 */	ED_UNASSIGNED,		/* M-u */
58054222Sbostic     /* 246 */	ED_UNASSIGNED,		/* M-v */
58154222Sbostic     /* 247 */	ED_UNASSIGNED,		/* M-w */
58254222Sbostic     /* 248 */	ED_UNASSIGNED,		/* M-x */
58354222Sbostic     /* 249 */	ED_UNASSIGNED,		/* M-y */
58454222Sbostic     /* 250 */	ED_UNASSIGNED,		/* M-z */
58554222Sbostic     /* 251 */	ED_UNASSIGNED,		/* M-{ */
58654222Sbostic     /* 252 */	ED_UNASSIGNED,		/* M-| */
58754222Sbostic     /* 253 */	ED_UNASSIGNED,		/* M-} */
58854222Sbostic     /* 254 */	ED_UNASSIGNED,		/* M-~ */
58954222Sbostic     /* 255 */	ED_UNASSIGNED		/* M-^? */
59054222Sbostic };
59154222Sbostic 
59254222Sbostic private el_action_t  el_map_vi_command[] = {
59354222Sbostic     /*   0 */	ED_UNASSIGNED,		/* ^@ */
59454222Sbostic     /*   1 */	ED_MOVE_TO_BEG,		/* ^A */
59554222Sbostic     /*   2 */	ED_UNASSIGNED,		/* ^B */
59654222Sbostic     /*   3 */	ED_TTY_SIGINT,		/* ^C */
59754222Sbostic     /*   4 */	ED_UNASSIGNED,		/* ^D */
59854222Sbostic     /*   5 */	ED_MOVE_TO_END,		/* ^E */
59954222Sbostic     /*   6 */	ED_UNASSIGNED,		/* ^F */
60054222Sbostic     /*   7 */	ED_UNASSIGNED,		/* ^G */
60154222Sbostic     /*   8 */	ED_PREV_CHAR,		/* ^H */
60254222Sbostic     /*   9 */	ED_UNASSIGNED,		/* ^I */
60354222Sbostic     /*  10 */	ED_NEWLINE,		/* ^J */
60454222Sbostic     /*  11 */	ED_KILL_LINE,		/* ^K */
60554222Sbostic     /*  12 */	ED_CLEAR_SCREEN,	/* ^L */
60654222Sbostic     /*  13 */	ED_NEWLINE,		/* ^M */
60754222Sbostic     /*  14 */	ED_NEXT_HISTORY,	/* ^N */
60854222Sbostic     /*  15 */	ED_TTY_FLUSH_OUTPUT,	/* ^O */
60954222Sbostic     /*  16 */	ED_PREV_HISTORY,	/* ^P */
61054222Sbostic     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
61154222Sbostic     /*  18 */	ED_REDISPLAY,		/* ^R */
61254222Sbostic     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
61354222Sbostic     /*  20 */	ED_UNASSIGNED,		/* ^T */
61454222Sbostic     /*  21 */	VI_KILL_LINE_PREV,	/* ^U */
61554222Sbostic     /*  22 */	ED_UNASSIGNED,		/* ^V */
61654222Sbostic     /*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
61754222Sbostic     /*  24 */	ED_UNASSIGNED,		/* ^X */
61854222Sbostic     /*  25 */	ED_UNASSIGNED,		/* ^Y */
61954222Sbostic     /*  26 */	ED_UNASSIGNED,		/* ^Z */
62054222Sbostic     /*  27 */	EM_META_NEXT,		/* ^[ */
62154222Sbostic     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
62254222Sbostic     /*  29 */	ED_UNASSIGNED,		/* ^] */
62354222Sbostic     /*  30 */	ED_UNASSIGNED,		/* ^^ */
62454222Sbostic     /*  31 */	ED_UNASSIGNED,		/* ^_ */
62554222Sbostic     /*  32 */	ED_NEXT_CHAR,		/* SPACE */
62654222Sbostic     /*  33 */	ED_UNASSIGNED,		/* ! */
62754222Sbostic     /*  34 */	ED_UNASSIGNED,		/* " */
62854222Sbostic     /*  35 */	ED_UNASSIGNED,		/* # */
62954222Sbostic     /*  36 */	ED_MOVE_TO_END,		/* $ */
63054222Sbostic     /*  37 */	ED_UNASSIGNED,		/* % */
63154222Sbostic     /*  38 */	ED_UNASSIGNED,		/* & */
63254222Sbostic     /*  39 */	ED_UNASSIGNED,		/* ' */
63354222Sbostic     /*  40 */	ED_UNASSIGNED,		/* ( */
63454222Sbostic     /*  41 */	ED_UNASSIGNED,		/* ) */
63554222Sbostic     /*  42 */	ED_UNASSIGNED,		/* * */
63654222Sbostic     /*  43 */	ED_NEXT_HISTORY,	/* + */
63754222Sbostic     /*  44 */	VI_REPEAT_PREV_CHAR,	/* , */
63854222Sbostic     /*  45 */	ED_PREV_HISTORY,	/* - */
63954222Sbostic     /*  46 */	ED_UNASSIGNED,		/* . */
64055300Smarc     /*  47 */	VI_SEARCH_PREV,		/* / */
64154222Sbostic     /*  48 */	VI_ZERO,		/* 0 */
64254222Sbostic     /*  49 */	ED_ARGUMENT_DIGIT,	/* 1 */
64354222Sbostic     /*  50 */	ED_ARGUMENT_DIGIT,	/* 2 */
64454222Sbostic     /*  51 */	ED_ARGUMENT_DIGIT,	/* 3 */
64554222Sbostic     /*  52 */	ED_ARGUMENT_DIGIT,	/* 4 */
64654222Sbostic     /*  53 */	ED_ARGUMENT_DIGIT,	/* 5 */
64754222Sbostic     /*  54 */	ED_ARGUMENT_DIGIT,	/* 6 */
64854222Sbostic     /*  55 */	ED_ARGUMENT_DIGIT,	/* 7 */
64954222Sbostic     /*  56 */	ED_ARGUMENT_DIGIT,	/* 8 */
65054222Sbostic     /*  57 */	ED_ARGUMENT_DIGIT,	/* 9 */
65154222Sbostic     /*  58 */	ED_COMMAND,		/* : */
65254222Sbostic     /*  59 */	VI_REPEAT_NEXT_CHAR,	/* ; */
65354222Sbostic     /*  60 */	ED_UNASSIGNED,		/* < */
65454222Sbostic     /*  61 */	ED_UNASSIGNED,		/* = */
65554222Sbostic     /*  62 */	ED_UNASSIGNED,		/* > */
65655300Smarc     /*  63 */	VI_SEARCH_NEXT,		/* ? */
65754222Sbostic     /*  64 */	ED_UNASSIGNED,		/* @ */
65854222Sbostic     /*  65 */	VI_ADD_AT_EOL,		/* A */
65954222Sbostic     /*  66 */	VI_PREV_SPACE_WORD,	/* B */
66054222Sbostic     /*  67 */	VI_CHANGE_TO_EOL,	/* C */
66154222Sbostic     /*  68 */	ED_KILL_LINE,		/* D */
66254222Sbostic     /*  69 */	VI_TO_END_WORD,		/* E */
66354222Sbostic     /*  70 */	VI_PREV_CHAR,		/* F */
66454222Sbostic     /*  71 */	ED_UNASSIGNED,		/* G */
66554222Sbostic     /*  72 */	ED_UNASSIGNED,		/* H */
66654222Sbostic     /*  73 */	VI_INSERT_AT_BOL,	/* I */
66754222Sbostic     /*  74 */	ED_SEARCH_NEXT_HISTORY,	/* J */
66854222Sbostic     /*  75 */	ED_SEARCH_PREV_HISTORY,	/* K */
66954222Sbostic     /*  76 */	ED_UNASSIGNED,		/* L */
67054222Sbostic     /*  77 */	ED_UNASSIGNED,		/* M */
67154222Sbostic     /*  78 */	VI_REPEAT_SEARCH_PREV,	/* N */
67254222Sbostic     /*  79 */	ED_SEQUENCE_LEAD_IN,	/* O */
67354222Sbostic     /*  80 */	VI_PASTE_PREV,		/* P */
67454222Sbostic     /*  81 */	ED_UNASSIGNED,		/* Q */
67554222Sbostic     /*  82 */	VI_REPLACE_MODE,	/* R */
67654222Sbostic     /*  83 */	VI_SUBSTITUTE_LINE,	/* S */
67754222Sbostic     /*  84 */	VI_TO_PREV_CHAR,	/* T */
67854222Sbostic     /*  85 */	ED_UNASSIGNED,		/* U */
67954222Sbostic     /*  86 */	ED_UNASSIGNED,		/* V */
68054222Sbostic     /*  87 */	VI_NEXT_SPACE_WORD,	/* W */
68154222Sbostic     /*  88 */	ED_DELETE_PREV_CHAR,	/* X */
68254222Sbostic     /*  89 */	ED_UNASSIGNED,		/* Y */
68354222Sbostic     /*  90 */	ED_UNASSIGNED,		/* Z */
68454222Sbostic     /*  91 */	ED_SEQUENCE_LEAD_IN,	/* [ */
68554222Sbostic     /*  92 */	ED_UNASSIGNED,		/* \ */
68654222Sbostic     /*  93 */	ED_UNASSIGNED,		/* ] */
68754222Sbostic     /*  94 */	ED_MOVE_TO_BEG,		/* ^ */
68854222Sbostic     /*  95 */	ED_UNASSIGNED,		/* _ */
68954222Sbostic     /*  96 */	ED_UNASSIGNED,		/* ` */
69054222Sbostic     /*  97 */	VI_ADD,			/* a */
69154222Sbostic     /*  98 */	VI_PREV_WORD,		/* b */
69254222Sbostic     /*  99 */	VI_CHANGE_META,		/* c */
69354222Sbostic     /* 100 */	VI_DELETE_META,		/* d */
69454222Sbostic     /* 101 */	VI_END_WORD,		/* e */
69554222Sbostic     /* 102 */	VI_NEXT_CHAR,		/* f */
69654222Sbostic     /* 103 */	ED_UNASSIGNED,		/* g */
69754222Sbostic     /* 104 */	ED_PREV_CHAR,		/* h */
69854222Sbostic     /* 105 */	VI_INSERT,		/* i */
69954222Sbostic     /* 106 */	ED_NEXT_HISTORY,	/* j */
70054222Sbostic     /* 107 */	ED_PREV_HISTORY,	/* k */
70154222Sbostic     /* 108 */	ED_NEXT_CHAR,		/* l */
70254222Sbostic     /* 109 */	ED_UNASSIGNED,		/* m */
70354222Sbostic     /* 110 */	VI_REPEAT_SEARCH_NEXT,	/* n */
70454222Sbostic     /* 111 */	ED_UNASSIGNED,		/* o */
70554222Sbostic     /* 112 */	VI_PASTE_NEXT,		/* p */
70654222Sbostic     /* 113 */	ED_UNASSIGNED,		/* q */
70754222Sbostic     /* 114 */	VI_REPLACE_CHAR,	/* r */
70854222Sbostic     /* 115 */	VI_SUBSTITUTE_CHAR,	/* s */
70954222Sbostic     /* 116 */	VI_TO_NEXT_CHAR,	/* t */
71054222Sbostic     /* 117 */	VI_UNDO,		/* u */
71154222Sbostic     /* 118 */	ED_UNASSIGNED,		/* v */
71254222Sbostic     /* 119 */	VI_NEXT_WORD,		/* w */
71354222Sbostic     /* 120 */	ED_DELETE_NEXT_CHAR,	/* x */
71454222Sbostic     /* 121 */	ED_UNASSIGNED,		/* y */
71554222Sbostic     /* 122 */	ED_UNASSIGNED,		/* z */
71654222Sbostic     /* 123 */	ED_UNASSIGNED,		/* { */
71754222Sbostic     /* 124 */	ED_UNASSIGNED,		/* | */
71854222Sbostic     /* 125 */	ED_UNASSIGNED,		/* } */
71954222Sbostic     /* 126 */	VI_CHANGE_CASE,		/* ~ */
72054222Sbostic     /* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
72154222Sbostic     /* 128 */	ED_UNASSIGNED,		/* M-^@ */
72254222Sbostic     /* 129 */	ED_UNASSIGNED,		/* M-^A */
72354222Sbostic     /* 130 */	ED_UNASSIGNED,		/* M-^B */
72454222Sbostic     /* 131 */	ED_UNASSIGNED,		/* M-^C */
72554222Sbostic     /* 132 */	ED_UNASSIGNED,		/* M-^D */
72654222Sbostic     /* 133 */	ED_UNASSIGNED,		/* M-^E */
72754222Sbostic     /* 134 */	ED_UNASSIGNED,		/* M-^F */
72854222Sbostic     /* 135 */	ED_UNASSIGNED,		/* M-^G */
72954222Sbostic     /* 136 */	ED_UNASSIGNED,		/* M-^H */
73054222Sbostic     /* 137 */	ED_UNASSIGNED,		/* M-^I */
73154222Sbostic     /* 138 */	ED_UNASSIGNED,		/* M-^J */
73254222Sbostic     /* 139 */	ED_UNASSIGNED,		/* M-^K */
73354222Sbostic     /* 140 */	ED_UNASSIGNED,		/* M-^L */
73454222Sbostic     /* 141 */	ED_UNASSIGNED,		/* M-^M */
73554222Sbostic     /* 142 */	ED_UNASSIGNED,		/* M-^N */
73654222Sbostic     /* 143 */	ED_UNASSIGNED,		/* M-^O */
73754222Sbostic     /* 144 */	ED_UNASSIGNED,		/* M-^P */
73854222Sbostic     /* 145 */	ED_UNASSIGNED,		/* M-^Q */
73954222Sbostic     /* 146 */	ED_UNASSIGNED,		/* M-^R */
74054222Sbostic     /* 147 */	ED_UNASSIGNED,		/* M-^S */
74154222Sbostic     /* 148 */	ED_UNASSIGNED,		/* M-^T */
74254222Sbostic     /* 149 */	ED_UNASSIGNED,		/* M-^U */
74354222Sbostic     /* 150 */	ED_UNASSIGNED,		/* M-^V */
74454222Sbostic     /* 151 */	ED_UNASSIGNED,		/* M-^W */
74554222Sbostic     /* 152 */	ED_UNASSIGNED,		/* M-^X */
74654222Sbostic     /* 153 */	ED_UNASSIGNED,		/* M-^Y */
74754222Sbostic     /* 154 */	ED_UNASSIGNED,		/* M-^Z */
74854222Sbostic     /* 155 */	ED_UNASSIGNED,		/* M-^[ */
74954222Sbostic     /* 156 */	ED_UNASSIGNED,		/* M-^\ */
75054222Sbostic     /* 157 */	ED_UNASSIGNED,		/* M-^] */
75154222Sbostic     /* 158 */	ED_UNASSIGNED,		/* M-^^ */
75254222Sbostic     /* 159 */	ED_UNASSIGNED,		/* M-^_ */
75354222Sbostic     /* 160 */	ED_UNASSIGNED,		/* M-SPACE */
75454222Sbostic     /* 161 */	ED_UNASSIGNED,		/* M-! */
75554222Sbostic     /* 162 */	ED_UNASSIGNED,		/* M-" */
75654222Sbostic     /* 163 */	ED_UNASSIGNED,		/* M-# */
75754222Sbostic     /* 164 */	ED_UNASSIGNED,		/* M-$ */
75854222Sbostic     /* 165 */	ED_UNASSIGNED,		/* M-% */
75954222Sbostic     /* 166 */	ED_UNASSIGNED,		/* M-& */
76054222Sbostic     /* 167 */	ED_UNASSIGNED,		/* M-' */
76154222Sbostic     /* 168 */	ED_UNASSIGNED,		/* M-( */
76254222Sbostic     /* 169 */	ED_UNASSIGNED,		/* M-) */
76354222Sbostic     /* 170 */	ED_UNASSIGNED,		/* M-* */
76454222Sbostic     /* 171 */	ED_UNASSIGNED,		/* M-+ */
76554222Sbostic     /* 172 */	ED_UNASSIGNED,		/* M-, */
76654222Sbostic     /* 173 */	ED_UNASSIGNED,		/* M-- */
76754222Sbostic     /* 174 */	ED_UNASSIGNED,		/* M-. */
76854222Sbostic     /* 175 */	ED_UNASSIGNED,		/* M-/ */
76954222Sbostic     /* 176 */	ED_UNASSIGNED,		/* M-0 */
77054222Sbostic     /* 177 */	ED_UNASSIGNED,		/* M-1 */
77154222Sbostic     /* 178 */	ED_UNASSIGNED,		/* M-2 */
77254222Sbostic     /* 179 */	ED_UNASSIGNED,		/* M-3 */
77354222Sbostic     /* 180 */	ED_UNASSIGNED,		/* M-4 */
77454222Sbostic     /* 181 */	ED_UNASSIGNED,		/* M-5 */
77554222Sbostic     /* 182 */	ED_UNASSIGNED,		/* M-6 */
77654222Sbostic     /* 183 */	ED_UNASSIGNED,		/* M-7 */
77754222Sbostic     /* 184 */	ED_UNASSIGNED,		/* M-8 */
77854222Sbostic     /* 185 */	ED_UNASSIGNED,		/* M-9 */
77954222Sbostic     /* 186 */	ED_UNASSIGNED,		/* M-: */
78054222Sbostic     /* 187 */	ED_UNASSIGNED,		/* M-; */
78154222Sbostic     /* 188 */	ED_UNASSIGNED,		/* M-< */
78254222Sbostic     /* 189 */	ED_UNASSIGNED,		/* M-= */
78354222Sbostic     /* 190 */	ED_UNASSIGNED,		/* M-> */
78454222Sbostic     /* 191 */	ED_UNASSIGNED,		/* M-? */
78554222Sbostic     /* 192 */	ED_UNASSIGNED,		/* M-@ */
78654222Sbostic     /* 193 */	ED_UNASSIGNED,		/* M-A */
78754222Sbostic     /* 194 */	ED_UNASSIGNED,		/* M-B */
78854222Sbostic     /* 195 */	ED_UNASSIGNED,		/* M-C */
78954222Sbostic     /* 196 */	ED_UNASSIGNED,		/* M-D */
79054222Sbostic     /* 197 */	ED_UNASSIGNED,		/* M-E */
79154222Sbostic     /* 198 */	ED_UNASSIGNED,		/* M-F */
79254222Sbostic     /* 199 */	ED_UNASSIGNED,		/* M-G */
79354222Sbostic     /* 200 */	ED_UNASSIGNED,		/* M-H */
79454222Sbostic     /* 201 */	ED_UNASSIGNED,		/* M-I */
79554222Sbostic     /* 202 */	ED_UNASSIGNED,		/* M-J */
79654222Sbostic     /* 203 */	ED_UNASSIGNED,		/* M-K */
79754222Sbostic     /* 204 */	ED_UNASSIGNED,		/* M-L */
79854222Sbostic     /* 205 */	ED_UNASSIGNED,		/* M-M */
79954222Sbostic     /* 206 */	ED_UNASSIGNED,		/* M-N */
80054222Sbostic     /* 207 */	ED_SEQUENCE_LEAD_IN,	/* M-O */
80154222Sbostic     /* 208 */	ED_UNASSIGNED,		/* M-P */
80254222Sbostic     /* 209 */	ED_UNASSIGNED,		/* M-Q */
80354222Sbostic     /* 210 */	ED_UNASSIGNED,		/* M-R */
80454222Sbostic     /* 211 */	ED_UNASSIGNED,		/* M-S */
80554222Sbostic     /* 212 */	ED_UNASSIGNED,		/* M-T */
80654222Sbostic     /* 213 */	ED_UNASSIGNED,		/* M-U */
80754222Sbostic     /* 214 */	ED_UNASSIGNED,		/* M-V */
80854222Sbostic     /* 215 */	ED_UNASSIGNED,		/* M-W */
80954222Sbostic     /* 216 */	ED_UNASSIGNED,		/* M-X */
81054222Sbostic     /* 217 */	ED_UNASSIGNED,		/* M-Y */
81154222Sbostic     /* 218 */	ED_UNASSIGNED,		/* M-Z */
81254222Sbostic     /* 219 */	ED_SEQUENCE_LEAD_IN,	/* M-[ */
81354222Sbostic     /* 220 */	ED_UNASSIGNED,		/* M-\ */
81454222Sbostic     /* 221 */	ED_UNASSIGNED,		/* M-] */
81554222Sbostic     /* 222 */	ED_UNASSIGNED,		/* M-^ */
81654222Sbostic     /* 223 */	ED_UNASSIGNED,		/* M-_ */
81754222Sbostic     /* 224 */	ED_UNASSIGNED,		/* M-` */
81854222Sbostic     /* 225 */	ED_UNASSIGNED,		/* M-a */
81954222Sbostic     /* 226 */	ED_UNASSIGNED,		/* M-b */
82054222Sbostic     /* 227 */	ED_UNASSIGNED,		/* M-c */
82154222Sbostic     /* 228 */	ED_UNASSIGNED,		/* M-d */
82254222Sbostic     /* 229 */	ED_UNASSIGNED,		/* M-e */
82354222Sbostic     /* 230 */	ED_UNASSIGNED,		/* M-f */
82454222Sbostic     /* 231 */	ED_UNASSIGNED,		/* M-g */
82554222Sbostic     /* 232 */	ED_UNASSIGNED,		/* M-h */
82654222Sbostic     /* 233 */	ED_UNASSIGNED,		/* M-i */
82754222Sbostic     /* 234 */	ED_UNASSIGNED,		/* M-j */
82854222Sbostic     /* 235 */	ED_UNASSIGNED,		/* M-k */
82954222Sbostic     /* 236 */	ED_UNASSIGNED,		/* M-l */
83054222Sbostic     /* 237 */	ED_UNASSIGNED,		/* M-m */
83154222Sbostic     /* 238 */	ED_UNASSIGNED,		/* M-n */
83254222Sbostic     /* 239 */	ED_UNASSIGNED,		/* M-o */
83354222Sbostic     /* 240 */	ED_UNASSIGNED,		/* M-p */
83454222Sbostic     /* 241 */	ED_UNASSIGNED,		/* M-q */
83554222Sbostic     /* 242 */	ED_UNASSIGNED,		/* M-r */
83654222Sbostic     /* 243 */	ED_UNASSIGNED,		/* M-s */
83754222Sbostic     /* 244 */	ED_UNASSIGNED,		/* M-t */
83854222Sbostic     /* 245 */	ED_UNASSIGNED,		/* M-u */
83954222Sbostic     /* 246 */	ED_UNASSIGNED,		/* M-v */
84054222Sbostic     /* 247 */	ED_UNASSIGNED,		/* M-w */
84154222Sbostic     /* 248 */	ED_UNASSIGNED,		/* M-x */
84254222Sbostic     /* 249 */	ED_UNASSIGNED,		/* M-y */
84354222Sbostic     /* 250 */	ED_UNASSIGNED,		/* M-z */
84454222Sbostic     /* 251 */	ED_UNASSIGNED,		/* M-{ */
84554222Sbostic     /* 252 */	ED_UNASSIGNED,		/* M-| */
84654222Sbostic     /* 253 */	ED_UNASSIGNED,		/* M-} */
84754222Sbostic     /* 254 */	ED_UNASSIGNED,		/* M-~ */
84854222Sbostic     /* 255 */	ED_UNASSIGNED		/* M-^? */
84954222Sbostic };
85054222Sbostic 
85154222Sbostic 
85254222Sbostic /* map_init():
85354222Sbostic  *	Initialize and allocate the maps
85454222Sbostic  */
85554222Sbostic protected int
map_init(el)85654222Sbostic map_init(el)
85754222Sbostic     EditLine *el;
85854222Sbostic {
85954222Sbostic 
86054222Sbostic     /*
86154222Sbostic      * Make sure those are correct before starting.
86254222Sbostic      */
86354222Sbostic #ifdef MAP_DEBUG
86454222Sbostic     if (sizeof(el_map_emacs)      != N_KEYS * sizeof(el_action_t))
86554222Sbostic 	abort();
86654222Sbostic     if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
86754222Sbostic 	abort();
86854222Sbostic     if (sizeof(el_map_vi_insert)  != N_KEYS * sizeof(el_action_t))
86954222Sbostic 	abort();
87054222Sbostic #endif
87154222Sbostic 
87254222Sbostic     el->el_map.alt   = (el_action_t *) el_malloc(sizeof(el_action_t) * N_KEYS);
87354222Sbostic     el->el_map.key   = (el_action_t *) el_malloc(sizeof(el_action_t) * N_KEYS);
87454222Sbostic     el->el_map.emacs = el_map_emacs;
87554222Sbostic     el->el_map.vic   = el_map_vi_command;
87654222Sbostic     el->el_map.vii   = el_map_vi_insert;
87754222Sbostic     el->el_map.help  = (el_bindings_t *) el_malloc(sizeof(el_bindings_t) *
87854222Sbostic 						   EL_NUM_FCNS);
87954222Sbostic     (void) memcpy(el->el_map.help, help__get(),
88054222Sbostic 		  sizeof(el_bindings_t) * EL_NUM_FCNS);
88154222Sbostic     el->el_map.func  = (el_func_t *) el_malloc(sizeof(el_func_t) * EL_NUM_FCNS);
88254222Sbostic     memcpy(el->el_map.func, func__get(), sizeof(el_func_t) * EL_NUM_FCNS);
88354222Sbostic     el->el_map.nfunc = EL_NUM_FCNS;
88454222Sbostic 
88554222Sbostic #ifdef VIDEFAULT
88654222Sbostic     map_init_vi(el);
88754222Sbostic #else
88854222Sbostic     map_init_emacs(el);
88954222Sbostic #endif /* VIDEFAULT */
89054222Sbostic     return 0;
89154222Sbostic }
89254222Sbostic 
89354222Sbostic 
89454222Sbostic /* map_end():
89554222Sbostic  *	Free the space taken by the editor maps
89654222Sbostic  */
89754222Sbostic protected void
map_end(el)89854222Sbostic map_end(el)
89954222Sbostic     EditLine *el;
90054222Sbostic {
90154222Sbostic     el_free((ptr_t) el->el_map.alt);
90254222Sbostic     el->el_map.alt   = NULL;
90354222Sbostic     el_free((ptr_t) el->el_map.key);
90454222Sbostic     el->el_map.key   = NULL;
90554222Sbostic     el->el_map.emacs = NULL;
90654222Sbostic     el->el_map.vic   = NULL;
90754222Sbostic     el->el_map.vii   = NULL;
90854222Sbostic     el_free((ptr_t) el->el_map.help);
90954222Sbostic     el->el_map.help  = NULL;
91054222Sbostic     el_free((ptr_t) el->el_map.func);
91154222Sbostic     el->el_map.func  = NULL;
91254222Sbostic }
91354222Sbostic 
91454222Sbostic 
91554222Sbostic /* map_init_nls():
91654222Sbostic  *	Find all the printable keys and bind them to self insert
91754222Sbostic  */
91854222Sbostic private void
map_init_nls(el)91954222Sbostic map_init_nls(el)
92054222Sbostic     EditLine *el;
92154222Sbostic {
92254222Sbostic     int i;
92354222Sbostic     el_action_t *map = el->el_map.key;
92454222Sbostic 
92554222Sbostic     for (i = 0200; i <= 0377; i++)
92654222Sbostic 	if (isprint(i))
92754222Sbostic 	    map[i] = ED_INSERT;
92854222Sbostic }
92954222Sbostic 
93054222Sbostic 
93154222Sbostic /* map_init_meta():
93254222Sbostic  *	Bind all the meta keys to the appropriate ESC-<key> sequence
93354222Sbostic  */
93454222Sbostic private void
map_init_meta(el)93554222Sbostic map_init_meta(el)
93654222Sbostic     EditLine *el;
93754222Sbostic {
93854222Sbostic     char    buf[3];
93954222Sbostic     register int i;
94054222Sbostic     el_action_t *map = el->el_map.key;
94154222Sbostic     el_action_t *alt = el->el_map.alt;
94254222Sbostic 
94354222Sbostic     for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
94454222Sbostic 	continue;
94554222Sbostic 
94654222Sbostic     if (i > 0377) {
94754222Sbostic 	for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
94854222Sbostic 	    continue;
94954222Sbostic 	if (i > 0377) {
95054222Sbostic 	    i = 033;
95154222Sbostic 	    if (el->el_map.type == MAP_VI)
95254222Sbostic 		map = alt;
95354222Sbostic 	}
95454222Sbostic 	else
95554222Sbostic 	    map = alt;
95654222Sbostic     }
95754222Sbostic     buf[0] = (char) i;
95854222Sbostic     buf[2] = 0;
95954222Sbostic     for (i = 0200; i <= 0377; i++)
96054222Sbostic 	switch (map[i]) {
96154222Sbostic 	case ED_INSERT:
96254222Sbostic 	case ED_UNASSIGNED:
96354222Sbostic 	case ED_SEQUENCE_LEAD_IN:
96454222Sbostic 	    break;
96554222Sbostic 	default:
96654222Sbostic 	    buf[1] = i & 0177;
96754222Sbostic 	    key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD);
96854222Sbostic 	    break;
96954222Sbostic 	}
97054222Sbostic     map[buf[0]] = ED_SEQUENCE_LEAD_IN;
97154222Sbostic }
97254222Sbostic 
97354222Sbostic 
97454222Sbostic /* map_init_vi():
97554222Sbostic  *	Initialize the vi bindings
97654222Sbostic  */
97754222Sbostic protected void
map_init_vi(el)97854222Sbostic map_init_vi(el)
97954222Sbostic     EditLine *el;
98054222Sbostic {
98154222Sbostic     register int i;
98254222Sbostic     el_action_t *key = el->el_map.key;
98354222Sbostic     el_action_t *alt = el->el_map.alt;
98454222Sbostic     el_action_t *vii = el->el_map.vii;
98554222Sbostic     el_action_t *vic = el->el_map.vic;
98654222Sbostic 
98754222Sbostic     el->el_map.type = MAP_VI;
98854222Sbostic     el->el_map.current = el->el_map.key;
98954222Sbostic 
99054222Sbostic     key_reset(el);
99154222Sbostic 
99254222Sbostic     for (i = 0; i < N_KEYS; i++) {
99354222Sbostic 	key[i] = vii[i];
99454222Sbostic 	alt[i] = vic[i];
99554222Sbostic     }
99654222Sbostic 
99754222Sbostic     map_init_meta(el);
99854222Sbostic #ifdef notyet
99954222Sbostic     if (0 /* XXX: USER has set LC_CTYPE */)
100054222Sbostic 	map_init_nls(el);
100154222Sbostic #endif
100254222Sbostic 
100355371Schristos     tty_bind_char(el, 1);
100454624Schristos     term_bind_arrow(el);
100554222Sbostic }
100654222Sbostic 
100754222Sbostic 
100854222Sbostic /* map_init_emacs():
100954222Sbostic  *	Initialize the emacs bindings
101054222Sbostic  */
101154222Sbostic protected void
map_init_emacs(el)101254222Sbostic map_init_emacs(el)
101354222Sbostic     EditLine *el;
101454222Sbostic {
101554222Sbostic     int i;
101654222Sbostic     char    buf[3];
101754222Sbostic     el_action_t *key   = el->el_map.key;
101854222Sbostic     el_action_t *alt   = el->el_map.alt;
101954222Sbostic     el_action_t *emacs = el->el_map.emacs;
102054222Sbostic 
102154222Sbostic     el->el_map.type = MAP_EMACS;
102254222Sbostic     el->el_map.current = el->el_map.key;
102354222Sbostic     key_reset(el);
102454222Sbostic 
102554222Sbostic     for (i = 0; i < N_KEYS; i++) {
102654222Sbostic 	key[i] = emacs[i];
102754222Sbostic 	alt[i] = ED_UNASSIGNED;
102854222Sbostic     }
102954222Sbostic 
103054222Sbostic     map_init_meta(el);
103154222Sbostic #ifdef notyet
103254222Sbostic     if (0 /* XXX: USER has set LC_CTYPE */)
103354222Sbostic 	map_init_nls(el);
103454222Sbostic #endif
103554222Sbostic     map_init_nls(el);
103654222Sbostic 
103754222Sbostic     buf[0] = CONTROL('X');
103854222Sbostic     buf[2] = 0;
103954222Sbostic     buf[1] = CONTROL('X');
104054222Sbostic     key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
104155371Schristos 
104255371Schristos     tty_bind_char(el, 1);
104354624Schristos     term_bind_arrow(el);
104454222Sbostic }
104554222Sbostic 
104654222Sbostic 
104754222Sbostic /* map_set_editor():
104854222Sbostic  *	Set the editor
104954222Sbostic  */
105054222Sbostic protected int
map_set_editor(el,editor)105154222Sbostic map_set_editor(el, editor)
105254222Sbostic     EditLine *el;
105354222Sbostic     char *editor;
105454222Sbostic {
105554222Sbostic     if (strcmp(editor, "emacs") == 0) {
105654222Sbostic 	map_init_emacs(el);
105754222Sbostic 	return 0;
105854222Sbostic     }
105954222Sbostic     if (strcmp(editor, "vi") == 0) {
106054222Sbostic 	map_init_vi(el);
106154222Sbostic 	return 0;
106254222Sbostic     }
106354222Sbostic     return -1;
106454222Sbostic }
106554222Sbostic 
106654222Sbostic 
106754222Sbostic /* map_print_key():
106854222Sbostic  *	Print the function description for 1 key
106954222Sbostic  */
107054222Sbostic private void
map_print_key(el,map,in)107154222Sbostic map_print_key(el, map, in)
107254222Sbostic     EditLine *el;
107354222Sbostic     el_action_t *map;
107454222Sbostic     char *in;
107554222Sbostic {
107654222Sbostic     char outbuf[EL_BUFSIZ];
107754222Sbostic     el_bindings_t *bp;
107854222Sbostic 
107954222Sbostic     if (in[0] == '\0' || in[1] == '\0') {
108054222Sbostic 	(void) key__decode_str(in, outbuf, "");
108154222Sbostic 	for (bp = el->el_map.help; bp->name != NULL; bp++)
108254222Sbostic 	    if (bp->func == map[(unsigned char) *in]) {
108354222Sbostic 		(void) fprintf(el->el_outfile,
108454222Sbostic 			       "%s\t->\t%s\n", outbuf, bp->name);
108554222Sbostic 		return;
108654222Sbostic 	    }
108754222Sbostic     }
108854222Sbostic     else
108954222Sbostic 	key_print(el, in);
109054222Sbostic }
109154222Sbostic 
109254222Sbostic 
109354222Sbostic /* map_print_some_keys():
109454222Sbostic  *	Print keys from first to last
109554222Sbostic  */
109654222Sbostic private void
map_print_some_keys(el,map,first,last)109754222Sbostic map_print_some_keys(el, map, first, last)
109854222Sbostic     EditLine *el;
109954222Sbostic     el_action_t *map;
110054222Sbostic     int     first, last;
110154222Sbostic {
110254222Sbostic     el_bindings_t *bp;
110354222Sbostic     char    firstbuf[2], lastbuf[2];
110454222Sbostic     char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
110554222Sbostic 
110654222Sbostic     firstbuf[0] = first;
110754222Sbostic     firstbuf[1] = 0;
110854222Sbostic     lastbuf[0] = last;
110954222Sbostic     lastbuf[1] = 0;
111054222Sbostic     if (map[first] == ED_UNASSIGNED) {
111154222Sbostic 	if (first == last)
111254222Sbostic 	    (void) fprintf(el->el_outfile, "%-15s->  is undefined\n",
111354222Sbostic 		    key__decode_str(firstbuf, unparsbuf, STRQQ));
111454222Sbostic 	return;
111554222Sbostic     }
111654222Sbostic 
111754222Sbostic     for (bp = el->el_map.help; bp->name != NULL; bp++) {
111854222Sbostic 	if (bp->func == map[first]) {
111954222Sbostic 	    if (first == last) {
112054222Sbostic 		(void) fprintf(el->el_outfile, "%-15s->  %s\n",
112154222Sbostic 			       key__decode_str(firstbuf, unparsbuf, STRQQ),
112254222Sbostic 			       bp->name);
112354222Sbostic 	    }
112454222Sbostic 	    else {
112554222Sbostic 		(void) fprintf(el->el_outfile, "%-4s to %-7s->  %s\n",
112654222Sbostic 			       key__decode_str(firstbuf, unparsbuf, STRQQ),
112754222Sbostic 			       key__decode_str(lastbuf, extrabuf, STRQQ),
112854222Sbostic 			       bp->name);
112954222Sbostic 	    }
113054222Sbostic 	    return;
113154222Sbostic 	}
113254222Sbostic     }
113354222Sbostic #ifdef MAP_DEBUG
113454222Sbostic     if (map == el->el_map.key) {
113554222Sbostic 	(void) fprintf(el->el_outfile, "BUG!!! %s isn't bound to anything.\n",
113654222Sbostic 		       key__decode_str(firstbuf, unparsbuf, STRQQ));
113754222Sbostic 	(void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
113854222Sbostic 		       first, el->el_map.key[first]);
113954222Sbostic     }
114054222Sbostic     else {
114154222Sbostic 	(void) fprintf(el->el_outfile, "BUG!!! %s isn't bound to anything.\n",
114254222Sbostic 		       key__decode_str(firstbuf, unparsbuf, STRQQ));
114354222Sbostic 	(void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
114454222Sbostic 		       first, el->el_map.alt[first]);
114554222Sbostic     }
114654222Sbostic #endif
114754222Sbostic     abort();
114854222Sbostic }
114954222Sbostic 
115054222Sbostic 
115154222Sbostic /* map_print_all_keys():
115254222Sbostic  *	Print the function description for all keys.
115354222Sbostic  */
115454222Sbostic private void
map_print_all_keys(el)115554222Sbostic map_print_all_keys(el)
115654222Sbostic     EditLine *el;
115754222Sbostic {
115854222Sbostic     int     prev, i;
115954222Sbostic 
116054222Sbostic     (void) fprintf(el->el_outfile, "Standard key bindings\n");
116154222Sbostic     prev = 0;
116254222Sbostic     for (i = 0; i < N_KEYS; i++) {
116354222Sbostic 	if (el->el_map.key[prev] == el->el_map.key[i])
116454222Sbostic 	    continue;
116554222Sbostic 	map_print_some_keys(el, el->el_map.key, prev, i - 1);
116654222Sbostic 	prev = i;
116754222Sbostic     }
116854222Sbostic     map_print_some_keys(el, el->el_map.key, prev, i - 1);
116954222Sbostic 
117054222Sbostic     (void) fprintf(el->el_outfile, "Alternative key bindings\n");
117154222Sbostic     prev = 0;
117254222Sbostic     for (i = 0; i < N_KEYS; i++) {
117354222Sbostic 	if (el->el_map.alt[prev] == el->el_map.alt[i])
117454222Sbostic 	    continue;
117554222Sbostic 	map_print_some_keys(el, el->el_map.alt, prev, i - 1);
117654222Sbostic 	prev = i;
117754222Sbostic     }
117854222Sbostic     map_print_some_keys(el, el->el_map.alt, prev, i - 1);
117954222Sbostic 
118054222Sbostic     (void) fprintf(el->el_outfile, "Multi-character bindings\n");
118154222Sbostic     key_print(el, "");
118254624Schristos     (void) fprintf(el->el_outfile, "Arrow key bindings\n");
118354624Schristos     term_print_arrow(el, "");
118454222Sbostic }
118554222Sbostic 
118654222Sbostic 
118754222Sbostic /* map_bind():
118854222Sbostic  *	Add/remove/change bindings
118954222Sbostic  */
119054222Sbostic protected int
map_bind(el,argc,argv)119154222Sbostic map_bind(el, argc, argv)
119254222Sbostic     EditLine *el;
119354222Sbostic     int argc;
119454222Sbostic     char **argv;
119554222Sbostic {
119654222Sbostic     el_action_t *map;
119754222Sbostic     int     ntype, remove;
119854222Sbostic     char   *p;
119954222Sbostic     char    inbuf[EL_BUFSIZ];
120054222Sbostic     char    outbuf[EL_BUFSIZ];
120154624Schristos     char   *in = NULL;
120254624Schristos     char   *out = NULL;
120354222Sbostic     el_bindings_t *bp;
120454222Sbostic     int     cmd;
120554624Schristos     int	    key;
120654222Sbostic 
120754222Sbostic     if (argv == NULL)
120854222Sbostic 	return -1;
120954222Sbostic 
121054222Sbostic     map = el->el_map.key;
121154222Sbostic     ntype = XK_CMD;
121254624Schristos     key = remove = 0;
121354222Sbostic     for (argc = 1; (p = argv[argc]) != NULL; argc++)
121454222Sbostic 	if (p[0] == '-')
121554222Sbostic 	    switch (p[1]) {
121654222Sbostic 	    case 'a':
121754222Sbostic 		map = el->el_map.alt;
121854222Sbostic 		break;
121954222Sbostic 
122054222Sbostic 	    case 's':
122154222Sbostic 		ntype = XK_STR;
122254222Sbostic 		break;
122354222Sbostic #ifdef notyet
122454222Sbostic 	    case 'c':
122554222Sbostic 		ntype = XK_EXE;
122654222Sbostic 		break;
122754222Sbostic #endif
122854624Schristos 	    case 'k':
122954624Schristos 		key = 1;
123054624Schristos 		break;
123154624Schristos 
123254222Sbostic 	    case 'r':
123354222Sbostic 		remove = 1;
123454222Sbostic 		break;
123554222Sbostic 
123654222Sbostic 	    case 'v':
123754222Sbostic 		map_init_vi(el);
123854222Sbostic 		return 0;
123954222Sbostic 
124054222Sbostic 	    case 'e':
124154222Sbostic 		map_init_emacs(el);
124254222Sbostic 		return 0;
124354222Sbostic 
124454222Sbostic 	    case 'l':
124554222Sbostic 		for (bp = el->el_map.help; bp->name != NULL; bp++)
124654222Sbostic 		    (void) fprintf(el->el_outfile, "%s\n\t%s\n",
124754222Sbostic 				   bp->name, bp->description);
124854222Sbostic 		return 0;
124954222Sbostic 	    default:
125054222Sbostic 		(void) fprintf(el->el_errfile, "%s: Invalid switch `%c'.\n",
125154222Sbostic 			       argv[0], p[1]);
125254222Sbostic 	    }
125354222Sbostic 	else
125454222Sbostic 	    break;
125554222Sbostic 
125654222Sbostic     if (argv[argc] == NULL) {
125754222Sbostic 	map_print_all_keys(el);
125854222Sbostic 	return 0;
125954222Sbostic     }
126054222Sbostic 
126154624Schristos     if (key)
126254624Schristos 	in = argv[argc++];
126354624Schristos     else
126454624Schristos 	if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
126554624Schristos 	    (void) fprintf(el->el_errfile, "%s: Invalid \\ or ^ in instring.\n",
126654624Schristos 			   argv[0]);
126754624Schristos 	    return -1;
126854624Schristos 	}
126954222Sbostic 
127054222Sbostic     if (remove) {
127154624Schristos 	if (key) {
127254624Schristos 	    (void) term_clear_arrow(el, in);
127354624Schristos 	    return -1;
127454624Schristos 	}
127554222Sbostic 	if (in[1])
127654222Sbostic 	    (void) key_delete(el, in);
127754222Sbostic 	else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
127854222Sbostic 	    (void) key_delete(el, in);
127954222Sbostic 	else
128054222Sbostic 	    map[(unsigned char) *in] = ED_UNASSIGNED;
128154222Sbostic 	return 0;
128254222Sbostic     }
128354222Sbostic 
128454222Sbostic     if (argv[argc] == NULL) {
128554624Schristos 	if (key)
128654624Schristos 	    term_print_arrow(el, in);
128754624Schristos 	else
128854624Schristos 	    map_print_key(el, map, in);
128954222Sbostic 	return 0;
129054222Sbostic     }
129154222Sbostic 
129254222Sbostic #ifdef notyet
129354222Sbostic     if (argv[argc + 1] != NULL) {
129454222Sbostic 	bindkey_usage();
129554222Sbostic 	return -1;
129654222Sbostic     }
129754222Sbostic #endif
129854222Sbostic 
129954222Sbostic     switch (ntype) {
130054222Sbostic     case XK_STR:
130154222Sbostic     case XK_EXE:
130254222Sbostic 	if ((out = parse__string(outbuf, argv[argc])) == NULL) {
130354222Sbostic 	    (void) fprintf(el->el_errfile,
130454222Sbostic 			   "%s: Invalid \\ or ^ in outstring.\n", argv[0]);
130554222Sbostic 	    return -1;
130654222Sbostic 	}
130754624Schristos 	if (key)
130854624Schristos 	    term_set_arrow(el, in, key_map_str(el, out), ntype);
130954624Schristos 	else
131054624Schristos 	    key_add(el, in, key_map_str(el, out), ntype);
131154222Sbostic 	map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
131254222Sbostic 	break;
131354222Sbostic 
131454222Sbostic     case XK_CMD:
131554222Sbostic 	if ((cmd = parse_cmd(el, argv[argc])) == -1) {
131654222Sbostic 	    (void) fprintf(el->el_errfile,
131754222Sbostic 			   "%s: Invalid command `%s'.\n", argv[0], argv[argc]);
131854222Sbostic 	    return -1;
131954222Sbostic 	}
132054624Schristos 	if (key)
132154624Schristos 	    term_set_arrow(el, in, key_map_str(el, out), ntype);
132254624Schristos 	else {
132354624Schristos 	    if (in[1]) {
132454624Schristos 		key_add(el, in, key_map_cmd(el, cmd), ntype);
132554624Schristos 		map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
132654624Schristos 	    }
132754624Schristos 	    else  {
132854624Schristos 		key_clear(el, map, in);
132954624Schristos 		map[(unsigned char) *in] = cmd;
133054624Schristos 	    }
133154222Sbostic 	}
133254222Sbostic 	break;
133354222Sbostic 
133454222Sbostic     default:
133554222Sbostic 	abort();
133654222Sbostic 	break;
133754222Sbostic     }
133854222Sbostic     return 0;
133954222Sbostic }
134054222Sbostic 
134154222Sbostic 
134254222Sbostic /* map_addfunc():
134354222Sbostic  *	add a user defined function
134454222Sbostic  */
134554222Sbostic protected int
map_addfunc(el,name,help,func)134654222Sbostic map_addfunc(el, name, help, func)
134754222Sbostic     EditLine *el;
134854222Sbostic     const char *name;
134954222Sbostic     const char *help;
135054222Sbostic     el_func_t func;
135154222Sbostic {
135254222Sbostic     int nf = el->el_map.nfunc + 2;
135354222Sbostic     if (name == NULL || help == NULL || func == NULL)
135454222Sbostic 	return -1;
135554222Sbostic 
135654222Sbostic     el->el_map.func = (el_func_t *)
135754222Sbostic 		el_realloc(el->el_map.func, nf * sizeof(el_func_t));
135854222Sbostic     el->el_map.help = (el_bindings_t *)
135954222Sbostic 		el_realloc(el->el_map.help, nf * sizeof(el_bindings_t));
136054222Sbostic 
136154222Sbostic     nf = el->el_map.nfunc;
136254222Sbostic     el->el_map.func[nf] = func;
136354222Sbostic 
136454222Sbostic     el->el_map.help[nf].name = name;
136554222Sbostic     el->el_map.help[nf].func = nf;
136654222Sbostic     el->el_map.help[nf].description = help;
136754222Sbostic     el->el_map.help[++nf].name = NULL;
136854222Sbostic     el->el_map.nfunc++;
136954222Sbostic 
137054222Sbostic     return 0;
137154222Sbostic }
1372