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