xref: /dragonfly/contrib/libedit/src/map.c (revision cdf8408c)
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