map.cxx

Go to the documentation of this file.
00001 // @(#)root/editline:$Id: map.cxx 36313 2010-10-12 12:40:20Z axel $
00002 // Author: Mary-Louise Gill, 2009
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2009, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 /*      $NetBSD: map.c,v 1.14 2001/01/09 17:22:09 jdolecek Exp $        */
00013 
00014 /*-
00015  * Copyright (c) 1992, 1993
00016  *      The Regents of the University of California.  All rights reserved.
00017  *
00018  * This code is derived from software contributed to Berkeley by
00019  * Christos Zoulas of Cornell University.
00020  *
00021  * Redistribution and use in source and binary forms, with or without
00022  * modification, are permitted provided that the following conditions
00023  * are met:
00024  * 1. Redistributions of source code must retain the above copyright
00025  *    notice, this list of conditions and the following disclaimer.
00026  * 2. Redistributions in binary form must reproduce the above copyright
00027  *    notice, this list of conditions and the following disclaimer in the
00028  *    documentation and/or other materials provided with the distribution.
00029  * 3. Neither the name of the University nor the names of its contributors
00030  *    may be used to endorse or promote products derived from this software
00031  *    without specific prior written permission.
00032  *
00033  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00034  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00035  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00036  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00037  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00038  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00039  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00040  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00041  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00042  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00043  * SUCH DAMAGE.
00044  */
00045 
00046 #include "compat.h"
00047 
00048 /*
00049  * map.c: Editor function definitions
00050  */
00051 #include "sys.h"
00052 #include <stdlib.h>
00053 #include "el.h"
00054 
00055 #define N_KEYS 256
00056 
00057 el_private void map_print_key(EditLine_t*, ElAction_t*, char*);
00058 el_private void map_print_some_keys(EditLine_t*, ElAction_t*, int, int);
00059 el_private void map_print_all_keys(EditLine_t*);
00060 el_private void map_init_nls(EditLine_t*);
00061 el_private void map_init_meta(EditLine_t*);
00062 
00063 /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
00064 
00065 
00066 el_private const ElAction_t el_map_emacs[] = {
00067    /*   0 */ EM_SET_MARK,                       /* ^@ */
00068    /*   1 */ ED_MOVE_TO_BEG,                    /* ^A */
00069    /*   2 */ ED_PREV_CHAR,                      /* ^B */
00070    /*   3 */ ED_TTY_SIGINT,                     /* ^C */
00071    /*   4 */ EM_DELETE_OR_LIST,                 /* ^D */
00072    /*   5 */ ED_MOVE_TO_END,                    /* ^E */
00073    /*   6 */ ED_NEXT_CHAR,                      /* ^F */
00074    /*   7 */ ED_UNASSIGNED,                     /* ^G */
00075    /*   8 */ ED_DELETE_PREV_CHAR,               /* ^H */
00076    /*   9 */ ED_UNASSIGNED,                     /* ^I */
00077    /*  10 */ ED_NEWLINE,                        /* ^J */
00078    /*  11 */ ED_KILL_LINE,                      /* ^K */
00079    /*  12 */ ED_CLEAR_SCREEN,                   /* ^L */
00080    /*  13 */ ED_NEWLINE,                        /* ^M */
00081    /*  14 */ ED_NEXT_HISTORY,                   /* ^N */
00082    /*  15 * / ED_TTY_FLUSH_OUTPUT,               / * ^O */
00083    /*  15 */ ED_REPLAY_HIST,                    /* ^O */
00084    /*  16 */ ED_PREV_HISTORY,                   /* ^P */
00085    /*  17 */ ED_TTY_START_OUTPUT,               /* ^Q */
00086    /*  18 */ ED_REDISPLAY,                      /* ^R */
00087    /*  19 */ ED_TTY_STOP_OUTPUT,                /* ^S */
00088    /*  20 */ ED_TRANSPOSE_CHARS,                /* ^T */
00089    /*  21 */ EM_KILL_LINE,                      /* ^U */
00090    /*  22 */ ED_QUOTED_INSERT,                  /* ^V */
00091    /*  23 */ EM_KILL_REGION,                    /* ^W */
00092    /*  24 */ ED_SEQUENCE_LEAD_IN,               /* ^X */
00093    /*  25 */ EM_YANK,                           /* ^Y */
00094    /*  26 */ ED_TTY_SIGTSTP,                    /* ^Z */
00095    /*  27 */ EM_META_NEXT,                      /* ^[ */
00096    /*  28 */ ED_TTY_SIGQUIT,                    /* ^\ */
00097    /*  29 */ ED_TTY_DSUSP,                      /* ^] */
00098    /*  30 */ ED_UNASSIGNED,                     /* ^^ */
00099    /*  31 */ EM_UNDO,                           /* ^_ */
00100    /*  32 */ ED_INSERT,                         /* SPACE */
00101    /*  33 */ ED_INSERT,                         /* ! */
00102    /*  34 */ ED_INSERT,                         /* " */
00103    /*  35 */ ED_INSERT,                         /* # */
00104    /*  36 */ ED_INSERT,                         /* $ */
00105    /*  37 */ ED_INSERT,                         /* % */
00106    /*  38 */ ED_INSERT,                         /* & */
00107    /*  39 */ ED_INSERT,                         /* ' */
00108    /*  40 */ ED_INSERT,                         /* ( */
00109    /*  41 */ ED_INSERT,                         /* ) */
00110    /*  42 */ ED_INSERT,                         /* * */
00111    /*  43 */ ED_INSERT,                         /* + */
00112    /*  44 */ ED_INSERT,                         /* , */
00113    /*  45 */ ED_INSERT,                         /* - */
00114    /*  46 */ ED_INSERT,                         /* . */
00115    /*  47 */ ED_INSERT,                         /* / */
00116    /*  48 */ ED_DIGIT,                          /* 0 */
00117    /*  49 */ ED_DIGIT,                          /* 1 */
00118    /*  50 */ ED_DIGIT,                          /* 2 */
00119    /*  51 */ ED_DIGIT,                          /* 3 */
00120    /*  52 */ ED_DIGIT,                          /* 4 */
00121    /*  53 */ ED_DIGIT,                          /* 5 */
00122    /*  54 */ ED_DIGIT,                          /* 6 */
00123    /*  55 */ ED_DIGIT,                          /* 7 */
00124    /*  56 */ ED_DIGIT,                          /* 8 */
00125    /*  57 */ ED_DIGIT,                          /* 9 */
00126    /*  58 */ ED_INSERT,                         /* : */
00127    /*  59 */ ED_INSERT,                         /* ; */
00128    /*  60 */ ED_INSERT,                         /* < */
00129    /*  61 */ ED_INSERT,                         /* = */
00130    /*  62 */ ED_INSERT,                         /* > */
00131    /*  63 */ ED_INSERT,                         /* ? */
00132    /*  64 */ ED_INSERT,                         /* @ */
00133    /*  65 */ ED_INSERT,                         /* A */
00134    /*  66 */ ED_INSERT,                         /* B */
00135    /*  67 */ ED_INSERT,                         /* C */
00136    /*  68 */ ED_INSERT,                         /* D */
00137    /*  69 */ ED_INSERT,                         /* E */
00138    /*  70 */ ED_INSERT,                         /* F */
00139    /*  71 */ ED_INSERT,                         /* G */
00140    /*  72 */ ED_INSERT,                         /* H */
00141    /*  73 */ ED_INSERT,                         /* I */
00142    /*  74 */ ED_INSERT,                         /* J */
00143    /*  75 */ ED_INSERT,                         /* K */
00144    /*  76 */ ED_INSERT,                         /* L */
00145    /*  77 */ ED_INSERT,                         /* M */
00146    /*  78 */ ED_INSERT,                         /* N */
00147    /*  79 */ ED_INSERT,                         /* O */
00148    /*  80 */ ED_INSERT,                         /* P */
00149    /*  81 */ ED_INSERT,                         /* Q */
00150    /*  82 */ ED_INSERT,                         /* R */
00151    /*  83 */ ED_INSERT,                         /* S */
00152    /*  84 */ ED_INSERT,                         /* T */
00153    /*  85 */ ED_INSERT,                         /* U */
00154    /*  86 */ ED_INSERT,                         /* V */
00155    /*  87 */ ED_INSERT,                         /* W */
00156    /*  88 */ ED_INSERT,                         /* X */
00157    /*  89 */ ED_INSERT,                         /* Y */
00158    /*  90 */ ED_INSERT,                         /* Z */
00159    /*  91 */ ED_INSERT,                         /* [ */
00160    /*  92 */ ED_INSERT,                         /* \ */
00161    /*  93 */ ED_INSERT,                         /* ] */
00162    /*  94 */ ED_INSERT,                         /* ^ */
00163    /*  95 */ ED_INSERT,                         /* _ */
00164    /*  96 */ ED_INSERT,                         /* ` */
00165    /*  97 */ ED_INSERT,                         /* a */
00166    /*  98 */ ED_INSERT,                         /* b */
00167    /*  99 */ ED_INSERT,                         /* c */
00168    /* 100 */ ED_INSERT,                         /* d */
00169    /* 101 */ ED_INSERT,                         /* e */
00170    /* 102 */ ED_INSERT,                         /* f */
00171    /* 103 */ ED_INSERT,                         /* g */
00172    /* 104 */ ED_INSERT,                         /* h */
00173    /* 105 */ ED_INSERT,                         /* i */
00174    /* 106 */ ED_INSERT,                         /* j */
00175    /* 107 */ ED_INSERT,                         /* k */
00176    /* 108 */ ED_INSERT,                         /* l */
00177    /* 109 */ ED_INSERT,                         /* m */
00178    /* 110 */ ED_INSERT,                         /* n */
00179    /* 111 */ ED_INSERT,                         /* o */
00180    /* 112 */ ED_INSERT,                         /* p */
00181    /* 113 */ ED_INSERT,                         /* q */
00182    /* 114 */ ED_INSERT,                         /* r */
00183    /* 115 */ ED_INSERT,                         /* s */
00184    /* 116 */ ED_INSERT,                         /* t */
00185    /* 117 */ ED_INSERT,                         /* u */
00186    /* 118 */ ED_INSERT,                         /* v */
00187    /* 119 */ ED_INSERT,                         /* w */
00188    /* 120 */ ED_INSERT,                         /* x */
00189    /* 121 */ ED_INSERT,                         /* y */
00190    /* 122 */ ED_INSERT,                         /* z */
00191    /* 123 */ ED_INSERT,                         /* { */
00192    /* 124 */ ED_INSERT,                         /* | */
00193    /* 125 */ ED_INSERT,                         /* } */
00194    /* 126 */ ED_INSERT,                         /* ~ */
00195    /* 127 */ ED_DELETE_PREV_CHAR,               /* ^? */
00196    /* 128 */ ED_UNASSIGNED,                     /* M-^@ */
00197    /* 129 */ ED_UNASSIGNED,                     /* M-^A */
00198    /* 130 */ ED_UNASSIGNED,                     /* M-^B */
00199    /* 131 */ ED_UNASSIGNED,                     /* M-^C */
00200    /* 132 */ ED_UNASSIGNED,                     /* M-^D */
00201    /* 133 */ ED_UNASSIGNED,                     /* M-^E */
00202    /* 134 */ ED_UNASSIGNED,                     /* M-^F */
00203    /* 135 */ ED_UNASSIGNED,                     /* M-^G */
00204    /* 136 */ ED_DELETE_PREV_WORD,               /* M-^H */
00205    /* 137 */ ED_UNASSIGNED,                     /* M-^I */
00206    /* 138 */ ED_UNASSIGNED,                     /* M-^J */
00207    /* 139 */ ED_UNASSIGNED,                     /* M-^K */
00208    /* 140 */ ED_CLEAR_SCREEN,                   /* M-^L */
00209    /* 141 */ ED_UNASSIGNED,                     /* M-^M */
00210    /* 142 */ ED_UNASSIGNED,                     /* M-^N */
00211    /* 143 */ ED_UNASSIGNED,                     /* M-^O */
00212    /* 144 */ ED_UNASSIGNED,                     /* M-^P */
00213    /* 145 */ ED_UNASSIGNED,                     /* M-^Q */
00214    /* 146 */ ED_UNASSIGNED,                     /* M-^R */
00215    /* 147 */ ED_UNASSIGNED,                     /* M-^S */
00216    /* 148 */ ED_UNASSIGNED,                     /* M-^T */
00217    /* 149 */ ED_UNASSIGNED,                     /* M-^U */
00218    /* 150 */ ED_UNASSIGNED,                     /* M-^V */
00219    /* 151 */ ED_UNASSIGNED,                     /* M-^W */
00220    /* 152 */ ED_UNASSIGNED,                     /* M-^X */
00221    /* 153 */ ED_UNASSIGNED,                     /* M-^Y */
00222    /* 154 */ ED_UNASSIGNED,                     /* M-^Z */
00223    /* 155 */ ED_UNASSIGNED,                     /* M-^[ */
00224    /* 156 */ ED_UNASSIGNED,                     /* M-^\ */
00225    /* 157 */ ED_UNASSIGNED,                     /* M-^] */
00226    /* 158 */ ED_UNASSIGNED,                     /* M-^^ */
00227    /* 159 */ EM_COPY_PREV_WORD,                 /* M-^_ */
00228    /* 160 */ ED_UNASSIGNED,                     /* M-SPACE */
00229    /* 161 */ ED_UNASSIGNED,                     /* M-! */
00230    /* 162 */ ED_UNASSIGNED,                     /* M-" */
00231    /* 163 */ ED_UNASSIGNED,                     /* M-# */
00232    /* 164 */ ED_UNASSIGNED,                     /* M-$ */
00233    /* 165 */ ED_UNASSIGNED,                     /* M-% */
00234    /* 166 */ ED_UNASSIGNED,                     /* M-& */
00235    /* 167 */ ED_UNASSIGNED,                     /* M-' */
00236    /* 168 */ ED_UNASSIGNED,                     /* M-( */
00237    /* 169 */ ED_UNASSIGNED,                     /* M-) */
00238    /* 170 */ ED_UNASSIGNED,                     /* M-* */
00239    /* 171 */ ED_UNASSIGNED,                     /* M-+ */
00240    /* 172 */ ED_UNASSIGNED,                     /* M-, */
00241    /* 173 */ ED_UNASSIGNED,                     /* M-- */
00242    /* 174 */ ED_UNASSIGNED,                     /* M-. */
00243    /* 175 */ ED_UNASSIGNED,                     /* M-/ */
00244    /* 176 */ ED_ARGUMENT_DIGIT,                 /* M-0 */
00245    /* 177 */ ED_ARGUMENT_DIGIT,                 /* M-1 */
00246    /* 178 */ ED_ARGUMENT_DIGIT,                 /* M-2 */
00247    /* 179 */ ED_ARGUMENT_DIGIT,                 /* M-3 */
00248    /* 180 */ ED_ARGUMENT_DIGIT,                 /* M-4 */
00249    /* 181 */ ED_ARGUMENT_DIGIT,                 /* M-5 */
00250    /* 182 */ ED_ARGUMENT_DIGIT,                 /* M-6 */
00251    /* 183 */ ED_ARGUMENT_DIGIT,                 /* M-7 */
00252    /* 184 */ ED_ARGUMENT_DIGIT,                 /* M-8 */
00253    /* 185 */ ED_ARGUMENT_DIGIT,                 /* M-9 */
00254    /* 186 */ ED_UNASSIGNED,                     /* M-: */
00255    /* 187 */ ED_UNASSIGNED,                     /* M-; */
00256    /* 188 */ ED_UNASSIGNED,                     /* M-< */
00257    /* 189 */ ED_UNASSIGNED,                     /* M-= */
00258    /* 190 */ ED_UNASSIGNED,                     /* M-> */
00259    /* 191 */ ED_UNASSIGNED,                     /* M-? */
00260    /* 192 */ ED_UNASSIGNED,                     /* M-@ */
00261    /* 193 */ ED_UNASSIGNED,                     /* M-A */
00262    /* 194 */ ED_PREV_WORD,                      /* M-B */
00263    /* 195 */ EM_CAPITOL_CASE,                   /* M-C */
00264    /* 196 */ EM_DELETE_NEXT_WORD,               /* M-D */
00265    /* 197 */ ED_UNASSIGNED,                     /* M-E */
00266    /* 198 */ EM_NEXT_WORD,                      /* M-F */
00267    /* 199 */ ED_UNASSIGNED,                     /* M-G */
00268    /* 200 */ ED_UNASSIGNED,                     /* M-H */
00269    /* 201 */ ED_UNASSIGNED,                     /* M-I */
00270    /* 202 */ ED_UNASSIGNED,                     /* M-J */
00271    /* 203 */ ED_UNASSIGNED,                     /* M-K */
00272    /* 204 */ EM_LOWER_CASE,                     /* M-L */
00273    /* 205 */ ED_UNASSIGNED,                     /* M-M */
00274    /* 206 */ ED_SEARCH_NEXT_HISTORY,            /* M-N */
00275    /* 207 */ ED_SEQUENCE_LEAD_IN,               /* M-O */
00276    /* 208 */ ED_SEARCH_PREV_HISTORY,            /* M-P */
00277    /* 209 */ ED_UNASSIGNED,                     /* M-Q */
00278    /* 210 */ ED_UNASSIGNED,                     /* M-R */
00279    /* 211 */ ED_UNASSIGNED,                     /* M-S */
00280    /* 212 */ ED_UNASSIGNED,                     /* M-T */
00281    /* 213 */ EM_UPPER_CASE,                     /* M-U */
00282    /* 214 */ ED_UNASSIGNED,                     /* M-V */
00283    /* 215 */ EM_COPY_REGION,                    /* M-W */
00284    /* 216 */ ED_COMMAND,                        /* M-X */
00285    /* 217 */ ED_UNASSIGNED,                     /* M-Y */
00286    /* 218 */ ED_UNASSIGNED,                     /* M-Z */
00287    /* 219 */ ED_SEQUENCE_LEAD_IN,               /* M-[ */
00288    /* 220 */ ED_UNASSIGNED,                     /* M-\ */
00289    /* 221 */ ED_UNASSIGNED,                     /* M-] */
00290    /* 222 */ ED_UNASSIGNED,                     /* M-^ */
00291    /* 223 */ ED_UNASSIGNED,                     /* M-_ */
00292    /* 223 */ ED_UNASSIGNED,                     /* M-` */
00293    /* 224 */ ED_UNASSIGNED,                     /* M-a */
00294    /* 225 */ ED_PREV_WORD,                      /* M-b */
00295    /* 226 */ EM_CAPITOL_CASE,                   /* M-c */
00296    /* 227 */ EM_DELETE_NEXT_WORD,               /* M-d */
00297    /* 228 */ ED_UNASSIGNED,                     /* M-e */
00298    /* 229 */ EM_NEXT_WORD,                      /* M-f */
00299    /* 230 */ ED_UNASSIGNED,                     /* M-g */
00300    /* 231 */ ED_UNASSIGNED,                     /* M-h */
00301    /* 232 */ ED_UNASSIGNED,                     /* M-i */
00302    /* 233 */ ED_UNASSIGNED,                     /* M-j */
00303    /* 234 */ ED_UNASSIGNED,                     /* M-k */
00304    /* 235 */ EM_LOWER_CASE,                     /* M-l */
00305    /* 236 */ ED_UNASSIGNED,                     /* M-m */
00306    /* 237 */ ED_SEARCH_NEXT_HISTORY,            /* M-n */
00307    /* 238 */ ED_UNASSIGNED,                     /* M-o */
00308    /* 239 */ ED_SEARCH_PREV_HISTORY,            /* M-p */
00309    /* 240 */ ED_UNASSIGNED,                     /* M-q */
00310    /* 241 */ ED_UNASSIGNED,                     /* M-r */
00311    /* 242 */ ED_UNASSIGNED,                     /* M-s */
00312    /* 243 */ ED_UNASSIGNED,                     /* M-t */
00313    /* 244 */ EM_UPPER_CASE,                     /* M-u */
00314    /* 245 */ ED_UNASSIGNED,                     /* M-v */
00315    /* 246 */ EM_COPY_REGION,                    /* M-w */
00316    /* 247 */ ED_COMMAND,                        /* M-x */
00317    /* 248 */ ED_UNASSIGNED,                     /* M-y */
00318    /* 249 */ ED_UNASSIGNED,                     /* M-z */
00319    /* 250 */ ED_UNASSIGNED,                     /* M-{ */
00320    /* 251 */ ED_UNASSIGNED,                     /* M-| */
00321    /* 252 */ ED_UNASSIGNED,                     /* M-} */
00322    /* 253 */ ED_UNASSIGNED,                     /* M-~ */
00323    /* 254 */ ED_DELETE_PREV_WORD                /* M-^? */
00324    /* 255 */
00325 };
00326 
00327 
00328 /*
00329  * keymap table for vi.  Each index into above tbl; should be
00330  * N_KEYS entries long.  Vi mode uses a sticky-extend to do command mode:
00331  * insert mode characters are in the normal keymap, and command mode
00332  * in the extended keymap.
00333  */
00334 el_private const ElAction_t el_map_vi_insert[] = {
00335 #ifdef KSHVI
00336    /*   0 */ ED_UNASSIGNED,                     /* ^@ */
00337    /*   1 */ ED_INSERT,                         /* ^A */
00338    /*   2 */ ED_INSERT,                         /* ^B */
00339    /*   3 */ ED_INSERT,                         /* ^C */
00340    /*   4 */ VI_LIST_OR_EOF,                    /* ^D */
00341    /*   5 */ ED_INSERT,                         /* ^E */
00342    /*   6 */ ED_INSERT,                         /* ^F */
00343    /*   7 */ ED_INSERT,                         /* ^G */
00344    /*   8 */ VI_DELETE_PREV_CHAR, /* ^H */                 /* BackSpace key */
00345    /*   9 */ ED_INSERT, /* ^I */                           /* Tab Key  */
00346    /*  10 */ ED_NEWLINE,                        /* ^J */
00347    /*  11 */ ED_INSERT,                         /* ^K */
00348    /*  12 */ ED_INSERT,                         /* ^L */
00349    /*  13 */ ED_NEWLINE,                        /* ^M */
00350    /*  14 */ ED_INSERT,                         /* ^N */
00351    /*  15 */ ED_INSERT,                         /* ^O */
00352    /*  16 */ ED_INSERT,                         /* ^P */
00353    /*  17 */ ED_TTY_START_OUTPUT,               /* ^Q */
00354    /*  18 */ ED_INSERT,                         /* ^R */
00355    /*  19 */ ED_TTY_STOP_OUTPUT,                /* ^S */
00356    /*  20 */ ED_INSERT,                         /* ^T */
00357    /*  21 */ VI_KILL_LINE_PREV,                 /* ^U */
00358    /*  22 */ ED_QUOTED_INSERT,                  /* ^V */
00359    /*  23 */ ED_DELETE_PREV_WORD,               /* ^W */
00360    /* ED_DELETE_PREV_WORD: Only until strt edit pos */
00361    /*  24 */ ED_INSERT,                         /* ^X */
00362    /*  25 */ ED_INSERT,                         /* ^Y */
00363    /*  26 */ ED_INSERT,                         /* ^Z */
00364    /*  27 */ VI_COMMAND_MODE, /* ^[ */                    /* [ Esc ] key */
00365    /*  28 */ ED_TTY_SIGQUIT,                    /* ^\ */
00366    /*  29 */ ED_INSERT,                         /* ^] */
00367    /*  30 */ ED_INSERT,                         /* ^^ */
00368    /*  31 */ ED_INSERT,                         /* ^_ */
00369 #else /* !KSHVI */
00370 
00371    /*
00372     * NOTE: These mappings do NOT Correspond well
00373     * to the KSH VI editing assignments.
00374     * On the other and they are convenient and
00375     * many people have have gotten used to them.
00376     */
00377    /*   0 */ ED_UNASSIGNED,                     /* ^@ */
00378    /*   1 */ ED_MOVE_TO_BEG,                    /* ^A */
00379    /*   2 */ ED_PREV_CHAR,                      /* ^B */
00380    /*   3 */ ED_TTY_SIGINT,                     /* ^C */
00381    /*   4 */ VI_LIST_OR_EOF,                    /* ^D */
00382    /*   5 */ ED_MOVE_TO_END,                    /* ^E */
00383    /*   6 */ ED_NEXT_CHAR,                      /* ^F */
00384    /*   7 */ ED_UNASSIGNED,                     /* ^G */
00385    /*   8 */ ED_DELETE_PREV_CHAR, /* ^H */                 /* BackSpace key */
00386    /*   9 */ ED_UNASSIGNED, /* ^I */                       /* Tab Key */
00387    /*  10 */ ED_NEWLINE,                        /* ^J */
00388    /*  11 */ ED_KILL_LINE,                      /* ^K */
00389    /*  12 */ ED_CLEAR_SCREEN,                   /* ^L */
00390    /*  13 */ ED_NEWLINE,                        /* ^M */
00391    /*  14 */ ED_NEXT_HISTORY,                   /* ^N */
00392    /*  15 */ ED_TTY_FLUSH_OUTPUT,               /* ^O */
00393    /*  16 */ ED_PREV_HISTORY,                   /* ^P */
00394    /*  17 */ ED_TTY_START_OUTPUT,               /* ^Q */
00395    /*  18 */ ED_REDISPLAY,                      /* ^R */
00396    /*  19 */ ED_TTY_STOP_OUTPUT,                /* ^S */
00397    /*  20 */ ED_TRANSPOSE_CHARS,                /* ^T */
00398    /*  21 */ VI_KILL_LINE_PREV,                 /* ^U */
00399    /*  22 */ ED_QUOTED_INSERT,                  /* ^V */
00400    /*  23 */ ED_DELETE_PREV_WORD,               /* ^W */
00401    /*  24 */ ED_UNASSIGNED,                     /* ^X */
00402    /*  25 */ ED_TTY_DSUSP,                      /* ^Y */
00403    /*  26 */ ED_TTY_SIGTSTP,                    /* ^Z */
00404    /*  27 */ VI_COMMAND_MODE,                   /* ^[ */
00405    /*  28 */ ED_TTY_SIGQUIT,                    /* ^\ */
00406    /*  29 */ ED_UNASSIGNED,                     /* ^] */
00407    /*  30 */ ED_UNASSIGNED,                     /* ^^ */
00408    /*  31 */ ED_UNASSIGNED,                     /* ^_ */
00409 #endif  /* KSHVI */
00410         /*  32 */ ED_INSERT,                    /* SPACE */
00411    /*  33 */ ED_INSERT,                         /* ! */
00412    /*  34 */ ED_INSERT,                         /* " */
00413    /*  35 */ ED_INSERT,                         /* # */
00414    /*  36 */ ED_INSERT,                         /* $ */
00415    /*  37 */ ED_INSERT,                         /* % */
00416    /*  38 */ ED_INSERT,                         /* & */
00417    /*  39 */ ED_INSERT,                         /* ' */
00418    /*  40 */ ED_INSERT,                         /* ( */
00419    /*  41 */ ED_INSERT,                         /* ) */
00420    /*  42 */ ED_INSERT,                         /* * */
00421    /*  43 */ ED_INSERT,                         /* + */
00422    /*  44 */ ED_INSERT,                         /* , */
00423    /*  45 */ ED_INSERT,                         /* - */
00424    /*  46 */ ED_INSERT,                         /* . */
00425    /*  47 */ ED_INSERT,                         /* / */
00426    /*  48 */ ED_INSERT,                         /* 0 */
00427    /*  49 */ ED_INSERT,                         /* 1 */
00428    /*  50 */ ED_INSERT,                         /* 2 */
00429    /*  51 */ ED_INSERT,                         /* 3 */
00430    /*  52 */ ED_INSERT,                         /* 4 */
00431    /*  53 */ ED_INSERT,                         /* 5 */
00432    /*  54 */ ED_INSERT,                         /* 6 */
00433    /*  55 */ ED_INSERT,                         /* 7 */
00434    /*  56 */ ED_INSERT,                         /* 8 */
00435    /*  57 */ ED_INSERT,                         /* 9 */
00436    /*  58 */ ED_INSERT,                         /* : */
00437    /*  59 */ ED_INSERT,                         /* ; */
00438    /*  60 */ ED_INSERT,                         /* < */
00439    /*  61 */ ED_INSERT,                         /* = */
00440    /*  62 */ ED_INSERT,                         /* > */
00441    /*  63 */ ED_INSERT,                         /* ? */
00442    /*  64 */ ED_INSERT,                         /* @ */
00443    /*  65 */ ED_INSERT,                         /* A */
00444    /*  66 */ ED_INSERT,                         /* B */
00445    /*  67 */ ED_INSERT,                         /* C */
00446    /*  68 */ ED_INSERT,                         /* D */
00447    /*  69 */ ED_INSERT,                         /* E */
00448    /*  70 */ ED_INSERT,                         /* F */
00449    /*  71 */ ED_INSERT,                         /* G */
00450    /*  72 */ ED_INSERT,                         /* H */
00451    /*  73 */ ED_INSERT,                         /* I */
00452    /*  74 */ ED_INSERT,                         /* J */
00453    /*  75 */ ED_INSERT,                         /* K */
00454    /*  76 */ ED_INSERT,                         /* L */
00455    /*  77 */ ED_INSERT,                         /* M */
00456    /*  78 */ ED_INSERT,                         /* N */
00457    /*  79 */ ED_INSERT,                         /* O */
00458    /*  80 */ ED_INSERT,                         /* P */
00459    /*  81 */ ED_INSERT,                         /* Q */
00460    /*  82 */ ED_INSERT,                         /* R */
00461    /*  83 */ ED_INSERT,                         /* S */
00462    /*  84 */ ED_INSERT,                         /* T */
00463    /*  85 */ ED_INSERT,                         /* U */
00464    /*  86 */ ED_INSERT,                         /* V */
00465    /*  87 */ ED_INSERT,                         /* W */
00466    /*  88 */ ED_INSERT,                         /* X */
00467    /*  89 */ ED_INSERT,                         /* Y */
00468    /*  90 */ ED_INSERT,                         /* Z */
00469    /*  91 */ ED_INSERT,                         /* [ */
00470    /*  92 */ ED_INSERT,                         /* \ */
00471    /*  93 */ ED_INSERT,                         /* ] */
00472    /*  94 */ ED_INSERT,                         /* ^ */
00473    /*  95 */ ED_INSERT,                         /* _ */
00474    /*  96 */ ED_INSERT,                         /* ` */
00475    /*  97 */ ED_INSERT,                         /* a */
00476    /*  98 */ ED_INSERT,                         /* b */
00477    /*  99 */ ED_INSERT,                         /* c */
00478    /* 100 */ ED_INSERT,                         /* d */
00479    /* 101 */ ED_INSERT,                         /* e */
00480    /* 102 */ ED_INSERT,                         /* f */
00481    /* 103 */ ED_INSERT,                         /* g */
00482    /* 104 */ ED_INSERT,                         /* h */
00483    /* 105 */ ED_INSERT,                         /* i */
00484    /* 106 */ ED_INSERT,                         /* j */
00485    /* 107 */ ED_INSERT,                         /* k */
00486    /* 108 */ ED_INSERT,                         /* l */
00487    /* 109 */ ED_INSERT,                         /* m */
00488    /* 110 */ ED_INSERT,                         /* n */
00489    /* 111 */ ED_INSERT,                         /* o */
00490    /* 112 */ ED_INSERT,                         /* p */
00491    /* 113 */ ED_INSERT,                         /* q */
00492    /* 114 */ ED_INSERT,                         /* r */
00493    /* 115 */ ED_INSERT,                         /* s */
00494    /* 116 */ ED_INSERT,                         /* t */
00495    /* 117 */ ED_INSERT,                         /* u */
00496    /* 118 */ ED_INSERT,                         /* v */
00497    /* 119 */ ED_INSERT,                         /* w */
00498    /* 120 */ ED_INSERT,                         /* x */
00499    /* 121 */ ED_INSERT,                         /* y */
00500    /* 122 */ ED_INSERT,                         /* z */
00501    /* 123 */ ED_INSERT,                         /* { */
00502    /* 124 */ ED_INSERT,                         /* | */
00503    /* 125 */ ED_INSERT,                         /* } */
00504    /* 126 */ ED_INSERT,                         /* ~ */
00505    /* 127 */ ED_DELETE_PREV_CHAR,               /* ^? */
00506    /* 128 */ ED_UNASSIGNED,                     /* M-^@ */
00507    /* 129 */ ED_UNASSIGNED,                     /* M-^A */
00508    /* 130 */ ED_UNASSIGNED,                     /* M-^B */
00509    /* 131 */ ED_UNASSIGNED,                     /* M-^C */
00510    /* 132 */ ED_UNASSIGNED,                     /* M-^D */
00511    /* 133 */ ED_UNASSIGNED,                     /* M-^E */
00512    /* 134 */ ED_UNASSIGNED,                     /* M-^F */
00513    /* 135 */ ED_UNASSIGNED,                     /* M-^G */
00514    /* 136 */ ED_UNASSIGNED,                     /* M-^H */
00515    /* 137 */ ED_UNASSIGNED,                     /* M-^I */
00516    /* 138 */ ED_UNASSIGNED,                     /* M-^J */
00517    /* 139 */ ED_UNASSIGNED,                     /* M-^K */
00518    /* 140 */ ED_UNASSIGNED,                     /* M-^L */
00519    /* 141 */ ED_UNASSIGNED,                     /* M-^M */
00520    /* 142 */ ED_UNASSIGNED,                     /* M-^N */
00521    /* 143 */ ED_UNASSIGNED,                     /* M-^O */
00522    /* 144 */ ED_UNASSIGNED,                     /* M-^P */
00523    /* 145 */ ED_UNASSIGNED,                     /* M-^Q */
00524    /* 146 */ ED_UNASSIGNED,                     /* M-^R */
00525    /* 147 */ ED_UNASSIGNED,                     /* M-^S */
00526    /* 148 */ ED_UNASSIGNED,                     /* M-^T */
00527    /* 149 */ ED_UNASSIGNED,                     /* M-^U */
00528    /* 150 */ ED_UNASSIGNED,                     /* M-^V */
00529    /* 151 */ ED_UNASSIGNED,                     /* M-^W */
00530    /* 152 */ ED_UNASSIGNED,                     /* M-^X */
00531    /* 153 */ ED_UNASSIGNED,                     /* M-^Y */
00532    /* 154 */ ED_UNASSIGNED,                     /* M-^Z */
00533    /* 155 */ ED_UNASSIGNED,                     /* M-^[ */
00534    /* 156 */ ED_UNASSIGNED,                     /* M-^\ */
00535    /* 157 */ ED_UNASSIGNED,                     /* M-^] */
00536    /* 158 */ ED_UNASSIGNED,                     /* M-^^ */
00537    /* 159 */ ED_UNASSIGNED,                     /* M-^_ */
00538    /* 160 */ ED_UNASSIGNED,                     /* M-SPACE */
00539    /* 161 */ ED_UNASSIGNED,                     /* M-! */
00540    /* 162 */ ED_UNASSIGNED,                     /* M-" */
00541    /* 163 */ ED_UNASSIGNED,                     /* M-# */
00542    /* 164 */ ED_UNASSIGNED,                     /* M-$ */
00543    /* 165 */ ED_UNASSIGNED,                     /* M-% */
00544    /* 166 */ ED_UNASSIGNED,                     /* M-& */
00545    /* 167 */ ED_UNASSIGNED,                     /* M-' */
00546    /* 168 */ ED_UNASSIGNED,                     /* M-( */
00547    /* 169 */ ED_UNASSIGNED,                     /* M-) */
00548    /* 170 */ ED_UNASSIGNED,                     /* M-* */
00549    /* 171 */ ED_UNASSIGNED,                     /* M-+ */
00550    /* 172 */ ED_UNASSIGNED,                     /* M-, */
00551    /* 173 */ ED_UNASSIGNED,                     /* M-- */
00552    /* 174 */ ED_UNASSIGNED,                     /* M-. */
00553    /* 175 */ ED_UNASSIGNED,                     /* M-/ */
00554    /* 176 */ ED_UNASSIGNED,                     /* M-0 */
00555    /* 177 */ ED_UNASSIGNED,                     /* M-1 */
00556    /* 178 */ ED_UNASSIGNED,                     /* M-2 */
00557    /* 179 */ ED_UNASSIGNED,                     /* M-3 */
00558    /* 180 */ ED_UNASSIGNED,                     /* M-4 */
00559    /* 181 */ ED_UNASSIGNED,                     /* M-5 */
00560    /* 182 */ ED_UNASSIGNED,                     /* M-6 */
00561    /* 183 */ ED_UNASSIGNED,                     /* M-7 */
00562    /* 184 */ ED_UNASSIGNED,                     /* M-8 */
00563    /* 185 */ ED_UNASSIGNED,                     /* M-9 */
00564    /* 186 */ ED_UNASSIGNED,                     /* M-: */
00565    /* 187 */ ED_UNASSIGNED,                     /* M-; */
00566    /* 188 */ ED_UNASSIGNED,                     /* M-< */
00567    /* 189 */ ED_UNASSIGNED,                     /* M-= */
00568    /* 190 */ ED_UNASSIGNED,                     /* M-> */
00569    /* 191 */ ED_UNASSIGNED,                     /* M-? */
00570    /* 192 */ ED_UNASSIGNED,                     /* M-@ */
00571    /* 193 */ ED_UNASSIGNED,                     /* M-A */
00572    /* 194 */ ED_UNASSIGNED,                     /* M-B */
00573    /* 195 */ ED_UNASSIGNED,                     /* M-C */
00574    /* 196 */ ED_UNASSIGNED,                     /* M-D */
00575    /* 197 */ ED_UNASSIGNED,                     /* M-E */
00576    /* 198 */ ED_UNASSIGNED,                     /* M-F */
00577    /* 199 */ ED_UNASSIGNED,                     /* M-G */
00578    /* 200 */ ED_UNASSIGNED,                     /* M-H */
00579    /* 201 */ ED_UNASSIGNED,                     /* M-I */
00580    /* 202 */ ED_UNASSIGNED,                     /* M-J */
00581    /* 203 */ ED_UNASSIGNED,                     /* M-K */
00582    /* 204 */ ED_UNASSIGNED,                     /* M-L */
00583    /* 205 */ ED_UNASSIGNED,                     /* M-M */
00584    /* 206 */ ED_UNASSIGNED,                     /* M-N */
00585    /* 207 */ ED_UNASSIGNED,                     /* M-O */
00586    /* 208 */ ED_UNASSIGNED,                     /* M-P */
00587    /* 209 */ ED_UNASSIGNED,                     /* M-Q */
00588    /* 210 */ ED_UNASSIGNED,                     /* M-R */
00589    /* 211 */ ED_UNASSIGNED,                     /* M-S */
00590    /* 212 */ ED_UNASSIGNED,                     /* M-T */
00591    /* 213 */ ED_UNASSIGNED,                     /* M-U */
00592    /* 214 */ ED_UNASSIGNED,                     /* M-V */
00593    /* 215 */ ED_UNASSIGNED,                     /* M-W */
00594    /* 216 */ ED_UNASSIGNED,                     /* M-X */
00595    /* 217 */ ED_UNASSIGNED,                     /* M-Y */
00596    /* 218 */ ED_UNASSIGNED,                     /* M-Z */
00597    /* 219 */ ED_UNASSIGNED,                     /* M-[ */
00598    /* 220 */ ED_UNASSIGNED,                     /* M-\ */
00599    /* 221 */ ED_UNASSIGNED,                     /* M-] */
00600    /* 222 */ ED_UNASSIGNED,                     /* M-^ */
00601    /* 223 */ ED_UNASSIGNED,                     /* M-_ */
00602    /* 224 */ ED_UNASSIGNED,                     /* M-` */
00603    /* 225 */ ED_UNASSIGNED,                     /* M-a */
00604    /* 226 */ ED_UNASSIGNED,                     /* M-b */
00605    /* 227 */ ED_UNASSIGNED,                     /* M-c */
00606    /* 228 */ ED_UNASSIGNED,                     /* M-d */
00607    /* 229 */ ED_UNASSIGNED,                     /* M-e */
00608    /* 230 */ ED_UNASSIGNED,                     /* M-f */
00609    /* 231 */ ED_UNASSIGNED,                     /* M-g */
00610    /* 232 */ ED_UNASSIGNED,                     /* M-h */
00611    /* 233 */ ED_UNASSIGNED,                     /* M-i */
00612    /* 234 */ ED_UNASSIGNED,                     /* M-j */
00613    /* 235 */ ED_UNASSIGNED,                     /* M-k */
00614    /* 236 */ ED_UNASSIGNED,                     /* M-l */
00615    /* 237 */ ED_UNASSIGNED,                     /* M-m */
00616    /* 238 */ ED_UNASSIGNED,                     /* M-n */
00617    /* 239 */ ED_UNASSIGNED,                     /* M-o */
00618    /* 240 */ ED_UNASSIGNED,                     /* M-p */
00619    /* 241 */ ED_UNASSIGNED,                     /* M-q */
00620    /* 242 */ ED_UNASSIGNED,                     /* M-r */
00621    /* 243 */ ED_UNASSIGNED,                     /* M-s */
00622    /* 244 */ ED_UNASSIGNED,                     /* M-t */
00623    /* 245 */ ED_UNASSIGNED,                     /* M-u */
00624    /* 246 */ ED_UNASSIGNED,                     /* M-v */
00625    /* 247 */ ED_UNASSIGNED,                     /* M-w */
00626    /* 248 */ ED_UNASSIGNED,                     /* M-x */
00627    /* 249 */ ED_UNASSIGNED,                     /* M-y */
00628    /* 250 */ ED_UNASSIGNED,                     /* M-z */
00629    /* 251 */ ED_UNASSIGNED,                     /* M-{ */
00630    /* 252 */ ED_UNASSIGNED,                     /* M-| */
00631    /* 253 */ ED_UNASSIGNED,                     /* M-} */
00632    /* 254 */ ED_UNASSIGNED,                     /* M-~ */
00633    /* 255 */ ED_UNASSIGNED                      /* M-^? */
00634 };
00635 
00636 el_private const ElAction_t el_map_vi_command[] = {
00637    /*   0 */ ED_UNASSIGNED,                     /* ^@ */
00638    /*   1 */ ED_MOVE_TO_BEG,                    /* ^A */
00639    /*   2 */ ED_UNASSIGNED,                     /* ^B */
00640    /*   3 */ ED_TTY_SIGINT,                     /* ^C */
00641    /*   4 */ ED_UNASSIGNED,                     /* ^D */
00642    /*   5 */ ED_MOVE_TO_END,                    /* ^E */
00643    /*   6 */ ED_UNASSIGNED,                     /* ^F */
00644    /*   7 */ ED_UNASSIGNED,                     /* ^G */
00645    /*   8 */ ED_PREV_CHAR,                      /* ^H */
00646    /*   9 */ ED_UNASSIGNED,                     /* ^I */
00647    /*  10 */ ED_NEWLINE,                        /* ^J */
00648    /*  11 */ ED_KILL_LINE,                      /* ^K */
00649    /*  12 */ ED_CLEAR_SCREEN,                   /* ^L */
00650    /*  13 */ ED_NEWLINE,                        /* ^M */
00651    /*  14 */ ED_NEXT_HISTORY,                   /* ^N */
00652    /*  15 */ ED_TTY_FLUSH_OUTPUT,               /* ^O */
00653    /*  16 */ ED_PREV_HISTORY,                   /* ^P */
00654    /*  17 */ ED_TTY_START_OUTPUT,               /* ^Q */
00655    /*  18 */ ED_REDISPLAY,                      /* ^R */
00656    /*  19 */ ED_TTY_STOP_OUTPUT,                /* ^S */
00657    /*  20 */ ED_UNASSIGNED,                     /* ^T */
00658    /*  21 */ VI_KILL_LINE_PREV,                 /* ^U */
00659    /*  22 */ ED_UNASSIGNED,                     /* ^V */
00660    /*  23 */ ED_DELETE_PREV_WORD,               /* ^W */
00661    /*  24 */ ED_UNASSIGNED,                     /* ^X */
00662    /*  25 */ ED_UNASSIGNED,                     /* ^Y */
00663    /*  26 */ ED_UNASSIGNED,                     /* ^Z */
00664    /*  27 */ EM_META_NEXT,                      /* ^[ */
00665    /*  28 */ ED_TTY_SIGQUIT,                    /* ^\ */
00666    /*  29 */ ED_UNASSIGNED,                     /* ^] */
00667    /*  30 */ ED_UNASSIGNED,                     /* ^^ */
00668    /*  31 */ ED_UNASSIGNED,                     /* ^_ */
00669    /*  32 */ ED_NEXT_CHAR,                      /* SPACE */
00670    /*  33 */ ED_UNASSIGNED,                     /* ! */
00671    /*  34 */ ED_UNASSIGNED,                     /* " */
00672    /*  35 */ ED_UNASSIGNED,                     /* # */
00673    /*  36 */ ED_MOVE_TO_END,                    /* $ */
00674    /*  37 */ ED_UNASSIGNED,                     /* % */
00675    /*  38 */ ED_UNASSIGNED,                     /* & */
00676    /*  39 */ ED_UNASSIGNED,                     /* ' */
00677    /*  40 */ ED_UNASSIGNED,                     /* ( */
00678    /*  41 */ ED_UNASSIGNED,                     /* ) */
00679    /*  42 */ ED_UNASSIGNED,                     /* * */
00680    /*  43 */ ED_NEXT_HISTORY,                   /* + */
00681    /*  44 */ VI_REPEAT_PREV_CHAR,               /* , */
00682    /*  45 */ ED_PREV_HISTORY,                   /* - */
00683    /*  46 */ ED_UNASSIGNED,                     /* . */
00684    /*  47 */ VI_SEARCH_PREV,                    /* / */
00685    /*  48 */ VI_ZERO,                           /* 0 */
00686    /*  49 */ ED_ARGUMENT_DIGIT,                 /* 1 */
00687    /*  50 */ ED_ARGUMENT_DIGIT,                 /* 2 */
00688    /*  51 */ ED_ARGUMENT_DIGIT,                 /* 3 */
00689    /*  52 */ ED_ARGUMENT_DIGIT,                 /* 4 */
00690    /*  53 */ ED_ARGUMENT_DIGIT,                 /* 5 */
00691    /*  54 */ ED_ARGUMENT_DIGIT,                 /* 6 */
00692    /*  55 */ ED_ARGUMENT_DIGIT,                 /* 7 */
00693    /*  56 */ ED_ARGUMENT_DIGIT,                 /* 8 */
00694    /*  57 */ ED_ARGUMENT_DIGIT,                 /* 9 */
00695    /*  58 */ ED_COMMAND,                        /* : */
00696    /*  59 */ VI_REPEAT_NEXT_CHAR,               /* ; */
00697    /*  60 */ ED_UNASSIGNED,                     /* < */
00698    /*  61 */ ED_UNASSIGNED,                     /* = */
00699    /*  62 */ ED_UNASSIGNED,                     /* > */
00700    /*  63 */ VI_SEARCH_NEXT,                    /* ? */
00701    /*  64 */ ED_UNASSIGNED,                     /* @ */
00702    /*  65 */ VI_ADD_AT_EOL,                     /* A */
00703    /*  66 */ VI_PREV_SPACE_WORD,                /* B */
00704    /*  67 */ VI_CHANGE_TO_EOL,                  /* C */
00705    /*  68 */ ED_KILL_LINE,                      /* D */
00706    /*  69 */ VI_TO_END_WORD,                    /* E */
00707    /*  70 */ VI_PREV_CHAR,                      /* F */
00708    /*  71 */ ED_UNASSIGNED,                     /* G */
00709    /*  72 */ ED_UNASSIGNED,                     /* H */
00710    /*  73 */ VI_INSERT_AT_BOL,                  /* I */
00711    /*  74 */ ED_SEARCH_NEXT_HISTORY,            /* J */
00712    /*  75 */ ED_SEARCH_PREV_HISTORY,            /* K */
00713    /*  76 */ ED_UNASSIGNED,                     /* L */
00714    /*  77 */ ED_UNASSIGNED,                     /* M */
00715    /*  78 */ VI_REPEAT_SEARCH_PREV,             /* N */
00716    /*  79 */ ED_SEQUENCE_LEAD_IN,               /* O */
00717    /*  80 */ VI_PASTE_PREV,                     /* P */
00718    /*  81 */ ED_UNASSIGNED,                     /* Q */
00719    /*  82 */ VI_REPLACE_MODE,                   /* R */
00720    /*  83 */ VI_SUBSTITUTE_LINE,                /* S */
00721    /*  84 */ VI_TO_PREV_CHAR,                   /* T */
00722    /*  85 */ ED_UNASSIGNED,                     /* U */
00723    /*  86 */ ED_UNASSIGNED,                     /* V */
00724    /*  87 */ VI_NEXT_SPACE_WORD,                /* W */
00725    /*  88 */ ED_DELETE_PREV_CHAR,               /* X */
00726    /*  89 */ ED_UNASSIGNED,                     /* Y */
00727    /*  90 */ ED_UNASSIGNED,                     /* Z */
00728    /*  91 */ ED_SEQUENCE_LEAD_IN,               /* [ */
00729    /*  92 */ ED_UNASSIGNED,                     /* \ */
00730    /*  93 */ ED_UNASSIGNED,                     /* ] */
00731    /*  94 */ ED_MOVE_TO_BEG,                    /* ^ */
00732    /*  95 */ ED_UNASSIGNED,                     /* _ */
00733    /*  96 */ ED_UNASSIGNED,                     /* ` */
00734    /*  97 */ VI_ADD,                            /* a */
00735    /*  98 */ VI_PREV_WORD,                      /* b */
00736    /*  99 */ VI_CHANGE_META,                    /* c */
00737    /* 100 */ VI_DELETE_META,                    /* d */
00738    /* 101 */ VI_END_WORD,                       /* e */
00739    /* 102 */ VI_NEXT_CHAR,                      /* f */
00740    /* 103 */ ED_UNASSIGNED,                     /* g */
00741    /* 104 */ ED_PREV_CHAR,                      /* h */
00742    /* 105 */ VI_INSERT,                         /* i */
00743    /* 106 */ ED_NEXT_HISTORY,                   /* j */
00744    /* 107 */ ED_PREV_HISTORY,                   /* k */
00745    /* 108 */ ED_NEXT_CHAR,                      /* l */
00746    /* 109 */ ED_UNASSIGNED,                     /* m */
00747    /* 110 */ VI_REPEAT_SEARCH_NEXT,             /* n */
00748    /* 111 */ ED_UNASSIGNED,                     /* o */
00749    /* 112 */ VI_PASTE_NEXT,                     /* p */
00750    /* 113 */ ED_UNASSIGNED,                     /* q */
00751    /* 114 */ VI_REPLACE_CHAR,                   /* r */
00752    /* 115 */ VI_SUBSTITUTE_CHAR,                /* s */
00753    /* 116 */ VI_TO_NEXT_CHAR,                   /* t */
00754    /* 117 */ VI_UNDO,                           /* u */
00755    /* 118 */ ED_UNASSIGNED,                     /* v */
00756    /* 119 */ VI_NEXT_WORD,                      /* w */
00757    /* 120 */ ED_DELETE_NEXT_CHAR,               /* x */
00758    /* 121 */ ED_UNASSIGNED,                     /* y */
00759    /* 122 */ ED_UNASSIGNED,                     /* z */
00760    /* 123 */ ED_UNASSIGNED,                     /* { */
00761    /* 124 */ ED_UNASSIGNED,                     /* | */
00762    /* 125 */ ED_UNASSIGNED,                     /* } */
00763    /* 126 */ VI_CHANGE_CASE,                    /* ~ */
00764    /* 127 */ ED_DELETE_PREV_CHAR,               /* ^? */
00765    /* 128 */ ED_UNASSIGNED,                     /* M-^@ */
00766    /* 129 */ ED_UNASSIGNED,                     /* M-^A */
00767    /* 130 */ ED_UNASSIGNED,                     /* M-^B */
00768    /* 131 */ ED_UNASSIGNED,                     /* M-^C */
00769    /* 132 */ ED_UNASSIGNED,                     /* M-^D */
00770    /* 133 */ ED_UNASSIGNED,                     /* M-^E */
00771    /* 134 */ ED_UNASSIGNED,                     /* M-^F */
00772    /* 135 */ ED_UNASSIGNED,                     /* M-^G */
00773    /* 136 */ ED_UNASSIGNED,                     /* M-^H */
00774    /* 137 */ ED_UNASSIGNED,                     /* M-^I */
00775    /* 138 */ ED_UNASSIGNED,                     /* M-^J */
00776    /* 139 */ ED_UNASSIGNED,                     /* M-^K */
00777    /* 140 */ ED_UNASSIGNED,                     /* M-^L */
00778    /* 141 */ ED_UNASSIGNED,                     /* M-^M */
00779    /* 142 */ ED_UNASSIGNED,                     /* M-^N */
00780    /* 143 */ ED_UNASSIGNED,                     /* M-^O */
00781    /* 144 */ ED_UNASSIGNED,                     /* M-^P */
00782    /* 145 */ ED_UNASSIGNED,                     /* M-^Q */
00783    /* 146 */ ED_UNASSIGNED,                     /* M-^R */
00784    /* 147 */ ED_UNASSIGNED,                     /* M-^S */
00785    /* 148 */ ED_UNASSIGNED,                     /* M-^T */
00786    /* 149 */ ED_UNASSIGNED,                     /* M-^U */
00787    /* 150 */ ED_UNASSIGNED,                     /* M-^V */
00788    /* 151 */ ED_UNASSIGNED,                     /* M-^W */
00789    /* 152 */ ED_UNASSIGNED,                     /* M-^X */
00790    /* 153 */ ED_UNASSIGNED,                     /* M-^Y */
00791    /* 154 */ ED_UNASSIGNED,                     /* M-^Z */
00792    /* 155 */ ED_UNASSIGNED,                     /* M-^[ */
00793    /* 156 */ ED_UNASSIGNED,                     /* M-^\ */
00794    /* 157 */ ED_UNASSIGNED,                     /* M-^] */
00795    /* 158 */ ED_UNASSIGNED,                     /* M-^^ */
00796    /* 159 */ ED_UNASSIGNED,                     /* M-^_ */
00797    /* 160 */ ED_UNASSIGNED,                     /* M-SPACE */
00798    /* 161 */ ED_UNASSIGNED,                     /* M-! */
00799    /* 162 */ ED_UNASSIGNED,                     /* M-" */
00800    /* 163 */ ED_UNASSIGNED,                     /* M-# */
00801    /* 164 */ ED_UNASSIGNED,                     /* M-$ */
00802    /* 165 */ ED_UNASSIGNED,                     /* M-% */
00803    /* 166 */ ED_UNASSIGNED,                     /* M-& */
00804    /* 167 */ ED_UNASSIGNED,                     /* M-' */
00805    /* 168 */ ED_UNASSIGNED,                     /* M-( */
00806    /* 169 */ ED_UNASSIGNED,                     /* M-) */
00807    /* 170 */ ED_UNASSIGNED,                     /* M-* */
00808    /* 171 */ ED_UNASSIGNED,                     /* M-+ */
00809    /* 172 */ ED_UNASSIGNED,                     /* M-, */
00810    /* 173 */ ED_UNASSIGNED,                     /* M-- */
00811    /* 174 */ ED_UNASSIGNED,                     /* M-. */
00812    /* 175 */ ED_UNASSIGNED,                     /* M-/ */
00813    /* 176 */ ED_UNASSIGNED,                     /* M-0 */
00814    /* 177 */ ED_UNASSIGNED,                     /* M-1 */
00815    /* 178 */ ED_UNASSIGNED,                     /* M-2 */
00816    /* 179 */ ED_UNASSIGNED,                     /* M-3 */
00817    /* 180 */ ED_UNASSIGNED,                     /* M-4 */
00818    /* 181 */ ED_UNASSIGNED,                     /* M-5 */
00819    /* 182 */ ED_UNASSIGNED,                     /* M-6 */
00820    /* 183 */ ED_UNASSIGNED,                     /* M-7 */
00821    /* 184 */ ED_UNASSIGNED,                     /* M-8 */
00822    /* 185 */ ED_UNASSIGNED,                     /* M-9 */
00823    /* 186 */ ED_UNASSIGNED,                     /* M-: */
00824    /* 187 */ ED_UNASSIGNED,                     /* M-; */
00825    /* 188 */ ED_UNASSIGNED,                     /* M-< */
00826    /* 189 */ ED_UNASSIGNED,                     /* M-= */
00827    /* 190 */ ED_UNASSIGNED,                     /* M-> */
00828    /* 191 */ ED_UNASSIGNED,                     /* M-? */
00829    /* 192 */ ED_UNASSIGNED,                     /* M-@ */
00830    /* 193 */ ED_UNASSIGNED,                     /* M-A */
00831    /* 194 */ ED_UNASSIGNED,                     /* M-B */
00832    /* 195 */ ED_UNASSIGNED,                     /* M-C */
00833    /* 196 */ ED_UNASSIGNED,                     /* M-D */
00834    /* 197 */ ED_UNASSIGNED,                     /* M-E */
00835    /* 198 */ ED_UNASSIGNED,                     /* M-F */
00836    /* 199 */ ED_UNASSIGNED,                     /* M-G */
00837    /* 200 */ ED_UNASSIGNED,                     /* M-H */
00838    /* 201 */ ED_UNASSIGNED,                     /* M-I */
00839    /* 202 */ ED_UNASSIGNED,                     /* M-J */
00840    /* 203 */ ED_UNASSIGNED,                     /* M-K */
00841    /* 204 */ ED_UNASSIGNED,                     /* M-L */
00842    /* 205 */ ED_UNASSIGNED,                     /* M-M */
00843    /* 206 */ ED_UNASSIGNED,                     /* M-N */
00844    /* 207 */ ED_SEQUENCE_LEAD_IN,               /* M-O */
00845    /* 208 */ ED_UNASSIGNED,                     /* M-P */
00846    /* 209 */ ED_UNASSIGNED,                     /* M-Q */
00847    /* 210 */ ED_UNASSIGNED,                     /* M-R */
00848    /* 211 */ ED_UNASSIGNED,                     /* M-S */
00849    /* 212 */ ED_UNASSIGNED,                     /* M-T */
00850    /* 213 */ ED_UNASSIGNED,                     /* M-U */
00851    /* 214 */ ED_UNASSIGNED,                     /* M-V */
00852    /* 215 */ ED_UNASSIGNED,                     /* M-W */
00853    /* 216 */ ED_UNASSIGNED,                     /* M-X */
00854    /* 217 */ ED_UNASSIGNED,                     /* M-Y */
00855    /* 218 */ ED_UNASSIGNED,                     /* M-Z */
00856    /* 219 */ ED_SEQUENCE_LEAD_IN,               /* M-[ */
00857    /* 220 */ ED_UNASSIGNED,                     /* M-\ */
00858    /* 221 */ ED_UNASSIGNED,                     /* M-] */
00859    /* 222 */ ED_UNASSIGNED,                     /* M-^ */
00860    /* 223 */ ED_UNASSIGNED,                     /* M-_ */
00861    /* 224 */ ED_UNASSIGNED,                     /* M-` */
00862    /* 225 */ ED_UNASSIGNED,                     /* M-a */
00863    /* 226 */ ED_UNASSIGNED,                     /* M-b */
00864    /* 227 */ ED_UNASSIGNED,                     /* M-c */
00865    /* 228 */ ED_UNASSIGNED,                     /* M-d */
00866    /* 229 */ ED_UNASSIGNED,                     /* M-e */
00867    /* 230 */ ED_UNASSIGNED,                     /* M-f */
00868    /* 231 */ ED_UNASSIGNED,                     /* M-g */
00869    /* 232 */ ED_UNASSIGNED,                     /* M-h */
00870    /* 233 */ ED_UNASSIGNED,                     /* M-i */
00871    /* 234 */ ED_UNASSIGNED,                     /* M-j */
00872    /* 235 */ ED_UNASSIGNED,                     /* M-k */
00873    /* 236 */ ED_UNASSIGNED,                     /* M-l */
00874    /* 237 */ ED_UNASSIGNED,                     /* M-m */
00875    /* 238 */ ED_UNASSIGNED,                     /* M-n */
00876    /* 239 */ ED_UNASSIGNED,                     /* M-o */
00877    /* 240 */ ED_UNASSIGNED,                     /* M-p */
00878    /* 241 */ ED_UNASSIGNED,                     /* M-q */
00879    /* 242 */ ED_UNASSIGNED,                     /* M-r */
00880    /* 243 */ ED_UNASSIGNED,                     /* M-s */
00881    /* 244 */ ED_UNASSIGNED,                     /* M-t */
00882    /* 245 */ ED_UNASSIGNED,                     /* M-u */
00883    /* 246 */ ED_UNASSIGNED,                     /* M-v */
00884    /* 247 */ ED_UNASSIGNED,                     /* M-w */
00885    /* 248 */ ED_UNASSIGNED,                     /* M-x */
00886    /* 249 */ ED_UNASSIGNED,                     /* M-y */
00887    /* 250 */ ED_UNASSIGNED,                     /* M-z */
00888    /* 251 */ ED_UNASSIGNED,                     /* M-{ */
00889    /* 252 */ ED_UNASSIGNED,                     /* M-| */
00890    /* 253 */ ED_UNASSIGNED,                     /* M-} */
00891    /* 254 */ ED_UNASSIGNED,                     /* M-~ */
00892    /* 255 */ ED_UNASSIGNED                      /* M-^? */
00893 };
00894 
00895 /* map_init():
00896  *      Initialize and allocate the maps
00897  */
00898 el_protected int
00899 map_init(EditLine_t* el) {
00900    /*
00901     * Make sure those are correct before starting.
00902     */
00903 #ifdef MAP_DEBUG
00904 
00905    if (sizeof(el_map_emacs) != N_KEYS * sizeof(ElAction_t)) {
00906       EL_ABORT((el->errfile, "Emacs map incorrect\n"));
00907    }
00908 
00909    if (sizeof(el_map_vi_command) != N_KEYS * sizeof(ElAction_t)) {
00910       EL_ABORT((el->errfile, "Vi command map incorrect\n"));
00911    }
00912 
00913    if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(ElAction_t)) {
00914       EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
00915    }
00916 #endif
00917 
00918    el->fMap.fAlt = (ElAction_t*) el_malloc(sizeof(ElAction_t) * N_KEYS);
00919 
00920    if (el->fMap.fAlt == NULL) {
00921       return -1;
00922    }
00923    el->fMap.fKey = (ElAction_t*) el_malloc(sizeof(ElAction_t) * N_KEYS);
00924 
00925    if (el->fMap.fKey == NULL) {
00926       return -1;
00927    }
00928    el->fMap.fEmacs = el_map_emacs;
00929    el->fMap.fVic = el_map_vi_command;
00930    el->fMap.fVii = el_map_vi_insert;
00931    el->fMap.fHelp = (ElBindings_t*) el_malloc(sizeof(ElBindings_t) *
00932                                                 EL_NUM_FCNS);
00933 
00934    if (el->fMap.fHelp == NULL) {
00935       return -1;
00936    }
00937    (void) memcpy(el->fMap.fHelp, help__get(),
00938                  sizeof(ElBindings_t) * EL_NUM_FCNS);
00939    el->fMap.fFunc = (ElFunc_t*) el_malloc(sizeof(ElFunc_t) *
00940                                             EL_NUM_FCNS);
00941 
00942    if (el->fMap.fFunc == NULL) {
00943       return -1;
00944    }
00945    memcpy(el->fMap.fFunc, func__get(), sizeof(ElFunc_t) * EL_NUM_FCNS);
00946    el->fMap.fNFunc = EL_NUM_FCNS;
00947 
00948 #ifdef VIDEFAULT
00949    map_init_vi(el);
00950 #else
00951    map_init_emacs(el);
00952 #endif /* VIDEFAULT */
00953    return 0;
00954 } // map_init
00955 
00956 
00957 /* map_end():
00958  *      Free the space taken by the editor maps
00959  */
00960 el_protected void
00961 map_end(EditLine_t* el) {
00962    el_free((ptr_t) el->fMap.fAlt);
00963    el->fMap.fAlt = NULL;
00964    el_free((ptr_t) el->fMap.fKey);
00965    el->fMap.fKey = NULL;
00966    el->fMap.fEmacs = NULL;
00967    el->fMap.fVic = NULL;
00968    el->fMap.fVii = NULL;
00969    el_free((ptr_t) el->fMap.fHelp);
00970    el->fMap.fHelp = NULL;
00971    el_free((ptr_t) el->fMap.fFunc);
00972    el->fMap.fFunc = NULL;
00973 }
00974 
00975 
00976 /* map_init_nls():
00977  *      Find all the printable keys and bind them to self insert
00978  */
00979 el_private void
00980 map_init_nls(EditLine_t* el) {
00981    int i;
00982 
00983    ElAction_t* map = el->fMap.fKey;
00984 
00985    for (i = 0200; i <= 0377; i++) {
00986       if (isprint(i)) {
00987          map[i] = ED_INSERT;
00988       }
00989    }
00990 }
00991 
00992 
00993 /* map_init_meta():
00994  *      Bind all the meta keys to the appropriate ESC-<key> sequence
00995  */
00996 el_private void
00997 map_init_meta(EditLine_t* el) {
00998    char buf[3];
00999    int i;
01000    ElAction_t* map = el->fMap.fKey;
01001    ElAction_t* alt = el->fMap.fAlt;
01002 
01003    for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++) {
01004       continue;
01005    }
01006 
01007    if (i > 0377) {
01008       for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++) {
01009          continue;
01010       }
01011 
01012       if (i > 0377) {
01013          i = 033;
01014 
01015          if (el->fMap.fType == MAP_VI) {
01016             map = alt;
01017          }
01018       } else {
01019          map = alt;
01020       }
01021    }
01022    buf[0] = (char) i;
01023    buf[2] = 0;
01024 
01025    for (i = 0200; i <= 0377; i++) {
01026       switch (map[i]) {
01027       case ED_INSERT:
01028       case ED_UNASSIGNED:
01029       case ED_SEQUENCE_LEAD_IN:
01030          break;
01031       default:
01032          buf[1] = i & 0177;
01033          key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD);
01034          break;
01035       }
01036    }
01037    map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
01038 } // map_init_meta
01039 
01040 
01041 /* map_init_vi():
01042  *      Initialize the vi bindings
01043  */
01044 el_protected void
01045 map_init_vi(EditLine_t* el) {
01046    int i;
01047    ElAction_t* key = el->fMap.fKey;
01048    ElAction_t* alt = el->fMap.fAlt;
01049    const ElAction_t* vii = el->fMap.fVii;
01050    const ElAction_t* vic = el->fMap.fVic;
01051 
01052    el->fMap.fType = MAP_VI;
01053    el->fMap.fCurrent = el->fMap.fKey;
01054 
01055    key_reset(el);
01056 
01057    for (i = 0; i < N_KEYS; i++) {
01058       key[i] = vii[i];
01059       alt[i] = vic[i];
01060    }
01061 
01062    map_init_meta(el);
01063    map_init_nls(el);
01064 
01065    tty_bind_char(el, 1);
01066    term_bind_arrow(el);
01067 } // map_init_vi
01068 
01069 
01070 /* map_init_emacs():
01071  *      Initialize the emacs bindings
01072  */
01073 el_protected void
01074 map_init_emacs(EditLine_t* el) {
01075    int i;
01076    char buf[3];
01077    ElAction_t* key = el->fMap.fKey;
01078    ElAction_t* alt = el->fMap.fAlt;
01079    const ElAction_t* emacs = el->fMap.fEmacs;
01080 
01081    el->fMap.fType = MAP_EMACS;
01082    el->fMap.fCurrent = el->fMap.fKey;
01083    key_reset(el);
01084 
01085    for (i = 0; i < N_KEYS; i++) {
01086       key[i] = emacs[i];
01087       alt[i] = ED_UNASSIGNED;
01088    }
01089 
01090    map_init_meta(el);
01091    map_init_nls(el);
01092 
01093    buf[0] = CONTROL('X');
01094    buf[1] = CONTROL('X');
01095    buf[2] = 0;
01096    key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
01097 
01098    tty_bind_char(el, 1);
01099    term_bind_arrow(el);
01100 } // map_init_emacs
01101 
01102 
01103 /* map_set_editor():
01104  *      Set the editor
01105  */
01106 el_protected int
01107 map_set_editor(EditLine_t* el, char* editor) {
01108    if (strcmp(editor, "emacs") == 0) {
01109       map_init_emacs(el);
01110       return 0;
01111    }
01112 
01113    if (strcmp(editor, "vi") == 0) {
01114       map_init_vi(el);
01115       return 0;
01116    }
01117    return -1;
01118 }
01119 
01120 
01121 /* map_get_editor():
01122  *      Retrieve the editor
01123  */
01124 el_protected int
01125 map_get_editor(EditLine_t* el, const char** editor) {
01126    if (editor == NULL) {
01127       return -1;
01128    }
01129 
01130    switch (el->fMap.fType) {
01131    case MAP_EMACS:
01132       *editor = "emacs";
01133       return 0;
01134    case MAP_VI:
01135       *editor = "vi";
01136       return 0;
01137    }
01138    return -1;
01139 }
01140 
01141 
01142 /* map_print_key():
01143  *      Print the function description for 1 key
01144  */
01145 el_private void
01146 map_print_key(EditLine_t* el, ElAction_t* map, char* in) {
01147    char outbuf[EL_BUFSIZ];
01148    ElBindings_t* bp;
01149 
01150    if (in[0] == '\0' || in[1] == '\0') {
01151       (void) key__decode_str(in, outbuf, "");
01152 
01153       for (bp = el->fMap.fHelp; bp->fName != NULL; bp++) {
01154          if (bp->fFunc == map[(unsigned char) *in]) {
01155             (void) fprintf(el->fOutFile,
01156                            "%s\t->\t%s\n", outbuf, bp->fName);
01157             return;
01158          }
01159       }
01160    } else {
01161       key_print(el, in);
01162    }
01163 } // map_print_key
01164 
01165 
01166 /* map_print_some_keys():
01167  *      Print keys from first to last
01168  */
01169 el_private void
01170 map_print_some_keys(EditLine_t* el, ElAction_t* map, int first, int last) {
01171    ElBindings_t* bp;
01172    char firstbuf[2], lastbuf[2];
01173    char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
01174 
01175    firstbuf[0] = first;
01176    firstbuf[1] = 0;
01177    lastbuf[0] = last;
01178    lastbuf[1] = 0;
01179 
01180    if (map[first] == ED_UNASSIGNED) {
01181       if (first == last) {
01182          (void) fprintf(el->fOutFile,
01183                         "%-15s->  is undefined\n",
01184                         key__decode_str(firstbuf, unparsbuf, STRQQ));
01185       }
01186       return;
01187    }
01188 
01189    for (bp = el->fMap.fHelp; bp->fName != NULL; bp++) {
01190       if (bp->fFunc == map[first]) {
01191          if (first == last) {
01192             (void) fprintf(el->fOutFile, "%-15s->  %s\n",
01193                            key__decode_str(firstbuf, unparsbuf, STRQQ),
01194                            bp->fName);
01195          } else {
01196             (void) fprintf(el->fOutFile,
01197                            "%-4s to %-7s->  %s\n",
01198                            key__decode_str(firstbuf, unparsbuf, STRQQ),
01199                            key__decode_str(lastbuf, extrabuf, STRQQ),
01200                            bp->fName);
01201          }
01202          return;
01203       }
01204    }
01205 #ifdef MAP_DEBUG
01206 
01207    if (map == el->fMap.fKey) {
01208       (void) fprintf(el->fOutFile,
01209                      "BUG!!! %s isn't bound to anything.\n",
01210                      key__decode_str(firstbuf, unparsbuf, STRQQ));
01211       (void) fprintf(el->fOutFile, "el->fMap.fKey[%d] == %d\n",
01212                      first, el->fMap.fKey[first]);
01213    } else {
01214       (void) fprintf(el->fOutFile,
01215                      "BUG!!! %s isn't bound to anything.\n",
01216                      key__decode_str(firstbuf, unparsbuf, STRQQ));
01217       (void) fprintf(el->fOutFile, "el->fMap.fAlt[%d] == %d\n",
01218                      first, el->fMap.fAlt[first]);
01219    }
01220 #endif
01221    EL_ABORT((el->fErrFile, "Error printing keys\n"));
01222 } // map_print_some_keys
01223 
01224 
01225 /* map_print_all_keys():
01226  *      Print the function description for all keys.
01227  */
01228 el_private void
01229 map_print_all_keys(EditLine_t* el) {
01230    int prev, i;
01231 
01232    (void) fprintf(el->fOutFile, "Standard key bindings\n");
01233    prev = 0;
01234 
01235    for (i = 0; i < N_KEYS; i++) {
01236       if (el->fMap.fKey[prev] == el->fMap.fKey[i]) {
01237          continue;
01238       }
01239       map_print_some_keys(el, el->fMap.fKey, prev, i - 1);
01240       prev = i;
01241    }
01242    map_print_some_keys(el, el->fMap.fKey, prev, i - 1);
01243 
01244    (void) fprintf(el->fOutFile, "Alternative key bindings\n");
01245    prev = 0;
01246 
01247    for (i = 0; i < N_KEYS; i++) {
01248       if (el->fMap.fAlt[prev] == el->fMap.fAlt[i]) {
01249          continue;
01250       }
01251       map_print_some_keys(el, el->fMap.fAlt, prev, i - 1);
01252       prev = i;
01253    }
01254    map_print_some_keys(el, el->fMap.fAlt, prev, i - 1);
01255 
01256    (void) fprintf(el->fOutFile, "Multi-character bindings\n");
01257    key_print(el, "");
01258    (void) fprintf(el->fOutFile, "Arrow key bindings\n");
01259    term_print_arrow(el, "");
01260 } // map_print_all_keys
01261 
01262 
01263 /* map_bind():
01264  *      Add/remove/change bindings
01265  */
01266 el_protected int
01267 map_bind(EditLine_t* el, int argc, const char** argv) {
01268    ElAction_t* map;
01269    int ntype, rem;
01270    const char* p;
01271    char inbuf[EL_BUFSIZ];
01272    char outbuf[EL_BUFSIZ];
01273    char* in = NULL;
01274    char* out = NULL;
01275    ElBindings_t* bp;
01276    int cmd;
01277    int key;
01278 
01279    if (argv == NULL) {
01280       return -1;
01281    }
01282 
01283    map = el->fMap.fKey;
01284    ntype = XK_CMD;
01285    key = rem = 0;
01286 
01287    for (argc = 1; (p = argv[argc]) != NULL; argc++) {
01288       if (p[0] == '-') {
01289          switch (p[1]) {
01290          case 'a':
01291             map = el->fMap.fAlt;
01292             break;
01293 
01294          case 's':
01295             ntype = XK_STR;
01296             break;
01297 #ifdef notyet
01298          case 'c':
01299             ntype = XK_EXE;
01300             break;
01301 #endif
01302          case 'k':
01303             key = 1;
01304             break;
01305 
01306          case 'r':
01307             rem = 1;
01308             break;
01309 
01310          case 'v':
01311             map_init_vi(el);
01312             return 0;
01313 
01314          case 'e':
01315             map_init_emacs(el);
01316             return 0;
01317 
01318          case 'l':
01319 
01320             for (bp = el->fMap.fHelp; bp->fName != NULL;
01321                  bp++) {
01322                (void) fprintf(el->fOutFile,
01323                               "%s\n\t%s\n",
01324                               bp->fName, bp->fDescription);
01325             }
01326             return 0;
01327          default:
01328             (void) fprintf(el->fErrFile,
01329                            "%s: Invalid switch `%c'.\n",
01330                            argv[0], p[1]);
01331          } // switch
01332       } else {
01333          break;
01334       }
01335    }
01336 
01337    if (argv[argc] == NULL) {
01338       map_print_all_keys(el);
01339       fprintf(el->fOutFile,
01340               "\nThe complete docs for bind are explained in man (5) editrc, which comes with libeditline.\n"
01341       );
01342       fprintf(el->fOutFile,
01343               "An overview of the options:\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n",
01344               "-e\tBind standard emacs keys.",
01345               "-v\tBind standard vi keys.",
01346               "-a\tShow or change key bindings in the vi command-mode keymap.",
01347               "-k\t'key' is interpretted as a symbolic arrow key name.",
01348               "-l\tList all editor commands and short descriptions.",
01349               "-r\tRemove a binding.",
01350               "-s\t'command' is taken as a literal string or another command's name (which is then recursively processed)."
01351       );
01352       return 0;
01353    }
01354 
01355    if (key) {
01356       /**
01357          ACHTUNG: the (char *) cast is a bogus, quick hack to accomodate
01358          const changes in this code. TODO: fix 'in'!!!
01359        */
01360       in = (char*) argv[argc++];
01361    } else if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
01362       (void) fprintf(el->fErrFile,
01363                      "%s: Invalid \\ or ^ in instring.\n",
01364                      argv[0]);
01365       return -1;
01366    }
01367 
01368    if (rem) {
01369       if (key) {
01370          (void) term_clear_arrow(el, in);
01371          return -1;
01372       }
01373 
01374       if (in[1]) {
01375          (void) key_delete(el, in);
01376       } else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN) {
01377          (void) key_delete(el, in);
01378       } else {
01379          map[(unsigned char) *in] = ED_UNASSIGNED;
01380       }
01381       return 0;
01382    }
01383 
01384    if (argv[argc] == NULL) {
01385       if (key) {
01386          term_print_arrow(el, in);
01387       } else {
01388          map_print_key(el, map, in);
01389       }
01390       return 0;
01391    }
01392 #ifdef notyet
01393 
01394    if (argv[argc + 1] != NULL) {
01395       bindkey_usage();
01396       return -1;
01397    }
01398 #endif
01399 
01400    switch (ntype) {
01401    case XK_STR:
01402    case XK_EXE:
01403 
01404       if ((out = parse__string(outbuf, argv[argc])) == NULL) {
01405          (void) fprintf(el->fErrFile,
01406                         "%s: Invalid \\ or ^ in outstring.\n", argv[0]);
01407          return -1;
01408       }
01409 
01410       if (key) {
01411          term_set_arrow(el, in, key_map_str(el, out), ntype);
01412       } else {
01413          key_add(el, in, key_map_str(el, out), ntype);
01414       }
01415       map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
01416       break;
01417 
01418    case XK_CMD:
01419 
01420       if ((cmd = parse_cmd(el, argv[argc])) == -1) {
01421          (void) fprintf(el->fErrFile,
01422                         "%s: Invalid command `%s'.\n", argv[0], argv[argc]);
01423          return -1;
01424       }
01425 
01426       if (key) {
01427          term_set_arrow(el, in, key_map_str(el, out), ntype);
01428       } else {
01429          if (in[1]) {
01430             key_add(el, in, key_map_cmd(el, cmd), ntype);
01431             map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
01432          } else {
01433             key_clear(el, map, in);
01434             map[(unsigned char) *in] = cmd;
01435          }
01436       }
01437       break;
01438 
01439    // coverity[dead_error_begin]
01440    default:
01441       EL_ABORT((el->fErrFile, "Bad XK_ type\n", ntype));
01442       break;
01443    } // switch
01444    return 0;
01445 } // map_bind
01446 
01447 
01448 /* map_addfunc():
01449  *      add a user defined function
01450  */
01451 el_protected int
01452 map_addfunc(EditLine_t* el, const char* name, const char* help, ElFunc_t func) {
01453    void* p;
01454    int nf = el->fMap.fNFunc + 2;
01455 
01456    if (name == NULL || help == NULL || func == NULL) {
01457       return -1;
01458    }
01459 
01460    if ((p = el_realloc(el->fMap.fFunc, nf * sizeof(ElFunc_t))) == NULL) {
01461       return -1;
01462    }
01463    el->fMap.fFunc = (ElFunc_t*) p;
01464 
01465    if ((p = el_realloc(el->fMap.fHelp, nf * sizeof(ElBindings_t)))
01466        == NULL) {
01467       return -1;
01468    }
01469    el->fMap.fHelp = (ElBindings_t*) p;
01470 
01471    nf = el->fMap.fNFunc;
01472    el->fMap.fFunc[nf] = func;
01473 
01474    el->fMap.fHelp[nf].fName = name;
01475    el->fMap.fHelp[nf].fFunc = nf;
01476    el->fMap.fHelp[nf].fDescription = help;
01477    el->fMap.fHelp[++nf].fName = NULL;
01478    el->fMap.fNFunc++;
01479 
01480    return 0;
01481 } // map_addfunc

Generated on Tue Jul 5 14:11:38 2011 for ROOT_528-00b_version by  doxygen 1.5.1