[BACK]Return to map.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libedit

Annotation of src/lib/libedit/map.c, Revision 1.17

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

CVSweb <webmaster@jp.NetBSD.org>