xref: /netbsd-src/lib/libedit/map.c (revision 2cf0b469b9d048aeccdc6451da18d68a11366991)
1*2cf0b469Srillig /*	$NetBSD: map.c,v 1.56 2025/01/03 00:40:08 rillig Exp $	*/
22543e3e6Slukem 
36dc2f1dbScgd /*-
46dc2f1dbScgd  * Copyright (c) 1992, 1993
56dc2f1dbScgd  *	The Regents of the University of California.  All rights reserved.
66dc2f1dbScgd  *
76dc2f1dbScgd  * This code is derived from software contributed to Berkeley by
86dc2f1dbScgd  * Christos Zoulas of Cornell University.
96dc2f1dbScgd  *
106dc2f1dbScgd  * Redistribution and use in source and binary forms, with or without
116dc2f1dbScgd  * modification, are permitted provided that the following conditions
126dc2f1dbScgd  * are met:
136dc2f1dbScgd  * 1. Redistributions of source code must retain the above copyright
146dc2f1dbScgd  *    notice, this list of conditions and the following disclaimer.
156dc2f1dbScgd  * 2. Redistributions in binary form must reproduce the above copyright
166dc2f1dbScgd  *    notice, this list of conditions and the following disclaimer in the
176dc2f1dbScgd  *    documentation and/or other materials provided with the distribution.
18eb7c1594Sagc  * 3. Neither the name of the University nor the names of its contributors
196dc2f1dbScgd  *    may be used to endorse or promote products derived from this software
206dc2f1dbScgd  *    without specific prior written permission.
216dc2f1dbScgd  *
226dc2f1dbScgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
236dc2f1dbScgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
246dc2f1dbScgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
256dc2f1dbScgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
266dc2f1dbScgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
276dc2f1dbScgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
286dc2f1dbScgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
296dc2f1dbScgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
306dc2f1dbScgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
316dc2f1dbScgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
326dc2f1dbScgd  * SUCH DAMAGE.
336dc2f1dbScgd  */
346dc2f1dbScgd 
350e0ac6b7Schristos #include "config.h"
366dc2f1dbScgd #if !defined(lint) && !defined(SCCSID)
372543e3e6Slukem #if 0
386dc2f1dbScgd static char sccsid[] = "@(#)map.c	8.1 (Berkeley) 6/4/93";
392543e3e6Slukem #else
40*2cf0b469Srillig __RCSID("$NetBSD: map.c,v 1.56 2025/01/03 00:40:08 rillig Exp $");
412543e3e6Slukem #endif
426dc2f1dbScgd #endif /* not lint && not SCCSID */
436dc2f1dbScgd 
446dc2f1dbScgd /*
456dc2f1dbScgd  * map.c: Editor function definitions
466dc2f1dbScgd  */
47e84df91eSchristos #include <ctype.h>
486dc2f1dbScgd #include <stdlib.h>
49e84df91eSchristos #include <string.h>
50747f6811Schristos 
516dc2f1dbScgd #include "el.h"
524fc1f47dSchristos #include "common.h"
534fc1f47dSchristos #include "emacs.h"
544fc1f47dSchristos #include "vi.h"
554fc1f47dSchristos #include "fcns.h"
564fc1f47dSchristos #include "func.h"
57747f6811Schristos #include "help.h"
58747f6811Schristos #include "parse.h"
596dc2f1dbScgd 
60469d44f8Schristos static void	map_print_key(EditLine *, el_action_t *, const wchar_t *);
61469d44f8Schristos static void	map_print_some_keys(EditLine *, el_action_t *, wint_t, wint_t);
62469d44f8Schristos static void	map_print_all_keys(EditLine *);
63469d44f8Schristos static void	map_init_nls(EditLine *);
64469d44f8Schristos static void	map_init_meta(EditLine *);
656dc2f1dbScgd 
666dc2f1dbScgd /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
676dc2f1dbScgd 
68d30d584aSlukem 
69469d44f8Schristos static const el_action_t  el_map_emacs[] = {
706dc2f1dbScgd 	/*   0 */	EM_SET_MARK,		/* ^@ */
716dc2f1dbScgd 	/*   1 */	ED_MOVE_TO_BEG,		/* ^A */
726dc2f1dbScgd 	/*   2 */	ED_PREV_CHAR,		/* ^B */
73a2eaeedbSchristos 	/*   3 */	ED_IGNORE,		/* ^C */
746dc2f1dbScgd 	/*   4 */	EM_DELETE_OR_LIST,	/* ^D */
756dc2f1dbScgd 	/*   5 */	ED_MOVE_TO_END,		/* ^E */
766dc2f1dbScgd 	/*   6 */	ED_NEXT_CHAR,		/* ^F */
776dc2f1dbScgd 	/*   7 */	ED_UNASSIGNED,		/* ^G */
786360c4b0Smycroft 	/*   8 */	EM_DELETE_PREV_CHAR,	/* ^H */
796dc2f1dbScgd 	/*   9 */	ED_UNASSIGNED,		/* ^I */
806dc2f1dbScgd 	/*  10 */	ED_NEWLINE,		/* ^J */
816dc2f1dbScgd 	/*  11 */	ED_KILL_LINE,		/* ^K */
826dc2f1dbScgd 	/*  12 */	ED_CLEAR_SCREEN,	/* ^L */
836dc2f1dbScgd 	/*  13 */	ED_NEWLINE,		/* ^M */
846dc2f1dbScgd 	/*  14 */	ED_NEXT_HISTORY,	/* ^N */
85a2eaeedbSchristos 	/*  15 */	ED_IGNORE,		/* ^O */
866dc2f1dbScgd 	/*  16 */	ED_PREV_HISTORY,	/* ^P */
87a2eaeedbSchristos 	/*  17 */	ED_IGNORE,		/* ^Q */
88152732a3Schristos 	/*  18 */	EM_INC_SEARCH_PREV,	/* ^R */
89a2eaeedbSchristos 	/*  19 */	ED_IGNORE,		/* ^S */
906dc2f1dbScgd 	/*  20 */	ED_TRANSPOSE_CHARS,	/* ^T */
916dc2f1dbScgd 	/*  21 */	EM_KILL_LINE,		/* ^U */
926dc2f1dbScgd 	/*  22 */	ED_QUOTED_INSERT,	/* ^V */
93152732a3Schristos 	/*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
946dc2f1dbScgd 	/*  24 */	ED_SEQUENCE_LEAD_IN,	/* ^X */
956dc2f1dbScgd 	/*  25 */	EM_YANK,		/* ^Y */
96a2eaeedbSchristos 	/*  26 */	ED_IGNORE,		/* ^Z */
976dc2f1dbScgd 	/*  27 */	EM_META_NEXT,		/* ^[ */
98a2eaeedbSchristos 	/*  28 */	ED_IGNORE,		/* ^\ */
99a2eaeedbSchristos 	/*  29 */	ED_IGNORE,		/* ^] */
1006dc2f1dbScgd 	/*  30 */	ED_UNASSIGNED,		/* ^^ */
1016dc2f1dbScgd 	/*  31 */	ED_UNASSIGNED,		/* ^_ */
1026dc2f1dbScgd 	/*  32 */	ED_INSERT,		/* SPACE */
1036dc2f1dbScgd 	/*  33 */	ED_INSERT,		/* ! */
1046dc2f1dbScgd 	/*  34 */	ED_INSERT,		/* " */
1056dc2f1dbScgd 	/*  35 */	ED_INSERT,		/* # */
1066dc2f1dbScgd 	/*  36 */	ED_INSERT,		/* $ */
1076dc2f1dbScgd 	/*  37 */	ED_INSERT,		/* % */
1086dc2f1dbScgd 	/*  38 */	ED_INSERT,		/* & */
1096dc2f1dbScgd 	/*  39 */	ED_INSERT,		/* ' */
1106dc2f1dbScgd 	/*  40 */	ED_INSERT,		/* ( */
1116dc2f1dbScgd 	/*  41 */	ED_INSERT,		/* ) */
1126dc2f1dbScgd 	/*  42 */	ED_INSERT,		/* * */
1136dc2f1dbScgd 	/*  43 */	ED_INSERT,		/* + */
1146dc2f1dbScgd 	/*  44 */	ED_INSERT,		/* , */
1156dc2f1dbScgd 	/*  45 */	ED_INSERT,		/* - */
1166dc2f1dbScgd 	/*  46 */	ED_INSERT,		/* . */
1176dc2f1dbScgd 	/*  47 */	ED_INSERT,		/* / */
1186dc2f1dbScgd 	/*  48 */	ED_DIGIT,		/* 0 */
1196dc2f1dbScgd 	/*  49 */	ED_DIGIT,		/* 1 */
1206dc2f1dbScgd 	/*  50 */	ED_DIGIT,		/* 2 */
1216dc2f1dbScgd 	/*  51 */	ED_DIGIT,		/* 3 */
1226dc2f1dbScgd 	/*  52 */	ED_DIGIT,		/* 4 */
1236dc2f1dbScgd 	/*  53 */	ED_DIGIT,		/* 5 */
1246dc2f1dbScgd 	/*  54 */	ED_DIGIT,		/* 6 */
1256dc2f1dbScgd 	/*  55 */	ED_DIGIT,		/* 7 */
1266dc2f1dbScgd 	/*  56 */	ED_DIGIT,		/* 8 */
1276dc2f1dbScgd 	/*  57 */	ED_DIGIT,		/* 9 */
1286dc2f1dbScgd 	/*  58 */	ED_INSERT,		/* : */
1296dc2f1dbScgd 	/*  59 */	ED_INSERT,		/* ; */
1306dc2f1dbScgd 	/*  60 */	ED_INSERT,		/* < */
1316dc2f1dbScgd 	/*  61 */	ED_INSERT,		/* = */
1326dc2f1dbScgd 	/*  62 */	ED_INSERT,		/* > */
1336dc2f1dbScgd 	/*  63 */	ED_INSERT,		/* ? */
1346dc2f1dbScgd 	/*  64 */	ED_INSERT,		/* @ */
1356dc2f1dbScgd 	/*  65 */	ED_INSERT,		/* A */
1366dc2f1dbScgd 	/*  66 */	ED_INSERT,		/* B */
1376dc2f1dbScgd 	/*  67 */	ED_INSERT,		/* C */
1386dc2f1dbScgd 	/*  68 */	ED_INSERT,		/* D */
1396dc2f1dbScgd 	/*  69 */	ED_INSERT,		/* E */
1406dc2f1dbScgd 	/*  70 */	ED_INSERT,		/* F */
1416dc2f1dbScgd 	/*  71 */	ED_INSERT,		/* G */
1426dc2f1dbScgd 	/*  72 */	ED_INSERT,		/* H */
1436dc2f1dbScgd 	/*  73 */	ED_INSERT,		/* I */
1446dc2f1dbScgd 	/*  74 */	ED_INSERT,		/* J */
1456dc2f1dbScgd 	/*  75 */	ED_INSERT,		/* K */
1466dc2f1dbScgd 	/*  76 */	ED_INSERT,		/* L */
1476dc2f1dbScgd 	/*  77 */	ED_INSERT,		/* M */
1486dc2f1dbScgd 	/*  78 */	ED_INSERT,		/* N */
1496dc2f1dbScgd 	/*  79 */	ED_INSERT,		/* O */
1506dc2f1dbScgd 	/*  80 */	ED_INSERT,		/* P */
1516dc2f1dbScgd 	/*  81 */	ED_INSERT,		/* Q */
1526dc2f1dbScgd 	/*  82 */	ED_INSERT,		/* R */
1536dc2f1dbScgd 	/*  83 */	ED_INSERT,		/* S */
1546dc2f1dbScgd 	/*  84 */	ED_INSERT,		/* T */
1556dc2f1dbScgd 	/*  85 */	ED_INSERT,		/* U */
1566dc2f1dbScgd 	/*  86 */	ED_INSERT,		/* V */
1576dc2f1dbScgd 	/*  87 */	ED_INSERT,		/* W */
1586dc2f1dbScgd 	/*  88 */	ED_INSERT,		/* X */
1596dc2f1dbScgd 	/*  89 */	ED_INSERT,		/* Y */
1606dc2f1dbScgd 	/*  90 */	ED_INSERT,		/* Z */
1616dc2f1dbScgd 	/*  91 */	ED_INSERT,		/* [ */
1626dc2f1dbScgd 	/*  92 */	ED_INSERT,		/* \ */
1636dc2f1dbScgd 	/*  93 */	ED_INSERT,		/* ] */
1646dc2f1dbScgd 	/*  94 */	ED_INSERT,		/* ^ */
1656dc2f1dbScgd 	/*  95 */	ED_INSERT,		/* _ */
1666dc2f1dbScgd 	/*  96 */	ED_INSERT,		/* ` */
1676dc2f1dbScgd 	/*  97 */	ED_INSERT,		/* a */
1686dc2f1dbScgd 	/*  98 */	ED_INSERT,		/* b */
1696dc2f1dbScgd 	/*  99 */	ED_INSERT,		/* c */
1706dc2f1dbScgd 	/* 100 */	ED_INSERT,		/* d */
1716dc2f1dbScgd 	/* 101 */	ED_INSERT,		/* e */
1726dc2f1dbScgd 	/* 102 */	ED_INSERT,		/* f */
1736dc2f1dbScgd 	/* 103 */	ED_INSERT,		/* g */
1746dc2f1dbScgd 	/* 104 */	ED_INSERT,		/* h */
1756dc2f1dbScgd 	/* 105 */	ED_INSERT,		/* i */
1766dc2f1dbScgd 	/* 106 */	ED_INSERT,		/* j */
1776dc2f1dbScgd 	/* 107 */	ED_INSERT,		/* k */
1786dc2f1dbScgd 	/* 108 */	ED_INSERT,		/* l */
1796dc2f1dbScgd 	/* 109 */	ED_INSERT,		/* m */
1806dc2f1dbScgd 	/* 110 */	ED_INSERT,		/* n */
1816dc2f1dbScgd 	/* 111 */	ED_INSERT,		/* o */
1826dc2f1dbScgd 	/* 112 */	ED_INSERT,		/* p */
1836dc2f1dbScgd 	/* 113 */	ED_INSERT,		/* q */
1846dc2f1dbScgd 	/* 114 */	ED_INSERT,		/* r */
1856dc2f1dbScgd 	/* 115 */	ED_INSERT,		/* s */
1866dc2f1dbScgd 	/* 116 */	ED_INSERT,		/* t */
1876dc2f1dbScgd 	/* 117 */	ED_INSERT,		/* u */
1886dc2f1dbScgd 	/* 118 */	ED_INSERT,		/* v */
1896dc2f1dbScgd 	/* 119 */	ED_INSERT,		/* w */
1906dc2f1dbScgd 	/* 120 */	ED_INSERT,		/* x */
1916dc2f1dbScgd 	/* 121 */	ED_INSERT,		/* y */
1926dc2f1dbScgd 	/* 122 */	ED_INSERT,		/* z */
1936dc2f1dbScgd 	/* 123 */	ED_INSERT,		/* { */
1946dc2f1dbScgd 	/* 124 */	ED_INSERT,		/* | */
1956dc2f1dbScgd 	/* 125 */	ED_INSERT,		/* } */
1966dc2f1dbScgd 	/* 126 */	ED_INSERT,		/* ~ */
1976360c4b0Smycroft 	/* 127 */	EM_DELETE_PREV_CHAR,	/* ^? */
1986dc2f1dbScgd 	/* 128 */	ED_UNASSIGNED,		/* M-^@ */
1996dc2f1dbScgd 	/* 129 */	ED_UNASSIGNED,		/* M-^A */
2006dc2f1dbScgd 	/* 130 */	ED_UNASSIGNED,		/* M-^B */
2016dc2f1dbScgd 	/* 131 */	ED_UNASSIGNED,		/* M-^C */
2026dc2f1dbScgd 	/* 132 */	ED_UNASSIGNED,		/* M-^D */
2036dc2f1dbScgd 	/* 133 */	ED_UNASSIGNED,		/* M-^E */
2046dc2f1dbScgd 	/* 134 */	ED_UNASSIGNED,		/* M-^F */
2056dc2f1dbScgd 	/* 135 */	ED_UNASSIGNED,		/* M-^G */
2066dc2f1dbScgd 	/* 136 */	ED_DELETE_PREV_WORD,	/* M-^H */
2076dc2f1dbScgd 	/* 137 */	ED_UNASSIGNED,		/* M-^I */
2086dc2f1dbScgd 	/* 138 */	ED_UNASSIGNED,		/* M-^J */
2096dc2f1dbScgd 	/* 139 */	ED_UNASSIGNED,		/* M-^K */
2106dc2f1dbScgd 	/* 140 */	ED_CLEAR_SCREEN,	/* M-^L */
2116dc2f1dbScgd 	/* 141 */	ED_UNASSIGNED,		/* M-^M */
2126dc2f1dbScgd 	/* 142 */	ED_UNASSIGNED,		/* M-^N */
2136dc2f1dbScgd 	/* 143 */	ED_UNASSIGNED,		/* M-^O */
2146dc2f1dbScgd 	/* 144 */	ED_UNASSIGNED,		/* M-^P */
2156dc2f1dbScgd 	/* 145 */	ED_UNASSIGNED,		/* M-^Q */
2166dc2f1dbScgd 	/* 146 */	ED_UNASSIGNED,		/* M-^R */
2176dc2f1dbScgd 	/* 147 */	ED_UNASSIGNED,		/* M-^S */
2186dc2f1dbScgd 	/* 148 */	ED_UNASSIGNED,		/* M-^T */
2196dc2f1dbScgd 	/* 149 */	ED_UNASSIGNED,		/* M-^U */
2206dc2f1dbScgd 	/* 150 */	ED_UNASSIGNED,		/* M-^V */
2216dc2f1dbScgd 	/* 151 */	ED_UNASSIGNED,		/* M-^W */
2226dc2f1dbScgd 	/* 152 */	ED_UNASSIGNED,		/* M-^X */
2236dc2f1dbScgd 	/* 153 */	ED_UNASSIGNED,		/* M-^Y */
2246dc2f1dbScgd 	/* 154 */	ED_UNASSIGNED,		/* M-^Z */
2256dc2f1dbScgd 	/* 155 */	ED_UNASSIGNED,		/* M-^[ */
2266dc2f1dbScgd 	/* 156 */	ED_UNASSIGNED,		/* M-^\ */
2276dc2f1dbScgd 	/* 157 */	ED_UNASSIGNED,		/* M-^] */
2286dc2f1dbScgd 	/* 158 */	ED_UNASSIGNED,		/* M-^^ */
2296dc2f1dbScgd 	/* 159 */	EM_COPY_PREV_WORD,	/* M-^_ */
2306dc2f1dbScgd 	/* 160 */	ED_UNASSIGNED,		/* M-SPACE */
2316dc2f1dbScgd 	/* 161 */	ED_UNASSIGNED,		/* M-! */
2326dc2f1dbScgd 	/* 162 */	ED_UNASSIGNED,		/* M-" */
2336dc2f1dbScgd 	/* 163 */	ED_UNASSIGNED,		/* M-# */
2346dc2f1dbScgd 	/* 164 */	ED_UNASSIGNED,		/* M-$ */
2356dc2f1dbScgd 	/* 165 */	ED_UNASSIGNED,		/* M-% */
2366dc2f1dbScgd 	/* 166 */	ED_UNASSIGNED,		/* M-& */
2376dc2f1dbScgd 	/* 167 */	ED_UNASSIGNED,		/* M-' */
2386dc2f1dbScgd 	/* 168 */	ED_UNASSIGNED,		/* M-( */
2396dc2f1dbScgd 	/* 169 */	ED_UNASSIGNED,		/* M-) */
2406dc2f1dbScgd 	/* 170 */	ED_UNASSIGNED,		/* M-* */
2416dc2f1dbScgd 	/* 171 */	ED_UNASSIGNED,		/* M-+ */
2426dc2f1dbScgd 	/* 172 */	ED_UNASSIGNED,		/* M-, */
2436dc2f1dbScgd 	/* 173 */	ED_UNASSIGNED,		/* M-- */
2446dc2f1dbScgd 	/* 174 */	ED_UNASSIGNED,		/* M-. */
2456dc2f1dbScgd 	/* 175 */	ED_UNASSIGNED,		/* M-/ */
2466dc2f1dbScgd 	/* 176 */	ED_ARGUMENT_DIGIT,	/* M-0 */
2476dc2f1dbScgd 	/* 177 */	ED_ARGUMENT_DIGIT,	/* M-1 */
2486dc2f1dbScgd 	/* 178 */	ED_ARGUMENT_DIGIT,	/* M-2 */
2496dc2f1dbScgd 	/* 179 */	ED_ARGUMENT_DIGIT,	/* M-3 */
2506dc2f1dbScgd 	/* 180 */	ED_ARGUMENT_DIGIT,	/* M-4 */
2516dc2f1dbScgd 	/* 181 */	ED_ARGUMENT_DIGIT,	/* M-5 */
2526dc2f1dbScgd 	/* 182 */	ED_ARGUMENT_DIGIT,	/* M-6 */
2536dc2f1dbScgd 	/* 183 */	ED_ARGUMENT_DIGIT,	/* M-7 */
2546dc2f1dbScgd 	/* 184 */	ED_ARGUMENT_DIGIT,	/* M-8 */
2556dc2f1dbScgd 	/* 185 */	ED_ARGUMENT_DIGIT,	/* M-9 */
2566dc2f1dbScgd 	/* 186 */	ED_UNASSIGNED,		/* M-: */
2576dc2f1dbScgd 	/* 187 */	ED_UNASSIGNED,		/* M-; */
2586dc2f1dbScgd 	/* 188 */	ED_UNASSIGNED,		/* M-< */
2596dc2f1dbScgd 	/* 189 */	ED_UNASSIGNED,		/* M-= */
2606dc2f1dbScgd 	/* 190 */	ED_UNASSIGNED,		/* M-> */
2616dc2f1dbScgd 	/* 191 */	ED_UNASSIGNED,		/* M-? */
2626dc2f1dbScgd 	/* 192 */	ED_UNASSIGNED,		/* M-@ */
2636dc2f1dbScgd 	/* 193 */	ED_UNASSIGNED,		/* M-A */
2646dc2f1dbScgd 	/* 194 */	ED_PREV_WORD,		/* M-B */
2656dc2f1dbScgd 	/* 195 */	EM_CAPITOL_CASE,	/* M-C */
2666dc2f1dbScgd 	/* 196 */	EM_DELETE_NEXT_WORD,	/* M-D */
2676dc2f1dbScgd 	/* 197 */	ED_UNASSIGNED,		/* M-E */
2686dc2f1dbScgd 	/* 198 */	EM_NEXT_WORD,		/* M-F */
2696dc2f1dbScgd 	/* 199 */	ED_UNASSIGNED,		/* M-G */
2706dc2f1dbScgd 	/* 200 */	ED_UNASSIGNED,		/* M-H */
2716dc2f1dbScgd 	/* 201 */	ED_UNASSIGNED,		/* M-I */
2726dc2f1dbScgd 	/* 202 */	ED_UNASSIGNED,		/* M-J */
2736dc2f1dbScgd 	/* 203 */	ED_UNASSIGNED,		/* M-K */
2746dc2f1dbScgd 	/* 204 */	EM_LOWER_CASE,		/* M-L */
2756dc2f1dbScgd 	/* 205 */	ED_UNASSIGNED,		/* M-M */
2766dc2f1dbScgd 	/* 206 */	ED_SEARCH_NEXT_HISTORY,	/* M-N */
2776dc2f1dbScgd 	/* 207 */	ED_SEQUENCE_LEAD_IN,	/* M-O */
2786dc2f1dbScgd 	/* 208 */	ED_SEARCH_PREV_HISTORY,	/* M-P */
2796dc2f1dbScgd 	/* 209 */	ED_UNASSIGNED,		/* M-Q */
2806dc2f1dbScgd 	/* 210 */	ED_UNASSIGNED,		/* M-R */
2816dc2f1dbScgd 	/* 211 */	ED_UNASSIGNED,		/* M-S */
2826dc2f1dbScgd 	/* 212 */	ED_UNASSIGNED,		/* M-T */
2836dc2f1dbScgd 	/* 213 */	EM_UPPER_CASE,		/* M-U */
2846dc2f1dbScgd 	/* 214 */	ED_UNASSIGNED,		/* M-V */
2856dc2f1dbScgd 	/* 215 */	EM_COPY_REGION,		/* M-W */
2866dc2f1dbScgd 	/* 216 */	ED_COMMAND,		/* M-X */
2876dc2f1dbScgd 	/* 217 */	ED_UNASSIGNED,		/* M-Y */
2886dc2f1dbScgd 	/* 218 */	ED_UNASSIGNED,		/* M-Z */
2896dc2f1dbScgd 	/* 219 */	ED_SEQUENCE_LEAD_IN,	/* M-[ */
2906dc2f1dbScgd 	/* 220 */	ED_UNASSIGNED,		/* M-\ */
2916dc2f1dbScgd 	/* 221 */	ED_UNASSIGNED,		/* M-] */
2926dc2f1dbScgd 	/* 222 */	ED_UNASSIGNED,		/* M-^ */
2936dc2f1dbScgd 	/* 223 */	ED_UNASSIGNED,		/* M-_ */
2946dc2f1dbScgd 	/* 223 */	ED_UNASSIGNED,		/* M-` */
2956dc2f1dbScgd 	/* 224 */	ED_UNASSIGNED,		/* M-a */
2966dc2f1dbScgd 	/* 225 */	ED_PREV_WORD,		/* M-b */
2976dc2f1dbScgd 	/* 226 */	EM_CAPITOL_CASE,	/* M-c */
2986dc2f1dbScgd 	/* 227 */	EM_DELETE_NEXT_WORD,	/* M-d */
2996dc2f1dbScgd 	/* 228 */	ED_UNASSIGNED,		/* M-e */
3006dc2f1dbScgd 	/* 229 */	EM_NEXT_WORD,		/* M-f */
3016dc2f1dbScgd 	/* 230 */	ED_UNASSIGNED,		/* M-g */
3026dc2f1dbScgd 	/* 231 */	ED_UNASSIGNED,		/* M-h */
3036dc2f1dbScgd 	/* 232 */	ED_UNASSIGNED,		/* M-i */
3046dc2f1dbScgd 	/* 233 */	ED_UNASSIGNED,		/* M-j */
3056dc2f1dbScgd 	/* 234 */	ED_UNASSIGNED,		/* M-k */
3066dc2f1dbScgd 	/* 235 */	EM_LOWER_CASE,		/* M-l */
3076dc2f1dbScgd 	/* 236 */	ED_UNASSIGNED,		/* M-m */
3086dc2f1dbScgd 	/* 237 */	ED_SEARCH_NEXT_HISTORY,	/* M-n */
3096dc2f1dbScgd 	/* 238 */	ED_UNASSIGNED,		/* M-o */
3106dc2f1dbScgd 	/* 239 */	ED_SEARCH_PREV_HISTORY,	/* M-p */
3116dc2f1dbScgd 	/* 240 */	ED_UNASSIGNED,		/* M-q */
3126dc2f1dbScgd 	/* 241 */	ED_UNASSIGNED,		/* M-r */
3136dc2f1dbScgd 	/* 242 */	ED_UNASSIGNED,		/* M-s */
3146dc2f1dbScgd 	/* 243 */	ED_UNASSIGNED,		/* M-t */
3156dc2f1dbScgd 	/* 244 */	EM_UPPER_CASE,		/* M-u */
3166dc2f1dbScgd 	/* 245 */	ED_UNASSIGNED,		/* M-v */
3176dc2f1dbScgd 	/* 246 */	EM_COPY_REGION,		/* M-w */
3186dc2f1dbScgd 	/* 247 */	ED_COMMAND,		/* M-x */
3196dc2f1dbScgd 	/* 248 */	ED_UNASSIGNED,		/* M-y */
3206dc2f1dbScgd 	/* 249 */	ED_UNASSIGNED,		/* M-z */
3216dc2f1dbScgd 	/* 250 */	ED_UNASSIGNED,		/* M-{ */
3226dc2f1dbScgd 	/* 251 */	ED_UNASSIGNED,		/* M-| */
3236dc2f1dbScgd 	/* 252 */	ED_UNASSIGNED,		/* M-} */
3246dc2f1dbScgd 	/* 253 */	ED_UNASSIGNED,		/* M-~ */
3256dc2f1dbScgd 	/* 254 */	ED_DELETE_PREV_WORD	/* M-^? */
3266dc2f1dbScgd 	/* 255 */
3276dc2f1dbScgd };
3286dc2f1dbScgd 
329d30d584aSlukem 
3306dc2f1dbScgd /*
3316dc2f1dbScgd  * keymap table for vi.  Each index into above tbl; should be
3326dc2f1dbScgd  * N_KEYS entries long.  Vi mode uses a sticky-extend to do command mode:
3336dc2f1dbScgd  * insert mode characters are in the normal keymap, and command mode
3346dc2f1dbScgd  * in the extended keymap.
3356dc2f1dbScgd  */
336469d44f8Schristos static const el_action_t  el_map_vi_insert[] = {
3376dc2f1dbScgd #ifdef KSHVI
3386dc2f1dbScgd 	/*   0 */	ED_UNASSIGNED,		/* ^@ */
3396dc2f1dbScgd 	/*   1 */	ED_INSERT,		/* ^A */
3406dc2f1dbScgd 	/*   2 */	ED_INSERT,		/* ^B */
3416dc2f1dbScgd 	/*   3 */	ED_INSERT,		/* ^C */
3426dc2f1dbScgd 	/*   4 */	VI_LIST_OR_EOF,		/* ^D */
3436dc2f1dbScgd 	/*   5 */	ED_INSERT,		/* ^E */
3446dc2f1dbScgd 	/*   6 */	ED_INSERT,		/* ^F */
3456dc2f1dbScgd 	/*   7 */	ED_INSERT,		/* ^G */
3466dc2f1dbScgd 	/*   8 */	VI_DELETE_PREV_CHAR,	/* ^H */   /* BackSpace key */
3476dc2f1dbScgd 	/*   9 */	ED_INSERT,		/* ^I */   /* Tab Key  */
3486dc2f1dbScgd 	/*  10 */	ED_NEWLINE,		/* ^J */
3496dc2f1dbScgd 	/*  11 */	ED_INSERT,		/* ^K */
3506dc2f1dbScgd 	/*  12 */	ED_INSERT,		/* ^L */
3516dc2f1dbScgd 	/*  13 */	ED_NEWLINE,		/* ^M */
3526dc2f1dbScgd 	/*  14 */	ED_INSERT,		/* ^N */
3536dc2f1dbScgd 	/*  15 */	ED_INSERT,		/* ^O */
3546dc2f1dbScgd 	/*  16 */	ED_INSERT,		/* ^P */
355a2eaeedbSchristos 	/*  17 */	ED_IGNORE,		/* ^Q */
3566dc2f1dbScgd 	/*  18 */	ED_INSERT,		/* ^R */
357a2eaeedbSchristos 	/*  19 */	ED_IGNORE,		/* ^S */
3586dc2f1dbScgd 	/*  20 */	ED_INSERT,		/* ^T */
3596dc2f1dbScgd 	/*  21 */	VI_KILL_LINE_PREV,	/* ^U */
3606dc2f1dbScgd 	/*  22 */	ED_QUOTED_INSERT,	/* ^V */
361d30d584aSlukem 	/*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
362d30d584aSlukem 		/* ED_DELETE_PREV_WORD: Only until strt edit pos */
3636dc2f1dbScgd 	/*  24 */	ED_INSERT,		/* ^X */
3646dc2f1dbScgd 	/*  25 */	ED_INSERT,		/* ^Y */
3656dc2f1dbScgd 	/*  26 */	ED_INSERT,		/* ^Z */
3666dc2f1dbScgd 	/*  27 */	VI_COMMAND_MODE,	/* ^[ */  /* [ Esc ] key */
367a2eaeedbSchristos 	/*  28 */	ED_IGNORE,		/* ^\ */
3686dc2f1dbScgd 	/*  29 */	ED_INSERT,		/* ^] */
3696dc2f1dbScgd 	/*  30 */	ED_INSERT,		/* ^^ */
3706dc2f1dbScgd 	/*  31 */	ED_INSERT,		/* ^_ */
3716dc2f1dbScgd #else /* !KSHVI */
372d30d584aSlukem 				/*
373d30d584aSlukem 				 * NOTE: These mappings do NOT Correspond well
374d30d584aSlukem 				 * to the KSH VI editing assignments.
375d30d584aSlukem 				 * On the other and they are convenient and
376d30d584aSlukem 				 * many people have have gotten used to them.
377d30d584aSlukem 				 */
378d30d584aSlukem 	/*   0 */	ED_UNASSIGNED,		/* ^@ */
379d30d584aSlukem 	/*   1 */	ED_MOVE_TO_BEG,		/* ^A */
380d30d584aSlukem 	/*   2 */	ED_PREV_CHAR,		/* ^B */
381a2eaeedbSchristos 	/*   3 */	ED_IGNORE,		/* ^C */
382d30d584aSlukem 	/*   4 */	VI_LIST_OR_EOF,		/* ^D */
383d30d584aSlukem 	/*   5 */	ED_MOVE_TO_END,		/* ^E */
384d30d584aSlukem 	/*   6 */	ED_NEXT_CHAR,		/* ^F */
3856dc2f1dbScgd 	/*   7 */	ED_UNASSIGNED,		/* ^G */
386a17c7fe4Schristos 	/*   8 */	VI_DELETE_PREV_CHAR,	/* ^H */   /* BackSpace key */
3876dc2f1dbScgd 	/*   9 */	ED_UNASSIGNED,		/* ^I */   /* Tab Key */
3886dc2f1dbScgd 	/*  10 */	ED_NEWLINE,		/* ^J */
3896dc2f1dbScgd 	/*  11 */	ED_KILL_LINE,		/* ^K */
3906dc2f1dbScgd 	/*  12 */	ED_CLEAR_SCREEN,	/* ^L */
3916dc2f1dbScgd 	/*  13 */	ED_NEWLINE,		/* ^M */
3926dc2f1dbScgd 	/*  14 */	ED_NEXT_HISTORY,	/* ^N */
393a2eaeedbSchristos 	/*  15 */	ED_IGNORE,		/* ^O */
3946dc2f1dbScgd 	/*  16 */	ED_PREV_HISTORY,	/* ^P */
395a2eaeedbSchristos 	/*  17 */	ED_IGNORE,		/* ^Q */
3966dc2f1dbScgd 	/*  18 */	ED_REDISPLAY,		/* ^R */
397a2eaeedbSchristos 	/*  19 */	ED_IGNORE,		/* ^S */
3986dc2f1dbScgd 	/*  20 */	ED_TRANSPOSE_CHARS,	/* ^T */
3996dc2f1dbScgd 	/*  21 */	VI_KILL_LINE_PREV,	/* ^U */
4006dc2f1dbScgd 	/*  22 */	ED_QUOTED_INSERT,	/* ^V */
4016dc2f1dbScgd 	/*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
4026dc2f1dbScgd 	/*  24 */	ED_UNASSIGNED,		/* ^X */
403a2eaeedbSchristos 	/*  25 */	ED_IGNORE,		/* ^Y */
404a2eaeedbSchristos 	/*  26 */	ED_IGNORE,		/* ^Z */
4056dc2f1dbScgd 	/*  27 */	VI_COMMAND_MODE,	/* ^[ */
406a2eaeedbSchristos 	/*  28 */	ED_IGNORE,		/* ^\ */
4076dc2f1dbScgd 	/*  29 */	ED_UNASSIGNED,		/* ^] */
4086dc2f1dbScgd 	/*  30 */	ED_UNASSIGNED,		/* ^^ */
4096dc2f1dbScgd 	/*  31 */	ED_UNASSIGNED,		/* ^_ */
4106dc2f1dbScgd #endif  /* KSHVI */
4116dc2f1dbScgd 	/*  32 */	ED_INSERT,		/* SPACE */
4126dc2f1dbScgd 	/*  33 */	ED_INSERT,		/* ! */
4136dc2f1dbScgd 	/*  34 */	ED_INSERT,		/* " */
4146dc2f1dbScgd 	/*  35 */	ED_INSERT,		/* # */
4156dc2f1dbScgd 	/*  36 */	ED_INSERT,		/* $ */
4166dc2f1dbScgd 	/*  37 */	ED_INSERT,		/* % */
4176dc2f1dbScgd 	/*  38 */	ED_INSERT,		/* & */
4186dc2f1dbScgd 	/*  39 */	ED_INSERT,		/* ' */
4196dc2f1dbScgd 	/*  40 */	ED_INSERT,		/* ( */
4206dc2f1dbScgd 	/*  41 */	ED_INSERT,		/* ) */
4216dc2f1dbScgd 	/*  42 */	ED_INSERT,		/* * */
4226dc2f1dbScgd 	/*  43 */	ED_INSERT,		/* + */
4236dc2f1dbScgd 	/*  44 */	ED_INSERT,		/* , */
4246dc2f1dbScgd 	/*  45 */	ED_INSERT,		/* - */
4256dc2f1dbScgd 	/*  46 */	ED_INSERT,		/* . */
4266dc2f1dbScgd 	/*  47 */	ED_INSERT,		/* / */
4276dc2f1dbScgd 	/*  48 */	ED_INSERT,		/* 0 */
4286dc2f1dbScgd 	/*  49 */	ED_INSERT,		/* 1 */
4296dc2f1dbScgd 	/*  50 */	ED_INSERT,		/* 2 */
4306dc2f1dbScgd 	/*  51 */	ED_INSERT,		/* 3 */
4316dc2f1dbScgd 	/*  52 */	ED_INSERT,		/* 4 */
4326dc2f1dbScgd 	/*  53 */	ED_INSERT,		/* 5 */
4336dc2f1dbScgd 	/*  54 */	ED_INSERT,		/* 6 */
4346dc2f1dbScgd 	/*  55 */	ED_INSERT,		/* 7 */
4356dc2f1dbScgd 	/*  56 */	ED_INSERT,		/* 8 */
4366dc2f1dbScgd 	/*  57 */	ED_INSERT,		/* 9 */
4376dc2f1dbScgd 	/*  58 */	ED_INSERT,		/* : */
4386dc2f1dbScgd 	/*  59 */	ED_INSERT,		/* ; */
4396dc2f1dbScgd 	/*  60 */	ED_INSERT,		/* < */
4406dc2f1dbScgd 	/*  61 */	ED_INSERT,		/* = */
4416dc2f1dbScgd 	/*  62 */	ED_INSERT,		/* > */
4426dc2f1dbScgd 	/*  63 */	ED_INSERT,		/* ? */
4436dc2f1dbScgd 	/*  64 */	ED_INSERT,		/* @ */
4446dc2f1dbScgd 	/*  65 */	ED_INSERT,		/* A */
4456dc2f1dbScgd 	/*  66 */	ED_INSERT,		/* B */
4466dc2f1dbScgd 	/*  67 */	ED_INSERT,		/* C */
4476dc2f1dbScgd 	/*  68 */	ED_INSERT,		/* D */
4486dc2f1dbScgd 	/*  69 */	ED_INSERT,		/* E */
4496dc2f1dbScgd 	/*  70 */	ED_INSERT,		/* F */
4506dc2f1dbScgd 	/*  71 */	ED_INSERT,		/* G */
4516dc2f1dbScgd 	/*  72 */	ED_INSERT,		/* H */
4526dc2f1dbScgd 	/*  73 */	ED_INSERT,		/* I */
4536dc2f1dbScgd 	/*  74 */	ED_INSERT,		/* J */
4546dc2f1dbScgd 	/*  75 */	ED_INSERT,		/* K */
4556dc2f1dbScgd 	/*  76 */	ED_INSERT,		/* L */
4566dc2f1dbScgd 	/*  77 */	ED_INSERT,		/* M */
4576dc2f1dbScgd 	/*  78 */	ED_INSERT,		/* N */
4586dc2f1dbScgd 	/*  79 */	ED_INSERT,		/* O */
4596dc2f1dbScgd 	/*  80 */	ED_INSERT,		/* P */
4606dc2f1dbScgd 	/*  81 */	ED_INSERT,		/* Q */
4616dc2f1dbScgd 	/*  82 */	ED_INSERT,		/* R */
4626dc2f1dbScgd 	/*  83 */	ED_INSERT,		/* S */
4636dc2f1dbScgd 	/*  84 */	ED_INSERT,		/* T */
4646dc2f1dbScgd 	/*  85 */	ED_INSERT,		/* U */
4656dc2f1dbScgd 	/*  86 */	ED_INSERT,		/* V */
4666dc2f1dbScgd 	/*  87 */	ED_INSERT,		/* W */
4676dc2f1dbScgd 	/*  88 */	ED_INSERT,		/* X */
4686dc2f1dbScgd 	/*  89 */	ED_INSERT,		/* Y */
4696dc2f1dbScgd 	/*  90 */	ED_INSERT,		/* Z */
4706dc2f1dbScgd 	/*  91 */	ED_INSERT,		/* [ */
4716dc2f1dbScgd 	/*  92 */	ED_INSERT,		/* \ */
4726dc2f1dbScgd 	/*  93 */	ED_INSERT,		/* ] */
4736dc2f1dbScgd 	/*  94 */	ED_INSERT,		/* ^ */
4746dc2f1dbScgd 	/*  95 */	ED_INSERT,		/* _ */
4756dc2f1dbScgd 	/*  96 */	ED_INSERT,		/* ` */
4766dc2f1dbScgd 	/*  97 */	ED_INSERT,		/* a */
4776dc2f1dbScgd 	/*  98 */	ED_INSERT,		/* b */
4786dc2f1dbScgd 	/*  99 */	ED_INSERT,		/* c */
4796dc2f1dbScgd 	/* 100 */	ED_INSERT,		/* d */
4806dc2f1dbScgd 	/* 101 */	ED_INSERT,		/* e */
4816dc2f1dbScgd 	/* 102 */	ED_INSERT,		/* f */
4826dc2f1dbScgd 	/* 103 */	ED_INSERT,		/* g */
4836dc2f1dbScgd 	/* 104 */	ED_INSERT,		/* h */
4846dc2f1dbScgd 	/* 105 */	ED_INSERT,		/* i */
4856dc2f1dbScgd 	/* 106 */	ED_INSERT,		/* j */
4866dc2f1dbScgd 	/* 107 */	ED_INSERT,		/* k */
4876dc2f1dbScgd 	/* 108 */	ED_INSERT,		/* l */
4886dc2f1dbScgd 	/* 109 */	ED_INSERT,		/* m */
4896dc2f1dbScgd 	/* 110 */	ED_INSERT,		/* n */
4906dc2f1dbScgd 	/* 111 */	ED_INSERT,		/* o */
4916dc2f1dbScgd 	/* 112 */	ED_INSERT,		/* p */
4926dc2f1dbScgd 	/* 113 */	ED_INSERT,		/* q */
4936dc2f1dbScgd 	/* 114 */	ED_INSERT,		/* r */
4946dc2f1dbScgd 	/* 115 */	ED_INSERT,		/* s */
4956dc2f1dbScgd 	/* 116 */	ED_INSERT,		/* t */
4966dc2f1dbScgd 	/* 117 */	ED_INSERT,		/* u */
4976dc2f1dbScgd 	/* 118 */	ED_INSERT,		/* v */
4986dc2f1dbScgd 	/* 119 */	ED_INSERT,		/* w */
4996dc2f1dbScgd 	/* 120 */	ED_INSERT,		/* x */
5006dc2f1dbScgd 	/* 121 */	ED_INSERT,		/* y */
5016dc2f1dbScgd 	/* 122 */	ED_INSERT,		/* z */
5026dc2f1dbScgd 	/* 123 */	ED_INSERT,		/* { */
5036dc2f1dbScgd 	/* 124 */	ED_INSERT,		/* | */
5046dc2f1dbScgd 	/* 125 */	ED_INSERT,		/* } */
5056dc2f1dbScgd 	/* 126 */	ED_INSERT,		/* ~ */
506a17c7fe4Schristos 	/* 127 */	VI_DELETE_PREV_CHAR,	/* ^? */
50739f224afSchristos 	/* 128 */	ED_INSERT,		/* M-^@ */
50839f224afSchristos 	/* 129 */	ED_INSERT,		/* M-^A */
50939f224afSchristos 	/* 130 */	ED_INSERT,		/* M-^B */
51039f224afSchristos 	/* 131 */	ED_INSERT,		/* M-^C */
51139f224afSchristos 	/* 132 */	ED_INSERT,		/* M-^D */
51239f224afSchristos 	/* 133 */	ED_INSERT,		/* M-^E */
51339f224afSchristos 	/* 134 */	ED_INSERT,		/* M-^F */
51439f224afSchristos 	/* 135 */	ED_INSERT,		/* M-^G */
51539f224afSchristos 	/* 136 */	ED_INSERT,		/* M-^H */
51639f224afSchristos 	/* 137 */	ED_INSERT,		/* M-^I */
51739f224afSchristos 	/* 138 */	ED_INSERT,		/* M-^J */
51839f224afSchristos 	/* 139 */	ED_INSERT,		/* M-^K */
51939f224afSchristos 	/* 140 */	ED_INSERT,		/* M-^L */
52039f224afSchristos 	/* 141 */	ED_INSERT,		/* M-^M */
52139f224afSchristos 	/* 142 */	ED_INSERT,		/* M-^N */
52239f224afSchristos 	/* 143 */	ED_INSERT,		/* M-^O */
52339f224afSchristos 	/* 144 */	ED_INSERT,		/* M-^P */
52439f224afSchristos 	/* 145 */	ED_INSERT,		/* M-^Q */
52539f224afSchristos 	/* 146 */	ED_INSERT,		/* M-^R */
52639f224afSchristos 	/* 147 */	ED_INSERT,		/* M-^S */
52739f224afSchristos 	/* 148 */	ED_INSERT,		/* M-^T */
52839f224afSchristos 	/* 149 */	ED_INSERT,		/* M-^U */
52939f224afSchristos 	/* 150 */	ED_INSERT,		/* M-^V */
53039f224afSchristos 	/* 151 */	ED_INSERT,		/* M-^W */
53139f224afSchristos 	/* 152 */	ED_INSERT,		/* M-^X */
53239f224afSchristos 	/* 153 */	ED_INSERT,		/* M-^Y */
53339f224afSchristos 	/* 154 */	ED_INSERT,		/* M-^Z */
53439f224afSchristos 	/* 155 */	ED_INSERT,		/* M-^[ */
53539f224afSchristos 	/* 156 */	ED_INSERT,		/* M-^\ */
53639f224afSchristos 	/* 157 */	ED_INSERT,		/* M-^] */
53739f224afSchristos 	/* 158 */	ED_INSERT,		/* M-^^ */
53839f224afSchristos 	/* 159 */	ED_INSERT,		/* M-^_ */
53939f224afSchristos 	/* 160 */	ED_INSERT,		/* M-SPACE */
54039f224afSchristos 	/* 161 */	ED_INSERT,		/* M-! */
54139f224afSchristos 	/* 162 */	ED_INSERT,		/* M-" */
54239f224afSchristos 	/* 163 */	ED_INSERT,		/* M-# */
54339f224afSchristos 	/* 164 */	ED_INSERT,		/* M-$ */
54439f224afSchristos 	/* 165 */	ED_INSERT,		/* M-% */
54539f224afSchristos 	/* 166 */	ED_INSERT,		/* M-& */
54639f224afSchristos 	/* 167 */	ED_INSERT,		/* M-' */
54739f224afSchristos 	/* 168 */	ED_INSERT,		/* M-( */
54839f224afSchristos 	/* 169 */	ED_INSERT,		/* M-) */
54939f224afSchristos 	/* 170 */	ED_INSERT,		/* M-* */
55039f224afSchristos 	/* 171 */	ED_INSERT,		/* M-+ */
55139f224afSchristos 	/* 172 */	ED_INSERT,		/* M-, */
55239f224afSchristos 	/* 173 */	ED_INSERT,		/* M-- */
55339f224afSchristos 	/* 174 */	ED_INSERT,		/* M-. */
55439f224afSchristos 	/* 175 */	ED_INSERT,		/* M-/ */
55539f224afSchristos 	/* 176 */	ED_INSERT,		/* M-0 */
55639f224afSchristos 	/* 177 */	ED_INSERT,		/* M-1 */
55739f224afSchristos 	/* 178 */	ED_INSERT,		/* M-2 */
55839f224afSchristos 	/* 179 */	ED_INSERT,		/* M-3 */
55939f224afSchristos 	/* 180 */	ED_INSERT,		/* M-4 */
56039f224afSchristos 	/* 181 */	ED_INSERT,		/* M-5 */
56139f224afSchristos 	/* 182 */	ED_INSERT,		/* M-6 */
56239f224afSchristos 	/* 183 */	ED_INSERT,		/* M-7 */
56339f224afSchristos 	/* 184 */	ED_INSERT,		/* M-8 */
56439f224afSchristos 	/* 185 */	ED_INSERT,		/* M-9 */
56539f224afSchristos 	/* 186 */	ED_INSERT,		/* M-: */
56639f224afSchristos 	/* 187 */	ED_INSERT,		/* M-; */
56739f224afSchristos 	/* 188 */	ED_INSERT,		/* M-< */
56839f224afSchristos 	/* 189 */	ED_INSERT,		/* M-= */
56939f224afSchristos 	/* 190 */	ED_INSERT,		/* M-> */
57039f224afSchristos 	/* 191 */	ED_INSERT,		/* M-? */
57139f224afSchristos 	/* 192 */	ED_INSERT,		/* M-@ */
57239f224afSchristos 	/* 193 */	ED_INSERT,		/* M-A */
57339f224afSchristos 	/* 194 */	ED_INSERT,		/* M-B */
57439f224afSchristos 	/* 195 */	ED_INSERT,		/* M-C */
57539f224afSchristos 	/* 196 */	ED_INSERT,		/* M-D */
57639f224afSchristos 	/* 197 */	ED_INSERT,		/* M-E */
57739f224afSchristos 	/* 198 */	ED_INSERT,		/* M-F */
57839f224afSchristos 	/* 199 */	ED_INSERT,		/* M-G */
57939f224afSchristos 	/* 200 */	ED_INSERT,		/* M-H */
58039f224afSchristos 	/* 201 */	ED_INSERT,		/* M-I */
58139f224afSchristos 	/* 202 */	ED_INSERT,		/* M-J */
58239f224afSchristos 	/* 203 */	ED_INSERT,		/* M-K */
58339f224afSchristos 	/* 204 */	ED_INSERT,		/* M-L */
58439f224afSchristos 	/* 205 */	ED_INSERT,		/* M-M */
58539f224afSchristos 	/* 206 */	ED_INSERT,		/* M-N */
58639f224afSchristos 	/* 207 */	ED_INSERT,		/* M-O */
58739f224afSchristos 	/* 208 */	ED_INSERT,		/* M-P */
58839f224afSchristos 	/* 209 */	ED_INSERT,		/* M-Q */
58939f224afSchristos 	/* 210 */	ED_INSERT,		/* M-R */
59039f224afSchristos 	/* 211 */	ED_INSERT,		/* M-S */
59139f224afSchristos 	/* 212 */	ED_INSERT,		/* M-T */
59239f224afSchristos 	/* 213 */	ED_INSERT,		/* M-U */
59339f224afSchristos 	/* 214 */	ED_INSERT,		/* M-V */
59439f224afSchristos 	/* 215 */	ED_INSERT,		/* M-W */
59539f224afSchristos 	/* 216 */	ED_INSERT,		/* M-X */
59639f224afSchristos 	/* 217 */	ED_INSERT,		/* M-Y */
59739f224afSchristos 	/* 218 */	ED_INSERT,		/* M-Z */
59839f224afSchristos 	/* 219 */	ED_INSERT,		/* M-[ */
59939f224afSchristos 	/* 220 */	ED_INSERT,		/* M-\ */
60039f224afSchristos 	/* 221 */	ED_INSERT,		/* M-] */
60139f224afSchristos 	/* 222 */	ED_INSERT,		/* M-^ */
60239f224afSchristos 	/* 223 */	ED_INSERT,		/* M-_ */
60339f224afSchristos 	/* 224 */	ED_INSERT,		/* M-` */
60439f224afSchristos 	/* 225 */	ED_INSERT,		/* M-a */
60539f224afSchristos 	/* 226 */	ED_INSERT,		/* M-b */
60639f224afSchristos 	/* 227 */	ED_INSERT,		/* M-c */
60739f224afSchristos 	/* 228 */	ED_INSERT,		/* M-d */
60839f224afSchristos 	/* 229 */	ED_INSERT,		/* M-e */
60939f224afSchristos 	/* 230 */	ED_INSERT,		/* M-f */
61039f224afSchristos 	/* 231 */	ED_INSERT,		/* M-g */
61139f224afSchristos 	/* 232 */	ED_INSERT,		/* M-h */
61239f224afSchristos 	/* 233 */	ED_INSERT,		/* M-i */
61339f224afSchristos 	/* 234 */	ED_INSERT,		/* M-j */
61439f224afSchristos 	/* 235 */	ED_INSERT,		/* M-k */
61539f224afSchristos 	/* 236 */	ED_INSERT,		/* M-l */
61639f224afSchristos 	/* 237 */	ED_INSERT,		/* M-m */
61739f224afSchristos 	/* 238 */	ED_INSERT,		/* M-n */
61839f224afSchristos 	/* 239 */	ED_INSERT,		/* M-o */
61939f224afSchristos 	/* 240 */	ED_INSERT,		/* M-p */
62039f224afSchristos 	/* 241 */	ED_INSERT,		/* M-q */
62139f224afSchristos 	/* 242 */	ED_INSERT,		/* M-r */
62239f224afSchristos 	/* 243 */	ED_INSERT,		/* M-s */
62339f224afSchristos 	/* 244 */	ED_INSERT,		/* M-t */
62439f224afSchristos 	/* 245 */	ED_INSERT,		/* M-u */
62539f224afSchristos 	/* 246 */	ED_INSERT,		/* M-v */
62639f224afSchristos 	/* 247 */	ED_INSERT,		/* M-w */
62739f224afSchristos 	/* 248 */	ED_INSERT,		/* M-x */
62839f224afSchristos 	/* 249 */	ED_INSERT,		/* M-y */
62939f224afSchristos 	/* 250 */	ED_INSERT,		/* M-z */
63039f224afSchristos 	/* 251 */	ED_INSERT,		/* M-{ */
63139f224afSchristos 	/* 252 */	ED_INSERT,		/* M-| */
63239f224afSchristos 	/* 253 */	ED_INSERT,		/* M-} */
63339f224afSchristos 	/* 254 */	ED_INSERT,		/* M-~ */
63439f224afSchristos 	/* 255 */	ED_INSERT		/* M-^? */
6356dc2f1dbScgd };
6366dc2f1dbScgd 
637469d44f8Schristos static const el_action_t el_map_vi_command[] = {
6386dc2f1dbScgd 	/*   0 */	ED_UNASSIGNED,		/* ^@ */
6396dc2f1dbScgd 	/*   1 */	ED_MOVE_TO_BEG,		/* ^A */
6406dc2f1dbScgd 	/*   2 */	ED_UNASSIGNED,		/* ^B */
641a2eaeedbSchristos 	/*   3 */	ED_IGNORE,		/* ^C */
6426dc2f1dbScgd 	/*   4 */	ED_UNASSIGNED,		/* ^D */
6436dc2f1dbScgd 	/*   5 */	ED_MOVE_TO_END,		/* ^E */
6446dc2f1dbScgd 	/*   6 */	ED_UNASSIGNED,		/* ^F */
6456dc2f1dbScgd 	/*   7 */	ED_UNASSIGNED,		/* ^G */
646a17c7fe4Schristos 	/*   8 */	ED_DELETE_PREV_CHAR,	/* ^H */
6476dc2f1dbScgd 	/*   9 */	ED_UNASSIGNED,		/* ^I */
6486dc2f1dbScgd 	/*  10 */	ED_NEWLINE,		/* ^J */
6496dc2f1dbScgd 	/*  11 */	ED_KILL_LINE,		/* ^K */
6506dc2f1dbScgd 	/*  12 */	ED_CLEAR_SCREEN,	/* ^L */
6516dc2f1dbScgd 	/*  13 */	ED_NEWLINE,		/* ^M */
6526dc2f1dbScgd 	/*  14 */	ED_NEXT_HISTORY,	/* ^N */
653a2eaeedbSchristos 	/*  15 */	ED_IGNORE,		/* ^O */
6546dc2f1dbScgd 	/*  16 */	ED_PREV_HISTORY,	/* ^P */
655a2eaeedbSchristos 	/*  17 */	ED_IGNORE,		/* ^Q */
6566dc2f1dbScgd 	/*  18 */	ED_REDISPLAY,		/* ^R */
657a2eaeedbSchristos 	/*  19 */	ED_IGNORE,		/* ^S */
6586dc2f1dbScgd 	/*  20 */	ED_UNASSIGNED,		/* ^T */
6596dc2f1dbScgd 	/*  21 */	VI_KILL_LINE_PREV,	/* ^U */
6606dc2f1dbScgd 	/*  22 */	ED_UNASSIGNED,		/* ^V */
6616dc2f1dbScgd 	/*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
6626dc2f1dbScgd 	/*  24 */	ED_UNASSIGNED,		/* ^X */
6636dc2f1dbScgd 	/*  25 */	ED_UNASSIGNED,		/* ^Y */
6646dc2f1dbScgd 	/*  26 */	ED_UNASSIGNED,		/* ^Z */
6656dc2f1dbScgd 	/*  27 */	EM_META_NEXT,		/* ^[ */
666a2eaeedbSchristos 	/*  28 */	ED_IGNORE,		/* ^\ */
6676dc2f1dbScgd 	/*  29 */	ED_UNASSIGNED,		/* ^] */
6686dc2f1dbScgd 	/*  30 */	ED_UNASSIGNED,		/* ^^ */
6696dc2f1dbScgd 	/*  31 */	ED_UNASSIGNED,		/* ^_ */
6706dc2f1dbScgd 	/*  32 */	ED_NEXT_CHAR,		/* SPACE */
6716dc2f1dbScgd 	/*  33 */	ED_UNASSIGNED,		/* ! */
6726dc2f1dbScgd 	/*  34 */	ED_UNASSIGNED,		/* " */
67339f224afSchristos 	/*  35 */	VI_COMMENT_OUT,		/* # */
6746dc2f1dbScgd 	/*  36 */	ED_MOVE_TO_END,		/* $ */
675905b699aSchristos 	/*  37 */	VI_MATCH,		/* % */
6766dc2f1dbScgd 	/*  38 */	ED_UNASSIGNED,		/* & */
6776dc2f1dbScgd 	/*  39 */	ED_UNASSIGNED,		/* ' */
6786dc2f1dbScgd 	/*  40 */	ED_UNASSIGNED,		/* ( */
6796dc2f1dbScgd 	/*  41 */	ED_UNASSIGNED,		/* ) */
6806dc2f1dbScgd 	/*  42 */	ED_UNASSIGNED,		/* * */
6816dc2f1dbScgd 	/*  43 */	ED_NEXT_HISTORY,	/* + */
6826dc2f1dbScgd 	/*  44 */	VI_REPEAT_PREV_CHAR,	/* , */
6836dc2f1dbScgd 	/*  45 */	ED_PREV_HISTORY,	/* - */
68439f224afSchristos 	/*  46 */	VI_REDO,		/* . */
6856dc2f1dbScgd 	/*  47 */	VI_SEARCH_PREV,		/* / */
6866dc2f1dbScgd 	/*  48 */	VI_ZERO,		/* 0 */
6876dc2f1dbScgd 	/*  49 */	ED_ARGUMENT_DIGIT,	/* 1 */
6886dc2f1dbScgd 	/*  50 */	ED_ARGUMENT_DIGIT,	/* 2 */
6896dc2f1dbScgd 	/*  51 */	ED_ARGUMENT_DIGIT,	/* 3 */
6906dc2f1dbScgd 	/*  52 */	ED_ARGUMENT_DIGIT,	/* 4 */
6916dc2f1dbScgd 	/*  53 */	ED_ARGUMENT_DIGIT,	/* 5 */
6926dc2f1dbScgd 	/*  54 */	ED_ARGUMENT_DIGIT,	/* 6 */
6936dc2f1dbScgd 	/*  55 */	ED_ARGUMENT_DIGIT,	/* 7 */
6946dc2f1dbScgd 	/*  56 */	ED_ARGUMENT_DIGIT,	/* 8 */
6956dc2f1dbScgd 	/*  57 */	ED_ARGUMENT_DIGIT,	/* 9 */
6966dc2f1dbScgd 	/*  58 */	ED_COMMAND,		/* : */
6976dc2f1dbScgd 	/*  59 */	VI_REPEAT_NEXT_CHAR,	/* ; */
6986dc2f1dbScgd 	/*  60 */	ED_UNASSIGNED,		/* < */
6996dc2f1dbScgd 	/*  61 */	ED_UNASSIGNED,		/* = */
7006dc2f1dbScgd 	/*  62 */	ED_UNASSIGNED,		/* > */
7016dc2f1dbScgd 	/*  63 */	VI_SEARCH_NEXT,		/* ? */
70239f224afSchristos 	/*  64 */	VI_ALIAS,		/* @ */
7036dc2f1dbScgd 	/*  65 */	VI_ADD_AT_EOL,		/* A */
704a17c7fe4Schristos 	/*  66 */	VI_PREV_BIG_WORD,	/* B */
7056dc2f1dbScgd 	/*  67 */	VI_CHANGE_TO_EOL,	/* C */
7066dc2f1dbScgd 	/*  68 */	ED_KILL_LINE,		/* D */
707a17c7fe4Schristos 	/*  69 */	VI_END_BIG_WORD,	/* E */
7086dc2f1dbScgd 	/*  70 */	VI_PREV_CHAR,		/* F */
70939f224afSchristos 	/*  71 */	VI_TO_HISTORY_LINE,	/* G */
7106dc2f1dbScgd 	/*  72 */	ED_UNASSIGNED,		/* H */
7116dc2f1dbScgd 	/*  73 */	VI_INSERT_AT_BOL,	/* I */
7126dc2f1dbScgd 	/*  74 */	ED_SEARCH_NEXT_HISTORY,	/* J */
7136dc2f1dbScgd 	/*  75 */	ED_SEARCH_PREV_HISTORY,	/* K */
7146dc2f1dbScgd 	/*  76 */	ED_UNASSIGNED,		/* L */
7156dc2f1dbScgd 	/*  77 */	ED_UNASSIGNED,		/* M */
7166dc2f1dbScgd 	/*  78 */	VI_REPEAT_SEARCH_PREV,	/* N */
7176dc2f1dbScgd 	/*  79 */	ED_SEQUENCE_LEAD_IN,	/* O */
7186dc2f1dbScgd 	/*  80 */	VI_PASTE_PREV,		/* P */
7196dc2f1dbScgd 	/*  81 */	ED_UNASSIGNED,		/* Q */
7206dc2f1dbScgd 	/*  82 */	VI_REPLACE_MODE,	/* R */
7216dc2f1dbScgd 	/*  83 */	VI_SUBSTITUTE_LINE,	/* S */
7226dc2f1dbScgd 	/*  84 */	VI_TO_PREV_CHAR,	/* T */
72339f224afSchristos 	/*  85 */	VI_UNDO_LINE,		/* U */
7246dc2f1dbScgd 	/*  86 */	ED_UNASSIGNED,		/* V */
725a17c7fe4Schristos 	/*  87 */	VI_NEXT_BIG_WORD,	/* W */
7266dc2f1dbScgd 	/*  88 */	ED_DELETE_PREV_CHAR,	/* X */
72739f224afSchristos 	/*  89 */	VI_YANK_END,		/* Y */
7286dc2f1dbScgd 	/*  90 */	ED_UNASSIGNED,		/* Z */
7296dc2f1dbScgd 	/*  91 */	ED_SEQUENCE_LEAD_IN,	/* [ */
7306dc2f1dbScgd 	/*  92 */	ED_UNASSIGNED,		/* \ */
7316dc2f1dbScgd 	/*  93 */	ED_UNASSIGNED,		/* ] */
7326dc2f1dbScgd 	/*  94 */	ED_MOVE_TO_BEG,		/* ^ */
73339f224afSchristos 	/*  95 */	VI_HISTORY_WORD,	/* _ */
7346dc2f1dbScgd 	/*  96 */	ED_UNASSIGNED,		/* ` */
7356dc2f1dbScgd 	/*  97 */	VI_ADD,			/* a */
7366dc2f1dbScgd 	/*  98 */	VI_PREV_WORD,		/* b */
7376dc2f1dbScgd 	/*  99 */	VI_CHANGE_META,		/* c */
7386dc2f1dbScgd 	/* 100 */	VI_DELETE_META,		/* d */
7396dc2f1dbScgd 	/* 101 */	VI_END_WORD,		/* e */
7406dc2f1dbScgd 	/* 102 */	VI_NEXT_CHAR,		/* f */
7416dc2f1dbScgd 	/* 103 */	ED_UNASSIGNED,		/* g */
7426dc2f1dbScgd 	/* 104 */	ED_PREV_CHAR,		/* h */
7436dc2f1dbScgd 	/* 105 */	VI_INSERT,		/* i */
7446dc2f1dbScgd 	/* 106 */	ED_NEXT_HISTORY,	/* j */
7456dc2f1dbScgd 	/* 107 */	ED_PREV_HISTORY,	/* k */
7466dc2f1dbScgd 	/* 108 */	ED_NEXT_CHAR,		/* l */
7476dc2f1dbScgd 	/* 109 */	ED_UNASSIGNED,		/* m */
7486dc2f1dbScgd 	/* 110 */	VI_REPEAT_SEARCH_NEXT,	/* n */
7496dc2f1dbScgd 	/* 111 */	ED_UNASSIGNED,		/* o */
7506dc2f1dbScgd 	/* 112 */	VI_PASTE_NEXT,		/* p */
7516dc2f1dbScgd 	/* 113 */	ED_UNASSIGNED,		/* q */
7526dc2f1dbScgd 	/* 114 */	VI_REPLACE_CHAR,	/* r */
7536dc2f1dbScgd 	/* 115 */	VI_SUBSTITUTE_CHAR,	/* s */
7546dc2f1dbScgd 	/* 116 */	VI_TO_NEXT_CHAR,	/* t */
7556dc2f1dbScgd 	/* 117 */	VI_UNDO,		/* u */
75639f224afSchristos 	/* 118 */	VI_HISTEDIT,		/* v */
7576dc2f1dbScgd 	/* 119 */	VI_NEXT_WORD,		/* w */
7586dc2f1dbScgd 	/* 120 */	ED_DELETE_NEXT_CHAR,	/* x */
75939f224afSchristos 	/* 121 */	VI_YANK,		/* y */
7606dc2f1dbScgd 	/* 122 */	ED_UNASSIGNED,		/* z */
7616dc2f1dbScgd 	/* 123 */	ED_UNASSIGNED,		/* { */
76239f224afSchristos 	/* 124 */	VI_TO_COLUMN,		/* | */
7636dc2f1dbScgd 	/* 125 */	ED_UNASSIGNED,		/* } */
7646dc2f1dbScgd 	/* 126 */	VI_CHANGE_CASE,		/* ~ */
7656dc2f1dbScgd 	/* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
7666dc2f1dbScgd 	/* 128 */	ED_UNASSIGNED,		/* M-^@ */
7676dc2f1dbScgd 	/* 129 */	ED_UNASSIGNED,		/* M-^A */
7686dc2f1dbScgd 	/* 130 */	ED_UNASSIGNED,		/* M-^B */
7696dc2f1dbScgd 	/* 131 */	ED_UNASSIGNED,		/* M-^C */
7706dc2f1dbScgd 	/* 132 */	ED_UNASSIGNED,		/* M-^D */
7716dc2f1dbScgd 	/* 133 */	ED_UNASSIGNED,		/* M-^E */
7726dc2f1dbScgd 	/* 134 */	ED_UNASSIGNED,		/* M-^F */
7736dc2f1dbScgd 	/* 135 */	ED_UNASSIGNED,		/* M-^G */
7746dc2f1dbScgd 	/* 136 */	ED_UNASSIGNED,		/* M-^H */
7756dc2f1dbScgd 	/* 137 */	ED_UNASSIGNED,		/* M-^I */
7766dc2f1dbScgd 	/* 138 */	ED_UNASSIGNED,		/* M-^J */
7776dc2f1dbScgd 	/* 139 */	ED_UNASSIGNED,		/* M-^K */
7786dc2f1dbScgd 	/* 140 */	ED_UNASSIGNED,		/* M-^L */
7796dc2f1dbScgd 	/* 141 */	ED_UNASSIGNED,		/* M-^M */
7806dc2f1dbScgd 	/* 142 */	ED_UNASSIGNED,		/* M-^N */
7816dc2f1dbScgd 	/* 143 */	ED_UNASSIGNED,		/* M-^O */
7826dc2f1dbScgd 	/* 144 */	ED_UNASSIGNED,		/* M-^P */
7836dc2f1dbScgd 	/* 145 */	ED_UNASSIGNED,		/* M-^Q */
7846dc2f1dbScgd 	/* 146 */	ED_UNASSIGNED,		/* M-^R */
7856dc2f1dbScgd 	/* 147 */	ED_UNASSIGNED,		/* M-^S */
7866dc2f1dbScgd 	/* 148 */	ED_UNASSIGNED,		/* M-^T */
7876dc2f1dbScgd 	/* 149 */	ED_UNASSIGNED,		/* M-^U */
7886dc2f1dbScgd 	/* 150 */	ED_UNASSIGNED,		/* M-^V */
7896dc2f1dbScgd 	/* 151 */	ED_UNASSIGNED,		/* M-^W */
7906dc2f1dbScgd 	/* 152 */	ED_UNASSIGNED,		/* M-^X */
7916dc2f1dbScgd 	/* 153 */	ED_UNASSIGNED,		/* M-^Y */
7926dc2f1dbScgd 	/* 154 */	ED_UNASSIGNED,		/* M-^Z */
7936dc2f1dbScgd 	/* 155 */	ED_UNASSIGNED,		/* M-^[ */
7946dc2f1dbScgd 	/* 156 */	ED_UNASSIGNED,		/* M-^\ */
7956dc2f1dbScgd 	/* 157 */	ED_UNASSIGNED,		/* M-^] */
7966dc2f1dbScgd 	/* 158 */	ED_UNASSIGNED,		/* M-^^ */
7976dc2f1dbScgd 	/* 159 */	ED_UNASSIGNED,		/* M-^_ */
7986dc2f1dbScgd 	/* 160 */	ED_UNASSIGNED,		/* M-SPACE */
7996dc2f1dbScgd 	/* 161 */	ED_UNASSIGNED,		/* M-! */
8006dc2f1dbScgd 	/* 162 */	ED_UNASSIGNED,		/* M-" */
8016dc2f1dbScgd 	/* 163 */	ED_UNASSIGNED,		/* M-# */
8026dc2f1dbScgd 	/* 164 */	ED_UNASSIGNED,		/* M-$ */
8036dc2f1dbScgd 	/* 165 */	ED_UNASSIGNED,		/* M-% */
8046dc2f1dbScgd 	/* 166 */	ED_UNASSIGNED,		/* M-& */
8056dc2f1dbScgd 	/* 167 */	ED_UNASSIGNED,		/* M-' */
8066dc2f1dbScgd 	/* 168 */	ED_UNASSIGNED,		/* M-( */
8076dc2f1dbScgd 	/* 169 */	ED_UNASSIGNED,		/* M-) */
8086dc2f1dbScgd 	/* 170 */	ED_UNASSIGNED,		/* M-* */
8096dc2f1dbScgd 	/* 171 */	ED_UNASSIGNED,		/* M-+ */
8106dc2f1dbScgd 	/* 172 */	ED_UNASSIGNED,		/* M-, */
8116dc2f1dbScgd 	/* 173 */	ED_UNASSIGNED,		/* M-- */
8126dc2f1dbScgd 	/* 174 */	ED_UNASSIGNED,		/* M-. */
8136dc2f1dbScgd 	/* 175 */	ED_UNASSIGNED,		/* M-/ */
8146dc2f1dbScgd 	/* 176 */	ED_UNASSIGNED,		/* M-0 */
8156dc2f1dbScgd 	/* 177 */	ED_UNASSIGNED,		/* M-1 */
8166dc2f1dbScgd 	/* 178 */	ED_UNASSIGNED,		/* M-2 */
8176dc2f1dbScgd 	/* 179 */	ED_UNASSIGNED,		/* M-3 */
8186dc2f1dbScgd 	/* 180 */	ED_UNASSIGNED,		/* M-4 */
8196dc2f1dbScgd 	/* 181 */	ED_UNASSIGNED,		/* M-5 */
8206dc2f1dbScgd 	/* 182 */	ED_UNASSIGNED,		/* M-6 */
8216dc2f1dbScgd 	/* 183 */	ED_UNASSIGNED,		/* M-7 */
8226dc2f1dbScgd 	/* 184 */	ED_UNASSIGNED,		/* M-8 */
8236dc2f1dbScgd 	/* 185 */	ED_UNASSIGNED,		/* M-9 */
8246dc2f1dbScgd 	/* 186 */	ED_UNASSIGNED,		/* M-: */
8256dc2f1dbScgd 	/* 187 */	ED_UNASSIGNED,		/* M-; */
8266dc2f1dbScgd 	/* 188 */	ED_UNASSIGNED,		/* M-< */
8276dc2f1dbScgd 	/* 189 */	ED_UNASSIGNED,		/* M-= */
8286dc2f1dbScgd 	/* 190 */	ED_UNASSIGNED,		/* M-> */
8296dc2f1dbScgd 	/* 191 */	ED_UNASSIGNED,		/* M-? */
8306dc2f1dbScgd 	/* 192 */	ED_UNASSIGNED,		/* M-@ */
8316dc2f1dbScgd 	/* 193 */	ED_UNASSIGNED,		/* M-A */
8326dc2f1dbScgd 	/* 194 */	ED_UNASSIGNED,		/* M-B */
8336dc2f1dbScgd 	/* 195 */	ED_UNASSIGNED,		/* M-C */
8346dc2f1dbScgd 	/* 196 */	ED_UNASSIGNED,		/* M-D */
8356dc2f1dbScgd 	/* 197 */	ED_UNASSIGNED,		/* M-E */
8366dc2f1dbScgd 	/* 198 */	ED_UNASSIGNED,		/* M-F */
8376dc2f1dbScgd 	/* 199 */	ED_UNASSIGNED,		/* M-G */
8386dc2f1dbScgd 	/* 200 */	ED_UNASSIGNED,		/* M-H */
8396dc2f1dbScgd 	/* 201 */	ED_UNASSIGNED,		/* M-I */
8406dc2f1dbScgd 	/* 202 */	ED_UNASSIGNED,		/* M-J */
8416dc2f1dbScgd 	/* 203 */	ED_UNASSIGNED,		/* M-K */
8426dc2f1dbScgd 	/* 204 */	ED_UNASSIGNED,		/* M-L */
8436dc2f1dbScgd 	/* 205 */	ED_UNASSIGNED,		/* M-M */
8446dc2f1dbScgd 	/* 206 */	ED_UNASSIGNED,		/* M-N */
8456dc2f1dbScgd 	/* 207 */	ED_SEQUENCE_LEAD_IN,	/* M-O */
8466dc2f1dbScgd 	/* 208 */	ED_UNASSIGNED,		/* M-P */
8476dc2f1dbScgd 	/* 209 */	ED_UNASSIGNED,		/* M-Q */
8486dc2f1dbScgd 	/* 210 */	ED_UNASSIGNED,		/* M-R */
8496dc2f1dbScgd 	/* 211 */	ED_UNASSIGNED,		/* M-S */
8506dc2f1dbScgd 	/* 212 */	ED_UNASSIGNED,		/* M-T */
8516dc2f1dbScgd 	/* 213 */	ED_UNASSIGNED,		/* M-U */
8526dc2f1dbScgd 	/* 214 */	ED_UNASSIGNED,		/* M-V */
8536dc2f1dbScgd 	/* 215 */	ED_UNASSIGNED,		/* M-W */
8546dc2f1dbScgd 	/* 216 */	ED_UNASSIGNED,		/* M-X */
8556dc2f1dbScgd 	/* 217 */	ED_UNASSIGNED,		/* M-Y */
8566dc2f1dbScgd 	/* 218 */	ED_UNASSIGNED,		/* M-Z */
8576dc2f1dbScgd 	/* 219 */	ED_SEQUENCE_LEAD_IN,	/* M-[ */
8586dc2f1dbScgd 	/* 220 */	ED_UNASSIGNED,		/* M-\ */
8596dc2f1dbScgd 	/* 221 */	ED_UNASSIGNED,		/* M-] */
8606dc2f1dbScgd 	/* 222 */	ED_UNASSIGNED,		/* M-^ */
8616dc2f1dbScgd 	/* 223 */	ED_UNASSIGNED,		/* M-_ */
8626dc2f1dbScgd 	/* 224 */	ED_UNASSIGNED,		/* M-` */
8636dc2f1dbScgd 	/* 225 */	ED_UNASSIGNED,		/* M-a */
8646dc2f1dbScgd 	/* 226 */	ED_UNASSIGNED,		/* M-b */
8656dc2f1dbScgd 	/* 227 */	ED_UNASSIGNED,		/* M-c */
8666dc2f1dbScgd 	/* 228 */	ED_UNASSIGNED,		/* M-d */
8676dc2f1dbScgd 	/* 229 */	ED_UNASSIGNED,		/* M-e */
8686dc2f1dbScgd 	/* 230 */	ED_UNASSIGNED,		/* M-f */
8696dc2f1dbScgd 	/* 231 */	ED_UNASSIGNED,		/* M-g */
8706dc2f1dbScgd 	/* 232 */	ED_UNASSIGNED,		/* M-h */
8716dc2f1dbScgd 	/* 233 */	ED_UNASSIGNED,		/* M-i */
8726dc2f1dbScgd 	/* 234 */	ED_UNASSIGNED,		/* M-j */
8736dc2f1dbScgd 	/* 235 */	ED_UNASSIGNED,		/* M-k */
8746dc2f1dbScgd 	/* 236 */	ED_UNASSIGNED,		/* M-l */
8756dc2f1dbScgd 	/* 237 */	ED_UNASSIGNED,		/* M-m */
8766dc2f1dbScgd 	/* 238 */	ED_UNASSIGNED,		/* M-n */
8776dc2f1dbScgd 	/* 239 */	ED_UNASSIGNED,		/* M-o */
8786dc2f1dbScgd 	/* 240 */	ED_UNASSIGNED,		/* M-p */
8796dc2f1dbScgd 	/* 241 */	ED_UNASSIGNED,		/* M-q */
8806dc2f1dbScgd 	/* 242 */	ED_UNASSIGNED,		/* M-r */
8816dc2f1dbScgd 	/* 243 */	ED_UNASSIGNED,		/* M-s */
8826dc2f1dbScgd 	/* 244 */	ED_UNASSIGNED,		/* M-t */
8836dc2f1dbScgd 	/* 245 */	ED_UNASSIGNED,		/* M-u */
8846dc2f1dbScgd 	/* 246 */	ED_UNASSIGNED,		/* M-v */
8856dc2f1dbScgd 	/* 247 */	ED_UNASSIGNED,		/* M-w */
8866dc2f1dbScgd 	/* 248 */	ED_UNASSIGNED,		/* M-x */
8876dc2f1dbScgd 	/* 249 */	ED_UNASSIGNED,		/* M-y */
8886dc2f1dbScgd 	/* 250 */	ED_UNASSIGNED,		/* M-z */
8896dc2f1dbScgd 	/* 251 */	ED_UNASSIGNED,		/* M-{ */
8906dc2f1dbScgd 	/* 252 */	ED_UNASSIGNED,		/* M-| */
8916dc2f1dbScgd 	/* 253 */	ED_UNASSIGNED,		/* M-} */
8926dc2f1dbScgd 	/* 254 */	ED_UNASSIGNED,		/* M-~ */
8936dc2f1dbScgd 	/* 255 */	ED_UNASSIGNED		/* M-^? */
8946dc2f1dbScgd };
8956dc2f1dbScgd 
8966dc2f1dbScgd 
8976dc2f1dbScgd /* map_init():
8986dc2f1dbScgd  *	Initialize and allocate the maps
8996dc2f1dbScgd  */
900a2d6b270Schristos libedit_private int
901d30d584aSlukem map_init(EditLine *el)
9026dc2f1dbScgd {
9036dc2f1dbScgd 
9046dc2f1dbScgd 	/*
9056dc2f1dbScgd          * Make sure those are correct before starting.
9066dc2f1dbScgd          */
9076dc2f1dbScgd #ifdef MAP_DEBUG
9086dc2f1dbScgd 	if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
9091148c426Sryo 		EL_ABORT((el->el_errfile, "Emacs map incorrect\n"));
9106dc2f1dbScgd 	if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
9111148c426Sryo 		EL_ABORT((el->el_errfile, "Vi command map incorrect\n"));
9126dc2f1dbScgd 	if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
9131148c426Sryo 		EL_ABORT((el->el_errfile, "Vi insert map incorrect\n"));
9146dc2f1dbScgd #endif
9156dc2f1dbScgd 
916113f06a3Schristos 	el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt));
9172f3389ceSchristos 	if (el->el_map.alt == NULL)
918b71bed95Schristos 		return -1;
919113f06a3Schristos 	el->el_map.key = el_calloc(N_KEYS, sizeof(*el->el_map.key));
9202f3389ceSchristos 	if (el->el_map.key == NULL)
92121a4b1ccSchristos 		goto out;
9226dc2f1dbScgd 	el->el_map.emacs = el_map_emacs;
9236dc2f1dbScgd 	el->el_map.vic = el_map_vi_command;
9246dc2f1dbScgd 	el->el_map.vii = el_map_vi_insert;
925113f06a3Schristos 	el->el_map.help = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.help));
9262f3389ceSchristos 	if (el->el_map.help == NULL)
92721a4b1ccSchristos 		goto out;
9284fc1f47dSchristos 	(void) memcpy(el->el_map.help, el_func_help,
929a13cd756Schristos 	    sizeof(*el->el_map.help) * EL_NUM_FCNS);
930113f06a3Schristos 	el->el_map.func = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.func));
9312f3389ceSchristos 	if (el->el_map.func == NULL)
93221a4b1ccSchristos 		goto out;
9334fc1f47dSchristos 	memcpy(el->el_map.func, el_func, sizeof(*el->el_map.func)
934a13cd756Schristos 	    * EL_NUM_FCNS);
9356dc2f1dbScgd 	el->el_map.nfunc = EL_NUM_FCNS;
9366dc2f1dbScgd 
9376dc2f1dbScgd #ifdef VIDEFAULT
9386dc2f1dbScgd 	map_init_vi(el);
9396dc2f1dbScgd #else
9406dc2f1dbScgd 	map_init_emacs(el);
9416dc2f1dbScgd #endif /* VIDEFAULT */
942b71bed95Schristos 	return 0;
94321a4b1ccSchristos out:
94421a4b1ccSchristos 	map_end(el);
94521a4b1ccSchristos 	return -1;
9466dc2f1dbScgd }
9476dc2f1dbScgd 
9486dc2f1dbScgd 
9496dc2f1dbScgd /* map_end():
9506dc2f1dbScgd  *	Free the space taken by the editor maps
9516dc2f1dbScgd  */
952a2d6b270Schristos libedit_private void
953d30d584aSlukem map_end(EditLine *el)
9546dc2f1dbScgd {
955d30d584aSlukem 
956a13cd756Schristos 	el_free(el->el_map.alt);
9576dc2f1dbScgd 	el->el_map.alt = NULL;
958a13cd756Schristos 	el_free(el->el_map.key);
9596dc2f1dbScgd 	el->el_map.key = NULL;
9606dc2f1dbScgd 	el->el_map.emacs = NULL;
9616dc2f1dbScgd 	el->el_map.vic = NULL;
9626dc2f1dbScgd 	el->el_map.vii = NULL;
963a13cd756Schristos 	el_free(el->el_map.help);
9646dc2f1dbScgd 	el->el_map.help = NULL;
965a13cd756Schristos 	el_free(el->el_map.func);
9666dc2f1dbScgd 	el->el_map.func = NULL;
9676dc2f1dbScgd }
9686dc2f1dbScgd 
9696dc2f1dbScgd 
9706dc2f1dbScgd /* map_init_nls():
9716dc2f1dbScgd  *	Find all the printable keys and bind them to self insert
9726dc2f1dbScgd  */
973469d44f8Schristos static void
974d30d584aSlukem map_init_nls(EditLine *el)
9756dc2f1dbScgd {
9766dc2f1dbScgd 	int i;
977d30d584aSlukem 
9786dc2f1dbScgd 	el_action_t *map = el->el_map.key;
9796dc2f1dbScgd 
9806dc2f1dbScgd 	for (i = 0200; i <= 0377; i++)
981fcf85103Schristos 		if (iswprint(i))
9826dc2f1dbScgd 			map[i] = ED_INSERT;
9836dc2f1dbScgd }
9846dc2f1dbScgd 
9856dc2f1dbScgd 
9866dc2f1dbScgd /* map_init_meta():
9876dc2f1dbScgd  *	Bind all the meta keys to the appropriate ESC-<key> sequence
9886dc2f1dbScgd  */
989469d44f8Schristos static void
990d30d584aSlukem map_init_meta(EditLine *el)
9916dc2f1dbScgd {
9920594af80Schristos 	wchar_t buf[3];
9930b7831a3Sperry 	int i;
9946dc2f1dbScgd 	el_action_t *map = el->el_map.key;
9956dc2f1dbScgd 	el_action_t *alt = el->el_map.alt;
9966dc2f1dbScgd 
9976dc2f1dbScgd 	for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
9986dc2f1dbScgd 		continue;
9996dc2f1dbScgd 
10006dc2f1dbScgd 	if (i > 0377) {
10016dc2f1dbScgd 		for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
10026dc2f1dbScgd 			continue;
10036dc2f1dbScgd 		if (i > 0377) {
10046dc2f1dbScgd 			i = 033;
10056dc2f1dbScgd 			if (el->el_map.type == MAP_VI)
10066dc2f1dbScgd 				map = alt;
1007d30d584aSlukem 		} else
10086dc2f1dbScgd 			map = alt;
10096dc2f1dbScgd 	}
10100594af80Schristos 	buf[0] = (wchar_t)i;
10116dc2f1dbScgd 	buf[2] = 0;
10126dc2f1dbScgd 	for (i = 0200; i <= 0377; i++)
10136dc2f1dbScgd 		switch (map[i]) {
10146dc2f1dbScgd 		case ED_INSERT:
10156dc2f1dbScgd 		case ED_UNASSIGNED:
10166dc2f1dbScgd 		case ED_SEQUENCE_LEAD_IN:
10176dc2f1dbScgd 			break;
10186dc2f1dbScgd 		default:
10196dc2f1dbScgd 			buf[1] = i & 0177;
1020d47f9584Schristos 			keymacro_add(el, buf, keymacro_map_cmd(el, (int) map[i]), XK_CMD);
10216dc2f1dbScgd 			break;
10226dc2f1dbScgd 		}
102353b97078Smrg 	map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
10246dc2f1dbScgd }
10256dc2f1dbScgd 
10266dc2f1dbScgd 
10276dc2f1dbScgd /* map_init_vi():
10286dc2f1dbScgd  *	Initialize the vi bindings
10296dc2f1dbScgd  */
1030a2d6b270Schristos libedit_private void
1031d30d584aSlukem map_init_vi(EditLine *el)
10326dc2f1dbScgd {
10330b7831a3Sperry 	int i;
10346dc2f1dbScgd 	el_action_t *key = el->el_map.key;
10356dc2f1dbScgd 	el_action_t *alt = el->el_map.alt;
1036a76c617cSjdolecek 	const el_action_t *vii = el->el_map.vii;
1037a76c617cSjdolecek 	const el_action_t *vic = el->el_map.vic;
10386dc2f1dbScgd 
10396dc2f1dbScgd 	el->el_map.type = MAP_VI;
10406dc2f1dbScgd 	el->el_map.current = el->el_map.key;
10416dc2f1dbScgd 
1042d47f9584Schristos 	keymacro_reset(el);
10436dc2f1dbScgd 
10446dc2f1dbScgd 	for (i = 0; i < N_KEYS; i++) {
10456dc2f1dbScgd 		key[i] = vii[i];
10466dc2f1dbScgd 		alt[i] = vic[i];
10476dc2f1dbScgd 	}
10486dc2f1dbScgd 
10496dc2f1dbScgd 	map_init_meta(el);
10506dc2f1dbScgd 	map_init_nls(el);
10516dc2f1dbScgd 
10526dc2f1dbScgd 	tty_bind_char(el, 1);
105398c7cbebSchristos 	terminal_bind_arrow(el);
10546dc2f1dbScgd }
10556dc2f1dbScgd 
10566dc2f1dbScgd 
10576dc2f1dbScgd /* map_init_emacs():
10586dc2f1dbScgd  *	Initialize the emacs bindings
10596dc2f1dbScgd  */
1060a2d6b270Schristos libedit_private void
1061d30d584aSlukem map_init_emacs(EditLine *el)
10626dc2f1dbScgd {
10636dc2f1dbScgd 	int i;
10640594af80Schristos 	wchar_t buf[3];
10656dc2f1dbScgd 	el_action_t *key = el->el_map.key;
10666dc2f1dbScgd 	el_action_t *alt = el->el_map.alt;
1067a76c617cSjdolecek 	const el_action_t *emacs = el->el_map.emacs;
10686dc2f1dbScgd 
10696dc2f1dbScgd 	el->el_map.type = MAP_EMACS;
10706dc2f1dbScgd 	el->el_map.current = el->el_map.key;
1071d47f9584Schristos 	keymacro_reset(el);
10726dc2f1dbScgd 
10736dc2f1dbScgd 	for (i = 0; i < N_KEYS; i++) {
10746dc2f1dbScgd 		key[i] = emacs[i];
10756dc2f1dbScgd 		alt[i] = ED_UNASSIGNED;
10766dc2f1dbScgd 	}
10776dc2f1dbScgd 
10786dc2f1dbScgd 	map_init_meta(el);
10796dc2f1dbScgd 	map_init_nls(el);
10806dc2f1dbScgd 
10816dc2f1dbScgd 	buf[0] = CONTROL('X');
10826dc2f1dbScgd 	buf[1] = CONTROL('X');
10834d132172Smycroft 	buf[2] = 0;
1084d47f9584Schristos 	keymacro_add(el, buf, keymacro_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
10856dc2f1dbScgd 
10866dc2f1dbScgd 	tty_bind_char(el, 1);
108798c7cbebSchristos 	terminal_bind_arrow(el);
10886dc2f1dbScgd }
10896dc2f1dbScgd 
10906dc2f1dbScgd 
10916dc2f1dbScgd /* map_set_editor():
10926dc2f1dbScgd  *	Set the editor
10936dc2f1dbScgd  */
1094a2d6b270Schristos libedit_private int
10950594af80Schristos map_set_editor(EditLine *el, wchar_t *editor)
10966dc2f1dbScgd {
1097d30d584aSlukem 
10980aefc7f9Schristos 	if (wcscmp(editor, L"emacs") == 0) {
10996dc2f1dbScgd 		map_init_emacs(el);
1100b71bed95Schristos 		return 0;
11016dc2f1dbScgd 	}
11020aefc7f9Schristos 	if (wcscmp(editor, L"vi") == 0) {
11036dc2f1dbScgd 		map_init_vi(el);
1104b71bed95Schristos 		return 0;
11056dc2f1dbScgd 	}
1106b71bed95Schristos 	return -1;
11076dc2f1dbScgd }
11086dc2f1dbScgd 
11096dc2f1dbScgd 
1110f87d2504Slukem /* map_get_editor():
1111f87d2504Slukem  *	Retrieve the editor
1112f87d2504Slukem  */
1113a2d6b270Schristos libedit_private int
11140594af80Schristos map_get_editor(EditLine *el, const wchar_t **editor)
1115f87d2504Slukem {
1116f87d2504Slukem 
1117f87d2504Slukem 	if (editor == NULL)
1118b71bed95Schristos 		return -1;
1119f87d2504Slukem 	switch (el->el_map.type) {
1120f87d2504Slukem 	case MAP_EMACS:
11210aefc7f9Schristos 		*editor = L"emacs";
1122b71bed95Schristos 		return 0;
1123f87d2504Slukem 	case MAP_VI:
11240aefc7f9Schristos 		*editor = L"vi";
1125b71bed95Schristos 		return 0;
1126f87d2504Slukem 	}
1127b71bed95Schristos 	return -1;
1128f87d2504Slukem }
1129f87d2504Slukem 
1130f87d2504Slukem 
11316dc2f1dbScgd /* map_print_key():
11326dc2f1dbScgd  *	Print the function description for 1 key
11336dc2f1dbScgd  */
1134469d44f8Schristos static void
11350594af80Schristos map_print_key(EditLine *el, el_action_t *map, const wchar_t *in)
11366dc2f1dbScgd {
11376dc2f1dbScgd 	char outbuf[EL_BUFSIZ];
1138d8f11774Schristos 	el_bindings_t *bp, *ep;
11396dc2f1dbScgd 
11406dc2f1dbScgd 	if (in[0] == '\0' || in[1] == '\0') {
1141d47f9584Schristos 		(void) keymacro__decode_str(in, outbuf, sizeof(outbuf), "");
1142d8f11774Schristos 		ep = &el->el_map.help[el->el_map.nfunc];
1143d8f11774Schristos 		for (bp = el->el_map.help; bp < ep; bp++)
11446dc2f1dbScgd 			if (bp->func == map[(unsigned char) *in]) {
11456dc2f1dbScgd 				(void) fprintf(el->el_outfile,
1146fcf85103Schristos 				    "%s\t->\t%ls\n", outbuf, bp->name);
11476dc2f1dbScgd 				return;
11486dc2f1dbScgd 			}
1149d30d584aSlukem 	} else
1150d47f9584Schristos 		keymacro_print(el, in);
11516dc2f1dbScgd }
11526dc2f1dbScgd 
11536dc2f1dbScgd 
11546dc2f1dbScgd /* map_print_some_keys():
11556dc2f1dbScgd  *	Print keys from first to last
11566dc2f1dbScgd  */
1157469d44f8Schristos static void
1158f54e4f97Schristos map_print_some_keys(EditLine *el, el_action_t *map, wint_t first, wint_t last)
11596dc2f1dbScgd {
1160b779ac86Schristos 	el_bindings_t *bp, *ep;
11610594af80Schristos 	wchar_t firstbuf[2], lastbuf[2];
11626dc2f1dbScgd 	char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
11636dc2f1dbScgd 
11640594af80Schristos 	firstbuf[0] = first;
11656dc2f1dbScgd 	firstbuf[1] = 0;
11660594af80Schristos 	lastbuf[0] = last;
11676dc2f1dbScgd 	lastbuf[1] = 0;
11686dc2f1dbScgd 	if (map[first] == ED_UNASSIGNED) {
1169230c3d4eSchristos 		if (first == last) {
1170d47f9584Schristos 			(void) keymacro__decode_str(firstbuf, unparsbuf,
1171230c3d4eSchristos 			    sizeof(unparsbuf), STRQQ);
1172d30d584aSlukem 			(void) fprintf(el->el_outfile,
1173230c3d4eSchristos 			    "%-15s->  is undefined\n", unparsbuf);
1174230c3d4eSchristos 		}
11756dc2f1dbScgd 		return;
11766dc2f1dbScgd 	}
1177b779ac86Schristos 	ep = &el->el_map.help[el->el_map.nfunc];
1178b779ac86Schristos 	for (bp = el->el_map.help; bp < ep; bp++) {
11796dc2f1dbScgd 		if (bp->func == map[first]) {
11806dc2f1dbScgd 			if (first == last) {
1181d47f9584Schristos 				(void) keymacro__decode_str(firstbuf, unparsbuf,
1182230c3d4eSchristos 				    sizeof(unparsbuf), STRQQ);
1183fcf85103Schristos 				(void) fprintf(el->el_outfile, "%-15s->  %ls\n",
1184230c3d4eSchristos 				    unparsbuf, bp->name);
1185d30d584aSlukem 			} else {
1186d47f9584Schristos 				(void) keymacro__decode_str(firstbuf, unparsbuf,
1187230c3d4eSchristos 				    sizeof(unparsbuf), STRQQ);
1188d47f9584Schristos 				(void) keymacro__decode_str(lastbuf, extrabuf,
1189230c3d4eSchristos 				    sizeof(extrabuf), STRQQ);
1190d30d584aSlukem 				(void) fprintf(el->el_outfile,
1191fcf85103Schristos 				    "%-4s to %-7s->  %ls\n",
1192230c3d4eSchristos 				    unparsbuf, extrabuf, bp->name);
11936dc2f1dbScgd 			}
11946dc2f1dbScgd 			return;
11956dc2f1dbScgd 		}
11966dc2f1dbScgd 	}
11976dc2f1dbScgd #ifdef MAP_DEBUG
11986dc2f1dbScgd 	if (map == el->el_map.key) {
1199d47f9584Schristos 		(void) keymacro__decode_str(firstbuf, unparsbuf,
1200230c3d4eSchristos 		    sizeof(unparsbuf), STRQQ);
1201d30d584aSlukem 		(void) fprintf(el->el_outfile,
1202230c3d4eSchristos 		    "BUG!!! %s isn't bound to anything.\n", unparsbuf);
12036dc2f1dbScgd 		(void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
12046dc2f1dbScgd 		    first, el->el_map.key[first]);
1205d30d584aSlukem 	} else {
1206d47f9584Schristos 		(void) keymacro__decode_str(firstbuf, unparsbuf,
1207230c3d4eSchristos 		    sizeof(unparsbuf), STRQQ);
1208d30d584aSlukem 		(void) fprintf(el->el_outfile,
1209230c3d4eSchristos 		    "BUG!!! %s isn't bound to anything.\n", unparsbuf);
12106dc2f1dbScgd 		(void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
12116dc2f1dbScgd 		    first, el->el_map.alt[first]);
12126dc2f1dbScgd 	}
12136dc2f1dbScgd #endif
1214ff59a2faSchristos 	EL_ABORT((el->el_errfile, "Error printing keys\n"));
12156dc2f1dbScgd }
12166dc2f1dbScgd 
12176dc2f1dbScgd 
12186dc2f1dbScgd /* map_print_all_keys():
12196dc2f1dbScgd  *	Print the function description for all keys.
12206dc2f1dbScgd  */
1221469d44f8Schristos static void
1222d30d584aSlukem map_print_all_keys(EditLine *el)
12236dc2f1dbScgd {
12246dc2f1dbScgd 	int prev, i;
12256dc2f1dbScgd 
12266dc2f1dbScgd 	(void) fprintf(el->el_outfile, "Standard key bindings\n");
12276dc2f1dbScgd 	prev = 0;
12286dc2f1dbScgd 	for (i = 0; i < N_KEYS; i++) {
12296dc2f1dbScgd 		if (el->el_map.key[prev] == el->el_map.key[i])
12306dc2f1dbScgd 			continue;
12316dc2f1dbScgd 		map_print_some_keys(el, el->el_map.key, prev, i - 1);
12326dc2f1dbScgd 		prev = i;
12336dc2f1dbScgd 	}
12346dc2f1dbScgd 	map_print_some_keys(el, el->el_map.key, prev, i - 1);
12356dc2f1dbScgd 
12366dc2f1dbScgd 	(void) fprintf(el->el_outfile, "Alternative key bindings\n");
12376dc2f1dbScgd 	prev = 0;
12386dc2f1dbScgd 	for (i = 0; i < N_KEYS; i++) {
12396dc2f1dbScgd 		if (el->el_map.alt[prev] == el->el_map.alt[i])
12406dc2f1dbScgd 			continue;
12416dc2f1dbScgd 		map_print_some_keys(el, el->el_map.alt, prev, i - 1);
12426dc2f1dbScgd 		prev = i;
12436dc2f1dbScgd 	}
12446dc2f1dbScgd 	map_print_some_keys(el, el->el_map.alt, prev, i - 1);
12456dc2f1dbScgd 
12466dc2f1dbScgd 	(void) fprintf(el->el_outfile, "Multi-character bindings\n");
12470aefc7f9Schristos 	keymacro_print(el, L"");
12486dc2f1dbScgd 	(void) fprintf(el->el_outfile, "Arrow key bindings\n");
12490aefc7f9Schristos 	terminal_print_arrow(el, L"");
12506dc2f1dbScgd }
12516dc2f1dbScgd 
12526dc2f1dbScgd 
12536dc2f1dbScgd /* map_bind():
12546dc2f1dbScgd  *	Add/remove/change bindings
12556dc2f1dbScgd  */
1256a2d6b270Schristos libedit_private int
12570594af80Schristos map_bind(EditLine *el, int argc, const wchar_t **argv)
12586dc2f1dbScgd {
12596dc2f1dbScgd 	el_action_t *map;
1260a6d4afbaSchristos 	int ntype, rem;
12610594af80Schristos 	const wchar_t *p;
12620594af80Schristos 	wchar_t inbuf[EL_BUFSIZ];
12630594af80Schristos 	wchar_t outbuf[EL_BUFSIZ];
12640594af80Schristos 	const wchar_t *in = NULL;
12650594af80Schristos 	wchar_t *out;
1266b779ac86Schristos 	el_bindings_t *bp, *ep;
12676dc2f1dbScgd 	int cmd;
12686dc2f1dbScgd 	int key;
12696dc2f1dbScgd 
12706dc2f1dbScgd 	if (argv == NULL)
1271b71bed95Schristos 		return -1;
12726dc2f1dbScgd 
12736dc2f1dbScgd 	map = el->el_map.key;
12746dc2f1dbScgd 	ntype = XK_CMD;
1275a6d4afbaSchristos 	key = rem = 0;
12766dc2f1dbScgd 	for (argc = 1; (p = argv[argc]) != NULL; argc++)
12776dc2f1dbScgd 		if (p[0] == '-')
12786dc2f1dbScgd 			switch (p[1]) {
12796dc2f1dbScgd 			case 'a':
12806dc2f1dbScgd 				map = el->el_map.alt;
12816dc2f1dbScgd 				break;
12826dc2f1dbScgd 
12836dc2f1dbScgd 			case 's':
12846dc2f1dbScgd 				ntype = XK_STR;
12856dc2f1dbScgd 				break;
12866dc2f1dbScgd 			case 'k':
12876dc2f1dbScgd 				key = 1;
12886dc2f1dbScgd 				break;
12896dc2f1dbScgd 
12906dc2f1dbScgd 			case 'r':
1291a6d4afbaSchristos 				rem = 1;
12926dc2f1dbScgd 				break;
12936dc2f1dbScgd 
12946dc2f1dbScgd 			case 'v':
12956dc2f1dbScgd 				map_init_vi(el);
1296b71bed95Schristos 				return 0;
12976dc2f1dbScgd 
12986dc2f1dbScgd 			case 'e':
12996dc2f1dbScgd 				map_init_emacs(el);
1300b71bed95Schristos 				return 0;
13016dc2f1dbScgd 
13026dc2f1dbScgd 			case 'l':
1303b779ac86Schristos 				ep = &el->el_map.help[el->el_map.nfunc];
1304b779ac86Schristos 				for (bp = el->el_map.help; bp < ep; bp++)
1305d30d584aSlukem 					(void) fprintf(el->el_outfile,
1306fcf85103Schristos 					    "%ls\n\t%ls\n",
13076dc2f1dbScgd 					    bp->name, bp->description);
1308b71bed95Schristos 				return 0;
13096dc2f1dbScgd 			default:
1310d30d584aSlukem 				(void) fprintf(el->el_errfile,
1311fcf85103Schristos 				    "%ls: Invalid switch `%lc'.\n",
1312f54e4f97Schristos 				    argv[0], (wint_t)p[1]);
13136dc2f1dbScgd 			}
13146dc2f1dbScgd 		else
13156dc2f1dbScgd 			break;
13166dc2f1dbScgd 
13176dc2f1dbScgd 	if (argv[argc] == NULL) {
13186dc2f1dbScgd 		map_print_all_keys(el);
1319b71bed95Schristos 		return 0;
13206dc2f1dbScgd 	}
13216dc2f1dbScgd 	if (key)
13226dc2f1dbScgd 		in = argv[argc++];
1323d30d584aSlukem 	else if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
1324d30d584aSlukem 		(void) fprintf(el->el_errfile,
1325fcf85103Schristos 		    "%ls: Invalid \\ or ^ in instring.\n",
13266dc2f1dbScgd 		    argv[0]);
1327b71bed95Schristos 		return -1;
13286dc2f1dbScgd 	}
1329a6d4afbaSchristos 	if (rem) {
13306dc2f1dbScgd 		if (key) {
133198c7cbebSchristos 			(void) terminal_clear_arrow(el, in);
1332b71bed95Schristos 			return -1;
13336dc2f1dbScgd 		}
13346dc2f1dbScgd 		if (in[1])
1335d47f9584Schristos 			(void) keymacro_delete(el, in);
13366dc2f1dbScgd 		else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
1337d47f9584Schristos 			(void) keymacro_delete(el, in);
13386dc2f1dbScgd 		else
13396dc2f1dbScgd 			map[(unsigned char) *in] = ED_UNASSIGNED;
1340b71bed95Schristos 		return 0;
13416dc2f1dbScgd 	}
13426dc2f1dbScgd 	if (argv[argc] == NULL) {
13436dc2f1dbScgd 		if (key)
134498c7cbebSchristos 			terminal_print_arrow(el, in);
13456dc2f1dbScgd 		else
13466dc2f1dbScgd 			map_print_key(el, map, in);
1347b71bed95Schristos 		return 0;
13486dc2f1dbScgd 	}
13496dc2f1dbScgd #ifdef notyet
13506dc2f1dbScgd 	if (argv[argc + 1] != NULL) {
1351d47f9584Schristos 		bindkeymacro_usage();
1352b71bed95Schristos 		return -1;
13536dc2f1dbScgd 	}
13546dc2f1dbScgd #endif
13556dc2f1dbScgd 
13566dc2f1dbScgd 	switch (ntype) {
13576dc2f1dbScgd 	case XK_STR:
13586dc2f1dbScgd 		if ((out = parse__string(outbuf, argv[argc])) == NULL) {
13596dc2f1dbScgd 			(void) fprintf(el->el_errfile,
1360fcf85103Schristos 			    "%ls: Invalid \\ or ^ in outstring.\n", argv[0]);
1361b71bed95Schristos 			return -1;
13626dc2f1dbScgd 		}
13636dc2f1dbScgd 		if (key)
1364d47f9584Schristos 			terminal_set_arrow(el, in, keymacro_map_str(el, out), ntype);
13656dc2f1dbScgd 		else
1366d47f9584Schristos 			keymacro_add(el, in, keymacro_map_str(el, out), ntype);
13676dc2f1dbScgd 		map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
13686dc2f1dbScgd 		break;
13696dc2f1dbScgd 
13706dc2f1dbScgd 	case XK_CMD:
13716dc2f1dbScgd 		if ((cmd = parse_cmd(el, argv[argc])) == -1) {
13726dc2f1dbScgd 			(void) fprintf(el->el_errfile,
1373fcf85103Schristos 			    "%ls: Invalid command `%ls'.\n",
137434e53048Schristos 			    argv[0], argv[argc]);
1375b71bed95Schristos 			return -1;
13766dc2f1dbScgd 		}
13776dc2f1dbScgd 		if (key)
13781da7b962Schristos 			terminal_set_arrow(el, in, keymacro_map_cmd(el, cmd), ntype);
13796dc2f1dbScgd 		else {
13806dc2f1dbScgd 			if (in[1]) {
1381d47f9584Schristos 				keymacro_add(el, in, keymacro_map_cmd(el, cmd), ntype);
13826dc2f1dbScgd 				map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
1383d30d584aSlukem 			} else {
1384d47f9584Schristos 				keymacro_clear(el, map, in);
13853d802cf5Schristos 				map[(unsigned char) *in] = (el_action_t)cmd;
13866dc2f1dbScgd 			}
13876dc2f1dbScgd 		}
13886dc2f1dbScgd 		break;
13896dc2f1dbScgd 
1390ae5295eeSchristos 	/* coverity[dead_error_begin] */
13916dc2f1dbScgd 	default:
13925bba7270Schristos 		EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype));
13936dc2f1dbScgd 	}
1394b71bed95Schristos 	return 0;
13956dc2f1dbScgd }
13966dc2f1dbScgd 
13976dc2f1dbScgd 
13986dc2f1dbScgd /* map_addfunc():
13996dc2f1dbScgd  *	add a user defined function
14006dc2f1dbScgd  */
1401a2d6b270Schristos libedit_private int
14020594af80Schristos map_addfunc(EditLine *el, const wchar_t *name, const wchar_t *help,
14030594af80Schristos     el_func_t func)
14046dc2f1dbScgd {
14052f3389ceSchristos 	void *p;
140680e781abSchristos 	size_t nf = el->el_map.nfunc + 1;
1407d30d584aSlukem 
14086dc2f1dbScgd 	if (name == NULL || help == NULL || func == NULL)
1409b71bed95Schristos 		return -1;
14106dc2f1dbScgd 
1411a13cd756Schristos 	if ((p = el_realloc(el->el_map.func, nf *
1412a13cd756Schristos 	    sizeof(*el->el_map.func))) == NULL)
1413b71bed95Schristos 		return -1;
1414a13cd756Schristos 	el->el_map.func = p;
1415a13cd756Schristos 	if ((p = el_realloc(el->el_map.help, nf * sizeof(*el->el_map.help)))
14162f3389ceSchristos 	    == NULL)
1417b71bed95Schristos 		return -1;
1418a13cd756Schristos 	el->el_map.help = p;
14196dc2f1dbScgd 
14203d802cf5Schristos 	nf = (size_t)el->el_map.nfunc;
14216dc2f1dbScgd 	el->el_map.func[nf] = func;
14226dc2f1dbScgd 
14236dc2f1dbScgd 	el->el_map.help[nf].name = name;
14243d802cf5Schristos 	el->el_map.help[nf].func = (int)nf;
14256dc2f1dbScgd 	el->el_map.help[nf].description = help;
14266dc2f1dbScgd 	el->el_map.nfunc++;
14276dc2f1dbScgd 
1428b71bed95Schristos 	return 0;
14296dc2f1dbScgd }
1430