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