Home | History | Annotate | Line # | Download | only in libedit
map.c revision 1.9.2.1
      1  1.9.2.1  wrstuden /*	$NetBSD: map.c,v 1.9.2.1 1999/12/27 18:29:57 wrstuden Exp $	*/
      2      1.3     lukem 
      3      1.1       cgd /*-
      4      1.1       cgd  * Copyright (c) 1992, 1993
      5      1.1       cgd  *	The Regents of the University of California.  All rights reserved.
      6      1.1       cgd  *
      7      1.1       cgd  * This code is derived from software contributed to Berkeley by
      8      1.1       cgd  * Christos Zoulas of Cornell University.
      9      1.1       cgd  *
     10      1.1       cgd  * Redistribution and use in source and binary forms, with or without
     11      1.1       cgd  * modification, are permitted provided that the following conditions
     12      1.1       cgd  * are met:
     13      1.1       cgd  * 1. Redistributions of source code must retain the above copyright
     14      1.1       cgd  *    notice, this list of conditions and the following disclaimer.
     15      1.1       cgd  * 2. Redistributions in binary form must reproduce the above copyright
     16      1.1       cgd  *    notice, this list of conditions and the following disclaimer in the
     17      1.1       cgd  *    documentation and/or other materials provided with the distribution.
     18      1.1       cgd  * 3. All advertising materials mentioning features or use of this software
     19      1.1       cgd  *    must display the following acknowledgement:
     20      1.1       cgd  *	This product includes software developed by the University of
     21      1.1       cgd  *	California, Berkeley and its contributors.
     22      1.1       cgd  * 4. Neither the name of the University nor the names of its contributors
     23      1.1       cgd  *    may be used to endorse or promote products derived from this software
     24      1.1       cgd  *    without specific prior written permission.
     25      1.1       cgd  *
     26      1.1       cgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     27      1.1       cgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     28      1.1       cgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     29      1.1       cgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     30      1.1       cgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     31      1.1       cgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     32      1.1       cgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     33      1.1       cgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     34      1.1       cgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     35      1.1       cgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     36      1.1       cgd  * SUCH DAMAGE.
     37      1.1       cgd  */
     38      1.1       cgd 
     39      1.4  christos #include <sys/cdefs.h>
     40      1.1       cgd #if !defined(lint) && !defined(SCCSID)
     41      1.3     lukem #if 0
     42      1.1       cgd static char sccsid[] = "@(#)map.c	8.1 (Berkeley) 6/4/93";
     43      1.3     lukem #else
     44  1.9.2.1  wrstuden __RCSID("$NetBSD: map.c,v 1.9.2.1 1999/12/27 18:29:57 wrstuden Exp $");
     45      1.3     lukem #endif
     46      1.1       cgd #endif /* not lint && not SCCSID */
     47      1.1       cgd 
     48      1.1       cgd /*
     49      1.9    simonb  * map.c: Editor function definitions
     50      1.1       cgd  */
     51      1.1       cgd #include "sys.h"
     52      1.1       cgd #include <stdlib.h>
     53      1.1       cgd #include "el.h"
     54      1.1       cgd 
     55      1.1       cgd #define N_KEYS 256
     56      1.1       cgd 
     57      1.1       cgd private void map_print_key	 __P((EditLine *, el_action_t *, char *));
     58      1.1       cgd private void map_print_some_keys __P((EditLine *, el_action_t *, int, int));
     59      1.1       cgd private void map_print_all_keys	 __P((EditLine *));
     60      1.1       cgd private void map_init_nls 	 __P((EditLine *));
     61      1.1       cgd private void map_init_meta	 __P((EditLine *));
     62      1.1       cgd 
     63      1.1       cgd /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
     64      1.1       cgd 
     65      1.1       cgd private el_action_t  el_map_emacs[] = {
     66      1.1       cgd     /*   0 */	EM_SET_MARK,		/* ^@ */
     67      1.1       cgd     /*   1 */	ED_MOVE_TO_BEG,		/* ^A */
     68      1.1       cgd     /*   2 */	ED_PREV_CHAR,		/* ^B */
     69      1.1       cgd     /*   3 */	ED_TTY_SIGINT,		/* ^C */
     70      1.1       cgd     /*   4 */	EM_DELETE_OR_LIST,	/* ^D */
     71      1.1       cgd     /*   5 */	ED_MOVE_TO_END,		/* ^E */
     72      1.1       cgd     /*   6 */	ED_NEXT_CHAR,		/* ^F */
     73      1.1       cgd     /*   7 */	ED_UNASSIGNED,		/* ^G */
     74      1.1       cgd     /*   8 */	ED_DELETE_PREV_CHAR,	/* ^H */
     75      1.1       cgd     /*   9 */	ED_UNASSIGNED,		/* ^I */
     76      1.1       cgd     /*  10 */	ED_NEWLINE,		/* ^J */
     77      1.1       cgd     /*  11 */	ED_KILL_LINE,		/* ^K */
     78      1.1       cgd     /*  12 */	ED_CLEAR_SCREEN,	/* ^L */
     79      1.1       cgd     /*  13 */	ED_NEWLINE,		/* ^M */
     80      1.1       cgd     /*  14 */	ED_NEXT_HISTORY,	/* ^N */
     81      1.1       cgd     /*  15 */	ED_TTY_FLUSH_OUTPUT,	/* ^O */
     82      1.1       cgd     /*  16 */	ED_PREV_HISTORY,	/* ^P */
     83      1.1       cgd     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
     84      1.1       cgd     /*  18 */	ED_REDISPLAY,		/* ^R */
     85      1.1       cgd     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
     86      1.1       cgd     /*  20 */	ED_TRANSPOSE_CHARS,	/* ^T */
     87      1.1       cgd     /*  21 */	EM_KILL_LINE,		/* ^U */
     88      1.1       cgd     /*  22 */	ED_QUOTED_INSERT,	/* ^V */
     89      1.1       cgd     /*  23 */	EM_KILL_REGION,		/* ^W */
     90      1.1       cgd     /*  24 */	ED_SEQUENCE_LEAD_IN,	/* ^X */
     91      1.1       cgd     /*  25 */	EM_YANK,		/* ^Y */
     92      1.1       cgd     /*  26 */	ED_TTY_SIGTSTP,		/* ^Z */
     93      1.1       cgd     /*  27 */	EM_META_NEXT,		/* ^[ */
     94      1.1       cgd     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
     95      1.1       cgd     /*  29 */	ED_TTY_DSUSP,		/* ^] */
     96      1.1       cgd     /*  30 */	ED_UNASSIGNED,		/* ^^ */
     97      1.1       cgd     /*  31 */	ED_UNASSIGNED,		/* ^_ */
     98      1.1       cgd     /*  32 */	ED_INSERT,		/* SPACE */
     99      1.1       cgd     /*  33 */	ED_INSERT,		/* ! */
    100      1.1       cgd     /*  34 */	ED_INSERT,		/* " */
    101      1.1       cgd     /*  35 */	ED_INSERT,		/* # */
    102      1.1       cgd     /*  36 */	ED_INSERT,		/* $ */
    103      1.1       cgd     /*  37 */	ED_INSERT,		/* % */
    104      1.1       cgd     /*  38 */	ED_INSERT,		/* & */
    105      1.1       cgd     /*  39 */	ED_INSERT,		/* ' */
    106      1.1       cgd     /*  40 */	ED_INSERT,		/* ( */
    107      1.1       cgd     /*  41 */	ED_INSERT,		/* ) */
    108      1.1       cgd     /*  42 */	ED_INSERT,		/* * */
    109      1.1       cgd     /*  43 */	ED_INSERT,		/* + */
    110      1.1       cgd     /*  44 */	ED_INSERT,		/* , */
    111      1.1       cgd     /*  45 */	ED_INSERT,		/* - */
    112      1.1       cgd     /*  46 */	ED_INSERT,		/* . */
    113      1.1       cgd     /*  47 */	ED_INSERT,		/* / */
    114      1.1       cgd     /*  48 */	ED_DIGIT,		/* 0 */
    115      1.1       cgd     /*  49 */	ED_DIGIT,		/* 1 */
    116      1.1       cgd     /*  50 */	ED_DIGIT,		/* 2 */
    117      1.1       cgd     /*  51 */	ED_DIGIT,		/* 3 */
    118      1.1       cgd     /*  52 */	ED_DIGIT,		/* 4 */
    119      1.1       cgd     /*  53 */	ED_DIGIT,		/* 5 */
    120      1.1       cgd     /*  54 */	ED_DIGIT,		/* 6 */
    121      1.1       cgd     /*  55 */	ED_DIGIT,		/* 7 */
    122      1.1       cgd     /*  56 */	ED_DIGIT,		/* 8 */
    123      1.1       cgd     /*  57 */	ED_DIGIT,		/* 9 */
    124      1.1       cgd     /*  58 */	ED_INSERT,		/* : */
    125      1.1       cgd     /*  59 */	ED_INSERT,		/* ; */
    126      1.1       cgd     /*  60 */	ED_INSERT,		/* < */
    127      1.1       cgd     /*  61 */	ED_INSERT,		/* = */
    128      1.1       cgd     /*  62 */	ED_INSERT,		/* > */
    129      1.1       cgd     /*  63 */	ED_INSERT,		/* ? */
    130      1.1       cgd     /*  64 */	ED_INSERT,		/* @ */
    131      1.1       cgd     /*  65 */	ED_INSERT,		/* A */
    132      1.1       cgd     /*  66 */	ED_INSERT,		/* B */
    133      1.1       cgd     /*  67 */	ED_INSERT,		/* C */
    134      1.1       cgd     /*  68 */	ED_INSERT,		/* D */
    135      1.1       cgd     /*  69 */	ED_INSERT,		/* E */
    136      1.1       cgd     /*  70 */	ED_INSERT,		/* F */
    137      1.1       cgd     /*  71 */	ED_INSERT,		/* G */
    138      1.1       cgd     /*  72 */	ED_INSERT,		/* H */
    139      1.1       cgd     /*  73 */	ED_INSERT,		/* I */
    140      1.1       cgd     /*  74 */	ED_INSERT,		/* J */
    141      1.1       cgd     /*  75 */	ED_INSERT,		/* K */
    142      1.1       cgd     /*  76 */	ED_INSERT,		/* L */
    143      1.1       cgd     /*  77 */	ED_INSERT,		/* M */
    144      1.1       cgd     /*  78 */	ED_INSERT,		/* N */
    145      1.1       cgd     /*  79 */	ED_INSERT,		/* O */
    146      1.1       cgd     /*  80 */	ED_INSERT,		/* P */
    147      1.1       cgd     /*  81 */	ED_INSERT,		/* Q */
    148      1.1       cgd     /*  82 */	ED_INSERT,		/* R */
    149      1.1       cgd     /*  83 */	ED_INSERT,		/* S */
    150      1.1       cgd     /*  84 */	ED_INSERT,		/* T */
    151      1.1       cgd     /*  85 */	ED_INSERT,		/* U */
    152      1.1       cgd     /*  86 */	ED_INSERT,		/* V */
    153      1.1       cgd     /*  87 */	ED_INSERT,		/* W */
    154      1.1       cgd     /*  88 */	ED_INSERT,		/* X */
    155      1.1       cgd     /*  89 */	ED_INSERT,		/* Y */
    156      1.1       cgd     /*  90 */	ED_INSERT,		/* Z */
    157      1.1       cgd     /*  91 */	ED_INSERT,		/* [ */
    158      1.1       cgd     /*  92 */	ED_INSERT,		/* \ */
    159      1.1       cgd     /*  93 */	ED_INSERT,		/* ] */
    160      1.1       cgd     /*  94 */	ED_INSERT,		/* ^ */
    161      1.1       cgd     /*  95 */	ED_INSERT,		/* _ */
    162      1.1       cgd     /*  96 */	ED_INSERT,		/* ` */
    163      1.1       cgd     /*  97 */	ED_INSERT,		/* a */
    164      1.1       cgd     /*  98 */	ED_INSERT,		/* b */
    165      1.1       cgd     /*  99 */	ED_INSERT,		/* c */
    166      1.1       cgd     /* 100 */	ED_INSERT,		/* d */
    167      1.1       cgd     /* 101 */	ED_INSERT,		/* e */
    168      1.1       cgd     /* 102 */	ED_INSERT,		/* f */
    169      1.1       cgd     /* 103 */	ED_INSERT,		/* g */
    170      1.1       cgd     /* 104 */	ED_INSERT,		/* h */
    171      1.1       cgd     /* 105 */	ED_INSERT,		/* i */
    172      1.1       cgd     /* 106 */	ED_INSERT,		/* j */
    173      1.1       cgd     /* 107 */	ED_INSERT,		/* k */
    174      1.1       cgd     /* 108 */	ED_INSERT,		/* l */
    175      1.1       cgd     /* 109 */	ED_INSERT,		/* m */
    176      1.1       cgd     /* 110 */	ED_INSERT,		/* n */
    177      1.1       cgd     /* 111 */	ED_INSERT,		/* o */
    178      1.1       cgd     /* 112 */	ED_INSERT,		/* p */
    179      1.1       cgd     /* 113 */	ED_INSERT,		/* q */
    180      1.1       cgd     /* 114 */	ED_INSERT,		/* r */
    181      1.1       cgd     /* 115 */	ED_INSERT,		/* s */
    182      1.1       cgd     /* 116 */	ED_INSERT,		/* t */
    183      1.1       cgd     /* 117 */	ED_INSERT,		/* u */
    184      1.1       cgd     /* 118 */	ED_INSERT,		/* v */
    185      1.1       cgd     /* 119 */	ED_INSERT,		/* w */
    186      1.1       cgd     /* 120 */	ED_INSERT,		/* x */
    187      1.1       cgd     /* 121 */	ED_INSERT,		/* y */
    188      1.1       cgd     /* 122 */	ED_INSERT,		/* z */
    189      1.1       cgd     /* 123 */	ED_INSERT,		/* { */
    190      1.1       cgd     /* 124 */	ED_INSERT,		/* | */
    191      1.1       cgd     /* 125 */	ED_INSERT,		/* } */
    192      1.1       cgd     /* 126 */	ED_INSERT,		/* ~ */
    193      1.1       cgd     /* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
    194      1.1       cgd     /* 128 */	ED_UNASSIGNED,		/* M-^@ */
    195      1.1       cgd     /* 129 */	ED_UNASSIGNED,		/* M-^A */
    196      1.1       cgd     /* 130 */	ED_UNASSIGNED,		/* M-^B */
    197      1.1       cgd     /* 131 */	ED_UNASSIGNED,		/* M-^C */
    198      1.1       cgd     /* 132 */	ED_UNASSIGNED,		/* M-^D */
    199      1.1       cgd     /* 133 */	ED_UNASSIGNED,		/* M-^E */
    200      1.1       cgd     /* 134 */	ED_UNASSIGNED,		/* M-^F */
    201      1.1       cgd     /* 135 */	ED_UNASSIGNED,		/* M-^G */
    202      1.1       cgd     /* 136 */	ED_DELETE_PREV_WORD,	/* M-^H */
    203      1.1       cgd     /* 137 */	ED_UNASSIGNED,		/* M-^I */
    204      1.1       cgd     /* 138 */	ED_UNASSIGNED,		/* M-^J */
    205      1.1       cgd     /* 139 */	ED_UNASSIGNED,		/* M-^K */
    206      1.1       cgd     /* 140 */	ED_CLEAR_SCREEN,		/* M-^L */
    207      1.1       cgd     /* 141 */	ED_UNASSIGNED,		/* M-^M */
    208      1.1       cgd     /* 142 */	ED_UNASSIGNED,		/* M-^N */
    209      1.1       cgd     /* 143 */	ED_UNASSIGNED,		/* M-^O */
    210      1.1       cgd     /* 144 */	ED_UNASSIGNED,		/* M-^P */
    211      1.1       cgd     /* 145 */	ED_UNASSIGNED,		/* M-^Q */
    212      1.1       cgd     /* 146 */	ED_UNASSIGNED,		/* M-^R */
    213      1.1       cgd     /* 147 */	ED_UNASSIGNED,		/* M-^S */
    214      1.1       cgd     /* 148 */	ED_UNASSIGNED,		/* M-^T */
    215      1.1       cgd     /* 149 */	ED_UNASSIGNED,		/* M-^U */
    216      1.1       cgd     /* 150 */	ED_UNASSIGNED,		/* M-^V */
    217      1.1       cgd     /* 151 */	ED_UNASSIGNED,		/* M-^W */
    218      1.1       cgd     /* 152 */	ED_UNASSIGNED,		/* M-^X */
    219      1.1       cgd     /* 153 */	ED_UNASSIGNED,		/* M-^Y */
    220      1.1       cgd     /* 154 */	ED_UNASSIGNED,		/* M-^Z */
    221      1.1       cgd     /* 155 */	ED_UNASSIGNED,		/* M-^[ */
    222      1.1       cgd     /* 156 */	ED_UNASSIGNED,		/* M-^\ */
    223      1.1       cgd     /* 157 */	ED_UNASSIGNED,		/* M-^] */
    224      1.1       cgd     /* 158 */	ED_UNASSIGNED,		/* M-^^ */
    225      1.1       cgd     /* 159 */	EM_COPY_PREV_WORD,	/* M-^_ */
    226      1.1       cgd     /* 160 */	ED_UNASSIGNED,		/* M-SPACE */
    227      1.1       cgd     /* 161 */	ED_UNASSIGNED,		/* M-! */
    228      1.1       cgd     /* 162 */	ED_UNASSIGNED,		/* M-" */
    229      1.1       cgd     /* 163 */	ED_UNASSIGNED,		/* M-# */
    230      1.1       cgd     /* 164 */	ED_UNASSIGNED,		/* M-$ */
    231      1.1       cgd     /* 165 */	ED_UNASSIGNED,		/* M-% */
    232      1.1       cgd     /* 166 */	ED_UNASSIGNED,		/* M-& */
    233      1.1       cgd     /* 167 */	ED_UNASSIGNED,		/* M-' */
    234      1.1       cgd     /* 168 */	ED_UNASSIGNED,		/* M-( */
    235      1.1       cgd     /* 169 */	ED_UNASSIGNED,		/* M-) */
    236      1.1       cgd     /* 170 */	ED_UNASSIGNED,		/* M-* */
    237      1.1       cgd     /* 171 */	ED_UNASSIGNED,		/* M-+ */
    238      1.1       cgd     /* 172 */	ED_UNASSIGNED,		/* M-, */
    239      1.1       cgd     /* 173 */	ED_UNASSIGNED,		/* M-- */
    240      1.1       cgd     /* 174 */	ED_UNASSIGNED,		/* M-. */
    241      1.1       cgd     /* 175 */	ED_UNASSIGNED,		/* M-/ */
    242      1.1       cgd     /* 176 */	ED_ARGUMENT_DIGIT,	/* M-0 */
    243      1.1       cgd     /* 177 */	ED_ARGUMENT_DIGIT,	/* M-1 */
    244      1.1       cgd     /* 178 */	ED_ARGUMENT_DIGIT,	/* M-2 */
    245      1.1       cgd     /* 179 */	ED_ARGUMENT_DIGIT,	/* M-3 */
    246      1.1       cgd     /* 180 */	ED_ARGUMENT_DIGIT,	/* M-4 */
    247      1.1       cgd     /* 181 */	ED_ARGUMENT_DIGIT,	/* M-5 */
    248      1.1       cgd     /* 182 */	ED_ARGUMENT_DIGIT,	/* M-6 */
    249      1.1       cgd     /* 183 */	ED_ARGUMENT_DIGIT,	/* M-7 */
    250      1.1       cgd     /* 184 */	ED_ARGUMENT_DIGIT,	/* M-8 */
    251      1.1       cgd     /* 185 */	ED_ARGUMENT_DIGIT,	/* M-9 */
    252      1.1       cgd     /* 186 */	ED_UNASSIGNED,		/* M-: */
    253      1.1       cgd     /* 187 */	ED_UNASSIGNED,		/* M-; */
    254      1.1       cgd     /* 188 */	ED_UNASSIGNED,		/* M-< */
    255      1.1       cgd     /* 189 */	ED_UNASSIGNED,		/* M-= */
    256      1.1       cgd     /* 190 */	ED_UNASSIGNED,		/* M-> */
    257      1.1       cgd     /* 191 */	ED_UNASSIGNED,		/* M-? */
    258      1.1       cgd     /* 192 */	ED_UNASSIGNED,		/* M-@ */
    259      1.1       cgd     /* 193 */	ED_UNASSIGNED,		/* M-A */
    260      1.1       cgd     /* 194 */	ED_PREV_WORD,		/* M-B */
    261      1.1       cgd     /* 195 */	EM_CAPITOL_CASE,		/* M-C */
    262      1.1       cgd     /* 196 */	EM_DELETE_NEXT_WORD,	/* M-D */
    263      1.1       cgd     /* 197 */	ED_UNASSIGNED,		/* M-E */
    264      1.1       cgd     /* 198 */	EM_NEXT_WORD,		/* M-F */
    265      1.1       cgd     /* 199 */	ED_UNASSIGNED,		/* M-G */
    266      1.1       cgd     /* 200 */	ED_UNASSIGNED,		/* M-H */
    267      1.1       cgd     /* 201 */	ED_UNASSIGNED,		/* M-I */
    268      1.1       cgd     /* 202 */	ED_UNASSIGNED,		/* M-J */
    269      1.1       cgd     /* 203 */	ED_UNASSIGNED,		/* M-K */
    270      1.1       cgd     /* 204 */	EM_LOWER_CASE,		/* M-L */
    271      1.1       cgd     /* 205 */	ED_UNASSIGNED,		/* M-M */
    272      1.1       cgd     /* 206 */	ED_SEARCH_NEXT_HISTORY,	/* M-N */
    273      1.1       cgd     /* 207 */	ED_SEQUENCE_LEAD_IN,	/* M-O */
    274      1.1       cgd     /* 208 */	ED_SEARCH_PREV_HISTORY,	/* M-P */
    275      1.1       cgd     /* 209 */	ED_UNASSIGNED,		/* M-Q */
    276      1.1       cgd     /* 210 */	ED_UNASSIGNED,		/* M-R */
    277      1.1       cgd     /* 211 */	ED_UNASSIGNED,		/* M-S */
    278      1.1       cgd     /* 212 */	ED_UNASSIGNED,		/* M-T */
    279      1.1       cgd     /* 213 */	EM_UPPER_CASE,		/* M-U */
    280      1.1       cgd     /* 214 */	ED_UNASSIGNED,		/* M-V */
    281      1.1       cgd     /* 215 */	EM_COPY_REGION,		/* M-W */
    282      1.1       cgd     /* 216 */	ED_COMMAND,		/* M-X */
    283      1.1       cgd     /* 217 */	ED_UNASSIGNED,		/* M-Y */
    284      1.1       cgd     /* 218 */	ED_UNASSIGNED,		/* M-Z */
    285      1.1       cgd     /* 219 */	ED_SEQUENCE_LEAD_IN,	/* M-[ */
    286      1.1       cgd     /* 220 */	ED_UNASSIGNED,		/* M-\ */
    287      1.1       cgd     /* 221 */	ED_UNASSIGNED,		/* M-] */
    288      1.1       cgd     /* 222 */	ED_UNASSIGNED,		/* M-^ */
    289      1.1       cgd     /* 223 */	ED_UNASSIGNED,		/* M-_ */
    290      1.1       cgd     /* 223 */	ED_UNASSIGNED,		/* M-` */
    291      1.1       cgd     /* 224 */	ED_UNASSIGNED,		/* M-a */
    292      1.1       cgd     /* 225 */	ED_PREV_WORD,		/* M-b */
    293      1.1       cgd     /* 226 */	EM_CAPITOL_CASE,	/* M-c */
    294      1.1       cgd     /* 227 */	EM_DELETE_NEXT_WORD,	/* M-d */
    295      1.1       cgd     /* 228 */	ED_UNASSIGNED,		/* M-e */
    296      1.1       cgd     /* 229 */	EM_NEXT_WORD,		/* M-f */
    297      1.1       cgd     /* 230 */	ED_UNASSIGNED,		/* M-g */
    298      1.1       cgd     /* 231 */	ED_UNASSIGNED,		/* M-h */
    299      1.1       cgd     /* 232 */	ED_UNASSIGNED,		/* M-i */
    300      1.1       cgd     /* 233 */	ED_UNASSIGNED,		/* M-j */
    301      1.1       cgd     /* 234 */	ED_UNASSIGNED,		/* M-k */
    302      1.1       cgd     /* 235 */	EM_LOWER_CASE,		/* M-l */
    303      1.1       cgd     /* 236 */	ED_UNASSIGNED,		/* M-m */
    304      1.1       cgd     /* 237 */	ED_SEARCH_NEXT_HISTORY,	/* M-n */
    305      1.1       cgd     /* 238 */	ED_UNASSIGNED,		/* M-o */
    306      1.1       cgd     /* 239 */	ED_SEARCH_PREV_HISTORY,	/* M-p */
    307      1.1       cgd     /* 240 */	ED_UNASSIGNED,		/* M-q */
    308      1.1       cgd     /* 241 */	ED_UNASSIGNED,		/* M-r */
    309      1.1       cgd     /* 242 */	ED_UNASSIGNED,		/* M-s */
    310      1.1       cgd     /* 243 */	ED_UNASSIGNED,		/* M-t */
    311      1.1       cgd     /* 244 */	EM_UPPER_CASE,		/* M-u */
    312      1.1       cgd     /* 245 */	ED_UNASSIGNED,		/* M-v */
    313      1.1       cgd     /* 246 */	EM_COPY_REGION,		/* M-w */
    314      1.1       cgd     /* 247 */	ED_COMMAND,		/* M-x */
    315      1.1       cgd     /* 248 */	ED_UNASSIGNED,		/* M-y */
    316      1.1       cgd     /* 249 */	ED_UNASSIGNED,		/* M-z */
    317      1.1       cgd     /* 250 */	ED_UNASSIGNED,		/* M-{ */
    318      1.1       cgd     /* 251 */	ED_UNASSIGNED,		/* M-| */
    319      1.1       cgd     /* 252 */	ED_UNASSIGNED,		/* M-} */
    320      1.1       cgd     /* 253 */	ED_UNASSIGNED,		/* M-~ */
    321      1.1       cgd     /* 254 */	ED_DELETE_PREV_WORD		/* M-^? */
    322      1.1       cgd     /* 255 */
    323      1.1       cgd };
    324      1.1       cgd 
    325      1.1       cgd /*
    326      1.1       cgd  * keymap table for vi.  Each index into above tbl; should be
    327      1.1       cgd  * N_KEYS entries long.  Vi mode uses a sticky-extend to do command mode:
    328      1.1       cgd  * insert mode characters are in the normal keymap, and command mode
    329      1.1       cgd  * in the extended keymap.
    330      1.1       cgd  */
    331      1.1       cgd private el_action_t  el_map_vi_insert[] = {
    332      1.1       cgd #ifdef KSHVI
    333      1.1       cgd     /*   0 */	ED_UNASSIGNED,		/* ^@ */
    334      1.1       cgd     /*   1 */	ED_INSERT,		/* ^A */
    335      1.1       cgd     /*   2 */	ED_INSERT,		/* ^B */
    336      1.1       cgd     /*   3 */	ED_INSERT,		/* ^C */
    337      1.1       cgd     /*   4 */	VI_LIST_OR_EOF,		/* ^D */
    338      1.1       cgd     /*   5 */	ED_INSERT,		/* ^E */
    339      1.1       cgd     /*   6 */	ED_INSERT,		/* ^F */
    340      1.1       cgd     /*   7 */	ED_INSERT,		/* ^G */
    341      1.1       cgd     /*   8 */	VI_DELETE_PREV_CHAR,	/* ^H */   /* BackSpace key */
    342      1.1       cgd     /*   9 */	ED_INSERT,		/* ^I */   /* Tab Key  */
    343      1.1       cgd     /*  10 */	ED_NEWLINE,		/* ^J */
    344      1.1       cgd     /*  11 */	ED_INSERT,		/* ^K */
    345      1.1       cgd     /*  12 */	ED_INSERT,		/* ^L */
    346      1.1       cgd     /*  13 */	ED_NEWLINE,		/* ^M */
    347      1.1       cgd     /*  14 */	ED_INSERT,		/* ^N */
    348      1.1       cgd     /*  15 */	ED_INSERT,		/* ^O */
    349      1.1       cgd     /*  16 */	ED_INSERT,		/* ^P */
    350      1.1       cgd     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
    351      1.1       cgd     /*  18 */	ED_INSERT,		/* ^R */
    352      1.1       cgd     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
    353      1.1       cgd     /*  20 */	ED_INSERT,		/* ^T */
    354      1.1       cgd     /*  21 */	VI_KILL_LINE_PREV,	/* ^U */
    355      1.1       cgd     /*  22 */	ED_QUOTED_INSERT,	/* ^V */
    356      1.1       cgd     /*  23 */	ED_DELETE_PREV_WORD,	/* ^W */  /* Only until strt edit pos */
    357      1.1       cgd     /*  24 */	ED_INSERT,		/* ^X */
    358      1.1       cgd     /*  25 */	ED_INSERT,		/* ^Y */
    359      1.1       cgd     /*  26 */	ED_INSERT,		/* ^Z */
    360      1.1       cgd     /*  27 */	VI_COMMAND_MODE,	/* ^[ */  /* [ Esc ] key */
    361      1.1       cgd     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
    362      1.1       cgd     /*  29 */	ED_INSERT,		/* ^] */
    363      1.1       cgd     /*  30 */	ED_INSERT,		/* ^^ */
    364      1.1       cgd     /*  31 */	ED_INSERT,		/* ^_ */
    365      1.1       cgd #else /* !KSHVI */
    366      1.1       cgd     /*   0 */	ED_UNASSIGNED,		/* ^@ */   /* NOTE: These mappings do */
    367      1.1       cgd     /*   1 */	ED_MOVE_TO_BEG,		/* ^A */   /* NOT Correspond well to  */
    368      1.1       cgd     /*   2 */	ED_PREV_CHAR,		/* ^B */   /* the KSH VI editing as-  */
    369      1.1       cgd     /*   3 */	ED_TTY_SIGINT,		/* ^C */   /* signments. On the other */
    370      1.1       cgd     /*   4 */	VI_LIST_OR_EOF,		/* ^D */   /* hand they are convenient*/
    371      1.1       cgd     /*   5 */	ED_MOVE_TO_END,		/* ^E */   /* and many people have    */
    372      1.1       cgd     /*   6 */	ED_NEXT_CHAR,		/* ^F */   /* have gotten used to them*/
    373      1.1       cgd     /*   7 */	ED_UNASSIGNED,		/* ^G */
    374      1.1       cgd     /*   8 */	ED_DELETE_PREV_CHAR,	/* ^H */   /* BackSpace key */
    375      1.1       cgd     /*   9 */	ED_UNASSIGNED,		/* ^I */   /* Tab Key */
    376      1.1       cgd     /*  10 */	ED_NEWLINE,		/* ^J */
    377      1.1       cgd     /*  11 */	ED_KILL_LINE,		/* ^K */
    378      1.1       cgd     /*  12 */	ED_CLEAR_SCREEN,	/* ^L */
    379      1.1       cgd     /*  13 */	ED_NEWLINE,		/* ^M */
    380      1.1       cgd     /*  14 */	ED_NEXT_HISTORY,	/* ^N */
    381      1.1       cgd     /*  15 */	ED_TTY_FLUSH_OUTPUT,	/* ^O */
    382      1.1       cgd     /*  16 */	ED_PREV_HISTORY,	/* ^P */
    383      1.1       cgd     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
    384      1.1       cgd     /*  18 */	ED_REDISPLAY,		/* ^R */
    385      1.1       cgd     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
    386      1.1       cgd     /*  20 */	ED_TRANSPOSE_CHARS,	/* ^T */
    387      1.1       cgd     /*  21 */	VI_KILL_LINE_PREV,	/* ^U */
    388      1.1       cgd     /*  22 */	ED_QUOTED_INSERT,	/* ^V */
    389      1.1       cgd     /*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
    390      1.1       cgd     /*  24 */	ED_UNASSIGNED,		/* ^X */
    391      1.1       cgd     /*  25 */	ED_TTY_DSUSP,		/* ^Y */
    392      1.1       cgd     /*  26 */	ED_TTY_SIGTSTP,		/* ^Z */
    393      1.1       cgd     /*  27 */	VI_COMMAND_MODE,	/* ^[ */
    394      1.1       cgd     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
    395      1.1       cgd     /*  29 */	ED_UNASSIGNED,		/* ^] */
    396      1.1       cgd     /*  30 */	ED_UNASSIGNED,		/* ^^ */
    397      1.1       cgd     /*  31 */	ED_UNASSIGNED,		/* ^_ */
    398      1.1       cgd #endif  /* KSHVI */
    399      1.1       cgd     /*  32 */	ED_INSERT,		/* SPACE */
    400      1.1       cgd     /*  33 */	ED_INSERT,		/* ! */
    401      1.1       cgd     /*  34 */	ED_INSERT,		/* " */
    402      1.1       cgd     /*  35 */	ED_INSERT,		/* # */
    403      1.1       cgd     /*  36 */	ED_INSERT,		/* $ */
    404      1.1       cgd     /*  37 */	ED_INSERT,		/* % */
    405      1.1       cgd     /*  38 */	ED_INSERT,		/* & */
    406      1.1       cgd     /*  39 */	ED_INSERT,		/* ' */
    407      1.1       cgd     /*  40 */	ED_INSERT,		/* ( */
    408      1.1       cgd     /*  41 */	ED_INSERT,		/* ) */
    409      1.1       cgd     /*  42 */	ED_INSERT,		/* * */
    410      1.1       cgd     /*  43 */	ED_INSERT,		/* + */
    411      1.1       cgd     /*  44 */	ED_INSERT,		/* , */
    412      1.1       cgd     /*  45 */	ED_INSERT,		/* - */
    413      1.1       cgd     /*  46 */	ED_INSERT,		/* . */
    414      1.1       cgd     /*  47 */	ED_INSERT,		/* / */
    415      1.1       cgd     /*  48 */	ED_INSERT,		/* 0 */
    416      1.1       cgd     /*  49 */	ED_INSERT,		/* 1 */
    417      1.1       cgd     /*  50 */	ED_INSERT,		/* 2 */
    418      1.1       cgd     /*  51 */	ED_INSERT,		/* 3 */
    419      1.1       cgd     /*  52 */	ED_INSERT,		/* 4 */
    420      1.1       cgd     /*  53 */	ED_INSERT,		/* 5 */
    421      1.1       cgd     /*  54 */	ED_INSERT,		/* 6 */
    422      1.1       cgd     /*  55 */	ED_INSERT,		/* 7 */
    423      1.1       cgd     /*  56 */	ED_INSERT,		/* 8 */
    424      1.1       cgd     /*  57 */	ED_INSERT,		/* 9 */
    425      1.1       cgd     /*  58 */	ED_INSERT,		/* : */
    426      1.1       cgd     /*  59 */	ED_INSERT,		/* ; */
    427      1.1       cgd     /*  60 */	ED_INSERT,		/* < */
    428      1.1       cgd     /*  61 */	ED_INSERT,		/* = */
    429      1.1       cgd     /*  62 */	ED_INSERT,		/* > */
    430      1.1       cgd     /*  63 */	ED_INSERT,		/* ? */
    431      1.1       cgd     /*  64 */	ED_INSERT,		/* @ */
    432      1.1       cgd     /*  65 */	ED_INSERT,		/* A */
    433      1.1       cgd     /*  66 */	ED_INSERT,		/* B */
    434      1.1       cgd     /*  67 */	ED_INSERT,		/* C */
    435      1.1       cgd     /*  68 */	ED_INSERT,		/* D */
    436      1.1       cgd     /*  69 */	ED_INSERT,		/* E */
    437      1.1       cgd     /*  70 */	ED_INSERT,		/* F */
    438      1.1       cgd     /*  71 */	ED_INSERT,		/* G */
    439      1.1       cgd     /*  72 */	ED_INSERT,		/* H */
    440      1.1       cgd     /*  73 */	ED_INSERT,		/* I */
    441      1.1       cgd     /*  74 */	ED_INSERT,		/* J */
    442      1.1       cgd     /*  75 */	ED_INSERT,		/* K */
    443      1.1       cgd     /*  76 */	ED_INSERT,		/* L */
    444      1.1       cgd     /*  77 */	ED_INSERT,		/* M */
    445      1.1       cgd     /*  78 */	ED_INSERT,		/* N */
    446      1.1       cgd     /*  79 */	ED_INSERT,		/* O */
    447      1.1       cgd     /*  80 */	ED_INSERT,		/* P */
    448      1.1       cgd     /*  81 */	ED_INSERT,		/* Q */
    449      1.1       cgd     /*  82 */	ED_INSERT,		/* R */
    450      1.1       cgd     /*  83 */	ED_INSERT,		/* S */
    451      1.1       cgd     /*  84 */	ED_INSERT,		/* T */
    452      1.1       cgd     /*  85 */	ED_INSERT,		/* U */
    453      1.1       cgd     /*  86 */	ED_INSERT,		/* V */
    454      1.1       cgd     /*  87 */	ED_INSERT,		/* W */
    455      1.1       cgd     /*  88 */	ED_INSERT,		/* X */
    456      1.1       cgd     /*  89 */	ED_INSERT,		/* Y */
    457      1.1       cgd     /*  90 */	ED_INSERT,		/* Z */
    458      1.1       cgd     /*  91 */	ED_INSERT,		/* [ */
    459      1.1       cgd     /*  92 */	ED_INSERT,		/* \ */
    460      1.1       cgd     /*  93 */	ED_INSERT,		/* ] */
    461      1.1       cgd     /*  94 */	ED_INSERT,		/* ^ */
    462      1.1       cgd     /*  95 */	ED_INSERT,		/* _ */
    463      1.1       cgd     /*  96 */	ED_INSERT,		/* ` */
    464      1.1       cgd     /*  97 */	ED_INSERT,		/* a */
    465      1.1       cgd     /*  98 */	ED_INSERT,		/* b */
    466      1.1       cgd     /*  99 */	ED_INSERT,		/* c */
    467      1.1       cgd     /* 100 */	ED_INSERT,		/* d */
    468      1.1       cgd     /* 101 */	ED_INSERT,		/* e */
    469      1.1       cgd     /* 102 */	ED_INSERT,		/* f */
    470      1.1       cgd     /* 103 */	ED_INSERT,		/* g */
    471      1.1       cgd     /* 104 */	ED_INSERT,		/* h */
    472      1.1       cgd     /* 105 */	ED_INSERT,		/* i */
    473      1.1       cgd     /* 106 */	ED_INSERT,		/* j */
    474      1.1       cgd     /* 107 */	ED_INSERT,		/* k */
    475      1.1       cgd     /* 108 */	ED_INSERT,		/* l */
    476      1.1       cgd     /* 109 */	ED_INSERT,		/* m */
    477      1.1       cgd     /* 110 */	ED_INSERT,		/* n */
    478      1.1       cgd     /* 111 */	ED_INSERT,		/* o */
    479      1.1       cgd     /* 112 */	ED_INSERT,		/* p */
    480      1.1       cgd     /* 113 */	ED_INSERT,		/* q */
    481      1.1       cgd     /* 114 */	ED_INSERT,		/* r */
    482      1.1       cgd     /* 115 */	ED_INSERT,		/* s */
    483      1.1       cgd     /* 116 */	ED_INSERT,		/* t */
    484      1.1       cgd     /* 117 */	ED_INSERT,		/* u */
    485      1.1       cgd     /* 118 */	ED_INSERT,		/* v */
    486      1.1       cgd     /* 119 */	ED_INSERT,		/* w */
    487      1.1       cgd     /* 120 */	ED_INSERT,		/* x */
    488      1.1       cgd     /* 121 */	ED_INSERT,		/* y */
    489      1.1       cgd     /* 122 */	ED_INSERT,		/* z */
    490      1.1       cgd     /* 123 */	ED_INSERT,		/* { */
    491      1.1       cgd     /* 124 */	ED_INSERT,		/* | */
    492      1.1       cgd     /* 125 */	ED_INSERT,		/* } */
    493      1.1       cgd     /* 126 */	ED_INSERT,		/* ~ */
    494      1.1       cgd     /* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
    495      1.1       cgd     /* 128 */	ED_UNASSIGNED,		/* M-^@ */
    496      1.1       cgd     /* 129 */	ED_UNASSIGNED,		/* M-^A */
    497      1.1       cgd     /* 130 */	ED_UNASSIGNED,		/* M-^B */
    498      1.1       cgd     /* 131 */	ED_UNASSIGNED,		/* M-^C */
    499      1.1       cgd     /* 132 */	ED_UNASSIGNED,		/* M-^D */
    500      1.1       cgd     /* 133 */	ED_UNASSIGNED,		/* M-^E */
    501      1.1       cgd     /* 134 */	ED_UNASSIGNED,		/* M-^F */
    502      1.1       cgd     /* 135 */	ED_UNASSIGNED,		/* M-^G */
    503      1.1       cgd     /* 136 */	ED_UNASSIGNED,		/* M-^H */
    504      1.1       cgd     /* 137 */	ED_UNASSIGNED,		/* M-^I */
    505      1.1       cgd     /* 138 */	ED_UNASSIGNED,		/* M-^J */
    506      1.1       cgd     /* 139 */	ED_UNASSIGNED,		/* M-^K */
    507      1.1       cgd     /* 140 */	ED_UNASSIGNED,		/* M-^L */
    508      1.1       cgd     /* 141 */	ED_UNASSIGNED,		/* M-^M */
    509      1.1       cgd     /* 142 */	ED_UNASSIGNED,		/* M-^N */
    510      1.1       cgd     /* 143 */	ED_UNASSIGNED,		/* M-^O */
    511      1.1       cgd     /* 144 */	ED_UNASSIGNED,		/* M-^P */
    512      1.1       cgd     /* 145 */	ED_UNASSIGNED,		/* M-^Q */
    513      1.1       cgd     /* 146 */	ED_UNASSIGNED,		/* M-^R */
    514      1.1       cgd     /* 147 */	ED_UNASSIGNED,		/* M-^S */
    515      1.1       cgd     /* 148 */	ED_UNASSIGNED,		/* M-^T */
    516      1.1       cgd     /* 149 */	ED_UNASSIGNED,		/* M-^U */
    517      1.1       cgd     /* 150 */	ED_UNASSIGNED,		/* M-^V */
    518      1.1       cgd     /* 151 */	ED_UNASSIGNED,		/* M-^W */
    519      1.1       cgd     /* 152 */	ED_UNASSIGNED,		/* M-^X */
    520      1.1       cgd     /* 153 */	ED_UNASSIGNED,		/* M-^Y */
    521      1.1       cgd     /* 154 */	ED_UNASSIGNED,		/* M-^Z */
    522      1.1       cgd     /* 155 */	ED_UNASSIGNED,		/* M-^[ */
    523      1.1       cgd     /* 156 */	ED_UNASSIGNED,		/* M-^\ */
    524      1.1       cgd     /* 157 */	ED_UNASSIGNED,		/* M-^] */
    525      1.1       cgd     /* 158 */	ED_UNASSIGNED,		/* M-^^ */
    526      1.1       cgd     /* 159 */	ED_UNASSIGNED,		/* M-^_ */
    527      1.1       cgd     /* 160 */	ED_UNASSIGNED,		/* M-SPACE */
    528      1.1       cgd     /* 161 */	ED_UNASSIGNED,		/* M-! */
    529      1.1       cgd     /* 162 */	ED_UNASSIGNED,		/* M-" */
    530      1.1       cgd     /* 163 */	ED_UNASSIGNED,		/* M-# */
    531      1.1       cgd     /* 164 */	ED_UNASSIGNED,		/* M-$ */
    532      1.1       cgd     /* 165 */	ED_UNASSIGNED,		/* M-% */
    533      1.1       cgd     /* 166 */	ED_UNASSIGNED,		/* M-& */
    534      1.1       cgd     /* 167 */	ED_UNASSIGNED,		/* M-' */
    535      1.1       cgd     /* 168 */	ED_UNASSIGNED,		/* M-( */
    536      1.1       cgd     /* 169 */	ED_UNASSIGNED,		/* M-) */
    537      1.1       cgd     /* 170 */	ED_UNASSIGNED,		/* M-* */
    538      1.1       cgd     /* 171 */	ED_UNASSIGNED,		/* M-+ */
    539      1.1       cgd     /* 172 */	ED_UNASSIGNED,		/* M-, */
    540      1.1       cgd     /* 173 */	ED_UNASSIGNED,		/* M-- */
    541      1.1       cgd     /* 174 */	ED_UNASSIGNED,		/* M-. */
    542      1.1       cgd     /* 175 */	ED_UNASSIGNED,		/* M-/ */
    543      1.1       cgd     /* 176 */	ED_UNASSIGNED,		/* M-0 */
    544      1.1       cgd     /* 177 */	ED_UNASSIGNED,		/* M-1 */
    545      1.1       cgd     /* 178 */	ED_UNASSIGNED,		/* M-2 */
    546      1.1       cgd     /* 179 */	ED_UNASSIGNED,		/* M-3 */
    547      1.1       cgd     /* 180 */	ED_UNASSIGNED,		/* M-4 */
    548      1.1       cgd     /* 181 */	ED_UNASSIGNED,		/* M-5 */
    549      1.1       cgd     /* 182 */	ED_UNASSIGNED,		/* M-6 */
    550      1.1       cgd     /* 183 */	ED_UNASSIGNED,		/* M-7 */
    551      1.1       cgd     /* 184 */	ED_UNASSIGNED,		/* M-8 */
    552      1.1       cgd     /* 185 */	ED_UNASSIGNED,		/* M-9 */
    553      1.1       cgd     /* 186 */	ED_UNASSIGNED,		/* M-: */
    554      1.1       cgd     /* 187 */	ED_UNASSIGNED,		/* M-; */
    555      1.1       cgd     /* 188 */	ED_UNASSIGNED,		/* M-< */
    556      1.1       cgd     /* 189 */	ED_UNASSIGNED,		/* M-= */
    557      1.1       cgd     /* 190 */	ED_UNASSIGNED,		/* M-> */
    558      1.1       cgd     /* 191 */	ED_UNASSIGNED,		/* M-? */
    559      1.1       cgd     /* 192 */	ED_UNASSIGNED,		/* M-@ */
    560      1.1       cgd     /* 193 */	ED_UNASSIGNED,		/* M-A */
    561      1.1       cgd     /* 194 */	ED_UNASSIGNED,		/* M-B */
    562      1.1       cgd     /* 195 */	ED_UNASSIGNED,		/* M-C */
    563      1.1       cgd     /* 196 */	ED_UNASSIGNED,		/* M-D */
    564      1.1       cgd     /* 197 */	ED_UNASSIGNED,		/* M-E */
    565      1.1       cgd     /* 198 */	ED_UNASSIGNED,		/* M-F */
    566      1.1       cgd     /* 199 */	ED_UNASSIGNED,		/* M-G */
    567      1.1       cgd     /* 200 */	ED_UNASSIGNED,		/* M-H */
    568      1.1       cgd     /* 201 */	ED_UNASSIGNED,		/* M-I */
    569      1.1       cgd     /* 202 */	ED_UNASSIGNED,		/* M-J */
    570      1.1       cgd     /* 203 */	ED_UNASSIGNED,		/* M-K */
    571      1.1       cgd     /* 204 */	ED_UNASSIGNED,		/* M-L */
    572      1.1       cgd     /* 205 */	ED_UNASSIGNED,		/* M-M */
    573      1.1       cgd     /* 206 */	ED_UNASSIGNED,		/* M-N */
    574      1.1       cgd     /* 207 */	ED_UNASSIGNED,		/* M-O */
    575      1.1       cgd     /* 208 */	ED_UNASSIGNED,		/* M-P */
    576      1.1       cgd     /* 209 */	ED_UNASSIGNED,		/* M-Q */
    577      1.1       cgd     /* 210 */	ED_UNASSIGNED,		/* M-R */
    578      1.1       cgd     /* 211 */	ED_UNASSIGNED,		/* M-S */
    579      1.1       cgd     /* 212 */	ED_UNASSIGNED,		/* M-T */
    580      1.1       cgd     /* 213 */	ED_UNASSIGNED,		/* M-U */
    581      1.1       cgd     /* 214 */	ED_UNASSIGNED,		/* M-V */
    582      1.1       cgd     /* 215 */	ED_UNASSIGNED,		/* M-W */
    583      1.1       cgd     /* 216 */	ED_UNASSIGNED,		/* M-X */
    584      1.1       cgd     /* 217 */	ED_UNASSIGNED,		/* M-Y */
    585      1.1       cgd     /* 218 */	ED_UNASSIGNED,		/* M-Z */
    586      1.1       cgd     /* 219 */	ED_UNASSIGNED,		/* M-[ */
    587      1.1       cgd     /* 220 */	ED_UNASSIGNED,		/* M-\ */
    588      1.1       cgd     /* 221 */	ED_UNASSIGNED,		/* M-] */
    589      1.1       cgd     /* 222 */	ED_UNASSIGNED,		/* M-^ */
    590      1.1       cgd     /* 223 */	ED_UNASSIGNED,		/* M-_ */
    591      1.1       cgd     /* 224 */	ED_UNASSIGNED,		/* M-` */
    592      1.1       cgd     /* 225 */	ED_UNASSIGNED,		/* M-a */
    593      1.1       cgd     /* 226 */	ED_UNASSIGNED,		/* M-b */
    594      1.1       cgd     /* 227 */	ED_UNASSIGNED,		/* M-c */
    595      1.1       cgd     /* 228 */	ED_UNASSIGNED,		/* M-d */
    596      1.1       cgd     /* 229 */	ED_UNASSIGNED,		/* M-e */
    597      1.1       cgd     /* 230 */	ED_UNASSIGNED,		/* M-f */
    598      1.1       cgd     /* 231 */	ED_UNASSIGNED,		/* M-g */
    599      1.1       cgd     /* 232 */	ED_UNASSIGNED,		/* M-h */
    600      1.1       cgd     /* 233 */	ED_UNASSIGNED,		/* M-i */
    601      1.1       cgd     /* 234 */	ED_UNASSIGNED,		/* M-j */
    602      1.1       cgd     /* 235 */	ED_UNASSIGNED,		/* M-k */
    603      1.1       cgd     /* 236 */	ED_UNASSIGNED,		/* M-l */
    604      1.1       cgd     /* 237 */	ED_UNASSIGNED,		/* M-m */
    605      1.1       cgd     /* 238 */	ED_UNASSIGNED,		/* M-n */
    606      1.1       cgd     /* 239 */	ED_UNASSIGNED,		/* M-o */
    607      1.1       cgd     /* 240 */	ED_UNASSIGNED,		/* M-p */
    608      1.1       cgd     /* 241 */	ED_UNASSIGNED,		/* M-q */
    609      1.1       cgd     /* 242 */	ED_UNASSIGNED,		/* M-r */
    610      1.1       cgd     /* 243 */	ED_UNASSIGNED,		/* M-s */
    611      1.1       cgd     /* 244 */	ED_UNASSIGNED,		/* M-t */
    612      1.1       cgd     /* 245 */	ED_UNASSIGNED,		/* M-u */
    613      1.1       cgd     /* 246 */	ED_UNASSIGNED,		/* M-v */
    614      1.1       cgd     /* 247 */	ED_UNASSIGNED,		/* M-w */
    615      1.1       cgd     /* 248 */	ED_UNASSIGNED,		/* M-x */
    616      1.1       cgd     /* 249 */	ED_UNASSIGNED,		/* M-y */
    617      1.1       cgd     /* 250 */	ED_UNASSIGNED,		/* M-z */
    618      1.1       cgd     /* 251 */	ED_UNASSIGNED,		/* M-{ */
    619      1.1       cgd     /* 252 */	ED_UNASSIGNED,		/* M-| */
    620      1.1       cgd     /* 253 */	ED_UNASSIGNED,		/* M-} */
    621      1.1       cgd     /* 254 */	ED_UNASSIGNED,		/* M-~ */
    622      1.1       cgd     /* 255 */	ED_UNASSIGNED		/* M-^? */
    623      1.1       cgd };
    624      1.1       cgd 
    625      1.1       cgd private el_action_t  el_map_vi_command[] = {
    626      1.1       cgd     /*   0 */	ED_UNASSIGNED,		/* ^@ */
    627      1.1       cgd     /*   1 */	ED_MOVE_TO_BEG,		/* ^A */
    628      1.1       cgd     /*   2 */	ED_UNASSIGNED,		/* ^B */
    629      1.1       cgd     /*   3 */	ED_TTY_SIGINT,		/* ^C */
    630      1.1       cgd     /*   4 */	ED_UNASSIGNED,		/* ^D */
    631      1.1       cgd     /*   5 */	ED_MOVE_TO_END,		/* ^E */
    632      1.1       cgd     /*   6 */	ED_UNASSIGNED,		/* ^F */
    633      1.1       cgd     /*   7 */	ED_UNASSIGNED,		/* ^G */
    634      1.1       cgd     /*   8 */	ED_PREV_CHAR,		/* ^H */
    635      1.1       cgd     /*   9 */	ED_UNASSIGNED,		/* ^I */
    636      1.1       cgd     /*  10 */	ED_NEWLINE,		/* ^J */
    637      1.1       cgd     /*  11 */	ED_KILL_LINE,		/* ^K */
    638      1.1       cgd     /*  12 */	ED_CLEAR_SCREEN,	/* ^L */
    639      1.1       cgd     /*  13 */	ED_NEWLINE,		/* ^M */
    640      1.1       cgd     /*  14 */	ED_NEXT_HISTORY,	/* ^N */
    641      1.1       cgd     /*  15 */	ED_TTY_FLUSH_OUTPUT,	/* ^O */
    642      1.1       cgd     /*  16 */	ED_PREV_HISTORY,	/* ^P */
    643      1.1       cgd     /*  17 */	ED_TTY_START_OUTPUT,	/* ^Q */
    644      1.1       cgd     /*  18 */	ED_REDISPLAY,		/* ^R */
    645      1.1       cgd     /*  19 */	ED_TTY_STOP_OUTPUT,	/* ^S */
    646      1.1       cgd     /*  20 */	ED_UNASSIGNED,		/* ^T */
    647      1.1       cgd     /*  21 */	VI_KILL_LINE_PREV,	/* ^U */
    648      1.1       cgd     /*  22 */	ED_UNASSIGNED,		/* ^V */
    649      1.1       cgd     /*  23 */	ED_DELETE_PREV_WORD,	/* ^W */
    650      1.1       cgd     /*  24 */	ED_UNASSIGNED,		/* ^X */
    651      1.1       cgd     /*  25 */	ED_UNASSIGNED,		/* ^Y */
    652      1.1       cgd     /*  26 */	ED_UNASSIGNED,		/* ^Z */
    653      1.1       cgd     /*  27 */	EM_META_NEXT,		/* ^[ */
    654      1.1       cgd     /*  28 */	ED_TTY_SIGQUIT,		/* ^\ */
    655      1.1       cgd     /*  29 */	ED_UNASSIGNED,		/* ^] */
    656      1.1       cgd     /*  30 */	ED_UNASSIGNED,		/* ^^ */
    657      1.1       cgd     /*  31 */	ED_UNASSIGNED,		/* ^_ */
    658      1.1       cgd     /*  32 */	ED_NEXT_CHAR,		/* SPACE */
    659      1.1       cgd     /*  33 */	ED_UNASSIGNED,		/* ! */
    660      1.1       cgd     /*  34 */	ED_UNASSIGNED,		/* " */
    661      1.1       cgd     /*  35 */	ED_UNASSIGNED,		/* # */
    662      1.1       cgd     /*  36 */	ED_MOVE_TO_END,		/* $ */
    663      1.1       cgd     /*  37 */	ED_UNASSIGNED,		/* % */
    664      1.1       cgd     /*  38 */	ED_UNASSIGNED,		/* & */
    665      1.1       cgd     /*  39 */	ED_UNASSIGNED,		/* ' */
    666      1.1       cgd     /*  40 */	ED_UNASSIGNED,		/* ( */
    667      1.1       cgd     /*  41 */	ED_UNASSIGNED,		/* ) */
    668      1.1       cgd     /*  42 */	ED_UNASSIGNED,		/* * */
    669      1.1       cgd     /*  43 */	ED_NEXT_HISTORY,	/* + */
    670      1.9    simonb     /*  44 */	VI_REPEAT_PREV_CHAR,	/* , */
    671      1.9    simonb     /*  45 */	ED_PREV_HISTORY,	/* - */
    672      1.1       cgd     /*  46 */	ED_UNASSIGNED,		/* . */
    673      1.1       cgd     /*  47 */	VI_SEARCH_PREV,		/* / */
    674      1.1       cgd     /*  48 */	VI_ZERO,		/* 0 */
    675      1.1       cgd     /*  49 */	ED_ARGUMENT_DIGIT,	/* 1 */
    676      1.1       cgd     /*  50 */	ED_ARGUMENT_DIGIT,	/* 2 */
    677      1.1       cgd     /*  51 */	ED_ARGUMENT_DIGIT,	/* 3 */
    678      1.1       cgd     /*  52 */	ED_ARGUMENT_DIGIT,	/* 4 */
    679      1.1       cgd     /*  53 */	ED_ARGUMENT_DIGIT,	/* 5 */
    680      1.1       cgd     /*  54 */	ED_ARGUMENT_DIGIT,	/* 6 */
    681      1.1       cgd     /*  55 */	ED_ARGUMENT_DIGIT,	/* 7 */
    682      1.1       cgd     /*  56 */	ED_ARGUMENT_DIGIT,	/* 8 */
    683      1.1       cgd     /*  57 */	ED_ARGUMENT_DIGIT,	/* 9 */
    684      1.1       cgd     /*  58 */	ED_COMMAND,		/* : */
    685      1.1       cgd     /*  59 */	VI_REPEAT_NEXT_CHAR,	/* ; */
    686      1.1       cgd     /*  60 */	ED_UNASSIGNED,		/* < */
    687      1.1       cgd     /*  61 */	ED_UNASSIGNED,		/* = */
    688      1.1       cgd     /*  62 */	ED_UNASSIGNED,		/* > */
    689      1.1       cgd     /*  63 */	VI_SEARCH_NEXT,		/* ? */
    690      1.1       cgd     /*  64 */	ED_UNASSIGNED,		/* @ */
    691      1.1       cgd     /*  65 */	VI_ADD_AT_EOL,		/* A */
    692      1.1       cgd     /*  66 */	VI_PREV_SPACE_WORD,	/* B */
    693      1.1       cgd     /*  67 */	VI_CHANGE_TO_EOL,	/* C */
    694      1.1       cgd     /*  68 */	ED_KILL_LINE,		/* D */
    695      1.1       cgd     /*  69 */	VI_TO_END_WORD,		/* E */
    696      1.1       cgd     /*  70 */	VI_PREV_CHAR,		/* F */
    697      1.1       cgd     /*  71 */	ED_UNASSIGNED,		/* G */
    698      1.1       cgd     /*  72 */	ED_UNASSIGNED,		/* H */
    699      1.1       cgd     /*  73 */	VI_INSERT_AT_BOL,	/* I */
    700      1.1       cgd     /*  74 */	ED_SEARCH_NEXT_HISTORY,	/* J */
    701      1.1       cgd     /*  75 */	ED_SEARCH_PREV_HISTORY,	/* K */
    702      1.1       cgd     /*  76 */	ED_UNASSIGNED,		/* L */
    703      1.1       cgd     /*  77 */	ED_UNASSIGNED,		/* M */
    704      1.1       cgd     /*  78 */	VI_REPEAT_SEARCH_PREV,	/* N */
    705      1.1       cgd     /*  79 */	ED_SEQUENCE_LEAD_IN,	/* O */
    706      1.1       cgd     /*  80 */	VI_PASTE_PREV,		/* P */
    707      1.1       cgd     /*  81 */	ED_UNASSIGNED,		/* Q */
    708      1.1       cgd     /*  82 */	VI_REPLACE_MODE,	/* R */
    709      1.1       cgd     /*  83 */	VI_SUBSTITUTE_LINE,	/* S */
    710      1.1       cgd     /*  84 */	VI_TO_PREV_CHAR,	/* T */
    711      1.1       cgd     /*  85 */	ED_UNASSIGNED,		/* U */
    712      1.1       cgd     /*  86 */	ED_UNASSIGNED,		/* V */
    713      1.1       cgd     /*  87 */	VI_NEXT_SPACE_WORD,	/* W */
    714      1.1       cgd     /*  88 */	ED_DELETE_PREV_CHAR,	/* X */
    715      1.1       cgd     /*  89 */	ED_UNASSIGNED,		/* Y */
    716      1.1       cgd     /*  90 */	ED_UNASSIGNED,		/* Z */
    717      1.1       cgd     /*  91 */	ED_SEQUENCE_LEAD_IN,	/* [ */
    718      1.1       cgd     /*  92 */	ED_UNASSIGNED,		/* \ */
    719      1.1       cgd     /*  93 */	ED_UNASSIGNED,		/* ] */
    720      1.1       cgd     /*  94 */	ED_MOVE_TO_BEG,		/* ^ */
    721      1.1       cgd     /*  95 */	ED_UNASSIGNED,		/* _ */
    722      1.1       cgd     /*  96 */	ED_UNASSIGNED,		/* ` */
    723      1.1       cgd     /*  97 */	VI_ADD,			/* a */
    724      1.1       cgd     /*  98 */	VI_PREV_WORD,		/* b */
    725      1.1       cgd     /*  99 */	VI_CHANGE_META,		/* c */
    726      1.1       cgd     /* 100 */	VI_DELETE_META,		/* d */
    727      1.1       cgd     /* 101 */	VI_END_WORD,		/* e */
    728      1.1       cgd     /* 102 */	VI_NEXT_CHAR,		/* f */
    729      1.1       cgd     /* 103 */	ED_UNASSIGNED,		/* g */
    730      1.1       cgd     /* 104 */	ED_PREV_CHAR,		/* h */
    731      1.1       cgd     /* 105 */	VI_INSERT,		/* i */
    732      1.1       cgd     /* 106 */	ED_NEXT_HISTORY,	/* j */
    733      1.1       cgd     /* 107 */	ED_PREV_HISTORY,	/* k */
    734      1.1       cgd     /* 108 */	ED_NEXT_CHAR,		/* l */
    735      1.1       cgd     /* 109 */	ED_UNASSIGNED,		/* m */
    736      1.1       cgd     /* 110 */	VI_REPEAT_SEARCH_NEXT,	/* n */
    737      1.1       cgd     /* 111 */	ED_UNASSIGNED,		/* o */
    738      1.1       cgd     /* 112 */	VI_PASTE_NEXT,		/* p */
    739      1.1       cgd     /* 113 */	ED_UNASSIGNED,		/* q */
    740      1.1       cgd     /* 114 */	VI_REPLACE_CHAR,	/* r */
    741      1.1       cgd     /* 115 */	VI_SUBSTITUTE_CHAR,	/* s */
    742      1.1       cgd     /* 116 */	VI_TO_NEXT_CHAR,	/* t */
    743      1.1       cgd     /* 117 */	VI_UNDO,		/* u */
    744      1.1       cgd     /* 118 */	ED_UNASSIGNED,		/* v */
    745      1.1       cgd     /* 119 */	VI_NEXT_WORD,		/* w */
    746      1.1       cgd     /* 120 */	ED_DELETE_NEXT_CHAR,	/* x */
    747      1.1       cgd     /* 121 */	ED_UNASSIGNED,		/* y */
    748      1.1       cgd     /* 122 */	ED_UNASSIGNED,		/* z */
    749      1.1       cgd     /* 123 */	ED_UNASSIGNED,		/* { */
    750      1.1       cgd     /* 124 */	ED_UNASSIGNED,		/* | */
    751      1.1       cgd     /* 125 */	ED_UNASSIGNED,		/* } */
    752      1.1       cgd     /* 126 */	VI_CHANGE_CASE,		/* ~ */
    753      1.1       cgd     /* 127 */	ED_DELETE_PREV_CHAR,	/* ^? */
    754      1.1       cgd     /* 128 */	ED_UNASSIGNED,		/* M-^@ */
    755      1.1       cgd     /* 129 */	ED_UNASSIGNED,		/* M-^A */
    756      1.1       cgd     /* 130 */	ED_UNASSIGNED,		/* M-^B */
    757      1.1       cgd     /* 131 */	ED_UNASSIGNED,		/* M-^C */
    758      1.1       cgd     /* 132 */	ED_UNASSIGNED,		/* M-^D */
    759      1.1       cgd     /* 133 */	ED_UNASSIGNED,		/* M-^E */
    760      1.1       cgd     /* 134 */	ED_UNASSIGNED,		/* M-^F */
    761      1.1       cgd     /* 135 */	ED_UNASSIGNED,		/* M-^G */
    762      1.1       cgd     /* 136 */	ED_UNASSIGNED,		/* M-^H */
    763      1.1       cgd     /* 137 */	ED_UNASSIGNED,		/* M-^I */
    764      1.1       cgd     /* 138 */	ED_UNASSIGNED,		/* M-^J */
    765      1.1       cgd     /* 139 */	ED_UNASSIGNED,		/* M-^K */
    766      1.1       cgd     /* 140 */	ED_UNASSIGNED,		/* M-^L */
    767      1.1       cgd     /* 141 */	ED_UNASSIGNED,		/* M-^M */
    768      1.1       cgd     /* 142 */	ED_UNASSIGNED,		/* M-^N */
    769      1.1       cgd     /* 143 */	ED_UNASSIGNED,		/* M-^O */
    770      1.1       cgd     /* 144 */	ED_UNASSIGNED,		/* M-^P */
    771      1.1       cgd     /* 145 */	ED_UNASSIGNED,		/* M-^Q */
    772      1.1       cgd     /* 146 */	ED_UNASSIGNED,		/* M-^R */
    773      1.1       cgd     /* 147 */	ED_UNASSIGNED,		/* M-^S */
    774      1.1       cgd     /* 148 */	ED_UNASSIGNED,		/* M-^T */
    775      1.1       cgd     /* 149 */	ED_UNASSIGNED,		/* M-^U */
    776      1.1       cgd     /* 150 */	ED_UNASSIGNED,		/* M-^V */
    777      1.1       cgd     /* 151 */	ED_UNASSIGNED,		/* M-^W */
    778      1.1       cgd     /* 152 */	ED_UNASSIGNED,		/* M-^X */
    779      1.1       cgd     /* 153 */	ED_UNASSIGNED,		/* M-^Y */
    780      1.1       cgd     /* 154 */	ED_UNASSIGNED,		/* M-^Z */
    781      1.1       cgd     /* 155 */	ED_UNASSIGNED,		/* M-^[ */
    782      1.1       cgd     /* 156 */	ED_UNASSIGNED,		/* M-^\ */
    783      1.1       cgd     /* 157 */	ED_UNASSIGNED,		/* M-^] */
    784      1.1       cgd     /* 158 */	ED_UNASSIGNED,		/* M-^^ */
    785      1.1       cgd     /* 159 */	ED_UNASSIGNED,		/* M-^_ */
    786      1.1       cgd     /* 160 */	ED_UNASSIGNED,		/* M-SPACE */
    787      1.1       cgd     /* 161 */	ED_UNASSIGNED,		/* M-! */
    788      1.1       cgd     /* 162 */	ED_UNASSIGNED,		/* M-" */
    789      1.1       cgd     /* 163 */	ED_UNASSIGNED,		/* M-# */
    790      1.1       cgd     /* 164 */	ED_UNASSIGNED,		/* M-$ */
    791      1.1       cgd     /* 165 */	ED_UNASSIGNED,		/* M-% */
    792      1.1       cgd     /* 166 */	ED_UNASSIGNED,		/* M-& */
    793      1.1       cgd     /* 167 */	ED_UNASSIGNED,		/* M-' */
    794      1.1       cgd     /* 168 */	ED_UNASSIGNED,		/* M-( */
    795      1.1       cgd     /* 169 */	ED_UNASSIGNED,		/* M-) */
    796      1.1       cgd     /* 170 */	ED_UNASSIGNED,		/* M-* */
    797      1.1       cgd     /* 171 */	ED_UNASSIGNED,		/* M-+ */
    798      1.1       cgd     /* 172 */	ED_UNASSIGNED,		/* M-, */
    799      1.1       cgd     /* 173 */	ED_UNASSIGNED,		/* M-- */
    800      1.1       cgd     /* 174 */	ED_UNASSIGNED,		/* M-. */
    801      1.1       cgd     /* 175 */	ED_UNASSIGNED,		/* M-/ */
    802      1.1       cgd     /* 176 */	ED_UNASSIGNED,		/* M-0 */
    803      1.1       cgd     /* 177 */	ED_UNASSIGNED,		/* M-1 */
    804      1.1       cgd     /* 178 */	ED_UNASSIGNED,		/* M-2 */
    805      1.1       cgd     /* 179 */	ED_UNASSIGNED,		/* M-3 */
    806      1.1       cgd     /* 180 */	ED_UNASSIGNED,		/* M-4 */
    807      1.1       cgd     /* 181 */	ED_UNASSIGNED,		/* M-5 */
    808      1.1       cgd     /* 182 */	ED_UNASSIGNED,		/* M-6 */
    809      1.1       cgd     /* 183 */	ED_UNASSIGNED,		/* M-7 */
    810      1.1       cgd     /* 184 */	ED_UNASSIGNED,		/* M-8 */
    811      1.1       cgd     /* 185 */	ED_UNASSIGNED,		/* M-9 */
    812      1.1       cgd     /* 186 */	ED_UNASSIGNED,		/* M-: */
    813      1.1       cgd     /* 187 */	ED_UNASSIGNED,		/* M-; */
    814      1.1       cgd     /* 188 */	ED_UNASSIGNED,		/* M-< */
    815      1.1       cgd     /* 189 */	ED_UNASSIGNED,		/* M-= */
    816      1.1       cgd     /* 190 */	ED_UNASSIGNED,		/* M-> */
    817      1.1       cgd     /* 191 */	ED_UNASSIGNED,		/* M-? */
    818      1.1       cgd     /* 192 */	ED_UNASSIGNED,		/* M-@ */
    819      1.1       cgd     /* 193 */	ED_UNASSIGNED,		/* M-A */
    820      1.1       cgd     /* 194 */	ED_UNASSIGNED,		/* M-B */
    821      1.1       cgd     /* 195 */	ED_UNASSIGNED,		/* M-C */
    822      1.1       cgd     /* 196 */	ED_UNASSIGNED,		/* M-D */
    823      1.1       cgd     /* 197 */	ED_UNASSIGNED,		/* M-E */
    824      1.1       cgd     /* 198 */	ED_UNASSIGNED,		/* M-F */
    825      1.1       cgd     /* 199 */	ED_UNASSIGNED,		/* M-G */
    826      1.1       cgd     /* 200 */	ED_UNASSIGNED,		/* M-H */
    827      1.1       cgd     /* 201 */	ED_UNASSIGNED,		/* M-I */
    828      1.1       cgd     /* 202 */	ED_UNASSIGNED,		/* M-J */
    829      1.1       cgd     /* 203 */	ED_UNASSIGNED,		/* M-K */
    830      1.1       cgd     /* 204 */	ED_UNASSIGNED,		/* M-L */
    831      1.1       cgd     /* 205 */	ED_UNASSIGNED,		/* M-M */
    832      1.1       cgd     /* 206 */	ED_UNASSIGNED,		/* M-N */
    833      1.1       cgd     /* 207 */	ED_SEQUENCE_LEAD_IN,	/* M-O */
    834      1.1       cgd     /* 208 */	ED_UNASSIGNED,		/* M-P */
    835      1.1       cgd     /* 209 */	ED_UNASSIGNED,		/* M-Q */
    836      1.1       cgd     /* 210 */	ED_UNASSIGNED,		/* M-R */
    837      1.1       cgd     /* 211 */	ED_UNASSIGNED,		/* M-S */
    838      1.1       cgd     /* 212 */	ED_UNASSIGNED,		/* M-T */
    839      1.1       cgd     /* 213 */	ED_UNASSIGNED,		/* M-U */
    840      1.1       cgd     /* 214 */	ED_UNASSIGNED,		/* M-V */
    841      1.1       cgd     /* 215 */	ED_UNASSIGNED,		/* M-W */
    842      1.1       cgd     /* 216 */	ED_UNASSIGNED,		/* M-X */
    843      1.1       cgd     /* 217 */	ED_UNASSIGNED,		/* M-Y */
    844      1.1       cgd     /* 218 */	ED_UNASSIGNED,		/* M-Z */
    845      1.1       cgd     /* 219 */	ED_SEQUENCE_LEAD_IN,	/* M-[ */
    846      1.1       cgd     /* 220 */	ED_UNASSIGNED,		/* M-\ */
    847      1.1       cgd     /* 221 */	ED_UNASSIGNED,		/* M-] */
    848      1.1       cgd     /* 222 */	ED_UNASSIGNED,		/* M-^ */
    849      1.1       cgd     /* 223 */	ED_UNASSIGNED,		/* M-_ */
    850      1.1       cgd     /* 224 */	ED_UNASSIGNED,		/* M-` */
    851      1.1       cgd     /* 225 */	ED_UNASSIGNED,		/* M-a */
    852      1.1       cgd     /* 226 */	ED_UNASSIGNED,		/* M-b */
    853      1.1       cgd     /* 227 */	ED_UNASSIGNED,		/* M-c */
    854      1.1       cgd     /* 228 */	ED_UNASSIGNED,		/* M-d */
    855      1.1       cgd     /* 229 */	ED_UNASSIGNED,		/* M-e */
    856      1.1       cgd     /* 230 */	ED_UNASSIGNED,		/* M-f */
    857      1.1       cgd     /* 231 */	ED_UNASSIGNED,		/* M-g */
    858      1.1       cgd     /* 232 */	ED_UNASSIGNED,		/* M-h */
    859      1.1       cgd     /* 233 */	ED_UNASSIGNED,		/* M-i */
    860      1.1       cgd     /* 234 */	ED_UNASSIGNED,		/* M-j */
    861      1.1       cgd     /* 235 */	ED_UNASSIGNED,		/* M-k */
    862      1.1       cgd     /* 236 */	ED_UNASSIGNED,		/* M-l */
    863      1.1       cgd     /* 237 */	ED_UNASSIGNED,		/* M-m */
    864      1.1       cgd     /* 238 */	ED_UNASSIGNED,		/* M-n */
    865      1.1       cgd     /* 239 */	ED_UNASSIGNED,		/* M-o */
    866      1.1       cgd     /* 240 */	ED_UNASSIGNED,		/* M-p */
    867      1.1       cgd     /* 241 */	ED_UNASSIGNED,		/* M-q */
    868      1.1       cgd     /* 242 */	ED_UNASSIGNED,		/* M-r */
    869      1.1       cgd     /* 243 */	ED_UNASSIGNED,		/* M-s */
    870      1.1       cgd     /* 244 */	ED_UNASSIGNED,		/* M-t */
    871      1.1       cgd     /* 245 */	ED_UNASSIGNED,		/* M-u */
    872      1.1       cgd     /* 246 */	ED_UNASSIGNED,		/* M-v */
    873      1.1       cgd     /* 247 */	ED_UNASSIGNED,		/* M-w */
    874      1.1       cgd     /* 248 */	ED_UNASSIGNED,		/* M-x */
    875      1.1       cgd     /* 249 */	ED_UNASSIGNED,		/* M-y */
    876      1.1       cgd     /* 250 */	ED_UNASSIGNED,		/* M-z */
    877      1.1       cgd     /* 251 */	ED_UNASSIGNED,		/* M-{ */
    878      1.1       cgd     /* 252 */	ED_UNASSIGNED,		/* M-| */
    879      1.1       cgd     /* 253 */	ED_UNASSIGNED,		/* M-} */
    880      1.1       cgd     /* 254 */	ED_UNASSIGNED,		/* M-~ */
    881      1.1       cgd     /* 255 */	ED_UNASSIGNED		/* M-^? */
    882      1.1       cgd };
    883      1.1       cgd 
    884      1.1       cgd 
    885      1.1       cgd /* map_init():
    886      1.1       cgd  *	Initialize and allocate the maps
    887      1.1       cgd  */
    888      1.1       cgd protected int
    889      1.1       cgd map_init(el)
    890      1.1       cgd     EditLine *el;
    891      1.1       cgd {
    892      1.9    simonb 
    893      1.1       cgd     /*
    894      1.1       cgd      * Make sure those are correct before starting.
    895      1.1       cgd      */
    896      1.1       cgd #ifdef MAP_DEBUG
    897      1.1       cgd     if (sizeof(el_map_emacs)      != N_KEYS * sizeof(el_action_t))
    898      1.1       cgd 	abort();
    899      1.1       cgd     if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
    900      1.1       cgd 	abort();
    901      1.1       cgd     if (sizeof(el_map_vi_insert)  != N_KEYS * sizeof(el_action_t))
    902      1.1       cgd 	abort();
    903      1.1       cgd #endif
    904      1.1       cgd 
    905      1.1       cgd     el->el_map.alt   = (el_action_t *) el_malloc(sizeof(el_action_t) * N_KEYS);
    906      1.1       cgd     el->el_map.key   = (el_action_t *) el_malloc(sizeof(el_action_t) * N_KEYS);
    907      1.1       cgd     el->el_map.emacs = el_map_emacs;
    908      1.1       cgd     el->el_map.vic   = el_map_vi_command;
    909      1.1       cgd     el->el_map.vii   = el_map_vi_insert;
    910      1.1       cgd     el->el_map.help  = (el_bindings_t *) el_malloc(sizeof(el_bindings_t) *
    911      1.1       cgd 						   EL_NUM_FCNS);
    912      1.9    simonb     (void) memcpy(el->el_map.help, help__get(),
    913      1.1       cgd 		  sizeof(el_bindings_t) * EL_NUM_FCNS);
    914      1.1       cgd     el->el_map.func  = (el_func_t *) el_malloc(sizeof(el_func_t) * EL_NUM_FCNS);
    915      1.1       cgd     memcpy(el->el_map.func, func__get(), sizeof(el_func_t) * EL_NUM_FCNS);
    916      1.1       cgd     el->el_map.nfunc = EL_NUM_FCNS;
    917      1.1       cgd 
    918      1.1       cgd #ifdef VIDEFAULT
    919      1.1       cgd     map_init_vi(el);
    920      1.1       cgd #else
    921      1.1       cgd     map_init_emacs(el);
    922      1.1       cgd #endif /* VIDEFAULT */
    923      1.1       cgd     return 0;
    924      1.1       cgd }
    925      1.1       cgd 
    926      1.1       cgd 
    927      1.1       cgd /* map_end():
    928      1.1       cgd  *	Free the space taken by the editor maps
    929      1.1       cgd  */
    930      1.1       cgd protected void
    931      1.1       cgd map_end(el)
    932      1.1       cgd     EditLine *el;
    933      1.1       cgd {
    934      1.1       cgd     el_free((ptr_t) el->el_map.alt);
    935      1.1       cgd     el->el_map.alt   = NULL;
    936      1.1       cgd     el_free((ptr_t) el->el_map.key);
    937      1.1       cgd     el->el_map.key   = NULL;
    938      1.1       cgd     el->el_map.emacs = NULL;
    939      1.1       cgd     el->el_map.vic   = NULL;
    940      1.1       cgd     el->el_map.vii   = NULL;
    941      1.1       cgd     el_free((ptr_t) el->el_map.help);
    942      1.1       cgd     el->el_map.help  = NULL;
    943      1.1       cgd     el_free((ptr_t) el->el_map.func);
    944      1.1       cgd     el->el_map.func  = NULL;
    945      1.1       cgd }
    946      1.1       cgd 
    947      1.1       cgd 
    948      1.1       cgd /* map_init_nls():
    949      1.1       cgd  *	Find all the printable keys and bind them to self insert
    950      1.1       cgd  */
    951      1.1       cgd private void
    952      1.1       cgd map_init_nls(el)
    953      1.1       cgd     EditLine *el;
    954      1.1       cgd {
    955      1.1       cgd     int i;
    956      1.1       cgd     el_action_t *map = el->el_map.key;
    957      1.1       cgd 
    958      1.9    simonb     for (i = 0200; i <= 0377; i++)
    959      1.9    simonb 	if (isprint(i))
    960      1.1       cgd 	    map[i] = ED_INSERT;
    961      1.1       cgd }
    962      1.1       cgd 
    963      1.1       cgd 
    964      1.1       cgd /* map_init_meta():
    965      1.1       cgd  *	Bind all the meta keys to the appropriate ESC-<key> sequence
    966      1.1       cgd  */
    967      1.1       cgd private void
    968      1.1       cgd map_init_meta(el)
    969      1.1       cgd     EditLine *el;
    970      1.1       cgd {
    971      1.1       cgd     char    buf[3];
    972      1.5     perry     int i;
    973      1.1       cgd     el_action_t *map = el->el_map.key;
    974      1.1       cgd     el_action_t *alt = el->el_map.alt;
    975      1.1       cgd 
    976      1.1       cgd     for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
    977      1.1       cgd 	continue;
    978      1.1       cgd 
    979      1.1       cgd     if (i > 0377) {
    980      1.1       cgd 	for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
    981      1.1       cgd 	    continue;
    982      1.1       cgd 	if (i > 0377) {
    983      1.1       cgd 	    i = 033;
    984      1.1       cgd 	    if (el->el_map.type == MAP_VI)
    985      1.1       cgd 		map = alt;
    986      1.1       cgd 	}
    987      1.9    simonb 	else
    988      1.1       cgd 	    map = alt;
    989      1.1       cgd     }
    990      1.1       cgd     buf[0] = (char) i;
    991      1.1       cgd     buf[2] = 0;
    992      1.9    simonb     for (i = 0200; i <= 0377; i++)
    993      1.1       cgd 	switch (map[i]) {
    994      1.1       cgd 	case ED_INSERT:
    995      1.1       cgd 	case ED_UNASSIGNED:
    996      1.1       cgd 	case ED_SEQUENCE_LEAD_IN:
    997      1.1       cgd 	    break;
    998      1.1       cgd 	default:
    999      1.1       cgd 	    buf[1] = i & 0177;
   1000      1.1       cgd 	    key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD);
   1001      1.1       cgd 	    break;
   1002      1.1       cgd 	}
   1003      1.6       mrg     map[(int)buf[0]] = ED_SEQUENCE_LEAD_IN;
   1004      1.1       cgd }
   1005      1.1       cgd 
   1006      1.1       cgd 
   1007      1.1       cgd /* map_init_vi():
   1008      1.1       cgd  *	Initialize the vi bindings
   1009      1.1       cgd  */
   1010      1.1       cgd protected void
   1011      1.1       cgd map_init_vi(el)
   1012      1.1       cgd     EditLine *el;
   1013      1.1       cgd {
   1014      1.5     perry     int i;
   1015      1.1       cgd     el_action_t *key = el->el_map.key;
   1016      1.1       cgd     el_action_t *alt = el->el_map.alt;
   1017      1.1       cgd     el_action_t *vii = el->el_map.vii;
   1018      1.1       cgd     el_action_t *vic = el->el_map.vic;
   1019      1.1       cgd 
   1020      1.1       cgd     el->el_map.type = MAP_VI;
   1021      1.1       cgd     el->el_map.current = el->el_map.key;
   1022      1.1       cgd 
   1023      1.1       cgd     key_reset(el);
   1024      1.1       cgd 
   1025      1.1       cgd     for (i = 0; i < N_KEYS; i++) {
   1026      1.1       cgd 	key[i] = vii[i];
   1027      1.1       cgd 	alt[i] = vic[i];
   1028      1.1       cgd     }
   1029      1.1       cgd 
   1030      1.1       cgd     map_init_meta(el);
   1031  1.9.2.1  wrstuden     map_init_nls(el);
   1032      1.1       cgd 
   1033      1.1       cgd     tty_bind_char(el, 1);
   1034      1.1       cgd     term_bind_arrow(el);
   1035      1.1       cgd }
   1036      1.1       cgd 
   1037      1.1       cgd 
   1038      1.1       cgd /* map_init_emacs():
   1039      1.1       cgd  *	Initialize the emacs bindings
   1040      1.1       cgd  */
   1041      1.1       cgd protected void
   1042      1.1       cgd map_init_emacs(el)
   1043      1.1       cgd     EditLine *el;
   1044      1.1       cgd {
   1045      1.1       cgd     int i;
   1046      1.1       cgd     char    buf[3];
   1047      1.1       cgd     el_action_t *key   = el->el_map.key;
   1048      1.1       cgd     el_action_t *alt   = el->el_map.alt;
   1049      1.1       cgd     el_action_t *emacs = el->el_map.emacs;
   1050      1.1       cgd 
   1051      1.1       cgd     el->el_map.type = MAP_EMACS;
   1052      1.1       cgd     el->el_map.current = el->el_map.key;
   1053      1.1       cgd     key_reset(el);
   1054      1.1       cgd 
   1055      1.1       cgd     for (i = 0; i < N_KEYS; i++) {
   1056      1.1       cgd 	key[i] = emacs[i];
   1057      1.1       cgd 	alt[i] = ED_UNASSIGNED;
   1058      1.1       cgd     }
   1059      1.1       cgd 
   1060      1.1       cgd     map_init_meta(el);
   1061      1.1       cgd     map_init_nls(el);
   1062      1.1       cgd 
   1063      1.1       cgd     buf[0] = CONTROL('X');
   1064      1.2   mycroft     buf[1] = CONTROL('X');
   1065      1.1       cgd     buf[2] = 0;
   1066      1.1       cgd     key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
   1067      1.9    simonb 
   1068      1.1       cgd     tty_bind_char(el, 1);
   1069      1.1       cgd     term_bind_arrow(el);
   1070      1.1       cgd }
   1071      1.1       cgd 
   1072      1.1       cgd 
   1073      1.1       cgd /* map_set_editor():
   1074      1.9    simonb  *	Set the editor
   1075      1.1       cgd  */
   1076      1.1       cgd protected int
   1077      1.1       cgd map_set_editor(el, editor)
   1078      1.1       cgd     EditLine *el;
   1079      1.1       cgd     char *editor;
   1080      1.1       cgd {
   1081      1.1       cgd     if (strcmp(editor, "emacs") == 0) {
   1082      1.1       cgd 	map_init_emacs(el);
   1083      1.1       cgd 	return 0;
   1084      1.1       cgd     }
   1085      1.1       cgd     if (strcmp(editor, "vi") == 0) {
   1086      1.1       cgd 	map_init_vi(el);
   1087      1.7     lukem 	return 0;
   1088      1.7     lukem     }
   1089      1.7     lukem     return -1;
   1090      1.7     lukem }
   1091      1.7     lukem 
   1092      1.7     lukem 
   1093      1.7     lukem /* map_get_editor():
   1094      1.9    simonb  *	Retrieve the editor
   1095      1.7     lukem  */
   1096      1.7     lukem protected int
   1097      1.7     lukem map_get_editor(el, editor)
   1098      1.7     lukem     EditLine *el;
   1099      1.7     lukem     const char **editor;
   1100      1.7     lukem {
   1101      1.7     lukem 
   1102      1.7     lukem     if (editor == NULL)
   1103      1.7     lukem 	return -1;
   1104      1.7     lukem     switch (el->el_map.type) {
   1105      1.7     lukem     case MAP_EMACS:
   1106      1.7     lukem 	*editor = "emacs";
   1107      1.7     lukem 	return 0;
   1108      1.7     lukem     case MAP_VI:
   1109      1.7     lukem 	*editor = "vi";
   1110      1.1       cgd 	return 0;
   1111      1.1       cgd     }
   1112      1.1       cgd     return -1;
   1113      1.1       cgd }
   1114      1.1       cgd 
   1115      1.1       cgd 
   1116      1.1       cgd /* map_print_key():
   1117      1.1       cgd  *	Print the function description for 1 key
   1118      1.1       cgd  */
   1119      1.1       cgd private void
   1120      1.1       cgd map_print_key(el, map, in)
   1121      1.1       cgd     EditLine *el;
   1122      1.1       cgd     el_action_t *map;
   1123      1.1       cgd     char *in;
   1124      1.1       cgd {
   1125      1.1       cgd     char outbuf[EL_BUFSIZ];
   1126      1.1       cgd     el_bindings_t *bp;
   1127      1.1       cgd 
   1128      1.1       cgd     if (in[0] == '\0' || in[1] == '\0') {
   1129      1.1       cgd 	(void) key__decode_str(in, outbuf, "");
   1130      1.1       cgd 	for (bp = el->el_map.help; bp->name != NULL; bp++)
   1131      1.1       cgd 	    if (bp->func == map[(unsigned char) *in]) {
   1132      1.9    simonb 		(void) fprintf(el->el_outfile,
   1133      1.1       cgd 			       "%s\t->\t%s\n", outbuf, bp->name);
   1134      1.1       cgd 		return;
   1135      1.1       cgd 	    }
   1136      1.1       cgd     }
   1137      1.9    simonb     else
   1138      1.1       cgd 	key_print(el, in);
   1139      1.1       cgd }
   1140      1.1       cgd 
   1141      1.1       cgd 
   1142      1.1       cgd /* map_print_some_keys():
   1143      1.1       cgd  *	Print keys from first to last
   1144      1.1       cgd  */
   1145      1.1       cgd private void
   1146      1.1       cgd map_print_some_keys(el, map, first, last)
   1147      1.1       cgd     EditLine *el;
   1148      1.1       cgd     el_action_t *map;
   1149      1.1       cgd     int     first, last;
   1150      1.1       cgd {
   1151      1.1       cgd     el_bindings_t *bp;
   1152      1.1       cgd     char    firstbuf[2], lastbuf[2];
   1153      1.1       cgd     char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
   1154      1.1       cgd 
   1155      1.1       cgd     firstbuf[0] = first;
   1156      1.1       cgd     firstbuf[1] = 0;
   1157      1.1       cgd     lastbuf[0] = last;
   1158      1.1       cgd     lastbuf[1] = 0;
   1159      1.1       cgd     if (map[first] == ED_UNASSIGNED) {
   1160      1.1       cgd 	if (first == last)
   1161      1.1       cgd 	    (void) fprintf(el->el_outfile, "%-15s->  is undefined\n",
   1162      1.1       cgd 		    key__decode_str(firstbuf, unparsbuf, STRQQ));
   1163      1.1       cgd 	return;
   1164      1.1       cgd     }
   1165      1.1       cgd 
   1166      1.1       cgd     for (bp = el->el_map.help; bp->name != NULL; bp++) {
   1167      1.1       cgd 	if (bp->func == map[first]) {
   1168      1.1       cgd 	    if (first == last) {
   1169      1.1       cgd 		(void) fprintf(el->el_outfile, "%-15s->  %s\n",
   1170      1.9    simonb 			       key__decode_str(firstbuf, unparsbuf, STRQQ),
   1171      1.1       cgd 			       bp->name);
   1172      1.1       cgd 	    }
   1173      1.1       cgd 	    else {
   1174      1.1       cgd 		(void) fprintf(el->el_outfile, "%-4s to %-7s->  %s\n",
   1175      1.1       cgd 			       key__decode_str(firstbuf, unparsbuf, STRQQ),
   1176      1.9    simonb 			       key__decode_str(lastbuf, extrabuf, STRQQ),
   1177      1.1       cgd 			       bp->name);
   1178      1.1       cgd 	    }
   1179      1.1       cgd 	    return;
   1180      1.1       cgd 	}
   1181      1.1       cgd     }
   1182      1.1       cgd #ifdef MAP_DEBUG
   1183      1.1       cgd     if (map == el->el_map.key) {
   1184      1.1       cgd 	(void) fprintf(el->el_outfile, "BUG!!! %s isn't bound to anything.\n",
   1185      1.1       cgd 		       key__decode_str(firstbuf, unparsbuf, STRQQ));
   1186      1.9    simonb 	(void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
   1187      1.1       cgd 		       first, el->el_map.key[first]);
   1188      1.1       cgd     }
   1189      1.1       cgd     else {
   1190      1.1       cgd 	(void) fprintf(el->el_outfile, "BUG!!! %s isn't bound to anything.\n",
   1191      1.1       cgd 		       key__decode_str(firstbuf, unparsbuf, STRQQ));
   1192      1.9    simonb 	(void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
   1193      1.1       cgd 		       first, el->el_map.alt[first]);
   1194      1.1       cgd     }
   1195      1.1       cgd #endif
   1196      1.1       cgd     abort();
   1197      1.1       cgd }
   1198      1.1       cgd 
   1199      1.1       cgd 
   1200      1.1       cgd /* map_print_all_keys():
   1201      1.1       cgd  *	Print the function description for all keys.
   1202      1.1       cgd  */
   1203      1.1       cgd private void
   1204      1.1       cgd map_print_all_keys(el)
   1205      1.1       cgd     EditLine *el;
   1206      1.1       cgd {
   1207      1.1       cgd     int     prev, i;
   1208      1.1       cgd 
   1209      1.1       cgd     (void) fprintf(el->el_outfile, "Standard key bindings\n");
   1210      1.1       cgd     prev = 0;
   1211      1.1       cgd     for (i = 0; i < N_KEYS; i++) {
   1212      1.1       cgd 	if (el->el_map.key[prev] == el->el_map.key[i])
   1213      1.1       cgd 	    continue;
   1214      1.1       cgd 	map_print_some_keys(el, el->el_map.key, prev, i - 1);
   1215      1.1       cgd 	prev = i;
   1216      1.1       cgd     }
   1217      1.1       cgd     map_print_some_keys(el, el->el_map.key, prev, i - 1);
   1218      1.1       cgd 
   1219      1.1       cgd     (void) fprintf(el->el_outfile, "Alternative key bindings\n");
   1220      1.1       cgd     prev = 0;
   1221      1.1       cgd     for (i = 0; i < N_KEYS; i++) {
   1222      1.1       cgd 	if (el->el_map.alt[prev] == el->el_map.alt[i])
   1223      1.1       cgd 	    continue;
   1224      1.1       cgd 	map_print_some_keys(el, el->el_map.alt, prev, i - 1);
   1225      1.1       cgd 	prev = i;
   1226      1.1       cgd     }
   1227      1.1       cgd     map_print_some_keys(el, el->el_map.alt, prev, i - 1);
   1228      1.1       cgd 
   1229      1.1       cgd     (void) fprintf(el->el_outfile, "Multi-character bindings\n");
   1230      1.1       cgd     key_print(el, "");
   1231      1.1       cgd     (void) fprintf(el->el_outfile, "Arrow key bindings\n");
   1232      1.1       cgd     term_print_arrow(el, "");
   1233      1.1       cgd }
   1234      1.1       cgd 
   1235      1.1       cgd 
   1236      1.1       cgd /* map_bind():
   1237      1.1       cgd  *	Add/remove/change bindings
   1238      1.1       cgd  */
   1239      1.1       cgd protected int
   1240      1.1       cgd map_bind(el, argc, argv)
   1241      1.1       cgd     EditLine *el;
   1242      1.1       cgd     int argc;
   1243      1.1       cgd     char **argv;
   1244      1.1       cgd {
   1245      1.1       cgd     el_action_t *map;
   1246      1.8  christos     int     ntype, rem;
   1247      1.1       cgd     char   *p;
   1248      1.1       cgd     char    inbuf[EL_BUFSIZ];
   1249      1.1       cgd     char    outbuf[EL_BUFSIZ];
   1250      1.1       cgd     char   *in = NULL;
   1251      1.1       cgd     char   *out = NULL;
   1252      1.1       cgd     el_bindings_t *bp;
   1253      1.1       cgd     int     cmd;
   1254      1.1       cgd     int	    key;
   1255      1.1       cgd 
   1256      1.1       cgd     if (argv == NULL)
   1257      1.1       cgd 	return -1;
   1258      1.1       cgd 
   1259      1.1       cgd     map = el->el_map.key;
   1260      1.1       cgd     ntype = XK_CMD;
   1261      1.8  christos     key = rem = 0;
   1262      1.1       cgd     for (argc = 1; (p = argv[argc]) != NULL; argc++)
   1263      1.1       cgd 	if (p[0] == '-')
   1264      1.1       cgd 	    switch (p[1]) {
   1265      1.1       cgd 	    case 'a':
   1266      1.1       cgd 		map = el->el_map.alt;
   1267      1.1       cgd 		break;
   1268      1.1       cgd 
   1269      1.1       cgd 	    case 's':
   1270      1.1       cgd 		ntype = XK_STR;
   1271      1.1       cgd 		break;
   1272      1.1       cgd #ifdef notyet
   1273      1.1       cgd 	    case 'c':
   1274      1.1       cgd 		ntype = XK_EXE;
   1275      1.1       cgd 		break;
   1276      1.1       cgd #endif
   1277      1.1       cgd 	    case 'k':
   1278      1.1       cgd 		key = 1;
   1279      1.1       cgd 		break;
   1280      1.1       cgd 
   1281      1.1       cgd 	    case 'r':
   1282      1.8  christos 		rem = 1;
   1283      1.1       cgd 		break;
   1284      1.1       cgd 
   1285      1.1       cgd 	    case 'v':
   1286      1.1       cgd 		map_init_vi(el);
   1287      1.1       cgd 		return 0;
   1288      1.1       cgd 
   1289      1.1       cgd 	    case 'e':
   1290      1.1       cgd 		map_init_emacs(el);
   1291      1.1       cgd 		return 0;
   1292      1.1       cgd 
   1293      1.1       cgd 	    case 'l':
   1294      1.9    simonb 		for (bp = el->el_map.help; bp->name != NULL; bp++)
   1295      1.9    simonb 		    (void) fprintf(el->el_outfile, "%s\n\t%s\n",
   1296      1.1       cgd 				   bp->name, bp->description);
   1297      1.1       cgd 		return 0;
   1298      1.1       cgd 	    default:
   1299      1.1       cgd 		(void) fprintf(el->el_errfile, "%s: Invalid switch `%c'.\n",
   1300      1.1       cgd 			       argv[0], p[1]);
   1301      1.1       cgd 	    }
   1302      1.1       cgd 	else
   1303      1.1       cgd 	    break;
   1304      1.1       cgd 
   1305      1.1       cgd     if (argv[argc] == NULL) {
   1306      1.1       cgd 	map_print_all_keys(el);
   1307      1.1       cgd 	return 0;
   1308      1.1       cgd     }
   1309      1.1       cgd 
   1310      1.1       cgd     if (key)
   1311      1.1       cgd 	in = argv[argc++];
   1312      1.1       cgd     else
   1313      1.1       cgd 	if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
   1314      1.1       cgd 	    (void) fprintf(el->el_errfile, "%s: Invalid \\ or ^ in instring.\n",
   1315      1.1       cgd 			   argv[0]);
   1316      1.1       cgd 	    return -1;
   1317      1.1       cgd 	}
   1318      1.1       cgd 
   1319      1.8  christos     if (rem) {
   1320      1.1       cgd 	if (key) {
   1321      1.1       cgd 	    (void) term_clear_arrow(el, in);
   1322      1.1       cgd 	    return -1;
   1323      1.1       cgd 	}
   1324      1.9    simonb 	if (in[1])
   1325      1.1       cgd 	    (void) key_delete(el, in);
   1326      1.9    simonb 	else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
   1327      1.1       cgd 	    (void) key_delete(el, in);
   1328      1.9    simonb 	else
   1329      1.1       cgd 	    map[(unsigned char) *in] = ED_UNASSIGNED;
   1330      1.1       cgd 	return 0;
   1331      1.1       cgd     }
   1332      1.1       cgd 
   1333      1.1       cgd     if (argv[argc] == NULL) {
   1334      1.1       cgd 	if (key)
   1335      1.1       cgd 	    term_print_arrow(el, in);
   1336      1.1       cgd 	else
   1337      1.1       cgd 	    map_print_key(el, map, in);
   1338      1.1       cgd 	return 0;
   1339      1.1       cgd     }
   1340      1.1       cgd 
   1341      1.1       cgd #ifdef notyet
   1342      1.1       cgd     if (argv[argc + 1] != NULL) {
   1343      1.1       cgd 	bindkey_usage();
   1344      1.1       cgd 	return -1;
   1345      1.1       cgd     }
   1346      1.1       cgd #endif
   1347      1.1       cgd 
   1348      1.1       cgd     switch (ntype) {
   1349      1.1       cgd     case XK_STR:
   1350      1.1       cgd     case XK_EXE:
   1351      1.1       cgd 	if ((out = parse__string(outbuf, argv[argc])) == NULL) {
   1352      1.9    simonb 	    (void) fprintf(el->el_errfile,
   1353      1.1       cgd 			   "%s: Invalid \\ or ^ in outstring.\n", argv[0]);
   1354      1.1       cgd 	    return -1;
   1355      1.1       cgd 	}
   1356      1.1       cgd 	if (key)
   1357      1.1       cgd 	    term_set_arrow(el, in, key_map_str(el, out), ntype);
   1358      1.1       cgd 	else
   1359      1.1       cgd 	    key_add(el, in, key_map_str(el, out), ntype);
   1360      1.1       cgd 	map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
   1361      1.1       cgd 	break;
   1362      1.1       cgd 
   1363      1.1       cgd     case XK_CMD:
   1364      1.1       cgd 	if ((cmd = parse_cmd(el, argv[argc])) == -1) {
   1365      1.9    simonb 	    (void) fprintf(el->el_errfile,
   1366      1.1       cgd 			   "%s: Invalid command `%s'.\n", argv[0], argv[argc]);
   1367      1.1       cgd 	    return -1;
   1368      1.1       cgd 	}
   1369      1.1       cgd 	if (key)
   1370      1.1       cgd 	    term_set_arrow(el, in, key_map_str(el, out), ntype);
   1371      1.1       cgd 	else {
   1372      1.1       cgd 	    if (in[1]) {
   1373      1.1       cgd 		key_add(el, in, key_map_cmd(el, cmd), ntype);
   1374      1.1       cgd 		map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
   1375      1.1       cgd 	    }
   1376      1.1       cgd 	    else  {
   1377      1.1       cgd 		key_clear(el, map, in);
   1378      1.1       cgd 		map[(unsigned char) *in] = cmd;
   1379      1.1       cgd 	    }
   1380      1.1       cgd 	}
   1381      1.1       cgd 	break;
   1382      1.1       cgd 
   1383      1.1       cgd     default:
   1384      1.1       cgd 	abort();
   1385      1.1       cgd 	break;
   1386      1.1       cgd     }
   1387      1.1       cgd     return 0;
   1388      1.1       cgd }
   1389      1.1       cgd 
   1390      1.1       cgd 
   1391      1.1       cgd /* map_addfunc():
   1392      1.1       cgd  *	add a user defined function
   1393      1.1       cgd  */
   1394      1.1       cgd protected int
   1395      1.1       cgd map_addfunc(el, name, help, func)
   1396      1.1       cgd     EditLine *el;
   1397      1.1       cgd     const char *name;
   1398      1.1       cgd     const char *help;
   1399      1.1       cgd     el_func_t func;
   1400      1.1       cgd {
   1401      1.1       cgd     int nf = el->el_map.nfunc + 2;
   1402      1.1       cgd     if (name == NULL || help == NULL || func == NULL)
   1403      1.1       cgd 	return -1;
   1404      1.1       cgd 
   1405      1.9    simonb     el->el_map.func = (el_func_t *)
   1406      1.1       cgd 		el_realloc(el->el_map.func, nf * sizeof(el_func_t));
   1407      1.1       cgd     el->el_map.help = (el_bindings_t *)
   1408      1.1       cgd 		el_realloc(el->el_map.help, nf * sizeof(el_bindings_t));
   1409      1.1       cgd 
   1410      1.1       cgd     nf = el->el_map.nfunc;
   1411      1.1       cgd     el->el_map.func[nf] = func;
   1412      1.1       cgd 
   1413      1.1       cgd     el->el_map.help[nf].name = name;
   1414      1.1       cgd     el->el_map.help[nf].func = nf;
   1415      1.1       cgd     el->el_map.help[nf].description = help;
   1416      1.1       cgd     el->el_map.help[++nf].name = NULL;
   1417      1.1       cgd     el->el_map.nfunc++;
   1418      1.1       cgd 
   1419      1.1       cgd     return 0;
   1420      1.1       cgd }
   1421