home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume25 / tcsh-6.01 / part15 / ed.defns.c next >
C/C++ Source or Header  |  1991-12-19  |  41KB  |  1,443 lines

  1. /* $Header: /home/hyperion/mu/christos/src/sys/tcsh-6.01/RCS/ed.defns.c,v 3.10 1991/11/26 04:28:26 christos Exp $ */
  2. /*
  3.  * ed.defns.c: Editor function definitions and initialization
  4.  */
  5. /*-
  6.  * Copyright (c) 1980, 1991 The Regents of the University of California.
  7.  * All rights reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  * 3. All advertising materials mentioning features or use of this software
  18.  *    must display the following acknowledgement:
  19.  *    This product includes software developed by the University of
  20.  *    California, Berkeley and its contributors.
  21.  * 4. Neither the name of the University nor the names of its contributors
  22.  *    may be used to endorse or promote products derived from this software
  23.  *    without specific prior written permission.
  24.  *
  25.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  26.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  29.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  31.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  32.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  34.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  35.  * SUCH DAMAGE.
  36.  */
  37. #include "sh.h"
  38.  
  39. RCSID("$Id: ed.defns.c,v 3.10 1991/11/26 04:28:26 christos Exp $")
  40.  
  41. #include "ed.h"
  42.  
  43. static    void        ed_InitMetaBindings     __P((void));
  44.  
  45. PFCmd   CcFuncTbl[] = {        /* table of available commands */
  46.     e_unassigned,
  47. /* no #define here -- this is a dummy to detect initing of the key map */
  48.     e_unassigned,
  49. #define        F_UNASSIGNED    1
  50.     e_insert,
  51. #define        F_INSERT    2
  52.     e_newline,
  53. #define        F_NEWLINE    3
  54.     e_delprev,
  55. #define        F_DELPREV    4
  56.     e_delnext,
  57. #define        F_DELNEXT    5
  58.     e_toend,
  59. #define        F_TOEND        6
  60.     e_tobeg,
  61. #define        F_TOBEG        7
  62.     e_charback,
  63. #define        F_CHARBACK    8
  64.     e_charfwd,
  65. #define        F_CHARFWD    9
  66.     e_quote,
  67. #define        F_QUOTE        10
  68.     e_startover,
  69. #define        F_STARTOVER    11
  70.     e_redisp,
  71. #define        F_REDISP    12
  72.     e_tty_int,
  73. #define        F_TTY_INT    13
  74.     e_wordback,
  75. #define        F_WORDBACK    14
  76.     e_wordfwd,
  77. #define        F_WORDFWD    15
  78.     e_cleardisp,
  79. #define        F_CLEARDISP    16
  80.     e_complete,
  81. #define        F_COMPLETE    17
  82.     e_correct,
  83. #define        F_CORRECT    18
  84.     e_up_hist,
  85. #define        F_UP_HIST    19
  86.     e_down_hist,
  87. #define        F_DOWN_HIST    20
  88.     e_up_search_hist,
  89. #define        F_UP_SEARCH_HIST    21
  90.     e_down_search_hist,
  91. #define        F_DOWN_SEARCH_HIST    22
  92.     e_helpme,
  93. #define        F_HELPME    23
  94.     e_list_choices,
  95. #define        F_LIST_CHOICES    24
  96.     e_delwordprev,
  97. #define        F_DELWORDPREV    25
  98.     e_delwordnext,
  99. #define        F_DELWORDNEXT    26
  100.     e_digit,
  101. #define        F_DIGIT        27
  102.     e_killend,
  103. #define        F_KILLEND    28
  104.     e_killbeg,
  105. #define        F_KILLBEG    29
  106.     e_metanext,
  107. #define        F_METANEXT    30
  108.     e_send_eof,
  109. #define        F_SEND_EOF    31
  110.     e_charswitch,
  111. #define        F_CHARSWITCH    32
  112.     e_which,
  113. #define        F_WHICH        33
  114.     e_yank_kill,
  115. #define        F_YANK_KILL    34
  116.     e_tty_dsusp,
  117. #define        F_TTY_DSUSP    35
  118.     e_tty_flusho,
  119. #define        F_TTY_FLUSHO    36
  120.     e_tty_quit,
  121. #define        F_TTY_QUIT    37
  122.     e_tty_tsusp,
  123. #define        F_TTY_TSUSP    38
  124.     e_tty_stopo,
  125. #define        F_TTY_STOPO    39
  126.     e_tty_starto,
  127. #define        F_TTY_STARTO    40
  128.     e_argfour,
  129. #define        F_ARGFOUR    41
  130.     e_set_mark,
  131. #define        F_SET_MARK    42
  132.     e_exchange_mark,
  133. #define        F_EXCHANGE_MARK    43
  134.     e_last_item,
  135. #define        F_LAST_ITEM    44
  136.     e_list_delnext,
  137. #define        F_LIST_DELNEXT    45
  138.     v_cmd_mode,
  139. #define        V_CMD_MODE    46
  140.     v_insert,
  141. #define        V_INSERT    47
  142.     e_argdigit,
  143. #define        F_ARGDIGIT    48
  144.     e_killregion,
  145. #define        F_KILLREGION    49
  146.     e_copyregion,
  147. #define        F_COPYREGION    50
  148.     e_gcharswitch,
  149. #define        F_GCHARSWITCH    51
  150.     e_run_fg_editor,
  151. #define        F_RUN_FG_EDITOR    52
  152.     e_unassigned,    /* place holder for sequence lead in character */
  153. #define        F_XKEY        53
  154.     e_uppercase,
  155. #define         F_CASEUPPER     54
  156.     e_lowercase,
  157. #define         F_CASELOWER     55
  158.     e_capitolcase,
  159. #define         F_CASECAPITAL   56
  160.     v_zero,
  161. #define        V_ZERO        57
  162.     v_add,
  163. #define        V_ADD        58
  164.     v_addend,
  165. #define        V_ADDEND    59
  166.     v_wordbegnext,
  167. #define        V_WORDBEGNEXT    60
  168.     e_killall,
  169. #define        F_KILLALL    61
  170.     e_unassigned,
  171. /* F_EXTENDNEXT removed */
  172.     v_insbeg,
  173. #define        V_INSBEG    63
  174.     v_replmode,
  175. #define        V_REPLMODE    64
  176.     v_replone,
  177. #define        V_REPLONE    65
  178.     v_substline,
  179. #define        V_SUBSTLINE    66
  180.     v_substchar,
  181. #define        V_SUBSTCHAR    67
  182.     v_chgtoend,
  183. #define        V_CHGTOEND    68
  184.     e_list_eof,
  185. #define        F_LIST_EOF    69
  186.     e_list_glob,
  187. #define        F_LIST_GLOB    70
  188.     e_expand_history,
  189. #define        F_EXPAND_HISTORY    71
  190.     e_magic_space,
  191. #define        F_MAGIC_SPACE    72
  192.     e_insovr,
  193. #define        F_INSOVR    73
  194.     v_cm_complete,
  195. #define        V_CM_COMPLETE    74
  196.     e_copyprev,
  197. #define        F_COPYPREV    75
  198.     e_correctl,
  199. #define        F_CORRECT_L    76
  200.     e_expand_glob,
  201. #define        F_EXPAND_GLOB    77
  202.     e_expand_vars,
  203. #define        F_EXPAND_VARS    78
  204.     e_toggle_hist,
  205. #define        F_TOGGLE_HIST    79
  206.     v_change_case,
  207. #define        V_CHGCASE    80
  208.     e_expand,
  209. #define        F_EXPAND    81
  210.     e_load_average,
  211. #define        F_LOAD_AVERAGE    82
  212.     v_delprev,
  213. #define        V_DELPREV    83
  214.     v_delmeta,
  215. #define        V_DELMETA    84
  216.     v_wordfwd,
  217. #define        V_WORDFWD    85
  218.     v_wordback,
  219. #define        V_WORDBACK    86
  220.     v_endword,
  221. #define        V_ENDWORD    87
  222.     v_eword,
  223. #define        V_EWORD        88
  224.     v_undo,
  225. #define        V_UNDO        89
  226.     v_ush_meta,
  227. #define        V_USH_META    90
  228.     v_dsh_meta,
  229. #define        V_DSH_META    91
  230.     v_rsrch_fwd,
  231. #define        V_RSRCH_FWD    92
  232.     v_rsrch_back,
  233. #define        V_RSRCH_BACK    93
  234.     v_char_fwd,
  235. #define        V_CHAR_FWD    94
  236.     v_char_back,
  237. #define        V_CHAR_BACK    95
  238.     v_chgmeta,
  239. #define        V_CHGMETA    96
  240.     e_inc_fwd,
  241. #define        F_INC_FWD    97
  242.     e_inc_back,
  243. #define        F_INC_BACK    98
  244.     v_rchar_fwd,
  245. #define        V_RCHAR_FWD    99
  246.     v_rchar_back,
  247. #define        V_RCHAR_BACK    100
  248.     v_charto_fwd,
  249. #define        V_CHARTO_FWD    101
  250.     v_charto_back,
  251. #define        V_CHARTO_BACK    102
  252.     e_normalize_path,
  253. #define        F_PATH_NORM    103
  254.     0                /* DUMMY VALUE */
  255. #define        F_NUM_FNS    104
  256. };
  257.  
  258. KEYCMD  NumFuns = F_NUM_FNS;
  259.  
  260. KEYCMD  CcKeyMap[256];        /* the real key map */
  261. KEYCMD  CcAltMap[256];        /* the alternative key map */
  262.  
  263. KEYCMD  CcEmacsMap[] = {
  264. /* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
  265.    bytes long */
  266.  
  267.     F_SET_MARK,            /* ^@ */
  268.     F_TOBEG,            /* ^A */
  269.     F_CHARBACK,            /* ^B */
  270.     F_TTY_INT,            /* ^C */
  271.     F_LIST_DELNEXT,        /* ^D */
  272.     F_TOEND,            /* ^E */
  273.     F_CHARFWD,            /* ^F */
  274.     F_UNASSIGNED,        /* ^G */
  275.     F_DELPREV,            /* ^H */
  276.     F_COMPLETE,            /* ^I */
  277.     F_NEWLINE,            /* ^J */
  278.     F_KILLEND,            /* ^K */
  279.     F_CLEARDISP,        /* ^L */
  280.     F_NEWLINE,            /* ^M */
  281.     F_DOWN_HIST,        /* ^N */
  282.     F_TTY_FLUSHO,        /* ^O */
  283.     F_UP_HIST,            /* ^P */
  284.     F_TTY_STARTO,        /* ^Q */
  285.     F_REDISP,            /* ^R */
  286.     F_TTY_STOPO,        /* ^S */
  287.     F_CHARSWITCH,        /* ^T */
  288.     F_KILLALL,            /* ^U */
  289.     F_QUOTE,            /* ^V */
  290.     F_KILLREGION,        /* ^W */
  291.     F_XKEY,            /* ^X */
  292.     F_YANK_KILL,        /* ^Y */
  293.     F_TTY_TSUSP,        /* ^Z */
  294.     F_METANEXT,            /* ^[ */
  295.     F_TTY_QUIT,            /* ^\ */
  296.     F_TTY_DSUSP,        /* ^] */
  297.     F_UNASSIGNED,        /* ^^ */
  298.     F_UNASSIGNED,        /* ^_ */
  299.     F_INSERT,            /* SPACE */
  300.     F_INSERT,            /* ! */
  301.     F_INSERT,            /* " */
  302.     F_INSERT,            /* # */
  303.     F_INSERT,            /* $ */
  304.     F_INSERT,            /* % */
  305.     F_INSERT,            /* & */
  306.     F_INSERT,            /* ' */
  307.     F_INSERT,            /* ( */
  308.     F_INSERT,            /* ) */
  309.     F_INSERT,            /* * */
  310.     F_INSERT,            /* + */
  311.     F_INSERT,            /* , */
  312.     F_INSERT,            /* - */
  313.     F_INSERT,            /* . */
  314.     F_INSERT,            /* / */
  315.     F_DIGIT,            /* 0 */
  316.     F_DIGIT,            /* 1 */
  317.     F_DIGIT,            /* 2 */
  318.     F_DIGIT,            /* 3 */
  319.     F_DIGIT,            /* 4 */
  320.     F_DIGIT,            /* 5 */
  321.     F_DIGIT,            /* 6 */
  322.     F_DIGIT,            /* 7 */
  323.     F_DIGIT,            /* 8 */
  324.     F_DIGIT,            /* 9 */
  325.     F_INSERT,            /* : */
  326.     F_INSERT,            /* ; */
  327.     F_INSERT,            /* < */
  328.     F_INSERT,            /* = */
  329.     F_INSERT,            /* > */
  330.     F_INSERT,            /* ? */
  331.     F_INSERT,            /* @ */
  332.     F_INSERT,            /* A */
  333.     F_INSERT,            /* B */
  334.     F_INSERT,            /* C */
  335.     F_INSERT,            /* D */
  336.     F_INSERT,            /* E */
  337.     F_INSERT,            /* F */
  338.     F_INSERT,            /* G */
  339.     F_INSERT,            /* H */
  340.     F_INSERT,            /* I */
  341.     F_INSERT,            /* J */
  342.     F_INSERT,            /* K */
  343.     F_INSERT,            /* L */
  344.     F_INSERT,            /* M */
  345.     F_INSERT,            /* N */
  346.     F_INSERT,            /* O */
  347.     F_INSERT,            /* P */
  348.     F_INSERT,            /* Q */
  349.     F_INSERT,            /* R */
  350.     F_INSERT,            /* S */
  351.     F_INSERT,            /* T */
  352.     F_INSERT,            /* U */
  353.     F_INSERT,            /* V */
  354.     F_INSERT,            /* W */
  355.     F_INSERT,            /* X */
  356.     F_INSERT,            /* Y */
  357.     F_INSERT,            /* Z */
  358.     F_INSERT,            /* [ */
  359.     F_INSERT,            /* \ */
  360.     F_INSERT,            /* ] */
  361.     F_INSERT,            /* ^ */
  362.     F_INSERT,            /* _ */
  363.     F_INSERT,            /* ` */
  364.     F_INSERT,            /* a */
  365.     F_INSERT,            /* b */
  366.     F_INSERT,            /* c */
  367.     F_INSERT,            /* d */
  368.     F_INSERT,            /* e */
  369.     F_INSERT,            /* f */
  370.     F_INSERT,            /* g */
  371.     F_INSERT,            /* h */
  372.     F_INSERT,            /* i */
  373.     F_INSERT,            /* j */
  374.     F_INSERT,            /* k */
  375.     F_INSERT,            /* l */
  376.     F_INSERT,            /* m */
  377.     F_INSERT,            /* n */
  378.     F_INSERT,            /* o */
  379.     F_INSERT,            /* p */
  380.     F_INSERT,            /* q */
  381.     F_INSERT,            /* r */
  382.     F_INSERT,            /* s */
  383.     F_INSERT,            /* t */
  384.     F_INSERT,            /* u */
  385.     F_INSERT,            /* v */
  386.     F_INSERT,            /* w */
  387.     F_INSERT,            /* x */
  388.     F_INSERT,            /* y */
  389.     F_INSERT,            /* z */
  390.     F_INSERT,            /* { */
  391.     F_INSERT,            /* | */
  392.     F_INSERT,            /* } */
  393.     F_INSERT,            /* ~ */
  394.     F_DELPREV,            /* ^? */
  395.     F_UNASSIGNED,        /* M-^@ */
  396.     F_UNASSIGNED,        /* M-^A */
  397.     F_UNASSIGNED,        /* M-^B */
  398.     F_UNASSIGNED,        /* M-^C */
  399.     F_LIST_CHOICES,        /* M-^D */
  400.     F_UNASSIGNED,        /* M-^E */
  401.     F_UNASSIGNED,        /* M-^F */
  402.     F_UNASSIGNED,        /* M-^G */
  403.     F_DELWORDPREV,        /* M-^H */
  404.     F_COMPLETE,            /* M-^I */
  405.     F_UNASSIGNED,        /* M-^J */
  406.     F_UNASSIGNED,        /* M-^K */
  407.     F_CLEARDISP,        /* M-^L */
  408.     F_UNASSIGNED,        /* M-^M */
  409.     F_UNASSIGNED,        /* M-^N */
  410.     F_UNASSIGNED,        /* M-^O */
  411.     F_UNASSIGNED,        /* M-^P */
  412.     F_UNASSIGNED,        /* M-^Q */
  413.     F_UNASSIGNED,        /* M-^R */
  414.     F_UNASSIGNED,        /* M-^S */
  415.     F_UNASSIGNED,        /* M-^T */
  416.     F_UNASSIGNED,        /* M-^U */
  417.     F_UNASSIGNED,        /* M-^V */
  418.     F_UNASSIGNED,        /* M-^W */
  419.     F_UNASSIGNED,        /* M-^X */
  420.     F_UNASSIGNED,        /* M-^Y */
  421.     F_RUN_FG_EDITOR,        /* M-^Z */
  422.     F_COMPLETE,            /* M-^[ */
  423.     F_UNASSIGNED,        /* M-^\ */
  424.     F_UNASSIGNED,        /* M-^] */
  425.     F_UNASSIGNED,        /* M-^^ */
  426.     F_COPYPREV,            /* M-^_ */
  427.     F_EXPAND_HISTORY,        /* M-SPACE */
  428.     F_EXPAND_HISTORY,        /* M-! */
  429.     F_UNASSIGNED,        /* M-" */
  430.     F_UNASSIGNED,        /* M-# */
  431.     F_CORRECT_L,        /* M-$ */
  432.     F_UNASSIGNED,        /* M-% */
  433.     F_UNASSIGNED,        /* M-& */
  434.     F_UNASSIGNED,        /* M-' */
  435.     F_UNASSIGNED,        /* M-( */
  436.     F_UNASSIGNED,        /* M-) */
  437.     F_UNASSIGNED,        /* M-* */
  438.     F_UNASSIGNED,        /* M-+ */
  439.     F_UNASSIGNED,        /* M-, */
  440.     F_UNASSIGNED,        /* M-- */
  441.     F_UNASSIGNED,        /* M-. */
  442.     F_UNASSIGNED,        /* M-/ */
  443.     F_ARGDIGIT,            /* M-0 */
  444.     F_ARGDIGIT,            /* M-1 */
  445.     F_ARGDIGIT,            /* M-2 */
  446.     F_ARGDIGIT,            /* M-3 */
  447.     F_ARGDIGIT,            /* M-4 */
  448.     F_ARGDIGIT,            /* M-5 */
  449.     F_ARGDIGIT,            /* M-6 */
  450.     F_ARGDIGIT,            /* M-7 */
  451.     F_ARGDIGIT,            /* M-8 */
  452.     F_ARGDIGIT,            /* M-9 */
  453.     F_UNASSIGNED,        /* M-: */
  454.     F_UNASSIGNED,        /* M-; */
  455.     F_UNASSIGNED,        /* M-< */
  456.     F_UNASSIGNED,        /* M-= */
  457.     F_UNASSIGNED,        /* M-> */
  458.     F_WHICH,            /* M-? */
  459.     F_UNASSIGNED,        /* M-@ */
  460.     F_UNASSIGNED,        /* M-A */
  461.     F_WORDBACK,            /* M-B */
  462.     F_CASECAPITAL,        /* M-C */
  463.     F_DELWORDNEXT,        /* M-D */
  464.     F_UNASSIGNED,        /* M-E */
  465.     F_WORDFWD,            /* M-F */
  466.     F_UNASSIGNED,        /* M-G */
  467.     F_HELPME,            /* M-H */
  468.     F_UNASSIGNED,        /* M-I */
  469.     F_UNASSIGNED,        /* M-J */
  470.     F_UNASSIGNED,        /* M-K */
  471.     F_CASELOWER,        /* M-L */
  472.     F_UNASSIGNED,        /* M-M */
  473.     F_DOWN_SEARCH_HIST,        /* M-N */
  474.     F_XKEY,            /* M-O *//* extended key esc PWP Mar 88 */
  475.     F_UP_SEARCH_HIST,        /* M-P */
  476.     F_UNASSIGNED,        /* M-Q */
  477.     F_TOGGLE_HIST,        /* M-R */
  478.     F_CORRECT,            /* M-S */
  479.     F_UNASSIGNED,        /* M-T */
  480.     F_CASEUPPER,        /* M-U */
  481.     F_UNASSIGNED,        /* M-V */
  482.     F_COPYREGION,        /* M-W */
  483.     F_UNASSIGNED,        /* M-X */
  484.     F_UNASSIGNED,        /* M-Y */
  485.     F_UNASSIGNED,        /* M-Z */
  486.     F_XKEY,            /* M-[ *//* extended key esc -mf Oct 87 */
  487.     F_UNASSIGNED,        /* M-\ */
  488.     F_UNASSIGNED,        /* M-] */
  489.     F_UNASSIGNED,        /* M-^ */
  490.     F_LAST_ITEM,        /* M-_ */
  491.     F_UNASSIGNED,        /* M-` */
  492.     F_UNASSIGNED,        /* M-a */
  493.     F_WORDBACK,            /* M-b */
  494.     F_CASECAPITAL,        /* M-c */
  495.     F_DELWORDNEXT,        /* M-d */
  496.     F_UNASSIGNED,        /* M-e */
  497.     F_WORDFWD,            /* M-f */
  498.     F_UNASSIGNED,        /* M-g */
  499.     F_HELPME,            /* M-h */
  500.     F_UNASSIGNED,        /* M-i */
  501.     F_UNASSIGNED,        /* M-j */
  502.     F_UNASSIGNED,        /* M-k */
  503.     F_CASELOWER,        /* M-l */
  504.     F_UNASSIGNED,        /* M-m */
  505.     F_DOWN_SEARCH_HIST,        /* M-n */
  506.     F_UNASSIGNED,        /* M-o */
  507.     F_UP_SEARCH_HIST,        /* M-p */
  508.     F_UNASSIGNED,        /* M-q */
  509.     F_TOGGLE_HIST,        /* M-r */
  510.     F_CORRECT,            /* M-s */
  511.     F_UNASSIGNED,        /* M-t */
  512.     F_CASEUPPER,        /* M-u */
  513.     F_UNASSIGNED,        /* M-v */
  514.     F_COPYREGION,        /* M-w */
  515.     F_UNASSIGNED,        /* M-x */
  516.     F_UNASSIGNED,        /* M-y */
  517.     F_UNASSIGNED,        /* M-z */
  518.     F_UNASSIGNED,        /* M-{ */
  519.     F_UNASSIGNED,        /* M-| */
  520.     F_UNASSIGNED,        /* M-} */
  521.     F_UNASSIGNED,        /* M-~ */
  522.     F_DELWORDPREV        /* M-^? */
  523. };
  524.  
  525. /*
  526.  * keymap table for vi.  Each index into above tbl; should be
  527.  * 256 entries long.  Vi mode uses a sticky-extend to do command mode:
  528.  * insert mode characters are in the normal keymap, and command mode
  529.  * in the extended keymap.
  530.  */
  531. KEYCMD  CcViMap[] = {
  532. #ifdef KSHVI
  533.     F_UNASSIGNED,        /* ^@ */
  534.     F_INSERT,            /* ^A */
  535.     F_INSERT,            /* ^B */
  536.     F_INSERT,            /* ^C */
  537.     F_INSERT,            /* ^D */
  538.     F_INSERT,            /* ^E */
  539.     F_INSERT,            /* ^F */
  540.     F_INSERT,            /* ^G */
  541.     V_DELPREV,            /* ^H */   /* BackSpace key */
  542.     F_COMPLETE,            /* ^I */   /* Tab Key  */
  543.     F_NEWLINE,            /* ^J */
  544.     F_INSERT,            /* ^K */
  545.     F_INSERT,            /* ^L */
  546.     F_NEWLINE,            /* ^M */
  547.     F_INSERT,            /* ^N */
  548.     F_INSERT,            /* ^O */
  549.     F_INSERT,            /* ^P */
  550.     F_TTY_STARTO,        /* ^Q */
  551.     F_INSERT,            /* ^R */
  552.     F_INSERT,            /* ^S */
  553.     F_INSERT,            /* ^T */
  554.     F_INSERT,            /* ^U */
  555.     F_QUOTE,            /* ^V */
  556.     F_DELWORDPREV,        /* ^W */  /* Only until start edit pos */
  557.     F_INSERT,            /* ^X */
  558.     F_INSERT,            /* ^Y */
  559.     F_INSERT,            /* ^Z */
  560.     V_CMD_MODE,            /* ^[ */  /* [ Esc ] key */
  561.     F_TTY_QUIT,            /* ^\ */
  562.     F_INSERT,            /* ^] */
  563.     F_INSERT,            /* ^^ */
  564.     F_INSERT,            /* ^_ */
  565. #else /* !KSHVI */
  566.     F_UNASSIGNED,        /* ^@ */   /* NOTE: These mapping do NOT */
  567.     F_TOBEG,            /* ^A */   /* Correspond well to the KSH */
  568.     F_CHARBACK,            /* ^B */   /* VI editting assignments    */
  569.     F_TTY_INT,            /* ^C */   /* On the other hand they are */
  570.     F_LIST_EOF,            /* ^D */   /* convenient any many people */
  571.     F_TOEND,            /* ^E */   /* have gotten used to them   */
  572.     F_CHARFWD,            /* ^F */
  573.     F_LIST_GLOB,        /* ^G */
  574.     F_DELPREV,            /* ^H */   /* BackSpace key */
  575.     F_COMPLETE,            /* ^I */   /* Tab Key */
  576.     F_NEWLINE,            /* ^J */
  577.     F_KILLEND,            /* ^K */
  578.     F_CLEARDISP,        /* ^L */
  579.     F_NEWLINE,            /* ^M */
  580.     F_DOWN_HIST,        /* ^N */
  581.     F_TTY_FLUSHO,        /* ^O */
  582.     F_UP_HIST,            /* ^P */
  583.     F_TTY_STARTO,        /* ^Q */
  584.     F_REDISP,            /* ^R */
  585.     F_TTY_STOPO,        /* ^S */
  586.     F_CHARSWITCH,        /* ^T */
  587.     F_KILLBEG,            /* ^U */
  588.     F_QUOTE,            /* ^V */
  589.     F_DELWORDPREV,        /* ^W */
  590.     F_EXPAND,            /* ^X */
  591.     F_TTY_DSUSP,        /* ^Y */
  592.     F_TTY_TSUSP,        /* ^Z */
  593.     V_CMD_MODE,            /* ^[ */
  594.     F_TTY_QUIT,            /* ^\ */
  595.     F_UNASSIGNED,        /* ^] */
  596.     F_UNASSIGNED,        /* ^^ */
  597.     F_UNASSIGNED,        /* ^_ */
  598. #endif  /* KSHVI */
  599.     F_INSERT,            /* SPACE */
  600.     F_INSERT,            /* ! */
  601.     F_INSERT,            /* " */
  602.     F_INSERT,            /* # */
  603.     F_INSERT,            /* $ */
  604.     F_INSERT,            /* % */
  605.     F_INSERT,            /* & */
  606.     F_INSERT,            /* ' */
  607.     F_INSERT,            /* ( */
  608.     F_INSERT,            /* ) */
  609.     F_INSERT,            /* * */
  610.     F_INSERT,            /* + */
  611.     F_INSERT,            /* , */
  612.     F_INSERT,            /* - */
  613.     F_INSERT,            /* . */
  614.     F_INSERT,            /* / */
  615.     F_INSERT,            /* 0 */
  616.     F_INSERT,            /* 1 */
  617.     F_INSERT,            /* 2 */
  618.     F_INSERT,            /* 3 */
  619.     F_INSERT,            /* 4 */
  620.     F_INSERT,            /* 5 */
  621.     F_INSERT,            /* 6 */
  622.     F_INSERT,            /* 7 */
  623.     F_INSERT,            /* 8 */
  624.     F_INSERT,            /* 9 */
  625.     F_INSERT,            /* : */
  626.     F_INSERT,            /* ; */
  627.     F_INSERT,            /* < */
  628.     F_INSERT,            /* = */
  629.     F_INSERT,            /* > */
  630.     F_INSERT,            /* ? */
  631.     F_INSERT,            /* @ */
  632.     F_INSERT,            /* A */
  633.     F_INSERT,            /* B */
  634.     F_INSERT,            /* C */
  635.     F_INSERT,            /* D */
  636.     F_INSERT,            /* E */
  637.     F_INSERT,            /* F */
  638.     F_INSERT,            /* G */
  639.     F_INSERT,            /* H */
  640.     F_INSERT,            /* I */
  641.     F_INSERT,            /* J */
  642.     F_INSERT,            /* K */
  643.     F_INSERT,            /* L */
  644.     F_INSERT,            /* M */
  645.     F_INSERT,            /* N */
  646.     F_INSERT,            /* O */
  647.     F_INSERT,            /* P */
  648.     F_INSERT,            /* Q */
  649.     F_INSERT,            /* R */
  650.     F_INSERT,            /* S */
  651.     F_INSERT,            /* T */
  652.     F_INSERT,            /* U */
  653.     F_INSERT,            /* V */
  654.     F_INSERT,            /* W */
  655.     F_INSERT,            /* X */
  656.     F_INSERT,            /* Y */
  657.     F_INSERT,            /* Z */
  658.     F_INSERT,            /* [ */
  659.     F_INSERT,            /* \ */
  660.     F_INSERT,            /* ] */
  661.     F_INSERT,            /* ^ */
  662.     F_INSERT,            /* _ */
  663.     F_INSERT,            /* ` */
  664.     F_INSERT,            /* a */
  665.     F_INSERT,            /* b */
  666.     F_INSERT,            /* c */
  667.     F_INSERT,            /* d */
  668.     F_INSERT,            /* e */
  669.     F_INSERT,            /* f */
  670.     F_INSERT,            /* g */
  671.     F_INSERT,            /* h */
  672.     F_INSERT,            /* i */
  673.     F_INSERT,            /* j */
  674.     F_INSERT,            /* k */
  675.     F_INSERT,            /* l */
  676.     F_INSERT,            /* m */
  677.     F_INSERT,            /* n */
  678.     F_INSERT,            /* o */
  679.     F_INSERT,            /* p */
  680.     F_INSERT,            /* q */
  681.     F_INSERT,            /* r */
  682.     F_INSERT,            /* s */
  683.     F_INSERT,            /* t */
  684.     F_INSERT,            /* u */
  685.     F_INSERT,            /* v */
  686.     F_INSERT,            /* w */
  687.     F_INSERT,            /* x */
  688.     F_INSERT,            /* y */
  689.     F_INSERT,            /* z */
  690.     F_INSERT,            /* { */
  691.     F_INSERT,            /* | */
  692.     F_INSERT,            /* } */
  693.     F_INSERT,            /* ~ */
  694.     F_DELPREV,            /* ^? */
  695.     F_UNASSIGNED,        /* M-^@ */
  696.     F_UNASSIGNED,        /* M-^A */
  697.     F_UNASSIGNED,        /* M-^B */
  698.     F_UNASSIGNED,        /* M-^C */
  699.     F_UNASSIGNED,        /* M-^D */
  700.     F_UNASSIGNED,        /* M-^E */
  701.     F_UNASSIGNED,        /* M-^F */
  702.     F_UNASSIGNED,        /* M-^G */
  703.     F_UNASSIGNED,        /* M-^H */
  704.     F_UNASSIGNED,        /* M-^I */
  705.     F_UNASSIGNED,        /* M-^J */
  706.     F_UNASSIGNED,        /* M-^K */
  707.     F_UNASSIGNED,        /* M-^L */
  708.     F_UNASSIGNED,        /* M-^M */
  709.     F_UNASSIGNED,        /* M-^N */
  710.     F_UNASSIGNED,        /* M-^O */
  711.     F_UNASSIGNED,        /* M-^P */
  712.     F_UNASSIGNED,        /* M-^Q */
  713.     F_UNASSIGNED,        /* M-^R */
  714.     F_UNASSIGNED,        /* M-^S */
  715.     F_UNASSIGNED,        /* M-^T */
  716.     F_UNASSIGNED,        /* M-^U */
  717.     F_UNASSIGNED,        /* M-^V */
  718.     F_UNASSIGNED,        /* M-^W */
  719.     F_UNASSIGNED,        /* M-^X */
  720.     F_UNASSIGNED,        /* M-^Y */
  721.     F_UNASSIGNED,        /* M-^Z */
  722.     F_UNASSIGNED,        /* M-^[ */
  723.     F_UNASSIGNED,        /* M-^\ */
  724.     F_UNASSIGNED,        /* M-^] */
  725.     F_UNASSIGNED,        /* M-^^ */
  726.     F_UNASSIGNED,        /* M-^_ */
  727.     F_UNASSIGNED,        /* M-SPACE */
  728.     F_UNASSIGNED,        /* M-! */
  729.     F_UNASSIGNED,        /* M-" */
  730.     F_UNASSIGNED,        /* M-# */
  731.     F_UNASSIGNED,        /* M-$ */
  732.     F_UNASSIGNED,        /* M-% */
  733.     F_UNASSIGNED,        /* M-& */
  734.     F_UNASSIGNED,        /* M-' */
  735.     F_UNASSIGNED,        /* M-( */
  736.     F_UNASSIGNED,        /* M-) */
  737.     F_UNASSIGNED,        /* M-* */
  738.     F_UNASSIGNED,        /* M-+ */
  739.     F_UNASSIGNED,        /* M-, */
  740.     F_UNASSIGNED,        /* M-- */
  741.     F_UNASSIGNED,        /* M-. */
  742.     F_UNASSIGNED,        /* M-/ */
  743.     F_UNASSIGNED,        /* M-0 */
  744.     F_UNASSIGNED,        /* M-1 */
  745.     F_UNASSIGNED,        /* M-2 */
  746.     F_UNASSIGNED,        /* M-3 */
  747.     F_UNASSIGNED,        /* M-4 */
  748.     F_UNASSIGNED,        /* M-5 */
  749.     F_UNASSIGNED,        /* M-6 */
  750.     F_UNASSIGNED,        /* M-7 */
  751.     F_UNASSIGNED,        /* M-8 */
  752.     F_UNASSIGNED,        /* M-9 */
  753.     F_UNASSIGNED,        /* M-: */
  754.     F_UNASSIGNED,        /* M-; */
  755.     F_UNASSIGNED,        /* M-< */
  756.     F_UNASSIGNED,        /* M-= */
  757.     F_UNASSIGNED,        /* M-> */
  758.     F_UNASSIGNED,        /* M-? */
  759.     F_UNASSIGNED,        /* M-@ */
  760.     F_UNASSIGNED,        /* M-A */
  761.     F_UNASSIGNED,        /* M-B */
  762.     F_UNASSIGNED,        /* M-C */
  763.     F_UNASSIGNED,        /* M-D */
  764.     F_UNASSIGNED,        /* M-E */
  765.     F_UNASSIGNED,        /* M-F */
  766.     F_UNASSIGNED,        /* M-G */
  767.     F_UNASSIGNED,        /* M-H */
  768.     F_UNASSIGNED,        /* M-I */
  769.     F_UNASSIGNED,        /* M-J */
  770.     F_UNASSIGNED,        /* M-K */
  771.     F_UNASSIGNED,        /* M-L */
  772.     F_UNASSIGNED,        /* M-M */
  773.     F_UNASSIGNED,        /* M-N */
  774.     F_UNASSIGNED,        /* M-O */
  775.     F_UNASSIGNED,        /* M-P */
  776.     F_UNASSIGNED,        /* M-Q */
  777.     F_UNASSIGNED,        /* M-R */
  778.     F_UNASSIGNED,        /* M-S */
  779.     F_UNASSIGNED,        /* M-T */
  780.     F_UNASSIGNED,        /* M-U */
  781.     F_UNASSIGNED,        /* M-V */
  782.     F_UNASSIGNED,        /* M-W */
  783.     F_UNASSIGNED,        /* M-X */
  784.     F_UNASSIGNED,        /* M-Y */
  785.     F_UNASSIGNED,        /* M-Z */
  786.     F_UNASSIGNED,        /* M-[ */
  787.     F_UNASSIGNED,        /* M-\ */
  788.     F_UNASSIGNED,        /* M-] */
  789.     F_UNASSIGNED,        /* M-^ */
  790.     F_UNASSIGNED,        /* M-_ */
  791.     F_UNASSIGNED,        /* M-` */
  792.     F_UNASSIGNED,        /* M-a */
  793.     F_UNASSIGNED,        /* M-b */
  794.     F_UNASSIGNED,        /* M-c */
  795.     F_UNASSIGNED,        /* M-d */
  796.     F_UNASSIGNED,        /* M-e */
  797.     F_UNASSIGNED,        /* M-f */
  798.     F_UNASSIGNED,        /* M-g */
  799.     F_UNASSIGNED,        /* M-h */
  800.     F_UNASSIGNED,        /* M-i */
  801.     F_UNASSIGNED,        /* M-j */
  802.     F_UNASSIGNED,        /* M-k */
  803.     F_UNASSIGNED,        /* M-l */
  804.     F_UNASSIGNED,        /* M-m */
  805.     F_UNASSIGNED,        /* M-n */
  806.     F_UNASSIGNED,        /* M-o */
  807.     F_UNASSIGNED,        /* M-p */
  808.     F_UNASSIGNED,        /* M-q */
  809.     F_UNASSIGNED,        /* M-r */
  810.     F_UNASSIGNED,        /* M-s */
  811.     F_UNASSIGNED,        /* M-t */
  812.     F_UNASSIGNED,        /* M-u */
  813.     F_UNASSIGNED,        /* M-v */
  814.     F_UNASSIGNED,        /* M-w */
  815.     F_UNASSIGNED,        /* M-x */
  816.     F_UNASSIGNED,        /* M-y */
  817.     F_UNASSIGNED,        /* M-z */
  818.     F_UNASSIGNED,        /* M-{ */
  819.     F_UNASSIGNED,        /* M-| */
  820.     F_UNASSIGNED,        /* M-} */
  821.     F_UNASSIGNED,        /* M-~ */
  822.     F_UNASSIGNED        /* M-^? */
  823. };
  824.  
  825. KEYCMD  CcViCmdMap[] = {
  826.     F_UNASSIGNED,        /* ^@ */
  827.     F_TOBEG,            /* ^A */
  828.     F_UNASSIGNED,        /* ^B */
  829.     F_TTY_INT,            /* ^C */
  830.     F_LIST_CHOICES,        /* ^D */
  831.     F_TOEND,            /* ^E */
  832.     F_UNASSIGNED,        /* ^F */
  833.     F_LIST_GLOB,        /* ^G */
  834.     F_CHARBACK,            /* ^H */
  835.     V_CM_COMPLETE,        /* ^I */
  836.     F_NEWLINE,            /* ^J */
  837.     F_KILLEND,            /* ^K */
  838.     F_CLEARDISP,        /* ^L */
  839.     F_NEWLINE,            /* ^M */
  840.     F_DOWN_HIST,        /* ^N */
  841.     F_TTY_FLUSHO,        /* ^O */
  842.     F_UP_HIST,            /* ^P */
  843.     F_TTY_STARTO,        /* ^Q */
  844.     F_REDISP,            /* ^R */
  845.     F_TTY_STOPO,        /* ^S */
  846.     F_UNASSIGNED,        /* ^T */
  847.     F_KILLBEG,            /* ^U */
  848.     F_UNASSIGNED,        /* ^V */
  849.     F_DELWORDPREV,        /* ^W */
  850.     F_EXPAND,            /* ^X */
  851.     F_UNASSIGNED,        /* ^Y */
  852.     F_UNASSIGNED,        /* ^Z */
  853.     F_METANEXT,            /* ^[ */
  854.     F_TTY_QUIT,            /* ^\ */
  855.     F_UNASSIGNED,        /* ^] */
  856.     F_UNASSIGNED,        /* ^^ */
  857.     F_UNASSIGNED,        /* ^_ */
  858.     F_CHARFWD,            /* SPACE */
  859.     F_EXPAND_HISTORY,        /* ! */
  860.     F_UNASSIGNED,        /* " */
  861.     F_UNASSIGNED,        /* # */
  862.     F_TOEND,            /* $ */
  863.     F_UNASSIGNED,        /* % */
  864.     F_UNASSIGNED,        /* & */
  865.     F_UNASSIGNED,        /* ' */
  866.     F_UNASSIGNED,        /* ( */
  867.     F_UNASSIGNED,        /* ) */
  868.     F_EXPAND_GLOB,        /* * */
  869.     F_DOWN_HIST,        /* + */
  870.     V_RCHAR_BACK,        /* , */    
  871.     F_UP_HIST,            /* - */    
  872.     F_UNASSIGNED,        /* . */
  873.     V_DSH_META,            /* / */
  874.     V_ZERO,            /* 0 */
  875.     F_ARGDIGIT,            /* 1 */
  876.     F_ARGDIGIT,            /* 2 */
  877.     F_ARGDIGIT,            /* 3 */
  878.     F_ARGDIGIT,            /* 4 */
  879.     F_ARGDIGIT,            /* 5 */
  880.     F_ARGDIGIT,            /* 6 */
  881.     F_ARGDIGIT,            /* 7 */
  882.     F_ARGDIGIT,            /* 8 */
  883.     F_ARGDIGIT,            /* 9 */
  884.     F_UNASSIGNED,        /* : */
  885.     V_RCHAR_FWD,        /* ; */
  886.     F_UNASSIGNED,        /* < */
  887.     F_UNASSIGNED,        /* = */
  888.     F_UNASSIGNED,        /* > */
  889.     V_USH_META,            /* ? */
  890.     F_UNASSIGNED,        /* @ */
  891.     V_ADDEND,            /* A */
  892.     V_WORDBACK,            /* B */
  893.     V_CHGTOEND,            /* C */
  894.     F_KILLEND,            /* D */
  895.     V_ENDWORD,            /* E */
  896.     V_CHAR_BACK,        /* F */
  897.     F_UNASSIGNED,        /* G */
  898.     F_UNASSIGNED,        /* H */
  899.     V_INSBEG,            /* I */
  900.     F_DOWN_SEARCH_HIST,        /* J */
  901.     F_UP_SEARCH_HIST,        /* K */
  902.     F_UNASSIGNED,        /* L */
  903.     F_UNASSIGNED,        /* M */
  904.     V_RSRCH_BACK,        /* N */
  905.     F_XKEY,            /* O */
  906.     F_UNASSIGNED,        /* P */
  907.     F_UNASSIGNED,        /* Q */
  908.     V_REPLMODE,            /* R */
  909.     V_SUBSTLINE,        /* S */
  910.     V_CHARTO_BACK,        /* T */
  911.     F_UNASSIGNED,        /* U */
  912.     F_EXPAND_VARS,        /* V */
  913.     V_WORDFWD,            /* W */
  914.     F_DELPREV,            /* X */
  915.     F_UNASSIGNED,        /* Y */
  916.     F_UNASSIGNED,        /* Z */
  917.     F_XKEY,            /* [ */
  918.     F_UNASSIGNED,        /* \ */
  919.     F_UNASSIGNED,        /* ] */
  920.     F_TOBEG,            /* ^ */
  921.     F_UNASSIGNED,        /* _ */
  922.     F_UNASSIGNED,        /* ` */
  923.     V_ADD,            /* a */
  924.     F_WORDBACK,            /* b */
  925.     V_CHGMETA,            /* c */
  926.     V_DELMETA,            /* d */
  927.     V_EWORD,            /* e */
  928.     V_CHAR_FWD,            /* f */
  929.     F_UNASSIGNED,        /* g */
  930.     F_CHARBACK,            /* h */
  931.     V_INSERT,            /* i */
  932.     F_DOWN_HIST,        /* j */
  933.     F_UP_HIST,            /* k */
  934.     F_CHARFWD,            /* l */
  935.     F_UNASSIGNED,        /* m */
  936.     V_RSRCH_FWD,        /* n */
  937.     F_UNASSIGNED,        /* o */
  938.     F_UNASSIGNED,        /* p */
  939.     F_UNASSIGNED,        /* q */
  940.     V_REPLONE,            /* r */
  941.     V_SUBSTCHAR,        /* s */
  942.     V_CHARTO_FWD,        /* t */
  943.     V_UNDO,            /* u */
  944.     F_EXPAND_VARS,        /* v */
  945.     V_WORDBEGNEXT,        /* w */
  946.     F_DELNEXT,            /* x */
  947.     F_UNASSIGNED,        /* y */
  948.     F_UNASSIGNED,        /* z */
  949.     F_UNASSIGNED,        /* { */
  950.     F_UNASSIGNED,        /* | */
  951.     F_UNASSIGNED,        /* } */
  952.     V_CHGCASE,            /* ~ */
  953.     F_DELPREV,            /* ^? */
  954.     F_UNASSIGNED,        /* M-^@ */
  955.     F_UNASSIGNED,        /* M-^A */
  956.     F_UNASSIGNED,        /* M-^B */
  957.     F_UNASSIGNED,        /* M-^C */
  958.     F_UNASSIGNED,        /* M-^D */
  959.     F_UNASSIGNED,        /* M-^E */
  960.     F_UNASSIGNED,        /* M-^F */
  961.     F_UNASSIGNED,        /* M-^G */
  962.     F_UNASSIGNED,        /* M-^H */
  963.     F_UNASSIGNED,        /* M-^I */
  964.     F_UNASSIGNED,        /* M-^J */
  965.     F_UNASSIGNED,        /* M-^K */
  966.     F_UNASSIGNED,        /* M-^L */
  967.     F_UNASSIGNED,        /* M-^M */
  968.     F_UNASSIGNED,        /* M-^N */
  969.     F_UNASSIGNED,        /* M-^O */
  970.     F_UNASSIGNED,        /* M-^P */
  971.     F_UNASSIGNED,        /* M-^Q */
  972.     F_UNASSIGNED,        /* M-^R */
  973.     F_UNASSIGNED,        /* M-^S */
  974.     F_UNASSIGNED,        /* M-^T */
  975.     F_UNASSIGNED,        /* M-^U */
  976.     F_UNASSIGNED,        /* M-^V */
  977.     F_UNASSIGNED,        /* M-^W */
  978.     F_UNASSIGNED,        /* M-^X */
  979.     F_UNASSIGNED,        /* M-^Y */
  980.     F_UNASSIGNED,        /* M-^Z */
  981.     F_UNASSIGNED,        /* M-^[ */
  982.     F_UNASSIGNED,        /* M-^\ */
  983.     F_UNASSIGNED,        /* M-^] */
  984.     F_UNASSIGNED,        /* M-^^ */
  985.     F_UNASSIGNED,        /* M-^_ */
  986.     F_UNASSIGNED,        /* M-SPACE */
  987.     F_UNASSIGNED,        /* M-! */
  988.     F_UNASSIGNED,        /* M-" */
  989.     F_UNASSIGNED,        /* M-# */
  990.     F_UNASSIGNED,        /* M-$ */
  991.     F_UNASSIGNED,        /* M-% */
  992.     F_UNASSIGNED,        /* M-& */
  993.     F_UNASSIGNED,        /* M-' */
  994.     F_UNASSIGNED,        /* M-( */
  995.     F_UNASSIGNED,        /* M-) */
  996.     F_UNASSIGNED,        /* M-* */
  997.     F_UNASSIGNED,        /* M-+ */
  998.     F_UNASSIGNED,        /* M-, */
  999.     F_UNASSIGNED,        /* M-- */
  1000.     F_UNASSIGNED,        /* M-. */
  1001.     F_UNASSIGNED,        /* M-/ */
  1002.     F_UNASSIGNED,        /* M-0 */
  1003.     F_UNASSIGNED,        /* M-1 */
  1004.     F_UNASSIGNED,        /* M-2 */
  1005.     F_UNASSIGNED,        /* M-3 */
  1006.     F_UNASSIGNED,        /* M-4 */
  1007.     F_UNASSIGNED,        /* M-5 */
  1008.     F_UNASSIGNED,        /* M-6 */
  1009.     F_UNASSIGNED,        /* M-7 */
  1010.     F_UNASSIGNED,        /* M-8 */
  1011.     F_UNASSIGNED,        /* M-9 */
  1012.     F_UNASSIGNED,        /* M-: */
  1013.     F_UNASSIGNED,        /* M-; */
  1014.     F_UNASSIGNED,        /* M-< */
  1015.     F_UNASSIGNED,        /* M-= */
  1016.     F_UNASSIGNED,        /* M-> */
  1017.     F_HELPME,            /* M-? */
  1018.     F_UNASSIGNED,        /* M-@ */
  1019.     F_UNASSIGNED,        /* M-A */
  1020.     F_UNASSIGNED,        /* M-B */
  1021.     F_UNASSIGNED,        /* M-C */
  1022.     F_UNASSIGNED,        /* M-D */
  1023.     F_UNASSIGNED,        /* M-E */
  1024.     F_UNASSIGNED,        /* M-F */
  1025.     F_UNASSIGNED,        /* M-G */
  1026.     F_UNASSIGNED,        /* M-H */
  1027.     F_UNASSIGNED,        /* M-I */
  1028.     F_UNASSIGNED,        /* M-J */
  1029.     F_UNASSIGNED,        /* M-K */
  1030.     F_UNASSIGNED,        /* M-L */
  1031.     F_UNASSIGNED,        /* M-M */
  1032.     F_UNASSIGNED,        /* M-N */
  1033.     F_XKEY,            /* M-O *//* extended key esc PWP Mar 88 */
  1034.     F_UNASSIGNED,        /* M-P */
  1035.     F_UNASSIGNED,        /* M-Q */
  1036.     F_UNASSIGNED,        /* M-R */
  1037.     F_UNASSIGNED,        /* M-S */
  1038.     F_UNASSIGNED,        /* M-T */
  1039.     F_UNASSIGNED,        /* M-U */
  1040.     F_UNASSIGNED,        /* M-V */
  1041.     F_UNASSIGNED,        /* M-W */
  1042.     F_UNASSIGNED,        /* M-X */
  1043.     F_UNASSIGNED,        /* M-Y */
  1044.     F_UNASSIGNED,        /* M-Z */
  1045.     F_XKEY,            /* M-[ *//* extended key esc -mf Oct 87 */
  1046.     F_UNASSIGNED,        /* M-\ */
  1047.     F_UNASSIGNED,        /* M-] */
  1048.     F_UNASSIGNED,        /* M-^ */
  1049.     F_UNASSIGNED,        /* M-_ */
  1050.     F_UNASSIGNED,        /* M-` */
  1051.     F_UNASSIGNED,        /* M-a */
  1052.     F_UNASSIGNED,        /* M-b */
  1053.     F_UNASSIGNED,        /* M-c */
  1054.     F_UNASSIGNED,        /* M-d */
  1055.     F_UNASSIGNED,        /* M-e */
  1056.     F_UNASSIGNED,        /* M-f */
  1057.     F_UNASSIGNED,        /* M-g */
  1058.     F_UNASSIGNED,        /* M-h */
  1059.     F_UNASSIGNED,        /* M-i */
  1060.     F_UNASSIGNED,        /* M-j */
  1061.     F_UNASSIGNED,        /* M-k */
  1062.     F_UNASSIGNED,        /* M-l */
  1063.     F_UNASSIGNED,        /* M-m */
  1064.     F_UNASSIGNED,        /* M-n */
  1065.     F_UNASSIGNED,        /* M-o */
  1066.     F_UNASSIGNED,        /* M-p */
  1067.     F_UNASSIGNED,        /* M-q */
  1068.     F_UNASSIGNED,        /* M-r */
  1069.     F_UNASSIGNED,        /* M-s */
  1070.     F_UNASSIGNED,        /* M-t */
  1071.     F_UNASSIGNED,        /* M-u */
  1072.     F_UNASSIGNED,        /* M-v */
  1073.     F_UNASSIGNED,        /* M-w */
  1074.     F_UNASSIGNED,        /* M-x */
  1075.     F_UNASSIGNED,        /* M-y */
  1076.     F_UNASSIGNED,        /* M-z */
  1077.     F_UNASSIGNED,        /* M-{ */
  1078.     F_UNASSIGNED,        /* M-| */
  1079.     F_UNASSIGNED,        /* M-} */
  1080.     F_UNASSIGNED,        /* M-~ */
  1081.     F_UNASSIGNED        /* M-^? */
  1082. };
  1083.  
  1084.  
  1085. struct KeyFuncs FuncNames[] = {
  1086.     "backward-char", F_CHARBACK,
  1087.     "Move back a character",
  1088.     "backward-delete-char", F_DELPREV,
  1089.     "Delete the character behind cursor",
  1090.     "backward-delete-word", F_DELWORDPREV,
  1091.     "Cut from beginning of current word to cursor - saved in cut buffer",
  1092.     "backward-kill-line", F_KILLBEG,
  1093.     "Cut from beginning of line to cursor - save in cut buffer",
  1094.     "backward-word", F_WORDBACK,
  1095.     "Move to beginning of current word",
  1096.     "beginning-of-line", F_TOBEG,
  1097.     "Move to beginning of line",
  1098.     "capitalize-word", F_CASECAPITAL,
  1099.     "Capitalize the characters from cursor to end of current word",
  1100.     "change-case", V_CHGCASE,
  1101.     "Vi change case of character under cursor and advance one character",
  1102.     "change-till-end-of-line", V_CHGTOEND,    /* backwards compat. */
  1103.     "Vi change to end of line",
  1104.     "clear-screen", F_CLEARDISP,
  1105.     "Clear screen leaving current line on top",
  1106.     "complete-word", F_COMPLETE,
  1107.     "Complete current word",
  1108.     "copy-prev-word", F_COPYPREV,
  1109.     "Copy current word to cursor",
  1110.     "copy-region-as-kill", F_COPYREGION,
  1111.     "Copy area between mark and cursor to cut buffer",
  1112.     "delete-char", F_DELNEXT,
  1113.     "Delete character under cursor",
  1114.     "delete-char-or-list", F_LIST_DELNEXT,
  1115.     "Delete character under cursor or list completions if at end of line",
  1116.     "delete-word", F_DELWORDNEXT,
  1117.     "Cut from cursor to end of current word - save in cut buffer",
  1118.     "digit", F_DIGIT,
  1119.     "Adds to argument if started or enters digit",
  1120.     "digit-argument", F_ARGDIGIT,
  1121.     "Digit that starts argument",
  1122.     "down-history", F_DOWN_HIST,
  1123.     "Move to next history line",
  1124.     "downcase-word", F_CASELOWER,
  1125.     "Lowercase the characters from cursor to end of current word",
  1126.     "end-of-file", F_SEND_EOF,
  1127.     "Indicate end of file",
  1128.     "end-of-line", F_TOEND,
  1129.     "Move cursor to end of line",
  1130.     "exchange-point-and-mark", F_EXCHANGE_MARK,
  1131.     "Exchange the cursor and mark",
  1132.     "expand-glob", F_EXPAND_GLOB,
  1133.     "Expand file name wildcards",
  1134.     "expand-history", F_EXPAND_HISTORY,
  1135.     "Expand history escapes",
  1136.     "expand-line", F_EXPAND,
  1137.     "Expand the history escapes in a line",
  1138.     "expand-variables", F_EXPAND_VARS,
  1139.     "Expand variables",
  1140.     "forward-char", F_CHARFWD,
  1141.     "Move forward one character",
  1142.     "forward-word", F_WORDFWD,
  1143.     "Move forward to end of current word",
  1144.     "gosmacs-transpose-chars", F_GCHARSWITCH,
  1145.     "Exchange the two characters before the cursor",
  1146.     "history-search-backward", F_UP_SEARCH_HIST,
  1147.     "Search in history backwards for line beginning as current",
  1148.     "history-search-forward", F_DOWN_SEARCH_HIST,
  1149.     "Search in history forward for line beginning as current",
  1150.     "insert-last-word", F_LAST_ITEM,
  1151.     "Insert last item of previous command",
  1152.     "i-search-fwd", F_INC_FWD,
  1153.     "Incremental search forward",
  1154.     "i-search-back", F_INC_BACK,
  1155.     "Incremental search backwards",
  1156.     "keyboard-quit", F_STARTOVER,
  1157.     "Clear line",
  1158.     "kill-line", F_KILLEND,
  1159.     "Cut to end of line and save in cut buffer",
  1160.     "kill-region", F_KILLREGION,
  1161.     "Cut area between mark and cursor and save in cut buffer",
  1162.     "kill-whole-line", F_KILLALL,
  1163.     "Cut the entire line and save in cut buffer",
  1164.     "list-choices", F_LIST_CHOICES,
  1165.     "List choices for completion",
  1166.     "list-glob", F_LIST_GLOB,
  1167.     "List file name wildcard matches",
  1168.     "list-or-eof", F_LIST_EOF,
  1169.     "List choices for completion or indicate end of file if empty line",
  1170.     "load-average", F_LOAD_AVERAGE,
  1171.     "Display load average and current process status",
  1172.     "magic-space", F_MAGIC_SPACE,
  1173.     "Expand history escapes and insert a space",
  1174.     "newline", F_NEWLINE,
  1175.     "Execute command",
  1176.     "normalize-path", F_PATH_NORM,
  1177.     "Expand pathnames, eliminating leading .'s and ..'s",
  1178.     "overwrite-mode", F_INSOVR,
  1179.     "Switch from insert to overwrite mode or vice versa",
  1180.     "prefix-meta", F_METANEXT,
  1181.     "Add 8th bit to next character typed",
  1182.     "quoted-insert", F_QUOTE,
  1183.     "Add the next character typed to the line verbatim",
  1184.     "redisplay", F_REDISP,
  1185.     "Redisplay everything",
  1186.     "run-fg-editor", F_RUN_FG_EDITOR,
  1187.     "Restart stopped editor",
  1188.     "run-help", F_HELPME,
  1189.     "Look for help on current command",
  1190.     "self-insert-command", F_INSERT,
  1191.     "This character is added to the line",
  1192.     "sequence-lead-in", F_XKEY,
  1193.     "This character is the first in a character sequence",
  1194.     "set-mark-command", F_SET_MARK,
  1195.     "Set the mark at cursor",
  1196.     "spell-word", F_CORRECT,
  1197.     "Correct the spelling of current word",
  1198.     "spell-line", F_CORRECT_L,
  1199.     "Correct the spelling of entire line",
  1200.     "toggle-literal-history", F_TOGGLE_HIST,
  1201.     "Toggle between literal and lexical current history line",
  1202.     "transpose-chars", F_CHARSWITCH,
  1203.     "Exchange the character to the left of the cursor with the one under",
  1204.     "transpose-gosling", F_GCHARSWITCH,
  1205.     "Exchange the two characters before the cursor",
  1206.     /* EGS: make Convex Users happy */
  1207.     "tty-dsusp", F_TTY_DSUSP,
  1208.     "Tty delayed suspend character",
  1209.     "tty-flush-output", F_TTY_FLUSHO,
  1210.     "Tty flush output character",
  1211.     "tty-sigintr", F_TTY_INT,
  1212.     "Tty interrupt character",
  1213.     "tty-sigquit", F_TTY_QUIT,
  1214.     "Tty quit character",
  1215.     "tty-sigtsusp", F_TTY_TSUSP,
  1216.     "Tty suspend character",
  1217.     "tty-start-output", F_TTY_STARTO,
  1218.     "Tty allow output character",
  1219.     "tty-stop-output", F_TTY_STOPO,
  1220.     "Tty disallow output character",
  1221.     "undefined-key", F_UNASSIGNED,
  1222.     "Indicates unbound character",
  1223.     "universal-argument", F_ARGFOUR,
  1224.     "Emacs universal argument (argument times 4)",
  1225.     "up-history", F_UP_HIST,
  1226.     "Move to previous history line",
  1227.     "upcase-word", F_CASEUPPER,
  1228.     "Uppercase the characters from cursor to end of current word",
  1229.     "vi-beginning-of-next-word", V_WORDBEGNEXT,
  1230.     "Vi goto the beginning of next word",
  1231.     "vi-add", V_ADD,
  1232.     "Vi enter insert mode after the cursor",
  1233.     "vi-add-at-eol", V_ADDEND,
  1234.     "Vi enter insert mode at end of line",
  1235.     "vi-chg-case", V_CHGCASE,
  1236.     "Vi change case of character under cursor and advance one character",
  1237.     "vi-chg-meta", V_CHGMETA,
  1238.     "Vi change prefix command",
  1239.     "vi-chg-to-eol", V_CHGTOEND,
  1240.     "Vi change to end of line",
  1241.     "vi-cmd-mode", V_CMD_MODE,
  1242.     "Enter vi command mode (use alternative key bindings)",
  1243.     "vi-cmd-mode-complete", V_CM_COMPLETE,
  1244.     "Vi command mode complete current word",
  1245.     "vi-delprev", V_DELPREV,
  1246.     "Vi move to previous character (backspace)",
  1247.     "vi-delmeta", V_DELMETA,
  1248.     "Vi delete prefix command",
  1249.     "vi-endword", V_ENDWORD,
  1250.     "Vi move to the end of the current space delimited word",
  1251.     "vi-eword", V_EWORD,
  1252.     "Vi move to the end of the current word",
  1253.     "vi-char-back", V_CHAR_BACK,
  1254.     "Vi move to the character specified backwards",
  1255.     "vi-char-fwd", V_CHAR_FWD,
  1256.     "Vi move to the character specified forward",
  1257.     "vi-charto-back", V_CHARTO_BACK,
  1258.     "Vi move up to the character specified backwards",
  1259.     "vi-charto-fwd", V_CHARTO_FWD,
  1260.     "Vi move up to the character specified forward",
  1261.     "vi-insert", V_INSERT,
  1262.     "Enter vi insert mode",
  1263.     "vi-insert-at-bol", V_INSBEG,
  1264.     "Enter vi insert mode at beginning of line",
  1265.     "vi-repeat-char-fwd", V_RCHAR_FWD,
  1266.     "Vi repeat current character search in the same search direction",
  1267.     "vi-repeat-char-back", V_RCHAR_BACK,
  1268.     "Vi repeat current character search in the opposite search direction",
  1269.     "vi-repeat-search-fwd", V_RSRCH_FWD,
  1270.     "Vi repeat current search in the same search direction",
  1271.     "vi-repeat-search-back", V_RSRCH_BACK,
  1272.     "Vi repeat current search in the opposite search direction",
  1273.     "vi-replace-char", V_REPLONE,
  1274.     "Vi replace character under the cursor with the next character typed",
  1275.     "vi-replace-mode", V_REPLMODE,
  1276.     "Vi replace mode",
  1277.     "vi-search-back", V_USH_META,
  1278.     "Vi search history backwards",
  1279.     "vi-search-fwd", V_DSH_META,
  1280.     "Vi search history forward",
  1281.     "vi-substitute-char", V_SUBSTCHAR,
  1282.     "Vi replace character under the cursor and enter insert mode",
  1283.     "vi-substitute-line", V_SUBSTLINE,
  1284.     "Vi replace entire line",
  1285.     "vi-word-back", V_WORDBACK,
  1286.     "Vi move to the previous word",
  1287.     "vi-word-fwd", V_WORDFWD,
  1288.     "Vi move to the next word",
  1289.     "vi-undo", V_UNDO,
  1290.     "Vi undo last change",
  1291.     "vi-zero", V_ZERO,
  1292.     "Vi goto the beginning of line",
  1293.     "which-command", F_WHICH,
  1294.     "Perform which of current command",
  1295.     "yank", F_YANK_KILL,
  1296.     "Paste cut buffer at cursor position",
  1297.     0, 0
  1298. };
  1299.  
  1300. #ifdef DEBUG_EDIT
  1301. void
  1302. CheckMaps()
  1303. {                /* check the size of the key maps */
  1304.     int     c1 = (256 * sizeof(KEYCMD));
  1305.  
  1306.     if ((sizeof(CcKeyMap)) != c1)
  1307.     xprintf("CcKeyMap should be 256 entries, but is %d.\r\n",
  1308.         (sizeof(CcKeyMap) / sizeof(KEYCMD)));
  1309.  
  1310.     if ((sizeof(CcAltMap)) != c1)
  1311.     xprintf("CcAltMap should be 256 entries, but is %d.\r\n",
  1312.         (sizeof(CcAltMap) / sizeof(KEYCMD)));
  1313.  
  1314.     if ((sizeof(CcEmacsMap)) != c1)
  1315.     xprintf("CcEmacsMap should be 256 entries, but is %d.\r\n",
  1316.         (sizeof(CcEmacsMap) / sizeof(KEYCMD)));
  1317.  
  1318.     if ((sizeof(CcViMap)) != c1)
  1319.     xprintf("CcViMap should be 256 entries, but is %d.\r\n",
  1320.         (sizeof(CcViMap) / sizeof(KEYCMD)));
  1321.  
  1322.     if ((sizeof(CcViCmdMap)) != c1)
  1323.     xprintf("CcViCmdMap should be 256 entries, but is %d.\r\n",
  1324.         (sizeof(CcViCmdMap) / sizeof(KEYCMD)));
  1325. }
  1326.  
  1327. #endif
  1328.  
  1329. bool    MapsAreInited = 0;
  1330. bool    NLSMapsAreInited = 0;
  1331. bool    NoNLSRebind;
  1332.  
  1333. void
  1334. ed_InitNLSMaps()
  1335. {
  1336.     register int i;
  1337.  
  1338.     if (AsciiOnly)
  1339.     return;
  1340.     if (NoNLSRebind)
  1341.     return;
  1342.     for (i = 0200; i <= 0377; i++) {
  1343.     if (Isprint(i)) {
  1344.         CcKeyMap[i] = F_INSERT;
  1345.     }
  1346.     }
  1347.     NLSMapsAreInited = 1;
  1348. }
  1349.  
  1350. static void
  1351. ed_InitMetaBindings()
  1352. {
  1353.     Char    buf[3];
  1354.     register int i;
  1355.     KEYCMD *map;
  1356.  
  1357.     map = CcKeyMap;
  1358.     for (i = 0; i <= 0377 && CcKeyMap[i] != F_METANEXT; i++);
  1359.     if (i > 0377) {
  1360.     for (i = 0; i <= 0377 && CcAltMap[i] != F_METANEXT; i++);
  1361.     if (i > 0377) {
  1362.         i = 033;
  1363.         if (VImode)
  1364.         map = CcAltMap;
  1365.     }
  1366.     else {
  1367.         map = CcAltMap;
  1368.     }
  1369.     }
  1370.     buf[0] = i;
  1371.     buf[2] = 0;
  1372.     for (i = 0200; i <= 0377; i++) {
  1373.     if (map[i] != F_INSERT && map[i] != F_UNASSIGNED && map[i] != F_XKEY) {
  1374.         buf[1] = i & ASCII;
  1375.         AddXkey(buf, XmapCmd((int) map[i]), XK_CMD);
  1376.     }
  1377.     }
  1378.     map[buf[0]] = F_XKEY;
  1379. }
  1380.  
  1381. void
  1382. ed_InitVIMaps()
  1383. {
  1384.     register int i;
  1385.  
  1386.     VImode = 1;
  1387.     (void) ResetXmap(VImode);
  1388.     for (i = 0; i < 256; i++) {
  1389.     CcKeyMap[i] = CcViMap[i];
  1390.     CcAltMap[i] = CcViCmdMap[i];
  1391.     }
  1392.     ed_InitMetaBindings();
  1393.     (void) ed_InitNLSMaps();
  1394.     BindArrowKeys();
  1395. }
  1396.  
  1397. void
  1398. ed_InitEmacsMaps()
  1399. {
  1400.     register int i;
  1401.     Char    buf[3];
  1402.  
  1403.     VImode = 0;
  1404.     (void) ResetXmap(VImode);
  1405.     for (i = 0; i < 256; i++) {
  1406.     CcKeyMap[i] = CcEmacsMap[i];
  1407.     CcAltMap[i] = F_UNASSIGNED;
  1408.     }
  1409.     ed_InitMetaBindings();
  1410.     (void) ed_InitNLSMaps();
  1411.     buf[0] = 030;
  1412.     buf[2] = 0;
  1413.     buf[1] = 030;
  1414.     AddXkey(buf, XmapCmd(F_EXCHANGE_MARK), XK_CMD);
  1415.     buf[1] = '*';
  1416.     AddXkey(buf, XmapCmd(F_EXPAND_GLOB),   XK_CMD);
  1417.     buf[1] = '$';
  1418.     AddXkey(buf, XmapCmd(F_EXPAND_VARS),   XK_CMD);
  1419.     buf[1] = 'G';
  1420.     AddXkey(buf, XmapCmd(F_LIST_GLOB),     XK_CMD);
  1421.     buf[1] = 'g';
  1422.     AddXkey(buf, XmapCmd(F_LIST_GLOB),     XK_CMD);
  1423.     buf[1] = 'n';
  1424.     AddXkey(buf, XmapCmd(F_PATH_NORM),     XK_CMD);
  1425.     buf[1] = 'N';
  1426.     AddXkey(buf, XmapCmd(F_PATH_NORM),     XK_CMD);
  1427.     BindArrowKeys();
  1428. }
  1429.  
  1430. void
  1431. ed_InitMaps()
  1432. {
  1433.     if (MapsAreInited)
  1434.     return;
  1435. #ifdef VIDEFAULT
  1436.     ed_InitVIMaps();
  1437. #else
  1438.     ed_InitEmacsMaps();
  1439. #endif
  1440.  
  1441.     MapsAreInited = 1;
  1442. }
  1443.