1*cdf8408cSAntonio Huete Jimenez /* $NetBSD: map.c,v 1.54 2021/08/29 09:41:59 christos Exp $ */
232fe07f8SJohn Marino
332fe07f8SJohn Marino /*-
432fe07f8SJohn Marino * Copyright (c) 1992, 1993
532fe07f8SJohn Marino * The Regents of the University of California. All rights reserved.
632fe07f8SJohn Marino *
732fe07f8SJohn Marino * This code is derived from software contributed to Berkeley by
832fe07f8SJohn Marino * Christos Zoulas of Cornell University.
932fe07f8SJohn Marino *
1032fe07f8SJohn Marino * Redistribution and use in source and binary forms, with or without
1132fe07f8SJohn Marino * modification, are permitted provided that the following conditions
1232fe07f8SJohn Marino * are met:
1332fe07f8SJohn Marino * 1. Redistributions of source code must retain the above copyright
1432fe07f8SJohn Marino * notice, this list of conditions and the following disclaimer.
1532fe07f8SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright
1632fe07f8SJohn Marino * notice, this list of conditions and the following disclaimer in the
1732fe07f8SJohn Marino * documentation and/or other materials provided with the distribution.
1832fe07f8SJohn Marino * 3. Neither the name of the University nor the names of its contributors
1932fe07f8SJohn Marino * may be used to endorse or promote products derived from this software
2032fe07f8SJohn Marino * without specific prior written permission.
2132fe07f8SJohn Marino *
2232fe07f8SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2332fe07f8SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2432fe07f8SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2532fe07f8SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2632fe07f8SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2732fe07f8SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2832fe07f8SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2932fe07f8SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3032fe07f8SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3132fe07f8SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3232fe07f8SJohn Marino * SUCH DAMAGE.
3332fe07f8SJohn Marino */
3432fe07f8SJohn Marino
3532fe07f8SJohn Marino #include "config.h"
3632fe07f8SJohn Marino #if !defined(lint) && !defined(SCCSID)
3732fe07f8SJohn Marino #if 0
3832fe07f8SJohn Marino static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93";
3932fe07f8SJohn Marino #else
40*cdf8408cSAntonio Huete Jimenez __RCSID("$NetBSD: map.c,v 1.54 2021/08/29 09:41:59 christos Exp $");
4132fe07f8SJohn Marino #endif
4232fe07f8SJohn Marino #endif /* not lint && not SCCSID */
4332fe07f8SJohn Marino
4432fe07f8SJohn Marino /*
4532fe07f8SJohn Marino * map.c: Editor function definitions
4632fe07f8SJohn Marino */
4712db70c8Szrj #include <ctype.h>
4832fe07f8SJohn Marino #include <stdlib.h>
4912db70c8Szrj #include <string.h>
5032fe07f8SJohn Marino
5112db70c8Szrj #include "el.h"
5212db70c8Szrj #include "common.h"
5312db70c8Szrj #include "emacs.h"
5412db70c8Szrj #include "vi.h"
5512db70c8Szrj #include "fcns.h"
5612db70c8Szrj #include "func.h"
5712db70c8Szrj #include "help.h"
5812db70c8Szrj #include "parse.h"
5912db70c8Szrj
6012db70c8Szrj static void map_print_key(EditLine *, el_action_t *, const wchar_t *);
6112db70c8Szrj static void map_print_some_keys(EditLine *, el_action_t *, wint_t, wint_t);
6212db70c8Szrj static void map_print_all_keys(EditLine *);
6312db70c8Szrj static void map_init_nls(EditLine *);
6412db70c8Szrj static void map_init_meta(EditLine *);
6532fe07f8SJohn Marino
6632fe07f8SJohn Marino /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
6732fe07f8SJohn Marino
6832fe07f8SJohn Marino
6912db70c8Szrj static const el_action_t el_map_emacs[] = {
7032fe07f8SJohn Marino /* 0 */ EM_SET_MARK, /* ^@ */
7132fe07f8SJohn Marino /* 1 */ ED_MOVE_TO_BEG, /* ^A */
7232fe07f8SJohn Marino /* 2 */ ED_PREV_CHAR, /* ^B */
7312db70c8Szrj /* 3 */ ED_IGNORE, /* ^C */
7432fe07f8SJohn Marino /* 4 */ EM_DELETE_OR_LIST, /* ^D */
7532fe07f8SJohn Marino /* 5 */ ED_MOVE_TO_END, /* ^E */
7632fe07f8SJohn Marino /* 6 */ ED_NEXT_CHAR, /* ^F */
7732fe07f8SJohn Marino /* 7 */ ED_UNASSIGNED, /* ^G */
7832fe07f8SJohn Marino /* 8 */ EM_DELETE_PREV_CHAR, /* ^H */
7932fe07f8SJohn Marino /* 9 */ ED_UNASSIGNED, /* ^I */
8032fe07f8SJohn Marino /* 10 */ ED_NEWLINE, /* ^J */
8132fe07f8SJohn Marino /* 11 */ ED_KILL_LINE, /* ^K */
8232fe07f8SJohn Marino /* 12 */ ED_CLEAR_SCREEN, /* ^L */
8332fe07f8SJohn Marino /* 13 */ ED_NEWLINE, /* ^M */
8432fe07f8SJohn Marino /* 14 */ ED_NEXT_HISTORY, /* ^N */
8512db70c8Szrj /* 15 */ ED_IGNORE, /* ^O */
8632fe07f8SJohn Marino /* 16 */ ED_PREV_HISTORY, /* ^P */
8712db70c8Szrj /* 17 */ ED_IGNORE, /* ^Q */
88*cdf8408cSAntonio Huete Jimenez /* 18 */ EM_INC_SEARCH_PREV, /* ^R */
8912db70c8Szrj /* 19 */ ED_IGNORE, /* ^S */
9032fe07f8SJohn Marino /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */
9132fe07f8SJohn Marino /* 21 */ EM_KILL_LINE, /* ^U */
9232fe07f8SJohn Marino /* 22 */ ED_QUOTED_INSERT, /* ^V */
93*cdf8408cSAntonio Huete Jimenez /* 23 */ ED_DELETE_PREV_WORD, /* ^W */
9432fe07f8SJohn Marino /* 24 */ ED_SEQUENCE_LEAD_IN, /* ^X */
9532fe07f8SJohn Marino /* 25 */ EM_YANK, /* ^Y */
9612db70c8Szrj /* 26 */ ED_IGNORE, /* ^Z */
9732fe07f8SJohn Marino /* 27 */ EM_META_NEXT, /* ^[ */
9812db70c8Szrj /* 28 */ ED_IGNORE, /* ^\ */
9912db70c8Szrj /* 29 */ ED_IGNORE, /* ^] */
10032fe07f8SJohn Marino /* 30 */ ED_UNASSIGNED, /* ^^ */
10132fe07f8SJohn Marino /* 31 */ ED_UNASSIGNED, /* ^_ */
10232fe07f8SJohn Marino /* 32 */ ED_INSERT, /* SPACE */
10332fe07f8SJohn Marino /* 33 */ ED_INSERT, /* ! */
10432fe07f8SJohn Marino /* 34 */ ED_INSERT, /* " */
10532fe07f8SJohn Marino /* 35 */ ED_INSERT, /* # */
10632fe07f8SJohn Marino /* 36 */ ED_INSERT, /* $ */
10732fe07f8SJohn Marino /* 37 */ ED_INSERT, /* % */
10832fe07f8SJohn Marino /* 38 */ ED_INSERT, /* & */
10932fe07f8SJohn Marino /* 39 */ ED_INSERT, /* ' */
11032fe07f8SJohn Marino /* 40 */ ED_INSERT, /* ( */
11132fe07f8SJohn Marino /* 41 */ ED_INSERT, /* ) */
11232fe07f8SJohn Marino /* 42 */ ED_INSERT, /* * */
11332fe07f8SJohn Marino /* 43 */ ED_INSERT, /* + */
11432fe07f8SJohn Marino /* 44 */ ED_INSERT, /* , */
11532fe07f8SJohn Marino /* 45 */ ED_INSERT, /* - */
11632fe07f8SJohn Marino /* 46 */ ED_INSERT, /* . */
11732fe07f8SJohn Marino /* 47 */ ED_INSERT, /* / */
11832fe07f8SJohn Marino /* 48 */ ED_DIGIT, /* 0 */
11932fe07f8SJohn Marino /* 49 */ ED_DIGIT, /* 1 */
12032fe07f8SJohn Marino /* 50 */ ED_DIGIT, /* 2 */
12132fe07f8SJohn Marino /* 51 */ ED_DIGIT, /* 3 */
12232fe07f8SJohn Marino /* 52 */ ED_DIGIT, /* 4 */
12332fe07f8SJohn Marino /* 53 */ ED_DIGIT, /* 5 */
12432fe07f8SJohn Marino /* 54 */ ED_DIGIT, /* 6 */
12532fe07f8SJohn Marino /* 55 */ ED_DIGIT, /* 7 */
12632fe07f8SJohn Marino /* 56 */ ED_DIGIT, /* 8 */
12732fe07f8SJohn Marino /* 57 */ ED_DIGIT, /* 9 */
12832fe07f8SJohn Marino /* 58 */ ED_INSERT, /* : */
12932fe07f8SJohn Marino /* 59 */ ED_INSERT, /* ; */
13032fe07f8SJohn Marino /* 60 */ ED_INSERT, /* < */
13132fe07f8SJohn Marino /* 61 */ ED_INSERT, /* = */
13232fe07f8SJohn Marino /* 62 */ ED_INSERT, /* > */
13332fe07f8SJohn Marino /* 63 */ ED_INSERT, /* ? */
13432fe07f8SJohn Marino /* 64 */ ED_INSERT, /* @ */
13532fe07f8SJohn Marino /* 65 */ ED_INSERT, /* A */
13632fe07f8SJohn Marino /* 66 */ ED_INSERT, /* B */
13732fe07f8SJohn Marino /* 67 */ ED_INSERT, /* C */
13832fe07f8SJohn Marino /* 68 */ ED_INSERT, /* D */
13932fe07f8SJohn Marino /* 69 */ ED_INSERT, /* E */
14032fe07f8SJohn Marino /* 70 */ ED_INSERT, /* F */
14132fe07f8SJohn Marino /* 71 */ ED_INSERT, /* G */
14232fe07f8SJohn Marino /* 72 */ ED_INSERT, /* H */
14332fe07f8SJohn Marino /* 73 */ ED_INSERT, /* I */
14432fe07f8SJohn Marino /* 74 */ ED_INSERT, /* J */
14532fe07f8SJohn Marino /* 75 */ ED_INSERT, /* K */
14632fe07f8SJohn Marino /* 76 */ ED_INSERT, /* L */
14732fe07f8SJohn Marino /* 77 */ ED_INSERT, /* M */
14832fe07f8SJohn Marino /* 78 */ ED_INSERT, /* N */
14932fe07f8SJohn Marino /* 79 */ ED_INSERT, /* O */
15032fe07f8SJohn Marino /* 80 */ ED_INSERT, /* P */
15132fe07f8SJohn Marino /* 81 */ ED_INSERT, /* Q */
15232fe07f8SJohn Marino /* 82 */ ED_INSERT, /* R */
15332fe07f8SJohn Marino /* 83 */ ED_INSERT, /* S */
15432fe07f8SJohn Marino /* 84 */ ED_INSERT, /* T */
15532fe07f8SJohn Marino /* 85 */ ED_INSERT, /* U */
15632fe07f8SJohn Marino /* 86 */ ED_INSERT, /* V */
15732fe07f8SJohn Marino /* 87 */ ED_INSERT, /* W */
15832fe07f8SJohn Marino /* 88 */ ED_INSERT, /* X */
15932fe07f8SJohn Marino /* 89 */ ED_INSERT, /* Y */
16032fe07f8SJohn Marino /* 90 */ ED_INSERT, /* Z */
16132fe07f8SJohn Marino /* 91 */ ED_INSERT, /* [ */
16232fe07f8SJohn Marino /* 92 */ ED_INSERT, /* \ */
16332fe07f8SJohn Marino /* 93 */ ED_INSERT, /* ] */
16432fe07f8SJohn Marino /* 94 */ ED_INSERT, /* ^ */
16532fe07f8SJohn Marino /* 95 */ ED_INSERT, /* _ */
16632fe07f8SJohn Marino /* 96 */ ED_INSERT, /* ` */
16732fe07f8SJohn Marino /* 97 */ ED_INSERT, /* a */
16832fe07f8SJohn Marino /* 98 */ ED_INSERT, /* b */
16932fe07f8SJohn Marino /* 99 */ ED_INSERT, /* c */
17032fe07f8SJohn Marino /* 100 */ ED_INSERT, /* d */
17132fe07f8SJohn Marino /* 101 */ ED_INSERT, /* e */
17232fe07f8SJohn Marino /* 102 */ ED_INSERT, /* f */
17332fe07f8SJohn Marino /* 103 */ ED_INSERT, /* g */
17432fe07f8SJohn Marino /* 104 */ ED_INSERT, /* h */
17532fe07f8SJohn Marino /* 105 */ ED_INSERT, /* i */
17632fe07f8SJohn Marino /* 106 */ ED_INSERT, /* j */
17732fe07f8SJohn Marino /* 107 */ ED_INSERT, /* k */
17832fe07f8SJohn Marino /* 108 */ ED_INSERT, /* l */
17932fe07f8SJohn Marino /* 109 */ ED_INSERT, /* m */
18032fe07f8SJohn Marino /* 110 */ ED_INSERT, /* n */
18132fe07f8SJohn Marino /* 111 */ ED_INSERT, /* o */
18232fe07f8SJohn Marino /* 112 */ ED_INSERT, /* p */
18332fe07f8SJohn Marino /* 113 */ ED_INSERT, /* q */
18432fe07f8SJohn Marino /* 114 */ ED_INSERT, /* r */
18532fe07f8SJohn Marino /* 115 */ ED_INSERT, /* s */
18632fe07f8SJohn Marino /* 116 */ ED_INSERT, /* t */
18732fe07f8SJohn Marino /* 117 */ ED_INSERT, /* u */
18832fe07f8SJohn Marino /* 118 */ ED_INSERT, /* v */
18932fe07f8SJohn Marino /* 119 */ ED_INSERT, /* w */
19032fe07f8SJohn Marino /* 120 */ ED_INSERT, /* x */
19132fe07f8SJohn Marino /* 121 */ ED_INSERT, /* y */
19232fe07f8SJohn Marino /* 122 */ ED_INSERT, /* z */
19332fe07f8SJohn Marino /* 123 */ ED_INSERT, /* { */
19432fe07f8SJohn Marino /* 124 */ ED_INSERT, /* | */
19532fe07f8SJohn Marino /* 125 */ ED_INSERT, /* } */
19632fe07f8SJohn Marino /* 126 */ ED_INSERT, /* ~ */
19732fe07f8SJohn Marino /* 127 */ EM_DELETE_PREV_CHAR, /* ^? */
19832fe07f8SJohn Marino /* 128 */ ED_UNASSIGNED, /* M-^@ */
19932fe07f8SJohn Marino /* 129 */ ED_UNASSIGNED, /* M-^A */
20032fe07f8SJohn Marino /* 130 */ ED_UNASSIGNED, /* M-^B */
20132fe07f8SJohn Marino /* 131 */ ED_UNASSIGNED, /* M-^C */
20232fe07f8SJohn Marino /* 132 */ ED_UNASSIGNED, /* M-^D */
20332fe07f8SJohn Marino /* 133 */ ED_UNASSIGNED, /* M-^E */
20432fe07f8SJohn Marino /* 134 */ ED_UNASSIGNED, /* M-^F */
20532fe07f8SJohn Marino /* 135 */ ED_UNASSIGNED, /* M-^G */
20632fe07f8SJohn Marino /* 136 */ ED_DELETE_PREV_WORD, /* M-^H */
20732fe07f8SJohn Marino /* 137 */ ED_UNASSIGNED, /* M-^I */
20832fe07f8SJohn Marino /* 138 */ ED_UNASSIGNED, /* M-^J */
20932fe07f8SJohn Marino /* 139 */ ED_UNASSIGNED, /* M-^K */
21032fe07f8SJohn Marino /* 140 */ ED_CLEAR_SCREEN, /* M-^L */
21132fe07f8SJohn Marino /* 141 */ ED_UNASSIGNED, /* M-^M */
21232fe07f8SJohn Marino /* 142 */ ED_UNASSIGNED, /* M-^N */
21332fe07f8SJohn Marino /* 143 */ ED_UNASSIGNED, /* M-^O */
21432fe07f8SJohn Marino /* 144 */ ED_UNASSIGNED, /* M-^P */
21532fe07f8SJohn Marino /* 145 */ ED_UNASSIGNED, /* M-^Q */
21632fe07f8SJohn Marino /* 146 */ ED_UNASSIGNED, /* M-^R */
21732fe07f8SJohn Marino /* 147 */ ED_UNASSIGNED, /* M-^S */
21832fe07f8SJohn Marino /* 148 */ ED_UNASSIGNED, /* M-^T */
21932fe07f8SJohn Marino /* 149 */ ED_UNASSIGNED, /* M-^U */
22032fe07f8SJohn Marino /* 150 */ ED_UNASSIGNED, /* M-^V */
22132fe07f8SJohn Marino /* 151 */ ED_UNASSIGNED, /* M-^W */
22232fe07f8SJohn Marino /* 152 */ ED_UNASSIGNED, /* M-^X */
22332fe07f8SJohn Marino /* 153 */ ED_UNASSIGNED, /* M-^Y */
22432fe07f8SJohn Marino /* 154 */ ED_UNASSIGNED, /* M-^Z */
22532fe07f8SJohn Marino /* 155 */ ED_UNASSIGNED, /* M-^[ */
22632fe07f8SJohn Marino /* 156 */ ED_UNASSIGNED, /* M-^\ */
22732fe07f8SJohn Marino /* 157 */ ED_UNASSIGNED, /* M-^] */
22832fe07f8SJohn Marino /* 158 */ ED_UNASSIGNED, /* M-^^ */
22932fe07f8SJohn Marino /* 159 */ EM_COPY_PREV_WORD, /* M-^_ */
23032fe07f8SJohn Marino /* 160 */ ED_UNASSIGNED, /* M-SPACE */
23132fe07f8SJohn Marino /* 161 */ ED_UNASSIGNED, /* M-! */
23232fe07f8SJohn Marino /* 162 */ ED_UNASSIGNED, /* M-" */
23332fe07f8SJohn Marino /* 163 */ ED_UNASSIGNED, /* M-# */
23432fe07f8SJohn Marino /* 164 */ ED_UNASSIGNED, /* M-$ */
23532fe07f8SJohn Marino /* 165 */ ED_UNASSIGNED, /* M-% */
23632fe07f8SJohn Marino /* 166 */ ED_UNASSIGNED, /* M-& */
23732fe07f8SJohn Marino /* 167 */ ED_UNASSIGNED, /* M-' */
23832fe07f8SJohn Marino /* 168 */ ED_UNASSIGNED, /* M-( */
23932fe07f8SJohn Marino /* 169 */ ED_UNASSIGNED, /* M-) */
24032fe07f8SJohn Marino /* 170 */ ED_UNASSIGNED, /* M-* */
24132fe07f8SJohn Marino /* 171 */ ED_UNASSIGNED, /* M-+ */
24232fe07f8SJohn Marino /* 172 */ ED_UNASSIGNED, /* M-, */
24332fe07f8SJohn Marino /* 173 */ ED_UNASSIGNED, /* M-- */
24432fe07f8SJohn Marino /* 174 */ ED_UNASSIGNED, /* M-. */
24532fe07f8SJohn Marino /* 175 */ ED_UNASSIGNED, /* M-/ */
24632fe07f8SJohn Marino /* 176 */ ED_ARGUMENT_DIGIT, /* M-0 */
24732fe07f8SJohn Marino /* 177 */ ED_ARGUMENT_DIGIT, /* M-1 */
24832fe07f8SJohn Marino /* 178 */ ED_ARGUMENT_DIGIT, /* M-2 */
24932fe07f8SJohn Marino /* 179 */ ED_ARGUMENT_DIGIT, /* M-3 */
25032fe07f8SJohn Marino /* 180 */ ED_ARGUMENT_DIGIT, /* M-4 */
25132fe07f8SJohn Marino /* 181 */ ED_ARGUMENT_DIGIT, /* M-5 */
25232fe07f8SJohn Marino /* 182 */ ED_ARGUMENT_DIGIT, /* M-6 */
25332fe07f8SJohn Marino /* 183 */ ED_ARGUMENT_DIGIT, /* M-7 */
25432fe07f8SJohn Marino /* 184 */ ED_ARGUMENT_DIGIT, /* M-8 */
25532fe07f8SJohn Marino /* 185 */ ED_ARGUMENT_DIGIT, /* M-9 */
25632fe07f8SJohn Marino /* 186 */ ED_UNASSIGNED, /* M-: */
25732fe07f8SJohn Marino /* 187 */ ED_UNASSIGNED, /* M-; */
25832fe07f8SJohn Marino /* 188 */ ED_UNASSIGNED, /* M-< */
25932fe07f8SJohn Marino /* 189 */ ED_UNASSIGNED, /* M-= */
26032fe07f8SJohn Marino /* 190 */ ED_UNASSIGNED, /* M-> */
26132fe07f8SJohn Marino /* 191 */ ED_UNASSIGNED, /* M-? */
26232fe07f8SJohn Marino /* 192 */ ED_UNASSIGNED, /* M-@ */
26332fe07f8SJohn Marino /* 193 */ ED_UNASSIGNED, /* M-A */
26432fe07f8SJohn Marino /* 194 */ ED_PREV_WORD, /* M-B */
26532fe07f8SJohn Marino /* 195 */ EM_CAPITOL_CASE, /* M-C */
26632fe07f8SJohn Marino /* 196 */ EM_DELETE_NEXT_WORD, /* M-D */
26732fe07f8SJohn Marino /* 197 */ ED_UNASSIGNED, /* M-E */
26832fe07f8SJohn Marino /* 198 */ EM_NEXT_WORD, /* M-F */
26932fe07f8SJohn Marino /* 199 */ ED_UNASSIGNED, /* M-G */
27032fe07f8SJohn Marino /* 200 */ ED_UNASSIGNED, /* M-H */
27132fe07f8SJohn Marino /* 201 */ ED_UNASSIGNED, /* M-I */
27232fe07f8SJohn Marino /* 202 */ ED_UNASSIGNED, /* M-J */
27332fe07f8SJohn Marino /* 203 */ ED_UNASSIGNED, /* M-K */
27432fe07f8SJohn Marino /* 204 */ EM_LOWER_CASE, /* M-L */
27532fe07f8SJohn Marino /* 205 */ ED_UNASSIGNED, /* M-M */
27632fe07f8SJohn Marino /* 206 */ ED_SEARCH_NEXT_HISTORY, /* M-N */
27732fe07f8SJohn Marino /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */
27832fe07f8SJohn Marino /* 208 */ ED_SEARCH_PREV_HISTORY, /* M-P */
27932fe07f8SJohn Marino /* 209 */ ED_UNASSIGNED, /* M-Q */
28032fe07f8SJohn Marino /* 210 */ ED_UNASSIGNED, /* M-R */
28132fe07f8SJohn Marino /* 211 */ ED_UNASSIGNED, /* M-S */
28232fe07f8SJohn Marino /* 212 */ ED_UNASSIGNED, /* M-T */
28332fe07f8SJohn Marino /* 213 */ EM_UPPER_CASE, /* M-U */
28432fe07f8SJohn Marino /* 214 */ ED_UNASSIGNED, /* M-V */
28532fe07f8SJohn Marino /* 215 */ EM_COPY_REGION, /* M-W */
28632fe07f8SJohn Marino /* 216 */ ED_COMMAND, /* M-X */
28732fe07f8SJohn Marino /* 217 */ ED_UNASSIGNED, /* M-Y */
28832fe07f8SJohn Marino /* 218 */ ED_UNASSIGNED, /* M-Z */
28932fe07f8SJohn Marino /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */
29032fe07f8SJohn Marino /* 220 */ ED_UNASSIGNED, /* M-\ */
29132fe07f8SJohn Marino /* 221 */ ED_UNASSIGNED, /* M-] */
29232fe07f8SJohn Marino /* 222 */ ED_UNASSIGNED, /* M-^ */
29332fe07f8SJohn Marino /* 223 */ ED_UNASSIGNED, /* M-_ */
29432fe07f8SJohn Marino /* 223 */ ED_UNASSIGNED, /* M-` */
29532fe07f8SJohn Marino /* 224 */ ED_UNASSIGNED, /* M-a */
29632fe07f8SJohn Marino /* 225 */ ED_PREV_WORD, /* M-b */
29732fe07f8SJohn Marino /* 226 */ EM_CAPITOL_CASE, /* M-c */
29832fe07f8SJohn Marino /* 227 */ EM_DELETE_NEXT_WORD, /* M-d */
29932fe07f8SJohn Marino /* 228 */ ED_UNASSIGNED, /* M-e */
30032fe07f8SJohn Marino /* 229 */ EM_NEXT_WORD, /* M-f */
30132fe07f8SJohn Marino /* 230 */ ED_UNASSIGNED, /* M-g */
30232fe07f8SJohn Marino /* 231 */ ED_UNASSIGNED, /* M-h */
30332fe07f8SJohn Marino /* 232 */ ED_UNASSIGNED, /* M-i */
30432fe07f8SJohn Marino /* 233 */ ED_UNASSIGNED, /* M-j */
30532fe07f8SJohn Marino /* 234 */ ED_UNASSIGNED, /* M-k */
30632fe07f8SJohn Marino /* 235 */ EM_LOWER_CASE, /* M-l */
30732fe07f8SJohn Marino /* 236 */ ED_UNASSIGNED, /* M-m */
30832fe07f8SJohn Marino /* 237 */ ED_SEARCH_NEXT_HISTORY, /* M-n */
30932fe07f8SJohn Marino /* 238 */ ED_UNASSIGNED, /* M-o */
31032fe07f8SJohn Marino /* 239 */ ED_SEARCH_PREV_HISTORY, /* M-p */
31132fe07f8SJohn Marino /* 240 */ ED_UNASSIGNED, /* M-q */
31232fe07f8SJohn Marino /* 241 */ ED_UNASSIGNED, /* M-r */
31332fe07f8SJohn Marino /* 242 */ ED_UNASSIGNED, /* M-s */
31432fe07f8SJohn Marino /* 243 */ ED_UNASSIGNED, /* M-t */
31532fe07f8SJohn Marino /* 244 */ EM_UPPER_CASE, /* M-u */
31632fe07f8SJohn Marino /* 245 */ ED_UNASSIGNED, /* M-v */
31732fe07f8SJohn Marino /* 246 */ EM_COPY_REGION, /* M-w */
31832fe07f8SJohn Marino /* 247 */ ED_COMMAND, /* M-x */
31932fe07f8SJohn Marino /* 248 */ ED_UNASSIGNED, /* M-y */
32032fe07f8SJohn Marino /* 249 */ ED_UNASSIGNED, /* M-z */
32132fe07f8SJohn Marino /* 250 */ ED_UNASSIGNED, /* M-{ */
32232fe07f8SJohn Marino /* 251 */ ED_UNASSIGNED, /* M-| */
32332fe07f8SJohn Marino /* 252 */ ED_UNASSIGNED, /* M-} */
32432fe07f8SJohn Marino /* 253 */ ED_UNASSIGNED, /* M-~ */
32532fe07f8SJohn Marino /* 254 */ ED_DELETE_PREV_WORD /* M-^? */
32632fe07f8SJohn Marino /* 255 */
32732fe07f8SJohn Marino };
32832fe07f8SJohn Marino
32932fe07f8SJohn Marino
33032fe07f8SJohn Marino /*
33132fe07f8SJohn Marino * keymap table for vi. Each index into above tbl; should be
33232fe07f8SJohn Marino * N_KEYS entries long. Vi mode uses a sticky-extend to do command mode:
33332fe07f8SJohn Marino * insert mode characters are in the normal keymap, and command mode
33432fe07f8SJohn Marino * in the extended keymap.
33532fe07f8SJohn Marino */
33612db70c8Szrj static const el_action_t el_map_vi_insert[] = {
33732fe07f8SJohn Marino #ifdef KSHVI
33832fe07f8SJohn Marino /* 0 */ ED_UNASSIGNED, /* ^@ */
33932fe07f8SJohn Marino /* 1 */ ED_INSERT, /* ^A */
34032fe07f8SJohn Marino /* 2 */ ED_INSERT, /* ^B */
34132fe07f8SJohn Marino /* 3 */ ED_INSERT, /* ^C */
34232fe07f8SJohn Marino /* 4 */ VI_LIST_OR_EOF, /* ^D */
34332fe07f8SJohn Marino /* 5 */ ED_INSERT, /* ^E */
34432fe07f8SJohn Marino /* 6 */ ED_INSERT, /* ^F */
34532fe07f8SJohn Marino /* 7 */ ED_INSERT, /* ^G */
34632fe07f8SJohn Marino /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */
34732fe07f8SJohn Marino /* 9 */ ED_INSERT, /* ^I */ /* Tab Key */
34832fe07f8SJohn Marino /* 10 */ ED_NEWLINE, /* ^J */
34932fe07f8SJohn Marino /* 11 */ ED_INSERT, /* ^K */
35032fe07f8SJohn Marino /* 12 */ ED_INSERT, /* ^L */
35132fe07f8SJohn Marino /* 13 */ ED_NEWLINE, /* ^M */
35232fe07f8SJohn Marino /* 14 */ ED_INSERT, /* ^N */
35332fe07f8SJohn Marino /* 15 */ ED_INSERT, /* ^O */
35432fe07f8SJohn Marino /* 16 */ ED_INSERT, /* ^P */
35512db70c8Szrj /* 17 */ ED_IGNORE, /* ^Q */
35632fe07f8SJohn Marino /* 18 */ ED_INSERT, /* ^R */
35712db70c8Szrj /* 19 */ ED_IGNORE, /* ^S */
35832fe07f8SJohn Marino /* 20 */ ED_INSERT, /* ^T */
35932fe07f8SJohn Marino /* 21 */ VI_KILL_LINE_PREV, /* ^U */
36032fe07f8SJohn Marino /* 22 */ ED_QUOTED_INSERT, /* ^V */
36132fe07f8SJohn Marino /* 23 */ ED_DELETE_PREV_WORD, /* ^W */
36232fe07f8SJohn Marino /* ED_DELETE_PREV_WORD: Only until strt edit pos */
36332fe07f8SJohn Marino /* 24 */ ED_INSERT, /* ^X */
36432fe07f8SJohn Marino /* 25 */ ED_INSERT, /* ^Y */
36532fe07f8SJohn Marino /* 26 */ ED_INSERT, /* ^Z */
36632fe07f8SJohn Marino /* 27 */ VI_COMMAND_MODE, /* ^[ */ /* [ Esc ] key */
36712db70c8Szrj /* 28 */ ED_IGNORE, /* ^\ */
36832fe07f8SJohn Marino /* 29 */ ED_INSERT, /* ^] */
36932fe07f8SJohn Marino /* 30 */ ED_INSERT, /* ^^ */
37032fe07f8SJohn Marino /* 31 */ ED_INSERT, /* ^_ */
37132fe07f8SJohn Marino #else /* !KSHVI */
37232fe07f8SJohn Marino /*
37332fe07f8SJohn Marino * NOTE: These mappings do NOT Correspond well
37432fe07f8SJohn Marino * to the KSH VI editing assignments.
37532fe07f8SJohn Marino * On the other and they are convenient and
37632fe07f8SJohn Marino * many people have have gotten used to them.
37732fe07f8SJohn Marino */
37832fe07f8SJohn Marino /* 0 */ ED_UNASSIGNED, /* ^@ */
37932fe07f8SJohn Marino /* 1 */ ED_MOVE_TO_BEG, /* ^A */
38032fe07f8SJohn Marino /* 2 */ ED_PREV_CHAR, /* ^B */
38112db70c8Szrj /* 3 */ ED_IGNORE, /* ^C */
38232fe07f8SJohn Marino /* 4 */ VI_LIST_OR_EOF, /* ^D */
38332fe07f8SJohn Marino /* 5 */ ED_MOVE_TO_END, /* ^E */
38432fe07f8SJohn Marino /* 6 */ ED_NEXT_CHAR, /* ^F */
38532fe07f8SJohn Marino /* 7 */ ED_UNASSIGNED, /* ^G */
38632fe07f8SJohn Marino /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */
38732fe07f8SJohn Marino /* 9 */ ED_UNASSIGNED, /* ^I */ /* Tab Key */
38832fe07f8SJohn Marino /* 10 */ ED_NEWLINE, /* ^J */
38932fe07f8SJohn Marino /* 11 */ ED_KILL_LINE, /* ^K */
39032fe07f8SJohn Marino /* 12 */ ED_CLEAR_SCREEN, /* ^L */
39132fe07f8SJohn Marino /* 13 */ ED_NEWLINE, /* ^M */
39232fe07f8SJohn Marino /* 14 */ ED_NEXT_HISTORY, /* ^N */
39312db70c8Szrj /* 15 */ ED_IGNORE, /* ^O */
39432fe07f8SJohn Marino /* 16 */ ED_PREV_HISTORY, /* ^P */
39512db70c8Szrj /* 17 */ ED_IGNORE, /* ^Q */
39632fe07f8SJohn Marino /* 18 */ ED_REDISPLAY, /* ^R */
39712db70c8Szrj /* 19 */ ED_IGNORE, /* ^S */
39832fe07f8SJohn Marino /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */
39932fe07f8SJohn Marino /* 21 */ VI_KILL_LINE_PREV, /* ^U */
40032fe07f8SJohn Marino /* 22 */ ED_QUOTED_INSERT, /* ^V */
40132fe07f8SJohn Marino /* 23 */ ED_DELETE_PREV_WORD, /* ^W */
40232fe07f8SJohn Marino /* 24 */ ED_UNASSIGNED, /* ^X */
40312db70c8Szrj /* 25 */ ED_IGNORE, /* ^Y */
40412db70c8Szrj /* 26 */ ED_IGNORE, /* ^Z */
40532fe07f8SJohn Marino /* 27 */ VI_COMMAND_MODE, /* ^[ */
40612db70c8Szrj /* 28 */ ED_IGNORE, /* ^\ */
40732fe07f8SJohn Marino /* 29 */ ED_UNASSIGNED, /* ^] */
40832fe07f8SJohn Marino /* 30 */ ED_UNASSIGNED, /* ^^ */
40932fe07f8SJohn Marino /* 31 */ ED_UNASSIGNED, /* ^_ */
41032fe07f8SJohn Marino #endif /* KSHVI */
41132fe07f8SJohn Marino /* 32 */ ED_INSERT, /* SPACE */
41232fe07f8SJohn Marino /* 33 */ ED_INSERT, /* ! */
41332fe07f8SJohn Marino /* 34 */ ED_INSERT, /* " */
41432fe07f8SJohn Marino /* 35 */ ED_INSERT, /* # */
41532fe07f8SJohn Marino /* 36 */ ED_INSERT, /* $ */
41632fe07f8SJohn Marino /* 37 */ ED_INSERT, /* % */
41732fe07f8SJohn Marino /* 38 */ ED_INSERT, /* & */
41832fe07f8SJohn Marino /* 39 */ ED_INSERT, /* ' */
41932fe07f8SJohn Marino /* 40 */ ED_INSERT, /* ( */
42032fe07f8SJohn Marino /* 41 */ ED_INSERT, /* ) */
42132fe07f8SJohn Marino /* 42 */ ED_INSERT, /* * */
42232fe07f8SJohn Marino /* 43 */ ED_INSERT, /* + */
42332fe07f8SJohn Marino /* 44 */ ED_INSERT, /* , */
42432fe07f8SJohn Marino /* 45 */ ED_INSERT, /* - */
42532fe07f8SJohn Marino /* 46 */ ED_INSERT, /* . */
42632fe07f8SJohn Marino /* 47 */ ED_INSERT, /* / */
42732fe07f8SJohn Marino /* 48 */ ED_INSERT, /* 0 */
42832fe07f8SJohn Marino /* 49 */ ED_INSERT, /* 1 */
42932fe07f8SJohn Marino /* 50 */ ED_INSERT, /* 2 */
43032fe07f8SJohn Marino /* 51 */ ED_INSERT, /* 3 */
43132fe07f8SJohn Marino /* 52 */ ED_INSERT, /* 4 */
43232fe07f8SJohn Marino /* 53 */ ED_INSERT, /* 5 */
43332fe07f8SJohn Marino /* 54 */ ED_INSERT, /* 6 */
43432fe07f8SJohn Marino /* 55 */ ED_INSERT, /* 7 */
43532fe07f8SJohn Marino /* 56 */ ED_INSERT, /* 8 */
43632fe07f8SJohn Marino /* 57 */ ED_INSERT, /* 9 */
43732fe07f8SJohn Marino /* 58 */ ED_INSERT, /* : */
43832fe07f8SJohn Marino /* 59 */ ED_INSERT, /* ; */
43932fe07f8SJohn Marino /* 60 */ ED_INSERT, /* < */
44032fe07f8SJohn Marino /* 61 */ ED_INSERT, /* = */
44132fe07f8SJohn Marino /* 62 */ ED_INSERT, /* > */
44232fe07f8SJohn Marino /* 63 */ ED_INSERT, /* ? */
44332fe07f8SJohn Marino /* 64 */ ED_INSERT, /* @ */
44432fe07f8SJohn Marino /* 65 */ ED_INSERT, /* A */
44532fe07f8SJohn Marino /* 66 */ ED_INSERT, /* B */
44632fe07f8SJohn Marino /* 67 */ ED_INSERT, /* C */
44732fe07f8SJohn Marino /* 68 */ ED_INSERT, /* D */
44832fe07f8SJohn Marino /* 69 */ ED_INSERT, /* E */
44932fe07f8SJohn Marino /* 70 */ ED_INSERT, /* F */
45032fe07f8SJohn Marino /* 71 */ ED_INSERT, /* G */
45132fe07f8SJohn Marino /* 72 */ ED_INSERT, /* H */
45232fe07f8SJohn Marino /* 73 */ ED_INSERT, /* I */
45332fe07f8SJohn Marino /* 74 */ ED_INSERT, /* J */
45432fe07f8SJohn Marino /* 75 */ ED_INSERT, /* K */
45532fe07f8SJohn Marino /* 76 */ ED_INSERT, /* L */
45632fe07f8SJohn Marino /* 77 */ ED_INSERT, /* M */
45732fe07f8SJohn Marino /* 78 */ ED_INSERT, /* N */
45832fe07f8SJohn Marino /* 79 */ ED_INSERT, /* O */
45932fe07f8SJohn Marino /* 80 */ ED_INSERT, /* P */
46032fe07f8SJohn Marino /* 81 */ ED_INSERT, /* Q */
46132fe07f8SJohn Marino /* 82 */ ED_INSERT, /* R */
46232fe07f8SJohn Marino /* 83 */ ED_INSERT, /* S */
46332fe07f8SJohn Marino /* 84 */ ED_INSERT, /* T */
46432fe07f8SJohn Marino /* 85 */ ED_INSERT, /* U */
46532fe07f8SJohn Marino /* 86 */ ED_INSERT, /* V */
46632fe07f8SJohn Marino /* 87 */ ED_INSERT, /* W */
46732fe07f8SJohn Marino /* 88 */ ED_INSERT, /* X */
46832fe07f8SJohn Marino /* 89 */ ED_INSERT, /* Y */
46932fe07f8SJohn Marino /* 90 */ ED_INSERT, /* Z */
47032fe07f8SJohn Marino /* 91 */ ED_INSERT, /* [ */
47132fe07f8SJohn Marino /* 92 */ ED_INSERT, /* \ */
47232fe07f8SJohn Marino /* 93 */ ED_INSERT, /* ] */
47332fe07f8SJohn Marino /* 94 */ ED_INSERT, /* ^ */
47432fe07f8SJohn Marino /* 95 */ ED_INSERT, /* _ */
47532fe07f8SJohn Marino /* 96 */ ED_INSERT, /* ` */
47632fe07f8SJohn Marino /* 97 */ ED_INSERT, /* a */
47732fe07f8SJohn Marino /* 98 */ ED_INSERT, /* b */
47832fe07f8SJohn Marino /* 99 */ ED_INSERT, /* c */
47932fe07f8SJohn Marino /* 100 */ ED_INSERT, /* d */
48032fe07f8SJohn Marino /* 101 */ ED_INSERT, /* e */
48132fe07f8SJohn Marino /* 102 */ ED_INSERT, /* f */
48232fe07f8SJohn Marino /* 103 */ ED_INSERT, /* g */
48332fe07f8SJohn Marino /* 104 */ ED_INSERT, /* h */
48432fe07f8SJohn Marino /* 105 */ ED_INSERT, /* i */
48532fe07f8SJohn Marino /* 106 */ ED_INSERT, /* j */
48632fe07f8SJohn Marino /* 107 */ ED_INSERT, /* k */
48732fe07f8SJohn Marino /* 108 */ ED_INSERT, /* l */
48832fe07f8SJohn Marino /* 109 */ ED_INSERT, /* m */
48932fe07f8SJohn Marino /* 110 */ ED_INSERT, /* n */
49032fe07f8SJohn Marino /* 111 */ ED_INSERT, /* o */
49132fe07f8SJohn Marino /* 112 */ ED_INSERT, /* p */
49232fe07f8SJohn Marino /* 113 */ ED_INSERT, /* q */
49332fe07f8SJohn Marino /* 114 */ ED_INSERT, /* r */
49432fe07f8SJohn Marino /* 115 */ ED_INSERT, /* s */
49532fe07f8SJohn Marino /* 116 */ ED_INSERT, /* t */
49632fe07f8SJohn Marino /* 117 */ ED_INSERT, /* u */
49732fe07f8SJohn Marino /* 118 */ ED_INSERT, /* v */
49832fe07f8SJohn Marino /* 119 */ ED_INSERT, /* w */
49932fe07f8SJohn Marino /* 120 */ ED_INSERT, /* x */
50032fe07f8SJohn Marino /* 121 */ ED_INSERT, /* y */
50132fe07f8SJohn Marino /* 122 */ ED_INSERT, /* z */
50232fe07f8SJohn Marino /* 123 */ ED_INSERT, /* { */
50332fe07f8SJohn Marino /* 124 */ ED_INSERT, /* | */
50432fe07f8SJohn Marino /* 125 */ ED_INSERT, /* } */
50532fe07f8SJohn Marino /* 126 */ ED_INSERT, /* ~ */
50632fe07f8SJohn Marino /* 127 */ VI_DELETE_PREV_CHAR, /* ^? */
50732fe07f8SJohn Marino /* 128 */ ED_INSERT, /* M-^@ */
50832fe07f8SJohn Marino /* 129 */ ED_INSERT, /* M-^A */
50932fe07f8SJohn Marino /* 130 */ ED_INSERT, /* M-^B */
51032fe07f8SJohn Marino /* 131 */ ED_INSERT, /* M-^C */
51132fe07f8SJohn Marino /* 132 */ ED_INSERT, /* M-^D */
51232fe07f8SJohn Marino /* 133 */ ED_INSERT, /* M-^E */
51332fe07f8SJohn Marino /* 134 */ ED_INSERT, /* M-^F */
51432fe07f8SJohn Marino /* 135 */ ED_INSERT, /* M-^G */
51532fe07f8SJohn Marino /* 136 */ ED_INSERT, /* M-^H */
51632fe07f8SJohn Marino /* 137 */ ED_INSERT, /* M-^I */
51732fe07f8SJohn Marino /* 138 */ ED_INSERT, /* M-^J */
51832fe07f8SJohn Marino /* 139 */ ED_INSERT, /* M-^K */
51932fe07f8SJohn Marino /* 140 */ ED_INSERT, /* M-^L */
52032fe07f8SJohn Marino /* 141 */ ED_INSERT, /* M-^M */
52132fe07f8SJohn Marino /* 142 */ ED_INSERT, /* M-^N */
52232fe07f8SJohn Marino /* 143 */ ED_INSERT, /* M-^O */
52332fe07f8SJohn Marino /* 144 */ ED_INSERT, /* M-^P */
52432fe07f8SJohn Marino /* 145 */ ED_INSERT, /* M-^Q */
52532fe07f8SJohn Marino /* 146 */ ED_INSERT, /* M-^R */
52632fe07f8SJohn Marino /* 147 */ ED_INSERT, /* M-^S */
52732fe07f8SJohn Marino /* 148 */ ED_INSERT, /* M-^T */
52832fe07f8SJohn Marino /* 149 */ ED_INSERT, /* M-^U */
52932fe07f8SJohn Marino /* 150 */ ED_INSERT, /* M-^V */
53032fe07f8SJohn Marino /* 151 */ ED_INSERT, /* M-^W */
53132fe07f8SJohn Marino /* 152 */ ED_INSERT, /* M-^X */
53232fe07f8SJohn Marino /* 153 */ ED_INSERT, /* M-^Y */
53332fe07f8SJohn Marino /* 154 */ ED_INSERT, /* M-^Z */
53432fe07f8SJohn Marino /* 155 */ ED_INSERT, /* M-^[ */
53532fe07f8SJohn Marino /* 156 */ ED_INSERT, /* M-^\ */
53632fe07f8SJohn Marino /* 157 */ ED_INSERT, /* M-^] */
53732fe07f8SJohn Marino /* 158 */ ED_INSERT, /* M-^^ */
53832fe07f8SJohn Marino /* 159 */ ED_INSERT, /* M-^_ */
53932fe07f8SJohn Marino /* 160 */ ED_INSERT, /* M-SPACE */
54032fe07f8SJohn Marino /* 161 */ ED_INSERT, /* M-! */
54132fe07f8SJohn Marino /* 162 */ ED_INSERT, /* M-" */
54232fe07f8SJohn Marino /* 163 */ ED_INSERT, /* M-# */
54332fe07f8SJohn Marino /* 164 */ ED_INSERT, /* M-$ */
54432fe07f8SJohn Marino /* 165 */ ED_INSERT, /* M-% */
54532fe07f8SJohn Marino /* 166 */ ED_INSERT, /* M-& */
54632fe07f8SJohn Marino /* 167 */ ED_INSERT, /* M-' */
54732fe07f8SJohn Marino /* 168 */ ED_INSERT, /* M-( */
54832fe07f8SJohn Marino /* 169 */ ED_INSERT, /* M-) */
54932fe07f8SJohn Marino /* 170 */ ED_INSERT, /* M-* */
55032fe07f8SJohn Marino /* 171 */ ED_INSERT, /* M-+ */
55132fe07f8SJohn Marino /* 172 */ ED_INSERT, /* M-, */
55232fe07f8SJohn Marino /* 173 */ ED_INSERT, /* M-- */
55332fe07f8SJohn Marino /* 174 */ ED_INSERT, /* M-. */
55432fe07f8SJohn Marino /* 175 */ ED_INSERT, /* M-/ */
55532fe07f8SJohn Marino /* 176 */ ED_INSERT, /* M-0 */
55632fe07f8SJohn Marino /* 177 */ ED_INSERT, /* M-1 */
55732fe07f8SJohn Marino /* 178 */ ED_INSERT, /* M-2 */
55832fe07f8SJohn Marino /* 179 */ ED_INSERT, /* M-3 */
55932fe07f8SJohn Marino /* 180 */ ED_INSERT, /* M-4 */
56032fe07f8SJohn Marino /* 181 */ ED_INSERT, /* M-5 */
56132fe07f8SJohn Marino /* 182 */ ED_INSERT, /* M-6 */
56232fe07f8SJohn Marino /* 183 */ ED_INSERT, /* M-7 */
56332fe07f8SJohn Marino /* 184 */ ED_INSERT, /* M-8 */
56432fe07f8SJohn Marino /* 185 */ ED_INSERT, /* M-9 */
56532fe07f8SJohn Marino /* 186 */ ED_INSERT, /* M-: */
56632fe07f8SJohn Marino /* 187 */ ED_INSERT, /* M-; */
56732fe07f8SJohn Marino /* 188 */ ED_INSERT, /* M-< */
56832fe07f8SJohn Marino /* 189 */ ED_INSERT, /* M-= */
56932fe07f8SJohn Marino /* 190 */ ED_INSERT, /* M-> */
57032fe07f8SJohn Marino /* 191 */ ED_INSERT, /* M-? */
57132fe07f8SJohn Marino /* 192 */ ED_INSERT, /* M-@ */
57232fe07f8SJohn Marino /* 193 */ ED_INSERT, /* M-A */
57332fe07f8SJohn Marino /* 194 */ ED_INSERT, /* M-B */
57432fe07f8SJohn Marino /* 195 */ ED_INSERT, /* M-C */
57532fe07f8SJohn Marino /* 196 */ ED_INSERT, /* M-D */
57632fe07f8SJohn Marino /* 197 */ ED_INSERT, /* M-E */
57732fe07f8SJohn Marino /* 198 */ ED_INSERT, /* M-F */
57832fe07f8SJohn Marino /* 199 */ ED_INSERT, /* M-G */
57932fe07f8SJohn Marino /* 200 */ ED_INSERT, /* M-H */
58032fe07f8SJohn Marino /* 201 */ ED_INSERT, /* M-I */
58132fe07f8SJohn Marino /* 202 */ ED_INSERT, /* M-J */
58232fe07f8SJohn Marino /* 203 */ ED_INSERT, /* M-K */
58332fe07f8SJohn Marino /* 204 */ ED_INSERT, /* M-L */
58432fe07f8SJohn Marino /* 205 */ ED_INSERT, /* M-M */
58532fe07f8SJohn Marino /* 206 */ ED_INSERT, /* M-N */
58632fe07f8SJohn Marino /* 207 */ ED_INSERT, /* M-O */
58732fe07f8SJohn Marino /* 208 */ ED_INSERT, /* M-P */
58832fe07f8SJohn Marino /* 209 */ ED_INSERT, /* M-Q */
58932fe07f8SJohn Marino /* 210 */ ED_INSERT, /* M-R */
59032fe07f8SJohn Marino /* 211 */ ED_INSERT, /* M-S */
59132fe07f8SJohn Marino /* 212 */ ED_INSERT, /* M-T */
59232fe07f8SJohn Marino /* 213 */ ED_INSERT, /* M-U */
59332fe07f8SJohn Marino /* 214 */ ED_INSERT, /* M-V */
59432fe07f8SJohn Marino /* 215 */ ED_INSERT, /* M-W */
59532fe07f8SJohn Marino /* 216 */ ED_INSERT, /* M-X */
59632fe07f8SJohn Marino /* 217 */ ED_INSERT, /* M-Y */
59732fe07f8SJohn Marino /* 218 */ ED_INSERT, /* M-Z */
59832fe07f8SJohn Marino /* 219 */ ED_INSERT, /* M-[ */
59932fe07f8SJohn Marino /* 220 */ ED_INSERT, /* M-\ */
60032fe07f8SJohn Marino /* 221 */ ED_INSERT, /* M-] */
60132fe07f8SJohn Marino /* 222 */ ED_INSERT, /* M-^ */
60232fe07f8SJohn Marino /* 223 */ ED_INSERT, /* M-_ */
60332fe07f8SJohn Marino /* 224 */ ED_INSERT, /* M-` */
60432fe07f8SJohn Marino /* 225 */ ED_INSERT, /* M-a */
60532fe07f8SJohn Marino /* 226 */ ED_INSERT, /* M-b */
60632fe07f8SJohn Marino /* 227 */ ED_INSERT, /* M-c */
60732fe07f8SJohn Marino /* 228 */ ED_INSERT, /* M-d */
60832fe07f8SJohn Marino /* 229 */ ED_INSERT, /* M-e */
60932fe07f8SJohn Marino /* 230 */ ED_INSERT, /* M-f */
61032fe07f8SJohn Marino /* 231 */ ED_INSERT, /* M-g */
61132fe07f8SJohn Marino /* 232 */ ED_INSERT, /* M-h */
61232fe07f8SJohn Marino /* 233 */ ED_INSERT, /* M-i */
61332fe07f8SJohn Marino /* 234 */ ED_INSERT, /* M-j */
61432fe07f8SJohn Marino /* 235 */ ED_INSERT, /* M-k */
61532fe07f8SJohn Marino /* 236 */ ED_INSERT, /* M-l */
61632fe07f8SJohn Marino /* 237 */ ED_INSERT, /* M-m */
61732fe07f8SJohn Marino /* 238 */ ED_INSERT, /* M-n */
61832fe07f8SJohn Marino /* 239 */ ED_INSERT, /* M-o */
61932fe07f8SJohn Marino /* 240 */ ED_INSERT, /* M-p */
62032fe07f8SJohn Marino /* 241 */ ED_INSERT, /* M-q */
62132fe07f8SJohn Marino /* 242 */ ED_INSERT, /* M-r */
62232fe07f8SJohn Marino /* 243 */ ED_INSERT, /* M-s */
62332fe07f8SJohn Marino /* 244 */ ED_INSERT, /* M-t */
62432fe07f8SJohn Marino /* 245 */ ED_INSERT, /* M-u */
62532fe07f8SJohn Marino /* 246 */ ED_INSERT, /* M-v */
62632fe07f8SJohn Marino /* 247 */ ED_INSERT, /* M-w */
62732fe07f8SJohn Marino /* 248 */ ED_INSERT, /* M-x */
62832fe07f8SJohn Marino /* 249 */ ED_INSERT, /* M-y */
62932fe07f8SJohn Marino /* 250 */ ED_INSERT, /* M-z */
63032fe07f8SJohn Marino /* 251 */ ED_INSERT, /* M-{ */
63132fe07f8SJohn Marino /* 252 */ ED_INSERT, /* M-| */
63232fe07f8SJohn Marino /* 253 */ ED_INSERT, /* M-} */
63332fe07f8SJohn Marino /* 254 */ ED_INSERT, /* M-~ */
63432fe07f8SJohn Marino /* 255 */ ED_INSERT /* M-^? */
63532fe07f8SJohn Marino };
63632fe07f8SJohn Marino
63712db70c8Szrj static const el_action_t el_map_vi_command[] = {
63832fe07f8SJohn Marino /* 0 */ ED_UNASSIGNED, /* ^@ */
63932fe07f8SJohn Marino /* 1 */ ED_MOVE_TO_BEG, /* ^A */
64032fe07f8SJohn Marino /* 2 */ ED_UNASSIGNED, /* ^B */
64112db70c8Szrj /* 3 */ ED_IGNORE, /* ^C */
64232fe07f8SJohn Marino /* 4 */ ED_UNASSIGNED, /* ^D */
64332fe07f8SJohn Marino /* 5 */ ED_MOVE_TO_END, /* ^E */
64432fe07f8SJohn Marino /* 6 */ ED_UNASSIGNED, /* ^F */
64532fe07f8SJohn Marino /* 7 */ ED_UNASSIGNED, /* ^G */
64632fe07f8SJohn Marino /* 8 */ ED_DELETE_PREV_CHAR, /* ^H */
64732fe07f8SJohn Marino /* 9 */ ED_UNASSIGNED, /* ^I */
64832fe07f8SJohn Marino /* 10 */ ED_NEWLINE, /* ^J */
64932fe07f8SJohn Marino /* 11 */ ED_KILL_LINE, /* ^K */
65032fe07f8SJohn Marino /* 12 */ ED_CLEAR_SCREEN, /* ^L */
65132fe07f8SJohn Marino /* 13 */ ED_NEWLINE, /* ^M */
65232fe07f8SJohn Marino /* 14 */ ED_NEXT_HISTORY, /* ^N */
65312db70c8Szrj /* 15 */ ED_IGNORE, /* ^O */
65432fe07f8SJohn Marino /* 16 */ ED_PREV_HISTORY, /* ^P */
65512db70c8Szrj /* 17 */ ED_IGNORE, /* ^Q */
65632fe07f8SJohn Marino /* 18 */ ED_REDISPLAY, /* ^R */
65712db70c8Szrj /* 19 */ ED_IGNORE, /* ^S */
65832fe07f8SJohn Marino /* 20 */ ED_UNASSIGNED, /* ^T */
65932fe07f8SJohn Marino /* 21 */ VI_KILL_LINE_PREV, /* ^U */
66032fe07f8SJohn Marino /* 22 */ ED_UNASSIGNED, /* ^V */
66132fe07f8SJohn Marino /* 23 */ ED_DELETE_PREV_WORD, /* ^W */
66232fe07f8SJohn Marino /* 24 */ ED_UNASSIGNED, /* ^X */
66332fe07f8SJohn Marino /* 25 */ ED_UNASSIGNED, /* ^Y */
66432fe07f8SJohn Marino /* 26 */ ED_UNASSIGNED, /* ^Z */
66532fe07f8SJohn Marino /* 27 */ EM_META_NEXT, /* ^[ */
66612db70c8Szrj /* 28 */ ED_IGNORE, /* ^\ */
66732fe07f8SJohn Marino /* 29 */ ED_UNASSIGNED, /* ^] */
66832fe07f8SJohn Marino /* 30 */ ED_UNASSIGNED, /* ^^ */
66932fe07f8SJohn Marino /* 31 */ ED_UNASSIGNED, /* ^_ */
67032fe07f8SJohn Marino /* 32 */ ED_NEXT_CHAR, /* SPACE */
67132fe07f8SJohn Marino /* 33 */ ED_UNASSIGNED, /* ! */
67232fe07f8SJohn Marino /* 34 */ ED_UNASSIGNED, /* " */
67332fe07f8SJohn Marino /* 35 */ VI_COMMENT_OUT, /* # */
67432fe07f8SJohn Marino /* 36 */ ED_MOVE_TO_END, /* $ */
67532fe07f8SJohn Marino /* 37 */ VI_MATCH, /* % */
67632fe07f8SJohn Marino /* 38 */ ED_UNASSIGNED, /* & */
67732fe07f8SJohn Marino /* 39 */ ED_UNASSIGNED, /* ' */
67832fe07f8SJohn Marino /* 40 */ ED_UNASSIGNED, /* ( */
67932fe07f8SJohn Marino /* 41 */ ED_UNASSIGNED, /* ) */
68032fe07f8SJohn Marino /* 42 */ ED_UNASSIGNED, /* * */
68132fe07f8SJohn Marino /* 43 */ ED_NEXT_HISTORY, /* + */
68232fe07f8SJohn Marino /* 44 */ VI_REPEAT_PREV_CHAR, /* , */
68332fe07f8SJohn Marino /* 45 */ ED_PREV_HISTORY, /* - */
68432fe07f8SJohn Marino /* 46 */ VI_REDO, /* . */
68532fe07f8SJohn Marino /* 47 */ VI_SEARCH_PREV, /* / */
68632fe07f8SJohn Marino /* 48 */ VI_ZERO, /* 0 */
68732fe07f8SJohn Marino /* 49 */ ED_ARGUMENT_DIGIT, /* 1 */
68832fe07f8SJohn Marino /* 50 */ ED_ARGUMENT_DIGIT, /* 2 */
68932fe07f8SJohn Marino /* 51 */ ED_ARGUMENT_DIGIT, /* 3 */
69032fe07f8SJohn Marino /* 52 */ ED_ARGUMENT_DIGIT, /* 4 */
69132fe07f8SJohn Marino /* 53 */ ED_ARGUMENT_DIGIT, /* 5 */
69232fe07f8SJohn Marino /* 54 */ ED_ARGUMENT_DIGIT, /* 6 */
69332fe07f8SJohn Marino /* 55 */ ED_ARGUMENT_DIGIT, /* 7 */
69432fe07f8SJohn Marino /* 56 */ ED_ARGUMENT_DIGIT, /* 8 */
69532fe07f8SJohn Marino /* 57 */ ED_ARGUMENT_DIGIT, /* 9 */
69632fe07f8SJohn Marino /* 58 */ ED_COMMAND, /* : */
69732fe07f8SJohn Marino /* 59 */ VI_REPEAT_NEXT_CHAR, /* ; */
69832fe07f8SJohn Marino /* 60 */ ED_UNASSIGNED, /* < */
69932fe07f8SJohn Marino /* 61 */ ED_UNASSIGNED, /* = */
70032fe07f8SJohn Marino /* 62 */ ED_UNASSIGNED, /* > */
70132fe07f8SJohn Marino /* 63 */ VI_SEARCH_NEXT, /* ? */
70232fe07f8SJohn Marino /* 64 */ VI_ALIAS, /* @ */
70332fe07f8SJohn Marino /* 65 */ VI_ADD_AT_EOL, /* A */
70432fe07f8SJohn Marino /* 66 */ VI_PREV_BIG_WORD, /* B */
70532fe07f8SJohn Marino /* 67 */ VI_CHANGE_TO_EOL, /* C */
70632fe07f8SJohn Marino /* 68 */ ED_KILL_LINE, /* D */
70732fe07f8SJohn Marino /* 69 */ VI_END_BIG_WORD, /* E */
70832fe07f8SJohn Marino /* 70 */ VI_PREV_CHAR, /* F */
70932fe07f8SJohn Marino /* 71 */ VI_TO_HISTORY_LINE, /* G */
71032fe07f8SJohn Marino /* 72 */ ED_UNASSIGNED, /* H */
71132fe07f8SJohn Marino /* 73 */ VI_INSERT_AT_BOL, /* I */
71232fe07f8SJohn Marino /* 74 */ ED_SEARCH_NEXT_HISTORY, /* J */
71332fe07f8SJohn Marino /* 75 */ ED_SEARCH_PREV_HISTORY, /* K */
71432fe07f8SJohn Marino /* 76 */ ED_UNASSIGNED, /* L */
71532fe07f8SJohn Marino /* 77 */ ED_UNASSIGNED, /* M */
71632fe07f8SJohn Marino /* 78 */ VI_REPEAT_SEARCH_PREV, /* N */
71732fe07f8SJohn Marino /* 79 */ ED_SEQUENCE_LEAD_IN, /* O */
71832fe07f8SJohn Marino /* 80 */ VI_PASTE_PREV, /* P */
71932fe07f8SJohn Marino /* 81 */ ED_UNASSIGNED, /* Q */
72032fe07f8SJohn Marino /* 82 */ VI_REPLACE_MODE, /* R */
72132fe07f8SJohn Marino /* 83 */ VI_SUBSTITUTE_LINE, /* S */
72232fe07f8SJohn Marino /* 84 */ VI_TO_PREV_CHAR, /* T */
72332fe07f8SJohn Marino /* 85 */ VI_UNDO_LINE, /* U */
72432fe07f8SJohn Marino /* 86 */ ED_UNASSIGNED, /* V */
72532fe07f8SJohn Marino /* 87 */ VI_NEXT_BIG_WORD, /* W */
72632fe07f8SJohn Marino /* 88 */ ED_DELETE_PREV_CHAR, /* X */
72732fe07f8SJohn Marino /* 89 */ VI_YANK_END, /* Y */
72832fe07f8SJohn Marino /* 90 */ ED_UNASSIGNED, /* Z */
72932fe07f8SJohn Marino /* 91 */ ED_SEQUENCE_LEAD_IN, /* [ */
73032fe07f8SJohn Marino /* 92 */ ED_UNASSIGNED, /* \ */
73132fe07f8SJohn Marino /* 93 */ ED_UNASSIGNED, /* ] */
73232fe07f8SJohn Marino /* 94 */ ED_MOVE_TO_BEG, /* ^ */
73332fe07f8SJohn Marino /* 95 */ VI_HISTORY_WORD, /* _ */
73432fe07f8SJohn Marino /* 96 */ ED_UNASSIGNED, /* ` */
73532fe07f8SJohn Marino /* 97 */ VI_ADD, /* a */
73632fe07f8SJohn Marino /* 98 */ VI_PREV_WORD, /* b */
73732fe07f8SJohn Marino /* 99 */ VI_CHANGE_META, /* c */
73832fe07f8SJohn Marino /* 100 */ VI_DELETE_META, /* d */
73932fe07f8SJohn Marino /* 101 */ VI_END_WORD, /* e */
74032fe07f8SJohn Marino /* 102 */ VI_NEXT_CHAR, /* f */
74132fe07f8SJohn Marino /* 103 */ ED_UNASSIGNED, /* g */
74232fe07f8SJohn Marino /* 104 */ ED_PREV_CHAR, /* h */
74332fe07f8SJohn Marino /* 105 */ VI_INSERT, /* i */
74432fe07f8SJohn Marino /* 106 */ ED_NEXT_HISTORY, /* j */
74532fe07f8SJohn Marino /* 107 */ ED_PREV_HISTORY, /* k */
74632fe07f8SJohn Marino /* 108 */ ED_NEXT_CHAR, /* l */
74732fe07f8SJohn Marino /* 109 */ ED_UNASSIGNED, /* m */
74832fe07f8SJohn Marino /* 110 */ VI_REPEAT_SEARCH_NEXT, /* n */
74932fe07f8SJohn Marino /* 111 */ ED_UNASSIGNED, /* o */
75032fe07f8SJohn Marino /* 112 */ VI_PASTE_NEXT, /* p */
75132fe07f8SJohn Marino /* 113 */ ED_UNASSIGNED, /* q */
75232fe07f8SJohn Marino /* 114 */ VI_REPLACE_CHAR, /* r */
75332fe07f8SJohn Marino /* 115 */ VI_SUBSTITUTE_CHAR, /* s */
75432fe07f8SJohn Marino /* 116 */ VI_TO_NEXT_CHAR, /* t */
75532fe07f8SJohn Marino /* 117 */ VI_UNDO, /* u */
75632fe07f8SJohn Marino /* 118 */ VI_HISTEDIT, /* v */
75732fe07f8SJohn Marino /* 119 */ VI_NEXT_WORD, /* w */
75832fe07f8SJohn Marino /* 120 */ ED_DELETE_NEXT_CHAR, /* x */
75932fe07f8SJohn Marino /* 121 */ VI_YANK, /* y */
76032fe07f8SJohn Marino /* 122 */ ED_UNASSIGNED, /* z */
76132fe07f8SJohn Marino /* 123 */ ED_UNASSIGNED, /* { */
76232fe07f8SJohn Marino /* 124 */ VI_TO_COLUMN, /* | */
76332fe07f8SJohn Marino /* 125 */ ED_UNASSIGNED, /* } */
76432fe07f8SJohn Marino /* 126 */ VI_CHANGE_CASE, /* ~ */
76532fe07f8SJohn Marino /* 127 */ ED_DELETE_PREV_CHAR, /* ^? */
76632fe07f8SJohn Marino /* 128 */ ED_UNASSIGNED, /* M-^@ */
76732fe07f8SJohn Marino /* 129 */ ED_UNASSIGNED, /* M-^A */
76832fe07f8SJohn Marino /* 130 */ ED_UNASSIGNED, /* M-^B */
76932fe07f8SJohn Marino /* 131 */ ED_UNASSIGNED, /* M-^C */
77032fe07f8SJohn Marino /* 132 */ ED_UNASSIGNED, /* M-^D */
77132fe07f8SJohn Marino /* 133 */ ED_UNASSIGNED, /* M-^E */
77232fe07f8SJohn Marino /* 134 */ ED_UNASSIGNED, /* M-^F */
77332fe07f8SJohn Marino /* 135 */ ED_UNASSIGNED, /* M-^G */
77432fe07f8SJohn Marino /* 136 */ ED_UNASSIGNED, /* M-^H */
77532fe07f8SJohn Marino /* 137 */ ED_UNASSIGNED, /* M-^I */
77632fe07f8SJohn Marino /* 138 */ ED_UNASSIGNED, /* M-^J */
77732fe07f8SJohn Marino /* 139 */ ED_UNASSIGNED, /* M-^K */
77832fe07f8SJohn Marino /* 140 */ ED_UNASSIGNED, /* M-^L */
77932fe07f8SJohn Marino /* 141 */ ED_UNASSIGNED, /* M-^M */
78032fe07f8SJohn Marino /* 142 */ ED_UNASSIGNED, /* M-^N */
78132fe07f8SJohn Marino /* 143 */ ED_UNASSIGNED, /* M-^O */
78232fe07f8SJohn Marino /* 144 */ ED_UNASSIGNED, /* M-^P */
78332fe07f8SJohn Marino /* 145 */ ED_UNASSIGNED, /* M-^Q */
78432fe07f8SJohn Marino /* 146 */ ED_UNASSIGNED, /* M-^R */
78532fe07f8SJohn Marino /* 147 */ ED_UNASSIGNED, /* M-^S */
78632fe07f8SJohn Marino /* 148 */ ED_UNASSIGNED, /* M-^T */
78732fe07f8SJohn Marino /* 149 */ ED_UNASSIGNED, /* M-^U */
78832fe07f8SJohn Marino /* 150 */ ED_UNASSIGNED, /* M-^V */
78932fe07f8SJohn Marino /* 151 */ ED_UNASSIGNED, /* M-^W */
79032fe07f8SJohn Marino /* 152 */ ED_UNASSIGNED, /* M-^X */
79132fe07f8SJohn Marino /* 153 */ ED_UNASSIGNED, /* M-^Y */
79232fe07f8SJohn Marino /* 154 */ ED_UNASSIGNED, /* M-^Z */
79332fe07f8SJohn Marino /* 155 */ ED_UNASSIGNED, /* M-^[ */
79432fe07f8SJohn Marino /* 156 */ ED_UNASSIGNED, /* M-^\ */
79532fe07f8SJohn Marino /* 157 */ ED_UNASSIGNED, /* M-^] */
79632fe07f8SJohn Marino /* 158 */ ED_UNASSIGNED, /* M-^^ */
79732fe07f8SJohn Marino /* 159 */ ED_UNASSIGNED, /* M-^_ */
79832fe07f8SJohn Marino /* 160 */ ED_UNASSIGNED, /* M-SPACE */
79932fe07f8SJohn Marino /* 161 */ ED_UNASSIGNED, /* M-! */
80032fe07f8SJohn Marino /* 162 */ ED_UNASSIGNED, /* M-" */
80132fe07f8SJohn Marino /* 163 */ ED_UNASSIGNED, /* M-# */
80232fe07f8SJohn Marino /* 164 */ ED_UNASSIGNED, /* M-$ */
80332fe07f8SJohn Marino /* 165 */ ED_UNASSIGNED, /* M-% */
80432fe07f8SJohn Marino /* 166 */ ED_UNASSIGNED, /* M-& */
80532fe07f8SJohn Marino /* 167 */ ED_UNASSIGNED, /* M-' */
80632fe07f8SJohn Marino /* 168 */ ED_UNASSIGNED, /* M-( */
80732fe07f8SJohn Marino /* 169 */ ED_UNASSIGNED, /* M-) */
80832fe07f8SJohn Marino /* 170 */ ED_UNASSIGNED, /* M-* */
80932fe07f8SJohn Marino /* 171 */ ED_UNASSIGNED, /* M-+ */
81032fe07f8SJohn Marino /* 172 */ ED_UNASSIGNED, /* M-, */
81132fe07f8SJohn Marino /* 173 */ ED_UNASSIGNED, /* M-- */
81232fe07f8SJohn Marino /* 174 */ ED_UNASSIGNED, /* M-. */
81332fe07f8SJohn Marino /* 175 */ ED_UNASSIGNED, /* M-/ */
81432fe07f8SJohn Marino /* 176 */ ED_UNASSIGNED, /* M-0 */
81532fe07f8SJohn Marino /* 177 */ ED_UNASSIGNED, /* M-1 */
81632fe07f8SJohn Marino /* 178 */ ED_UNASSIGNED, /* M-2 */
81732fe07f8SJohn Marino /* 179 */ ED_UNASSIGNED, /* M-3 */
81832fe07f8SJohn Marino /* 180 */ ED_UNASSIGNED, /* M-4 */
81932fe07f8SJohn Marino /* 181 */ ED_UNASSIGNED, /* M-5 */
82032fe07f8SJohn Marino /* 182 */ ED_UNASSIGNED, /* M-6 */
82132fe07f8SJohn Marino /* 183 */ ED_UNASSIGNED, /* M-7 */
82232fe07f8SJohn Marino /* 184 */ ED_UNASSIGNED, /* M-8 */
82332fe07f8SJohn Marino /* 185 */ ED_UNASSIGNED, /* M-9 */
82432fe07f8SJohn Marino /* 186 */ ED_UNASSIGNED, /* M-: */
82532fe07f8SJohn Marino /* 187 */ ED_UNASSIGNED, /* M-; */
82632fe07f8SJohn Marino /* 188 */ ED_UNASSIGNED, /* M-< */
82732fe07f8SJohn Marino /* 189 */ ED_UNASSIGNED, /* M-= */
82832fe07f8SJohn Marino /* 190 */ ED_UNASSIGNED, /* M-> */
82932fe07f8SJohn Marino /* 191 */ ED_UNASSIGNED, /* M-? */
83032fe07f8SJohn Marino /* 192 */ ED_UNASSIGNED, /* M-@ */
83132fe07f8SJohn Marino /* 193 */ ED_UNASSIGNED, /* M-A */
83232fe07f8SJohn Marino /* 194 */ ED_UNASSIGNED, /* M-B */
83332fe07f8SJohn Marino /* 195 */ ED_UNASSIGNED, /* M-C */
83432fe07f8SJohn Marino /* 196 */ ED_UNASSIGNED, /* M-D */
83532fe07f8SJohn Marino /* 197 */ ED_UNASSIGNED, /* M-E */
83632fe07f8SJohn Marino /* 198 */ ED_UNASSIGNED, /* M-F */
83732fe07f8SJohn Marino /* 199 */ ED_UNASSIGNED, /* M-G */
83832fe07f8SJohn Marino /* 200 */ ED_UNASSIGNED, /* M-H */
83932fe07f8SJohn Marino /* 201 */ ED_UNASSIGNED, /* M-I */
84032fe07f8SJohn Marino /* 202 */ ED_UNASSIGNED, /* M-J */
84132fe07f8SJohn Marino /* 203 */ ED_UNASSIGNED, /* M-K */
84232fe07f8SJohn Marino /* 204 */ ED_UNASSIGNED, /* M-L */
84332fe07f8SJohn Marino /* 205 */ ED_UNASSIGNED, /* M-M */
84432fe07f8SJohn Marino /* 206 */ ED_UNASSIGNED, /* M-N */
84532fe07f8SJohn Marino /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */
84632fe07f8SJohn Marino /* 208 */ ED_UNASSIGNED, /* M-P */
84732fe07f8SJohn Marino /* 209 */ ED_UNASSIGNED, /* M-Q */
84832fe07f8SJohn Marino /* 210 */ ED_UNASSIGNED, /* M-R */
84932fe07f8SJohn Marino /* 211 */ ED_UNASSIGNED, /* M-S */
85032fe07f8SJohn Marino /* 212 */ ED_UNASSIGNED, /* M-T */
85132fe07f8SJohn Marino /* 213 */ ED_UNASSIGNED, /* M-U */
85232fe07f8SJohn Marino /* 214 */ ED_UNASSIGNED, /* M-V */
85332fe07f8SJohn Marino /* 215 */ ED_UNASSIGNED, /* M-W */
85432fe07f8SJohn Marino /* 216 */ ED_UNASSIGNED, /* M-X */
85532fe07f8SJohn Marino /* 217 */ ED_UNASSIGNED, /* M-Y */
85632fe07f8SJohn Marino /* 218 */ ED_UNASSIGNED, /* M-Z */
85732fe07f8SJohn Marino /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */
85832fe07f8SJohn Marino /* 220 */ ED_UNASSIGNED, /* M-\ */
85932fe07f8SJohn Marino /* 221 */ ED_UNASSIGNED, /* M-] */
86032fe07f8SJohn Marino /* 222 */ ED_UNASSIGNED, /* M-^ */
86132fe07f8SJohn Marino /* 223 */ ED_UNASSIGNED, /* M-_ */
86232fe07f8SJohn Marino /* 224 */ ED_UNASSIGNED, /* M-` */
86332fe07f8SJohn Marino /* 225 */ ED_UNASSIGNED, /* M-a */
86432fe07f8SJohn Marino /* 226 */ ED_UNASSIGNED, /* M-b */
86532fe07f8SJohn Marino /* 227 */ ED_UNASSIGNED, /* M-c */
86632fe07f8SJohn Marino /* 228 */ ED_UNASSIGNED, /* M-d */
86732fe07f8SJohn Marino /* 229 */ ED_UNASSIGNED, /* M-e */
86832fe07f8SJohn Marino /* 230 */ ED_UNASSIGNED, /* M-f */
86932fe07f8SJohn Marino /* 231 */ ED_UNASSIGNED, /* M-g */
87032fe07f8SJohn Marino /* 232 */ ED_UNASSIGNED, /* M-h */
87132fe07f8SJohn Marino /* 233 */ ED_UNASSIGNED, /* M-i */
87232fe07f8SJohn Marino /* 234 */ ED_UNASSIGNED, /* M-j */
87332fe07f8SJohn Marino /* 235 */ ED_UNASSIGNED, /* M-k */
87432fe07f8SJohn Marino /* 236 */ ED_UNASSIGNED, /* M-l */
87532fe07f8SJohn Marino /* 237 */ ED_UNASSIGNED, /* M-m */
87632fe07f8SJohn Marino /* 238 */ ED_UNASSIGNED, /* M-n */
87732fe07f8SJohn Marino /* 239 */ ED_UNASSIGNED, /* M-o */
87832fe07f8SJohn Marino /* 240 */ ED_UNASSIGNED, /* M-p */
87932fe07f8SJohn Marino /* 241 */ ED_UNASSIGNED, /* M-q */
88032fe07f8SJohn Marino /* 242 */ ED_UNASSIGNED, /* M-r */
88132fe07f8SJohn Marino /* 243 */ ED_UNASSIGNED, /* M-s */
88232fe07f8SJohn Marino /* 244 */ ED_UNASSIGNED, /* M-t */
88332fe07f8SJohn Marino /* 245 */ ED_UNASSIGNED, /* M-u */
88432fe07f8SJohn Marino /* 246 */ ED_UNASSIGNED, /* M-v */
88532fe07f8SJohn Marino /* 247 */ ED_UNASSIGNED, /* M-w */
88632fe07f8SJohn Marino /* 248 */ ED_UNASSIGNED, /* M-x */
88732fe07f8SJohn Marino /* 249 */ ED_UNASSIGNED, /* M-y */
88832fe07f8SJohn Marino /* 250 */ ED_UNASSIGNED, /* M-z */
88932fe07f8SJohn Marino /* 251 */ ED_UNASSIGNED, /* M-{ */
89032fe07f8SJohn Marino /* 252 */ ED_UNASSIGNED, /* M-| */
89132fe07f8SJohn Marino /* 253 */ ED_UNASSIGNED, /* M-} */
89232fe07f8SJohn Marino /* 254 */ ED_UNASSIGNED, /* M-~ */
89332fe07f8SJohn Marino /* 255 */ ED_UNASSIGNED /* M-^? */
89432fe07f8SJohn Marino };
89532fe07f8SJohn Marino
89632fe07f8SJohn Marino
89732fe07f8SJohn Marino /* map_init():
89832fe07f8SJohn Marino * Initialize and allocate the maps
89932fe07f8SJohn Marino */
90012db70c8Szrj libedit_private int
map_init(EditLine * el)90132fe07f8SJohn Marino map_init(EditLine *el)
90232fe07f8SJohn Marino {
90332fe07f8SJohn Marino
90432fe07f8SJohn Marino /*
90532fe07f8SJohn Marino * Make sure those are correct before starting.
90632fe07f8SJohn Marino */
90732fe07f8SJohn Marino #ifdef MAP_DEBUG
90832fe07f8SJohn Marino if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
909*cdf8408cSAntonio Huete Jimenez EL_ABORT((el->el_errfile, "Emacs map incorrect\n"));
91032fe07f8SJohn Marino if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
911*cdf8408cSAntonio Huete Jimenez EL_ABORT((el->el_errfile, "Vi command map incorrect\n"));
91232fe07f8SJohn Marino if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
913*cdf8408cSAntonio Huete Jimenez EL_ABORT((el->el_errfile, "Vi insert map incorrect\n"));
91432fe07f8SJohn Marino #endif
91532fe07f8SJohn Marino
91660ecde0cSDaniel Fojt el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt));
91732fe07f8SJohn Marino if (el->el_map.alt == NULL)
91832fe07f8SJohn Marino return -1;
91960ecde0cSDaniel Fojt el->el_map.key = el_calloc(N_KEYS, sizeof(*el->el_map.key));
92032fe07f8SJohn Marino if (el->el_map.key == NULL)
92132fe07f8SJohn Marino return -1;
92232fe07f8SJohn Marino el->el_map.emacs = el_map_emacs;
92332fe07f8SJohn Marino el->el_map.vic = el_map_vi_command;
92432fe07f8SJohn Marino el->el_map.vii = el_map_vi_insert;
92560ecde0cSDaniel Fojt el->el_map.help = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.help));
92632fe07f8SJohn Marino if (el->el_map.help == NULL)
92732fe07f8SJohn Marino return -1;
92812db70c8Szrj (void) memcpy(el->el_map.help, el_func_help,
92932fe07f8SJohn Marino sizeof(*el->el_map.help) * EL_NUM_FCNS);
93060ecde0cSDaniel Fojt el->el_map.func = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.func));
93132fe07f8SJohn Marino if (el->el_map.func == NULL)
93232fe07f8SJohn Marino return -1;
93312db70c8Szrj memcpy(el->el_map.func, el_func, sizeof(*el->el_map.func)
93432fe07f8SJohn Marino * EL_NUM_FCNS);
93532fe07f8SJohn Marino el->el_map.nfunc = EL_NUM_FCNS;
93632fe07f8SJohn Marino
93732fe07f8SJohn Marino #ifdef VIDEFAULT
93832fe07f8SJohn Marino map_init_vi(el);
93932fe07f8SJohn Marino #else
94032fe07f8SJohn Marino map_init_emacs(el);
94132fe07f8SJohn Marino #endif /* VIDEFAULT */
94232fe07f8SJohn Marino return 0;
94332fe07f8SJohn Marino }
94432fe07f8SJohn Marino
94532fe07f8SJohn Marino
94632fe07f8SJohn Marino /* map_end():
94732fe07f8SJohn Marino * Free the space taken by the editor maps
94832fe07f8SJohn Marino */
94912db70c8Szrj libedit_private void
map_end(EditLine * el)95032fe07f8SJohn Marino map_end(EditLine *el)
95132fe07f8SJohn Marino {
95232fe07f8SJohn Marino
95332fe07f8SJohn Marino el_free(el->el_map.alt);
95432fe07f8SJohn Marino el->el_map.alt = NULL;
95532fe07f8SJohn Marino el_free(el->el_map.key);
95632fe07f8SJohn Marino el->el_map.key = NULL;
95732fe07f8SJohn Marino el->el_map.emacs = NULL;
95832fe07f8SJohn Marino el->el_map.vic = NULL;
95932fe07f8SJohn Marino el->el_map.vii = NULL;
96032fe07f8SJohn Marino el_free(el->el_map.help);
96132fe07f8SJohn Marino el->el_map.help = NULL;
96232fe07f8SJohn Marino el_free(el->el_map.func);
96332fe07f8SJohn Marino el->el_map.func = NULL;
96432fe07f8SJohn Marino }
96532fe07f8SJohn Marino
96632fe07f8SJohn Marino
96732fe07f8SJohn Marino /* map_init_nls():
96832fe07f8SJohn Marino * Find all the printable keys and bind them to self insert
96932fe07f8SJohn Marino */
97012db70c8Szrj static void
map_init_nls(EditLine * el)97132fe07f8SJohn Marino map_init_nls(EditLine *el)
97232fe07f8SJohn Marino {
97332fe07f8SJohn Marino int i;
97432fe07f8SJohn Marino
97532fe07f8SJohn Marino el_action_t *map = el->el_map.key;
97632fe07f8SJohn Marino
97732fe07f8SJohn Marino for (i = 0200; i <= 0377; i++)
97812db70c8Szrj if (iswprint(i))
97932fe07f8SJohn Marino map[i] = ED_INSERT;
98032fe07f8SJohn Marino }
98132fe07f8SJohn Marino
98232fe07f8SJohn Marino
98332fe07f8SJohn Marino /* map_init_meta():
98432fe07f8SJohn Marino * Bind all the meta keys to the appropriate ESC-<key> sequence
98532fe07f8SJohn Marino */
98612db70c8Szrj static void
map_init_meta(EditLine * el)98732fe07f8SJohn Marino map_init_meta(EditLine *el)
98832fe07f8SJohn Marino {
98912db70c8Szrj wchar_t buf[3];
99032fe07f8SJohn Marino int i;
99132fe07f8SJohn Marino el_action_t *map = el->el_map.key;
99232fe07f8SJohn Marino el_action_t *alt = el->el_map.alt;
99332fe07f8SJohn Marino
99432fe07f8SJohn Marino for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
99532fe07f8SJohn Marino continue;
99632fe07f8SJohn Marino
99732fe07f8SJohn Marino if (i > 0377) {
99832fe07f8SJohn Marino for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
99932fe07f8SJohn Marino continue;
100032fe07f8SJohn Marino if (i > 0377) {
100132fe07f8SJohn Marino i = 033;
100232fe07f8SJohn Marino if (el->el_map.type == MAP_VI)
100332fe07f8SJohn Marino map = alt;
100432fe07f8SJohn Marino } else
100532fe07f8SJohn Marino map = alt;
100632fe07f8SJohn Marino }
100712db70c8Szrj buf[0] = (wchar_t)i;
100832fe07f8SJohn Marino buf[2] = 0;
100932fe07f8SJohn Marino for (i = 0200; i <= 0377; i++)
101032fe07f8SJohn Marino switch (map[i]) {
101132fe07f8SJohn Marino case ED_INSERT:
101232fe07f8SJohn Marino case ED_UNASSIGNED:
101332fe07f8SJohn Marino case ED_SEQUENCE_LEAD_IN:
101432fe07f8SJohn Marino break;
101532fe07f8SJohn Marino default:
101632fe07f8SJohn Marino buf[1] = i & 0177;
101732fe07f8SJohn Marino keymacro_add(el, buf, keymacro_map_cmd(el, (int) map[i]), XK_CMD);
101832fe07f8SJohn Marino break;
101932fe07f8SJohn Marino }
102032fe07f8SJohn Marino map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
102132fe07f8SJohn Marino }
102232fe07f8SJohn Marino
102332fe07f8SJohn Marino
102432fe07f8SJohn Marino /* map_init_vi():
102532fe07f8SJohn Marino * Initialize the vi bindings
102632fe07f8SJohn Marino */
102712db70c8Szrj libedit_private void
map_init_vi(EditLine * el)102832fe07f8SJohn Marino map_init_vi(EditLine *el)
102932fe07f8SJohn Marino {
103032fe07f8SJohn Marino int i;
103132fe07f8SJohn Marino el_action_t *key = el->el_map.key;
103232fe07f8SJohn Marino el_action_t *alt = el->el_map.alt;
103332fe07f8SJohn Marino const el_action_t *vii = el->el_map.vii;
103432fe07f8SJohn Marino const el_action_t *vic = el->el_map.vic;
103532fe07f8SJohn Marino
103632fe07f8SJohn Marino el->el_map.type = MAP_VI;
103732fe07f8SJohn Marino el->el_map.current = el->el_map.key;
103832fe07f8SJohn Marino
103932fe07f8SJohn Marino keymacro_reset(el);
104032fe07f8SJohn Marino
104132fe07f8SJohn Marino for (i = 0; i < N_KEYS; i++) {
104232fe07f8SJohn Marino key[i] = vii[i];
104332fe07f8SJohn Marino alt[i] = vic[i];
104432fe07f8SJohn Marino }
104532fe07f8SJohn Marino
104632fe07f8SJohn Marino map_init_meta(el);
104732fe07f8SJohn Marino map_init_nls(el);
104832fe07f8SJohn Marino
104932fe07f8SJohn Marino tty_bind_char(el, 1);
105032fe07f8SJohn Marino terminal_bind_arrow(el);
105132fe07f8SJohn Marino }
105232fe07f8SJohn Marino
105332fe07f8SJohn Marino
105432fe07f8SJohn Marino /* map_init_emacs():
105532fe07f8SJohn Marino * Initialize the emacs bindings
105632fe07f8SJohn Marino */
105712db70c8Szrj libedit_private void
map_init_emacs(EditLine * el)105832fe07f8SJohn Marino map_init_emacs(EditLine *el)
105932fe07f8SJohn Marino {
106032fe07f8SJohn Marino int i;
106112db70c8Szrj wchar_t buf[3];
106232fe07f8SJohn Marino el_action_t *key = el->el_map.key;
106332fe07f8SJohn Marino el_action_t *alt = el->el_map.alt;
106432fe07f8SJohn Marino const el_action_t *emacs = el->el_map.emacs;
106532fe07f8SJohn Marino
106632fe07f8SJohn Marino el->el_map.type = MAP_EMACS;
106732fe07f8SJohn Marino el->el_map.current = el->el_map.key;
106832fe07f8SJohn Marino keymacro_reset(el);
106932fe07f8SJohn Marino
107032fe07f8SJohn Marino for (i = 0; i < N_KEYS; i++) {
107132fe07f8SJohn Marino key[i] = emacs[i];
107232fe07f8SJohn Marino alt[i] = ED_UNASSIGNED;
107332fe07f8SJohn Marino }
107432fe07f8SJohn Marino
107532fe07f8SJohn Marino map_init_meta(el);
107632fe07f8SJohn Marino map_init_nls(el);
107732fe07f8SJohn Marino
107832fe07f8SJohn Marino buf[0] = CONTROL('X');
107932fe07f8SJohn Marino buf[1] = CONTROL('X');
108032fe07f8SJohn Marino buf[2] = 0;
108132fe07f8SJohn Marino keymacro_add(el, buf, keymacro_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
108232fe07f8SJohn Marino
108332fe07f8SJohn Marino tty_bind_char(el, 1);
108432fe07f8SJohn Marino terminal_bind_arrow(el);
108532fe07f8SJohn Marino }
108632fe07f8SJohn Marino
108732fe07f8SJohn Marino
108832fe07f8SJohn Marino /* map_set_editor():
108932fe07f8SJohn Marino * Set the editor
109032fe07f8SJohn Marino */
109112db70c8Szrj libedit_private int
map_set_editor(EditLine * el,wchar_t * editor)109212db70c8Szrj map_set_editor(EditLine *el, wchar_t *editor)
109332fe07f8SJohn Marino {
109432fe07f8SJohn Marino
109512db70c8Szrj if (wcscmp(editor, L"emacs") == 0) {
109632fe07f8SJohn Marino map_init_emacs(el);
109732fe07f8SJohn Marino return 0;
109832fe07f8SJohn Marino }
109912db70c8Szrj if (wcscmp(editor, L"vi") == 0) {
110032fe07f8SJohn Marino map_init_vi(el);
110132fe07f8SJohn Marino return 0;
110232fe07f8SJohn Marino }
110332fe07f8SJohn Marino return -1;
110432fe07f8SJohn Marino }
110532fe07f8SJohn Marino
110632fe07f8SJohn Marino
110732fe07f8SJohn Marino /* map_get_editor():
110832fe07f8SJohn Marino * Retrieve the editor
110932fe07f8SJohn Marino */
111012db70c8Szrj libedit_private int
map_get_editor(EditLine * el,const wchar_t ** editor)111112db70c8Szrj map_get_editor(EditLine *el, const wchar_t **editor)
111232fe07f8SJohn Marino {
111332fe07f8SJohn Marino
111432fe07f8SJohn Marino if (editor == NULL)
111532fe07f8SJohn Marino return -1;
111632fe07f8SJohn Marino switch (el->el_map.type) {
111732fe07f8SJohn Marino case MAP_EMACS:
111812db70c8Szrj *editor = L"emacs";
111932fe07f8SJohn Marino return 0;
112032fe07f8SJohn Marino case MAP_VI:
112112db70c8Szrj *editor = L"vi";
112232fe07f8SJohn Marino return 0;
112332fe07f8SJohn Marino }
112432fe07f8SJohn Marino return -1;
112532fe07f8SJohn Marino }
112632fe07f8SJohn Marino
112732fe07f8SJohn Marino
112832fe07f8SJohn Marino /* map_print_key():
112932fe07f8SJohn Marino * Print the function description for 1 key
113032fe07f8SJohn Marino */
113112db70c8Szrj static void
map_print_key(EditLine * el,el_action_t * map,const wchar_t * in)113212db70c8Szrj map_print_key(EditLine *el, el_action_t *map, const wchar_t *in)
113332fe07f8SJohn Marino {
113432fe07f8SJohn Marino char outbuf[EL_BUFSIZ];
113532fe07f8SJohn Marino el_bindings_t *bp, *ep;
113632fe07f8SJohn Marino
113732fe07f8SJohn Marino if (in[0] == '\0' || in[1] == '\0') {
113832fe07f8SJohn Marino (void) keymacro__decode_str(in, outbuf, sizeof(outbuf), "");
113932fe07f8SJohn Marino ep = &el->el_map.help[el->el_map.nfunc];
114032fe07f8SJohn Marino for (bp = el->el_map.help; bp < ep; bp++)
114132fe07f8SJohn Marino if (bp->func == map[(unsigned char) *in]) {
114232fe07f8SJohn Marino (void) fprintf(el->el_outfile,
114312db70c8Szrj "%s\t->\t%ls\n", outbuf, bp->name);
114432fe07f8SJohn Marino return;
114532fe07f8SJohn Marino }
114632fe07f8SJohn Marino } else
114732fe07f8SJohn Marino keymacro_print(el, in);
114832fe07f8SJohn Marino }
114932fe07f8SJohn Marino
115032fe07f8SJohn Marino
115132fe07f8SJohn Marino /* map_print_some_keys():
115232fe07f8SJohn Marino * Print keys from first to last
115332fe07f8SJohn Marino */
115412db70c8Szrj static void
map_print_some_keys(EditLine * el,el_action_t * map,wint_t first,wint_t last)115512db70c8Szrj map_print_some_keys(EditLine *el, el_action_t *map, wint_t first, wint_t last)
115632fe07f8SJohn Marino {
115732fe07f8SJohn Marino el_bindings_t *bp, *ep;
115812db70c8Szrj wchar_t firstbuf[2], lastbuf[2];
115932fe07f8SJohn Marino char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
116032fe07f8SJohn Marino
116132fe07f8SJohn Marino firstbuf[0] = first;
116232fe07f8SJohn Marino firstbuf[1] = 0;
116332fe07f8SJohn Marino lastbuf[0] = last;
116432fe07f8SJohn Marino lastbuf[1] = 0;
116532fe07f8SJohn Marino if (map[first] == ED_UNASSIGNED) {
116632fe07f8SJohn Marino if (first == last) {
116732fe07f8SJohn Marino (void) keymacro__decode_str(firstbuf, unparsbuf,
116832fe07f8SJohn Marino sizeof(unparsbuf), STRQQ);
116932fe07f8SJohn Marino (void) fprintf(el->el_outfile,
117032fe07f8SJohn Marino "%-15s-> is undefined\n", unparsbuf);
117132fe07f8SJohn Marino }
117232fe07f8SJohn Marino return;
117332fe07f8SJohn Marino }
117432fe07f8SJohn Marino ep = &el->el_map.help[el->el_map.nfunc];
117532fe07f8SJohn Marino for (bp = el->el_map.help; bp < ep; bp++) {
117632fe07f8SJohn Marino if (bp->func == map[first]) {
117732fe07f8SJohn Marino if (first == last) {
117832fe07f8SJohn Marino (void) keymacro__decode_str(firstbuf, unparsbuf,
117932fe07f8SJohn Marino sizeof(unparsbuf), STRQQ);
118012db70c8Szrj (void) fprintf(el->el_outfile, "%-15s-> %ls\n",
118132fe07f8SJohn Marino unparsbuf, bp->name);
118232fe07f8SJohn Marino } else {
118332fe07f8SJohn Marino (void) keymacro__decode_str(firstbuf, unparsbuf,
118432fe07f8SJohn Marino sizeof(unparsbuf), STRQQ);
118532fe07f8SJohn Marino (void) keymacro__decode_str(lastbuf, extrabuf,
118632fe07f8SJohn Marino sizeof(extrabuf), STRQQ);
118732fe07f8SJohn Marino (void) fprintf(el->el_outfile,
118812db70c8Szrj "%-4s to %-7s-> %ls\n",
118932fe07f8SJohn Marino unparsbuf, extrabuf, bp->name);
119032fe07f8SJohn Marino }
119132fe07f8SJohn Marino return;
119232fe07f8SJohn Marino }
119332fe07f8SJohn Marino }
119432fe07f8SJohn Marino #ifdef MAP_DEBUG
119532fe07f8SJohn Marino if (map == el->el_map.key) {
119632fe07f8SJohn Marino (void) keymacro__decode_str(firstbuf, unparsbuf,
119732fe07f8SJohn Marino sizeof(unparsbuf), STRQQ);
119832fe07f8SJohn Marino (void) fprintf(el->el_outfile,
119932fe07f8SJohn Marino "BUG!!! %s isn't bound to anything.\n", unparsbuf);
120032fe07f8SJohn Marino (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
120132fe07f8SJohn Marino first, el->el_map.key[first]);
120232fe07f8SJohn Marino } else {
120332fe07f8SJohn Marino (void) keymacro__decode_str(firstbuf, unparsbuf,
120432fe07f8SJohn Marino sizeof(unparsbuf), STRQQ);
120532fe07f8SJohn Marino (void) fprintf(el->el_outfile,
120632fe07f8SJohn Marino "BUG!!! %s isn't bound to anything.\n", unparsbuf);
120732fe07f8SJohn Marino (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
120832fe07f8SJohn Marino first, el->el_map.alt[first]);
120932fe07f8SJohn Marino }
121032fe07f8SJohn Marino #endif
121132fe07f8SJohn Marino EL_ABORT((el->el_errfile, "Error printing keys\n"));
121232fe07f8SJohn Marino }
121332fe07f8SJohn Marino
121432fe07f8SJohn Marino
121532fe07f8SJohn Marino /* map_print_all_keys():
121632fe07f8SJohn Marino * Print the function description for all keys.
121732fe07f8SJohn Marino */
121812db70c8Szrj static void
map_print_all_keys(EditLine * el)121932fe07f8SJohn Marino map_print_all_keys(EditLine *el)
122032fe07f8SJohn Marino {
122132fe07f8SJohn Marino int prev, i;
122232fe07f8SJohn Marino
122332fe07f8SJohn Marino (void) fprintf(el->el_outfile, "Standard key bindings\n");
122432fe07f8SJohn Marino prev = 0;
122532fe07f8SJohn Marino for (i = 0; i < N_KEYS; i++) {
122632fe07f8SJohn Marino if (el->el_map.key[prev] == el->el_map.key[i])
122732fe07f8SJohn Marino continue;
122832fe07f8SJohn Marino map_print_some_keys(el, el->el_map.key, prev, i - 1);
122932fe07f8SJohn Marino prev = i;
123032fe07f8SJohn Marino }
123132fe07f8SJohn Marino map_print_some_keys(el, el->el_map.key, prev, i - 1);
123232fe07f8SJohn Marino
123332fe07f8SJohn Marino (void) fprintf(el->el_outfile, "Alternative key bindings\n");
123432fe07f8SJohn Marino prev = 0;
123532fe07f8SJohn Marino for (i = 0; i < N_KEYS; i++) {
123632fe07f8SJohn Marino if (el->el_map.alt[prev] == el->el_map.alt[i])
123732fe07f8SJohn Marino continue;
123832fe07f8SJohn Marino map_print_some_keys(el, el->el_map.alt, prev, i - 1);
123932fe07f8SJohn Marino prev = i;
124032fe07f8SJohn Marino }
124132fe07f8SJohn Marino map_print_some_keys(el, el->el_map.alt, prev, i - 1);
124232fe07f8SJohn Marino
124332fe07f8SJohn Marino (void) fprintf(el->el_outfile, "Multi-character bindings\n");
124412db70c8Szrj keymacro_print(el, L"");
124532fe07f8SJohn Marino (void) fprintf(el->el_outfile, "Arrow key bindings\n");
124612db70c8Szrj terminal_print_arrow(el, L"");
124732fe07f8SJohn Marino }
124832fe07f8SJohn Marino
124932fe07f8SJohn Marino
125032fe07f8SJohn Marino /* map_bind():
125132fe07f8SJohn Marino * Add/remove/change bindings
125232fe07f8SJohn Marino */
125312db70c8Szrj libedit_private int
map_bind(EditLine * el,int argc,const wchar_t ** argv)125412db70c8Szrj map_bind(EditLine *el, int argc, const wchar_t **argv)
125532fe07f8SJohn Marino {
125632fe07f8SJohn Marino el_action_t *map;
125732fe07f8SJohn Marino int ntype, rem;
125812db70c8Szrj const wchar_t *p;
125912db70c8Szrj wchar_t inbuf[EL_BUFSIZ];
126012db70c8Szrj wchar_t outbuf[EL_BUFSIZ];
126112db70c8Szrj const wchar_t *in = NULL;
126212db70c8Szrj wchar_t *out;
126332fe07f8SJohn Marino el_bindings_t *bp, *ep;
126432fe07f8SJohn Marino int cmd;
126532fe07f8SJohn Marino int key;
126632fe07f8SJohn Marino
126732fe07f8SJohn Marino if (argv == NULL)
126832fe07f8SJohn Marino return -1;
126932fe07f8SJohn Marino
127032fe07f8SJohn Marino map = el->el_map.key;
127132fe07f8SJohn Marino ntype = XK_CMD;
127232fe07f8SJohn Marino key = rem = 0;
127332fe07f8SJohn Marino for (argc = 1; (p = argv[argc]) != NULL; argc++)
127432fe07f8SJohn Marino if (p[0] == '-')
127532fe07f8SJohn Marino switch (p[1]) {
127632fe07f8SJohn Marino case 'a':
127732fe07f8SJohn Marino map = el->el_map.alt;
127832fe07f8SJohn Marino break;
127932fe07f8SJohn Marino
128032fe07f8SJohn Marino case 's':
128132fe07f8SJohn Marino ntype = XK_STR;
128232fe07f8SJohn Marino break;
128332fe07f8SJohn Marino case 'k':
128432fe07f8SJohn Marino key = 1;
128532fe07f8SJohn Marino break;
128632fe07f8SJohn Marino
128732fe07f8SJohn Marino case 'r':
128832fe07f8SJohn Marino rem = 1;
128932fe07f8SJohn Marino break;
129032fe07f8SJohn Marino
129132fe07f8SJohn Marino case 'v':
129232fe07f8SJohn Marino map_init_vi(el);
129332fe07f8SJohn Marino return 0;
129432fe07f8SJohn Marino
129532fe07f8SJohn Marino case 'e':
129632fe07f8SJohn Marino map_init_emacs(el);
129732fe07f8SJohn Marino return 0;
129832fe07f8SJohn Marino
129932fe07f8SJohn Marino case 'l':
130032fe07f8SJohn Marino ep = &el->el_map.help[el->el_map.nfunc];
130132fe07f8SJohn Marino for (bp = el->el_map.help; bp < ep; bp++)
130232fe07f8SJohn Marino (void) fprintf(el->el_outfile,
130312db70c8Szrj "%ls\n\t%ls\n",
130432fe07f8SJohn Marino bp->name, bp->description);
130532fe07f8SJohn Marino return 0;
130632fe07f8SJohn Marino default:
130732fe07f8SJohn Marino (void) fprintf(el->el_errfile,
130812db70c8Szrj "%ls: Invalid switch `%lc'.\n",
130912db70c8Szrj argv[0], (wint_t)p[1]);
131032fe07f8SJohn Marino }
131132fe07f8SJohn Marino else
131232fe07f8SJohn Marino break;
131332fe07f8SJohn Marino
131432fe07f8SJohn Marino if (argv[argc] == NULL) {
131532fe07f8SJohn Marino map_print_all_keys(el);
131632fe07f8SJohn Marino return 0;
131732fe07f8SJohn Marino }
131832fe07f8SJohn Marino if (key)
131932fe07f8SJohn Marino in = argv[argc++];
132032fe07f8SJohn Marino else if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
132132fe07f8SJohn Marino (void) fprintf(el->el_errfile,
132212db70c8Szrj "%ls: Invalid \\ or ^ in instring.\n",
132332fe07f8SJohn Marino argv[0]);
132432fe07f8SJohn Marino return -1;
132532fe07f8SJohn Marino }
132632fe07f8SJohn Marino if (rem) {
132732fe07f8SJohn Marino if (key) {
132832fe07f8SJohn Marino (void) terminal_clear_arrow(el, in);
132932fe07f8SJohn Marino return -1;
133032fe07f8SJohn Marino }
133132fe07f8SJohn Marino if (in[1])
133232fe07f8SJohn Marino (void) keymacro_delete(el, in);
133332fe07f8SJohn Marino else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
133432fe07f8SJohn Marino (void) keymacro_delete(el, in);
133532fe07f8SJohn Marino else
133632fe07f8SJohn Marino map[(unsigned char) *in] = ED_UNASSIGNED;
133732fe07f8SJohn Marino return 0;
133832fe07f8SJohn Marino }
133932fe07f8SJohn Marino if (argv[argc] == NULL) {
134032fe07f8SJohn Marino if (key)
134132fe07f8SJohn Marino terminal_print_arrow(el, in);
134232fe07f8SJohn Marino else
134332fe07f8SJohn Marino map_print_key(el, map, in);
134432fe07f8SJohn Marino return 0;
134532fe07f8SJohn Marino }
134632fe07f8SJohn Marino #ifdef notyet
134732fe07f8SJohn Marino if (argv[argc + 1] != NULL) {
134832fe07f8SJohn Marino bindkeymacro_usage();
134932fe07f8SJohn Marino return -1;
135032fe07f8SJohn Marino }
135132fe07f8SJohn Marino #endif
135232fe07f8SJohn Marino
135332fe07f8SJohn Marino switch (ntype) {
135432fe07f8SJohn Marino case XK_STR:
135532fe07f8SJohn Marino if ((out = parse__string(outbuf, argv[argc])) == NULL) {
135632fe07f8SJohn Marino (void) fprintf(el->el_errfile,
135712db70c8Szrj "%ls: Invalid \\ or ^ in outstring.\n", argv[0]);
135832fe07f8SJohn Marino return -1;
135932fe07f8SJohn Marino }
136032fe07f8SJohn Marino if (key)
136132fe07f8SJohn Marino terminal_set_arrow(el, in, keymacro_map_str(el, out), ntype);
136232fe07f8SJohn Marino else
136332fe07f8SJohn Marino keymacro_add(el, in, keymacro_map_str(el, out), ntype);
136432fe07f8SJohn Marino map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
136532fe07f8SJohn Marino break;
136632fe07f8SJohn Marino
136732fe07f8SJohn Marino case XK_CMD:
136832fe07f8SJohn Marino if ((cmd = parse_cmd(el, argv[argc])) == -1) {
136932fe07f8SJohn Marino (void) fprintf(el->el_errfile,
137012db70c8Szrj "%ls: Invalid command `%ls'.\n",
137132fe07f8SJohn Marino argv[0], argv[argc]);
137232fe07f8SJohn Marino return -1;
137332fe07f8SJohn Marino }
137432fe07f8SJohn Marino if (key)
137584b940c1SJohn Marino terminal_set_arrow(el, in, keymacro_map_cmd(el, cmd), ntype);
137632fe07f8SJohn Marino else {
137732fe07f8SJohn Marino if (in[1]) {
137832fe07f8SJohn Marino keymacro_add(el, in, keymacro_map_cmd(el, cmd), ntype);
137932fe07f8SJohn Marino map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
138032fe07f8SJohn Marino } else {
138132fe07f8SJohn Marino keymacro_clear(el, map, in);
138232fe07f8SJohn Marino map[(unsigned char) *in] = (el_action_t)cmd;
138332fe07f8SJohn Marino }
138432fe07f8SJohn Marino }
138532fe07f8SJohn Marino break;
138632fe07f8SJohn Marino
138732fe07f8SJohn Marino /* coverity[dead_error_begin] */
138832fe07f8SJohn Marino default:
138932fe07f8SJohn Marino EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype));
139032fe07f8SJohn Marino break;
139132fe07f8SJohn Marino }
139232fe07f8SJohn Marino return 0;
139332fe07f8SJohn Marino }
139432fe07f8SJohn Marino
139532fe07f8SJohn Marino
139632fe07f8SJohn Marino /* map_addfunc():
139732fe07f8SJohn Marino * add a user defined function
139832fe07f8SJohn Marino */
139912db70c8Szrj libedit_private int
map_addfunc(EditLine * el,const wchar_t * name,const wchar_t * help,el_func_t func)140012db70c8Szrj map_addfunc(EditLine *el, const wchar_t *name, const wchar_t *help,
140112db70c8Szrj el_func_t func)
140232fe07f8SJohn Marino {
140332fe07f8SJohn Marino void *p;
1404a0c9eb18SJohn Marino size_t nf = el->el_map.nfunc + 1;
140532fe07f8SJohn Marino
140632fe07f8SJohn Marino if (name == NULL || help == NULL || func == NULL)
140732fe07f8SJohn Marino return -1;
140832fe07f8SJohn Marino
140932fe07f8SJohn Marino if ((p = el_realloc(el->el_map.func, nf *
141032fe07f8SJohn Marino sizeof(*el->el_map.func))) == NULL)
141132fe07f8SJohn Marino return -1;
141232fe07f8SJohn Marino el->el_map.func = p;
141332fe07f8SJohn Marino if ((p = el_realloc(el->el_map.help, nf * sizeof(*el->el_map.help)))
141432fe07f8SJohn Marino == NULL)
141532fe07f8SJohn Marino return -1;
141632fe07f8SJohn Marino el->el_map.help = p;
141732fe07f8SJohn Marino
141832fe07f8SJohn Marino nf = (size_t)el->el_map.nfunc;
141932fe07f8SJohn Marino el->el_map.func[nf] = func;
142032fe07f8SJohn Marino
142132fe07f8SJohn Marino el->el_map.help[nf].name = name;
142232fe07f8SJohn Marino el->el_map.help[nf].func = (int)nf;
142332fe07f8SJohn Marino el->el_map.help[nf].description = help;
142432fe07f8SJohn Marino el->el_map.nfunc++;
142532fe07f8SJohn Marino
142632fe07f8SJohn Marino return 0;
142732fe07f8SJohn Marino }
1428