diff options
Diffstat (limited to 'contrib/tcsh/ed.defns.c')
-rw-r--r-- | contrib/tcsh/ed.defns.c | 1984 |
1 files changed, 1984 insertions, 0 deletions
diff --git a/contrib/tcsh/ed.defns.c b/contrib/tcsh/ed.defns.c new file mode 100644 index 0000000..5124bde --- /dev/null +++ b/contrib/tcsh/ed.defns.c @@ -0,0 +1,1984 @@ +/* $Header: /p/tcsh/cvsroot/tcsh/ed.defns.c,v 3.46 2006/03/02 18:46:44 christos Exp $ */ +/* + * ed.defns.c: Editor function definitions and initialization + */ +/*- + * Copyright (c) 1980, 1991 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include "sh.h" + +RCSID("$tcsh: ed.defns.c,v 3.46 2006/03/02 18:46:44 christos Exp $") + +#include "ed.h" + +static void ed_InitMetaBindings (void); + +PFCmd CcFuncTbl[] = { /* table of available commands */ + e_unassigned, +/* no #define here -- this is a dummy to detect initing of the key map */ + e_unassigned, +#define F_UNASSIGNED 1 + e_insert, +#define F_INSERT 2 + e_newline, +#define F_NEWLINE 3 + e_delprev, +#define F_DELPREV 4 + e_delnext, +#define F_DELNEXT 5 + e_toend, +#define F_TOEND 6 + e_tobeg, +#define F_TOBEG 7 + e_charback, +#define F_CHARBACK 8 + e_charfwd, +#define F_CHARFWD 9 + e_quote, +#define F_QUOTE 10 + e_startover, +#define F_STARTOVER 11 + e_redisp, +#define F_REDISP 12 + e_tty_int, +#define F_TTY_INT 13 + e_wordback, +#define F_WORDBACK 14 + e_wordfwd, +#define F_WORDFWD 15 + e_cleardisp, +#define F_CLEARDISP 16 + e_complete, +#define F_COMPLETE 17 + e_correct, +#define F_CORRECT 18 + e_up_hist, +#define F_UP_HIST 19 + e_down_hist, +#define F_DOWN_HIST 20 + e_up_search_hist, +#define F_UP_SEARCH_HIST 21 + e_down_search_hist, +#define F_DOWN_SEARCH_HIST 22 + e_helpme, +#define F_HELPME 23 + e_list_choices, +#define F_LIST_CHOICES 24 + e_delwordprev, +#define F_DELWORDPREV 25 + e_delwordnext, +#define F_DELWORDNEXT 26 + e_digit, +#define F_DIGIT 27 + e_killend, +#define F_KILLEND 28 + e_killbeg, +#define F_KILLBEG 29 + e_metanext, +#define F_METANEXT 30 + e_send_eof, +#define F_SEND_EOF 31 + e_charswitch, +#define F_CHARSWITCH 32 + e_which, +#define F_WHICH 33 + e_yank_kill, +#define F_YANK_KILL 34 + e_tty_dsusp, +#define F_TTY_DSUSP 35 + e_tty_flusho, +#define F_TTY_FLUSHO 36 + e_tty_quit, +#define F_TTY_QUIT 37 + e_tty_tsusp, +#define F_TTY_TSUSP 38 + e_tty_stopo, +#define F_TTY_STOPO 39 + e_tty_starto, +#define F_TTY_STARTO 40 + e_argfour, +#define F_ARGFOUR 41 + e_set_mark, +#define F_SET_MARK 42 + e_exchange_mark, +#define F_EXCHANGE_MARK 43 + e_last_item, +#define F_LAST_ITEM 44 + e_delnext_list_eof, +#define F_DELNEXT_LIST_EOF 45 + v_cmd_mode, +#define V_CMD_MODE 46 + v_insert, +#define V_INSERT 47 + e_argdigit, +#define F_ARGDIGIT 48 + e_killregion, +#define F_KILLREGION 49 + e_copyregion, +#define F_COPYREGION 50 + e_gcharswitch, +#define F_GCHARSWITCH 51 + e_run_fg_editor, +#define F_RUN_FG_EDITOR 52 + e_unassigned, /* place holder for sequence lead in character */ +#define F_XKEY 53 + e_uppercase, +#define F_CASEUPPER 54 + e_lowercase, +#define F_CASELOWER 55 + e_capitolcase, +#define F_CASECAPITAL 56 + v_zero, +#define V_ZERO 57 + v_add, +#define V_ADD 58 + v_addend, +#define V_ADDEND 59 + v_wordbegnext, +#define V_WORDBEGNEXT 60 + e_killall, +#define F_KILLALL 61 + e_unassigned, +/* F_EXTENDNEXT removed */ + v_insbeg, +#define V_INSBEG 63 + v_replmode, +#define V_REPLMODE 64 + v_replone, +#define V_REPLONE 65 + v_substline, +#define V_SUBSTLINE 66 + v_substchar, +#define V_SUBSTCHAR 67 + v_chgtoend, +#define V_CHGTOEND 68 + e_list_eof, +#define F_LIST_EOF 69 + e_list_glob, +#define F_LIST_GLOB 70 + e_expand_history, +#define F_EXPAND_HISTORY 71 + e_magic_space, +#define F_MAGIC_SPACE 72 + e_insovr, +#define F_INSOVR 73 + v_cm_complete, +#define V_CM_COMPLETE 74 + e_copyprev, +#define F_COPYPREV 75 + e_correctl, +#define F_CORRECT_L 76 + e_expand_glob, +#define F_EXPAND_GLOB 77 + e_expand_vars, +#define F_EXPAND_VARS 78 + e_toggle_hist, +#define F_TOGGLE_HIST 79 + v_change_case, +#define V_CHGCASE 80 + e_expand, +#define F_EXPAND 81 + e_load_average, +#define F_LOAD_AVERAGE 82 + v_delprev, +#define V_DELPREV 83 + v_delmeta, +#define V_DELMETA 84 + v_wordfwd, +#define V_WORDFWD 85 + v_wordback, +#define V_WORDBACK 86 + v_endword, +#define V_ENDWORD 87 + v_eword, +#define V_EWORD 88 + v_undo, +#define V_UNDO 89 + v_ush_meta, +#define V_USH_META 90 + v_dsh_meta, +#define V_DSH_META 91 + v_rsrch_fwd, +#define V_RSRCH_FWD 92 + v_rsrch_back, +#define V_RSRCH_BACK 93 + v_char_fwd, +#define V_CHAR_FWD 94 + v_char_back, +#define V_CHAR_BACK 95 + v_chgmeta, +#define V_CHGMETA 96 + e_inc_fwd, +#define F_INC_FWD 97 + e_inc_back, +#define F_INC_BACK 98 + v_rchar_fwd, +#define V_RCHAR_FWD 99 + v_rchar_back, +#define V_RCHAR_BACK 100 + v_charto_fwd, +#define V_CHARTO_FWD 101 + v_charto_back, +#define V_CHARTO_BACK 102 + e_normalize_path, +#define F_PATH_NORM 103 + e_delnext_eof, /* added by mtk@ari.ncl.omron.co.jp (920818) */ +#define F_DELNEXT_EOF 104 + e_stuff_char, +#define F_STUFF_CHAR 105 + e_complete_all, +#define F_COMPLETE_ALL 106 + e_list_all, +#define F_LIST_ALL 107 + e_complete_fwd, +#define F_COMPLETE_FWD 108 + e_complete_back, +#define F_COMPLETE_BACK 109 + e_delnext_list, +#define F_DELNEXT_LIST 110 + e_normalize_command, +#define F_COMMAND_NORM 111 + e_dabbrev_expand, +#define F_DABBREV_EXPAND 112 + e_copy_to_clipboard, +#define F_COPY_CLIP 113 + e_paste_from_clipboard, +#define F_PASTE_CLIP 114 + e_dosify_next, +#define F_DOSIFY_NEXT 115 + e_dosify_prev, +#define F_DOSIFY_PREV 116 + e_page_up, +#define F_PAGE_UP 117 + e_page_down, +#define F_PAGE_DOWN 118 + e_yank_pop, +#define F_YANK_POP 119 + e_newline_hold, +#define F_NEWLINE_HOLD 120 + e_newline_down_hist, +#define F_NEWLINE_DOWN_HIST 121 + 0 /* DUMMY VALUE */ +#define F_NUM_FNS 122 + +}; + +KEYCMD NumFuns = F_NUM_FNS; + +KEYCMD CcKeyMap[NT_NUM_KEYS]; /* the real key map */ +KEYCMD CcAltMap[NT_NUM_KEYS]; /* the alternative key map */ +#define F_NUM_FUNCNAMES (F_NUM_FNS + 2) +struct KeyFuncs FuncNames[F_NUM_FUNCNAMES]; + +#ifdef WINNT_NATIVE +extern KEYCMD CcEmacsMap[]; +extern KEYCMD CcViMap[]; +extern KEYCMD CcViCmdMap[]; +#else /* !WINNT_NATIVE*/ +KEYCMD CcEmacsMap[] = { +/* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD) + bytes long */ + + F_SET_MARK, /* ^@ */ + F_TOBEG, /* ^A */ + F_CHARBACK, /* ^B */ + F_TTY_INT, /* ^C */ + F_DELNEXT_LIST_EOF, /* ^D */ + F_TOEND, /* ^E */ + F_CHARFWD, /* ^F */ + F_UNASSIGNED, /* ^G */ + F_DELPREV, /* ^H */ + F_COMPLETE, /* ^I */ + F_NEWLINE, /* ^J */ + F_KILLEND, /* ^K */ + F_CLEARDISP, /* ^L */ + F_NEWLINE, /* ^M */ + F_DOWN_HIST, /* ^N */ + F_TTY_FLUSHO, /* ^O */ + F_UP_HIST, /* ^P */ + F_TTY_STARTO, /* ^Q */ + F_REDISP, /* ^R */ + F_TTY_STOPO, /* ^S */ + F_CHARSWITCH, /* ^T */ + F_KILLALL, /* ^U */ + F_QUOTE, /* ^V */ + F_KILLREGION, /* ^W */ + F_XKEY, /* ^X */ + F_YANK_KILL, /* ^Y */ + F_TTY_TSUSP, /* ^Z */ + F_METANEXT, /* ^[ */ + F_TTY_QUIT, /* ^\ */ + F_TTY_DSUSP, /* ^] */ + F_UNASSIGNED, /* ^^ */ + F_UNASSIGNED, /* ^_ */ + F_INSERT, /* SPACE */ + F_INSERT, /* ! */ + F_INSERT, /* " */ + F_INSERT, /* # */ + F_INSERT, /* $ */ + F_INSERT, /* % */ + F_INSERT, /* & */ + F_INSERT, /* ' */ + F_INSERT, /* ( */ + F_INSERT, /* ) */ + F_INSERT, /* * */ + F_INSERT, /* + */ + F_INSERT, /* , */ + F_INSERT, /* - */ + F_INSERT, /* . */ + F_INSERT, /* / */ + F_DIGIT, /* 0 */ + F_DIGIT, /* 1 */ + F_DIGIT, /* 2 */ + F_DIGIT, /* 3 */ + F_DIGIT, /* 4 */ + F_DIGIT, /* 5 */ + F_DIGIT, /* 6 */ + F_DIGIT, /* 7 */ + F_DIGIT, /* 8 */ + F_DIGIT, /* 9 */ + F_INSERT, /* : */ + F_INSERT, /* ; */ + F_INSERT, /* < */ + F_INSERT, /* = */ + F_INSERT, /* > */ + F_INSERT, /* ? */ + F_INSERT, /* @ */ + F_INSERT, /* A */ + F_INSERT, /* B */ + F_INSERT, /* C */ + F_INSERT, /* D */ + F_INSERT, /* E */ + F_INSERT, /* F */ + F_INSERT, /* G */ + F_INSERT, /* H */ + F_INSERT, /* I */ + F_INSERT, /* J */ + F_INSERT, /* K */ + F_INSERT, /* L */ + F_INSERT, /* M */ + F_INSERT, /* N */ + F_INSERT, /* O */ + F_INSERT, /* P */ + F_INSERT, /* Q */ + F_INSERT, /* R */ + F_INSERT, /* S */ + F_INSERT, /* T */ + F_INSERT, /* U */ + F_INSERT, /* V */ + F_INSERT, /* W */ + F_INSERT, /* X */ + F_INSERT, /* Y */ + F_INSERT, /* Z */ + F_INSERT, /* [ */ + F_INSERT, /* \ */ + F_INSERT, /* ] */ + F_INSERT, /* ^ */ + F_INSERT, /* _ */ + F_INSERT, /* ` */ + F_INSERT, /* a */ + F_INSERT, /* b */ + F_INSERT, /* c */ + F_INSERT, /* d */ + F_INSERT, /* e */ + F_INSERT, /* f */ + F_INSERT, /* g */ + F_INSERT, /* h */ + F_INSERT, /* i */ + F_INSERT, /* j */ + F_INSERT, /* k */ + F_INSERT, /* l */ + F_INSERT, /* m */ + F_INSERT, /* n */ + F_INSERT, /* o */ + F_INSERT, /* p */ + F_INSERT, /* q */ + F_INSERT, /* r */ + F_INSERT, /* s */ + F_INSERT, /* t */ + F_INSERT, /* u */ + F_INSERT, /* v */ + F_INSERT, /* w */ + F_INSERT, /* x */ + F_INSERT, /* y */ + F_INSERT, /* z */ + F_INSERT, /* { */ + F_INSERT, /* | */ + F_INSERT, /* } */ + F_INSERT, /* ~ */ + F_DELPREV, /* ^? */ + F_UNASSIGNED, /* M-^@ */ + F_UNASSIGNED, /* M-^A */ + F_UNASSIGNED, /* M-^B */ + F_UNASSIGNED, /* M-^C */ + F_LIST_CHOICES, /* M-^D */ + F_UNASSIGNED, /* M-^E */ + F_UNASSIGNED, /* M-^F */ + F_UNASSIGNED, /* M-^G */ + F_DELWORDPREV, /* M-^H */ + F_COMPLETE, /* M-^I */ + F_UNASSIGNED, /* M-^J */ + F_UNASSIGNED, /* M-^K */ + F_CLEARDISP, /* M-^L */ + F_UNASSIGNED, /* M-^M */ + F_UNASSIGNED, /* M-^N */ + F_UNASSIGNED, /* M-^O */ + F_UNASSIGNED, /* M-^P */ + F_UNASSIGNED, /* M-^Q */ + F_UNASSIGNED, /* M-^R */ + F_UNASSIGNED, /* M-^S */ + F_UNASSIGNED, /* M-^T */ + F_UNASSIGNED, /* M-^U */ + F_UNASSIGNED, /* M-^V */ + F_UNASSIGNED, /* M-^W */ + F_UNASSIGNED, /* M-^X */ + F_UNASSIGNED, /* M-^Y */ + F_RUN_FG_EDITOR, /* M-^Z */ + F_COMPLETE, /* M-^[ */ + F_UNASSIGNED, /* M-^\ */ + F_UNASSIGNED, /* M-^] */ + F_UNASSIGNED, /* M-^^ */ + F_COPYPREV, /* M-^_ */ + F_EXPAND_HISTORY, /* M-SPACE */ + F_EXPAND_HISTORY, /* M-! */ + F_UNASSIGNED, /* M-" */ + F_UNASSIGNED, /* M-# */ + F_CORRECT_L, /* M-$ */ + F_UNASSIGNED, /* M-% */ + F_UNASSIGNED, /* M-& */ + F_UNASSIGNED, /* M-' */ + F_UNASSIGNED, /* M-( */ + F_UNASSIGNED, /* M-) */ + F_UNASSIGNED, /* M-* */ + F_UNASSIGNED, /* M-+ */ + F_UNASSIGNED, /* M-, */ + F_UNASSIGNED, /* M-- */ + F_UNASSIGNED, /* M-. */ + F_DABBREV_EXPAND, /* M-/ */ + F_ARGDIGIT, /* M-0 */ + F_ARGDIGIT, /* M-1 */ + F_ARGDIGIT, /* M-2 */ + F_ARGDIGIT, /* M-3 */ + F_ARGDIGIT, /* M-4 */ + F_ARGDIGIT, /* M-5 */ + F_ARGDIGIT, /* M-6 */ + F_ARGDIGIT, /* M-7 */ + F_ARGDIGIT, /* M-8 */ + F_ARGDIGIT, /* M-9 */ + F_UNASSIGNED, /* M-: */ + F_UNASSIGNED, /* M-; */ + F_UNASSIGNED, /* M-< */ + F_UNASSIGNED, /* M-= */ + F_UNASSIGNED, /* M-> */ + F_WHICH, /* M-? */ + F_UNASSIGNED, /* M-@ */ + F_NEWLINE_HOLD, /* M-A */ + F_WORDBACK, /* M-B */ + F_CASECAPITAL, /* M-C */ + F_DELWORDNEXT, /* M-D */ + F_UNASSIGNED, /* M-E */ + F_WORDFWD, /* M-F */ + F_UNASSIGNED, /* M-G */ + F_HELPME, /* M-H */ + F_UNASSIGNED, /* M-I */ + F_UNASSIGNED, /* M-J */ + F_UNASSIGNED, /* M-K */ + F_CASELOWER, /* M-L */ + F_UNASSIGNED, /* M-M */ + F_DOWN_SEARCH_HIST, /* M-N */ + F_XKEY, /* M-O *//* extended key esc PWP Mar 88 */ + F_UP_SEARCH_HIST, /* M-P */ + F_UNASSIGNED, /* M-Q */ + F_TOGGLE_HIST, /* M-R */ + F_CORRECT, /* M-S */ + F_UNASSIGNED, /* M-T */ + F_CASEUPPER, /* M-U */ + F_UNASSIGNED, /* M-V */ + F_COPYREGION, /* M-W */ + F_UNASSIGNED, /* M-X */ + F_YANK_POP, /* M-Y */ + F_UNASSIGNED, /* M-Z */ + F_XKEY, /* M-[ *//* extended key esc -mf Oct 87 */ + F_UNASSIGNED, /* M-\ */ + F_UNASSIGNED, /* M-] */ + F_UNASSIGNED, /* M-^ */ + F_LAST_ITEM, /* M-_ */ + F_UNASSIGNED, /* M-` */ + F_NEWLINE_HOLD, /* M-a */ + F_WORDBACK, /* M-b */ + F_CASECAPITAL, /* M-c */ + F_DELWORDNEXT, /* M-d */ + F_UNASSIGNED, /* M-e */ + F_WORDFWD, /* M-f */ + F_UNASSIGNED, /* M-g */ + F_HELPME, /* M-h */ + F_UNASSIGNED, /* M-i */ + F_UNASSIGNED, /* M-j */ + F_UNASSIGNED, /* M-k */ + F_CASELOWER, /* M-l */ + F_UNASSIGNED, /* M-m */ + F_DOWN_SEARCH_HIST, /* M-n */ + F_UNASSIGNED, /* M-o */ + F_UP_SEARCH_HIST, /* M-p */ + F_UNASSIGNED, /* M-q */ + F_TOGGLE_HIST, /* M-r */ + F_CORRECT, /* M-s */ + F_UNASSIGNED, /* M-t */ + F_CASEUPPER, /* M-u */ + F_UNASSIGNED, /* M-v */ + F_COPYREGION, /* M-w */ + F_UNASSIGNED, /* M-x */ + F_YANK_POP, /* M-y */ + F_UNASSIGNED, /* M-z */ + F_UNASSIGNED, /* M-{ */ + F_UNASSIGNED, /* M-| */ + F_UNASSIGNED, /* M-} */ + F_UNASSIGNED, /* M-~ */ + F_DELWORDPREV /* M-^? */ +}; + +/* + * keymap table for vi. Each index into above tbl; should be + * 256 entries long. Vi mode uses a sticky-extend to do command mode: + * insert mode characters are in the normal keymap, and command mode + * in the extended keymap. + */ +static KEYCMD CcViMap[] = { +#ifdef KSHVI + F_UNASSIGNED, /* ^@ */ + F_INSERT, /* ^A */ + F_INSERT, /* ^B */ + F_INSERT, /* ^C */ + F_INSERT, /* ^D */ + F_INSERT, /* ^E */ + F_INSERT, /* ^F */ + F_INSERT, /* ^G */ + V_DELPREV, /* ^H */ /* BackSpace key */ + F_COMPLETE, /* ^I */ /* Tab Key */ + F_NEWLINE, /* ^J */ + F_INSERT, /* ^K */ + F_INSERT, /* ^L */ + F_NEWLINE, /* ^M */ + F_INSERT, /* ^N */ + F_INSERT, /* ^O */ + F_INSERT, /* ^P */ + F_TTY_STARTO, /* ^Q */ + F_INSERT, /* ^R */ + F_INSERT, /* ^S */ + F_INSERT, /* ^T */ + F_INSERT, /* ^U */ + F_QUOTE, /* ^V */ + F_DELWORDPREV, /* ^W */ /* Only until start edit pos */ + F_INSERT, /* ^X */ + F_INSERT, /* ^Y */ + F_INSERT, /* ^Z */ + V_CMD_MODE, /* ^[ */ /* [ Esc ] key */ + F_TTY_QUIT, /* ^\ */ + F_INSERT, /* ^] */ + F_INSERT, /* ^^ */ + F_INSERT, /* ^_ */ +#else /* !KSHVI */ + F_UNASSIGNED, /* ^@ */ /* NOTE: These mapping do NOT */ + F_TOBEG, /* ^A */ /* Correspond well to the KSH */ + F_CHARBACK, /* ^B */ /* VI editting assignments */ + F_TTY_INT, /* ^C */ /* On the other hand they are */ + F_LIST_EOF, /* ^D */ /* convenient any many people */ + F_TOEND, /* ^E */ /* have gotten used to them */ + F_CHARFWD, /* ^F */ + F_LIST_GLOB, /* ^G */ + F_DELPREV, /* ^H */ /* BackSpace key */ + F_COMPLETE, /* ^I */ /* Tab Key */ + F_NEWLINE, /* ^J */ + F_KILLEND, /* ^K */ + F_CLEARDISP, /* ^L */ + F_NEWLINE, /* ^M */ + F_DOWN_HIST, /* ^N */ + F_TTY_FLUSHO, /* ^O */ + F_UP_HIST, /* ^P */ + F_TTY_STARTO, /* ^Q */ + F_REDISP, /* ^R */ + F_TTY_STOPO, /* ^S */ + F_CHARSWITCH, /* ^T */ + F_KILLBEG, /* ^U */ + F_QUOTE, /* ^V */ + F_DELWORDPREV, /* ^W */ + F_EXPAND, /* ^X */ + F_TTY_DSUSP, /* ^Y */ + F_TTY_TSUSP, /* ^Z */ + V_CMD_MODE, /* ^[ */ + F_TTY_QUIT, /* ^\ */ + F_UNASSIGNED, /* ^] */ + F_UNASSIGNED, /* ^^ */ + F_UNASSIGNED, /* ^_ */ +#endif /* KSHVI */ + F_INSERT, /* SPACE */ + F_INSERT, /* ! */ + F_INSERT, /* " */ + F_INSERT, /* # */ + F_INSERT, /* $ */ + F_INSERT, /* % */ + F_INSERT, /* & */ + F_INSERT, /* ' */ + F_INSERT, /* ( */ + F_INSERT, /* ) */ + F_INSERT, /* * */ + F_INSERT, /* + */ + F_INSERT, /* , */ + F_INSERT, /* - */ + F_INSERT, /* . */ + F_INSERT, /* / */ + F_INSERT, /* 0 */ + F_INSERT, /* 1 */ + F_INSERT, /* 2 */ + F_INSERT, /* 3 */ + F_INSERT, /* 4 */ + F_INSERT, /* 5 */ + F_INSERT, /* 6 */ + F_INSERT, /* 7 */ + F_INSERT, /* 8 */ + F_INSERT, /* 9 */ + F_INSERT, /* : */ + F_INSERT, /* ; */ + F_INSERT, /* < */ + F_INSERT, /* = */ + F_INSERT, /* > */ + F_INSERT, /* ? */ + F_INSERT, /* @ */ + F_INSERT, /* A */ + F_INSERT, /* B */ + F_INSERT, /* C */ + F_INSERT, /* D */ + F_INSERT, /* E */ + F_INSERT, /* F */ + F_INSERT, /* G */ + F_INSERT, /* H */ + F_INSERT, /* I */ + F_INSERT, /* J */ + F_INSERT, /* K */ + F_INSERT, /* L */ + F_INSERT, /* M */ + F_INSERT, /* N */ + F_INSERT, /* O */ + F_INSERT, /* P */ + F_INSERT, /* Q */ + F_INSERT, /* R */ + F_INSERT, /* S */ + F_INSERT, /* T */ + F_INSERT, /* U */ + F_INSERT, /* V */ + F_INSERT, /* W */ + F_INSERT, /* X */ + F_INSERT, /* Y */ + F_INSERT, /* Z */ + F_INSERT, /* [ */ + F_INSERT, /* \ */ + F_INSERT, /* ] */ + F_INSERT, /* ^ */ + F_INSERT, /* _ */ + F_INSERT, /* ` */ + F_INSERT, /* a */ + F_INSERT, /* b */ + F_INSERT, /* c */ + F_INSERT, /* d */ + F_INSERT, /* e */ + F_INSERT, /* f */ + F_INSERT, /* g */ + F_INSERT, /* h */ + F_INSERT, /* i */ + F_INSERT, /* j */ + F_INSERT, /* k */ + F_INSERT, /* l */ + F_INSERT, /* m */ + F_INSERT, /* n */ + F_INSERT, /* o */ + F_INSERT, /* p */ + F_INSERT, /* q */ + F_INSERT, /* r */ + F_INSERT, /* s */ + F_INSERT, /* t */ + F_INSERT, /* u */ + F_INSERT, /* v */ + F_INSERT, /* w */ + F_INSERT, /* x */ + F_INSERT, /* y */ + F_INSERT, /* z */ + F_INSERT, /* { */ + F_INSERT, /* | */ + F_INSERT, /* } */ + F_INSERT, /* ~ */ + F_DELPREV, /* ^? */ + F_UNASSIGNED, /* M-^@ */ + F_UNASSIGNED, /* M-^A */ + F_UNASSIGNED, /* M-^B */ + F_UNASSIGNED, /* M-^C */ + F_UNASSIGNED, /* M-^D */ + F_UNASSIGNED, /* M-^E */ + F_UNASSIGNED, /* M-^F */ + F_UNASSIGNED, /* M-^G */ + F_UNASSIGNED, /* M-^H */ + F_UNASSIGNED, /* M-^I */ + F_UNASSIGNED, /* M-^J */ + F_UNASSIGNED, /* M-^K */ + F_UNASSIGNED, /* M-^L */ + F_UNASSIGNED, /* M-^M */ + F_UNASSIGNED, /* M-^N */ + F_UNASSIGNED, /* M-^O */ + F_UNASSIGNED, /* M-^P */ + F_UNASSIGNED, /* M-^Q */ + F_UNASSIGNED, /* M-^R */ + F_UNASSIGNED, /* M-^S */ + F_UNASSIGNED, /* M-^T */ + F_UNASSIGNED, /* M-^U */ + F_UNASSIGNED, /* M-^V */ + F_UNASSIGNED, /* M-^W */ + F_UNASSIGNED, /* M-^X */ + F_UNASSIGNED, /* M-^Y */ + F_UNASSIGNED, /* M-^Z */ + F_UNASSIGNED, /* M-^[ */ + F_UNASSIGNED, /* M-^\ */ + F_UNASSIGNED, /* M-^] */ + F_UNASSIGNED, /* M-^^ */ + F_UNASSIGNED, /* M-^_ */ + F_UNASSIGNED, /* M-SPACE */ + F_UNASSIGNED, /* M-! */ + F_UNASSIGNED, /* M-" */ + F_UNASSIGNED, /* M-# */ + F_UNASSIGNED, /* M-$ */ + F_UNASSIGNED, /* M-% */ + F_UNASSIGNED, /* M-& */ + F_UNASSIGNED, /* M-' */ + F_UNASSIGNED, /* M-( */ + F_UNASSIGNED, /* M-) */ + F_UNASSIGNED, /* M-* */ + F_UNASSIGNED, /* M-+ */ + F_UNASSIGNED, /* M-, */ + F_UNASSIGNED, /* M-- */ + F_UNASSIGNED, /* M-. */ + F_UNASSIGNED, /* M-/ */ + F_UNASSIGNED, /* M-0 */ + F_UNASSIGNED, /* M-1 */ + F_UNASSIGNED, /* M-2 */ + F_UNASSIGNED, /* M-3 */ + F_UNASSIGNED, /* M-4 */ + F_UNASSIGNED, /* M-5 */ + F_UNASSIGNED, /* M-6 */ + F_UNASSIGNED, /* M-7 */ + F_UNASSIGNED, /* M-8 */ + F_UNASSIGNED, /* M-9 */ + F_UNASSIGNED, /* M-: */ + F_UNASSIGNED, /* M-; */ + F_UNASSIGNED, /* M-< */ + F_UNASSIGNED, /* M-= */ + F_UNASSIGNED, /* M-> */ + F_UNASSIGNED, /* M-? */ + F_UNASSIGNED, /* M-@ */ + F_UNASSIGNED, /* M-A */ + F_UNASSIGNED, /* M-B */ + F_UNASSIGNED, /* M-C */ + F_UNASSIGNED, /* M-D */ + F_UNASSIGNED, /* M-E */ + F_UNASSIGNED, /* M-F */ + F_UNASSIGNED, /* M-G */ + F_UNASSIGNED, /* M-H */ + F_UNASSIGNED, /* M-I */ + F_UNASSIGNED, /* M-J */ + F_UNASSIGNED, /* M-K */ + F_UNASSIGNED, /* M-L */ + F_UNASSIGNED, /* M-M */ + F_UNASSIGNED, /* M-N */ + F_UNASSIGNED, /* M-O */ + F_UNASSIGNED, /* M-P */ + F_UNASSIGNED, /* M-Q */ + F_UNASSIGNED, /* M-R */ + F_UNASSIGNED, /* M-S */ + F_UNASSIGNED, /* M-T */ + F_UNASSIGNED, /* M-U */ + F_UNASSIGNED, /* M-V */ + F_UNASSIGNED, /* M-W */ + F_UNASSIGNED, /* M-X */ + F_UNASSIGNED, /* M-Y */ + F_UNASSIGNED, /* M-Z */ + F_UNASSIGNED, /* M-[ */ + F_UNASSIGNED, /* M-\ */ + F_UNASSIGNED, /* M-] */ + F_UNASSIGNED, /* M-^ */ + F_UNASSIGNED, /* M-_ */ + F_UNASSIGNED, /* M-` */ + F_UNASSIGNED, /* M-a */ + F_UNASSIGNED, /* M-b */ + F_UNASSIGNED, /* M-c */ + F_UNASSIGNED, /* M-d */ + F_UNASSIGNED, /* M-e */ + F_UNASSIGNED, /* M-f */ + F_UNASSIGNED, /* M-g */ + F_UNASSIGNED, /* M-h */ + F_UNASSIGNED, /* M-i */ + F_UNASSIGNED, /* M-j */ + F_UNASSIGNED, /* M-k */ + F_UNASSIGNED, /* M-l */ + F_UNASSIGNED, /* M-m */ + F_UNASSIGNED, /* M-n */ + F_UNASSIGNED, /* M-o */ + F_UNASSIGNED, /* M-p */ + F_UNASSIGNED, /* M-q */ + F_UNASSIGNED, /* M-r */ + F_UNASSIGNED, /* M-s */ + F_UNASSIGNED, /* M-t */ + F_UNASSIGNED, /* M-u */ + F_UNASSIGNED, /* M-v */ + F_UNASSIGNED, /* M-w */ + F_UNASSIGNED, /* M-x */ + F_UNASSIGNED, /* M-y */ + F_UNASSIGNED, /* M-z */ + F_UNASSIGNED, /* M-{ */ + F_UNASSIGNED, /* M-| */ + F_UNASSIGNED, /* M-} */ + F_UNASSIGNED, /* M-~ */ + F_UNASSIGNED /* M-^? */ +}; + +KEYCMD CcViCmdMap[] = { + F_UNASSIGNED, /* ^@ */ + F_TOBEG, /* ^A */ + F_UNASSIGNED, /* ^B */ + F_TTY_INT, /* ^C */ + F_LIST_CHOICES, /* ^D */ + F_TOEND, /* ^E */ + F_UNASSIGNED, /* ^F */ + F_LIST_GLOB, /* ^G */ + F_CHARBACK, /* ^H */ + V_CM_COMPLETE, /* ^I */ + F_NEWLINE, /* ^J */ + F_KILLEND, /* ^K */ + F_CLEARDISP, /* ^L */ + F_NEWLINE, /* ^M */ + F_DOWN_HIST, /* ^N */ + F_TTY_FLUSHO, /* ^O */ + F_UP_HIST, /* ^P */ + F_TTY_STARTO, /* ^Q */ + F_REDISP, /* ^R */ + F_TTY_STOPO, /* ^S */ + F_UNASSIGNED, /* ^T */ + F_KILLBEG, /* ^U */ + F_UNASSIGNED, /* ^V */ + F_DELWORDPREV, /* ^W */ + F_EXPAND, /* ^X */ + F_UNASSIGNED, /* ^Y */ + F_UNASSIGNED, /* ^Z */ + F_METANEXT, /* ^[ */ + F_TTY_QUIT, /* ^\ */ + F_UNASSIGNED, /* ^] */ + F_UNASSIGNED, /* ^^ */ + F_UNASSIGNED, /* ^_ */ + F_CHARFWD, /* SPACE */ + F_EXPAND_HISTORY, /* ! */ + F_UNASSIGNED, /* " */ + F_UNASSIGNED, /* # */ + F_TOEND, /* $ */ + F_UNASSIGNED, /* % */ + F_UNASSIGNED, /* & */ + F_UNASSIGNED, /* ' */ + F_UNASSIGNED, /* ( */ + F_UNASSIGNED, /* ) */ + F_EXPAND_GLOB, /* * */ + F_DOWN_HIST, /* + */ + V_RCHAR_BACK, /* , */ + F_UP_HIST, /* - */ + F_UNASSIGNED, /* . */ + V_DSH_META, /* / */ + V_ZERO, /* 0 */ + F_ARGDIGIT, /* 1 */ + F_ARGDIGIT, /* 2 */ + F_ARGDIGIT, /* 3 */ + F_ARGDIGIT, /* 4 */ + F_ARGDIGIT, /* 5 */ + F_ARGDIGIT, /* 6 */ + F_ARGDIGIT, /* 7 */ + F_ARGDIGIT, /* 8 */ + F_ARGDIGIT, /* 9 */ + F_UNASSIGNED, /* : */ + V_RCHAR_FWD, /* ; */ + F_UNASSIGNED, /* < */ + F_UNASSIGNED, /* = */ + F_UNASSIGNED, /* > */ + V_USH_META, /* ? */ + F_UNASSIGNED, /* @ */ + V_ADDEND, /* A */ + V_WORDBACK, /* B */ + V_CHGTOEND, /* C */ + F_KILLEND, /* D */ + V_ENDWORD, /* E */ + V_CHAR_BACK, /* F */ + F_UNASSIGNED, /* G */ + F_UNASSIGNED, /* H */ + V_INSBEG, /* I */ + F_DOWN_SEARCH_HIST, /* J */ + F_UP_SEARCH_HIST, /* K */ + F_UNASSIGNED, /* L */ + F_UNASSIGNED, /* M */ + V_RSRCH_BACK, /* N */ + F_XKEY, /* O */ + F_UNASSIGNED, /* P */ + F_UNASSIGNED, /* Q */ + V_REPLMODE, /* R */ + V_SUBSTLINE, /* S */ + V_CHARTO_BACK, /* T */ + F_UNASSIGNED, /* U */ + F_EXPAND_VARS, /* V */ + V_WORDFWD, /* W */ + F_DELPREV, /* X */ + F_UNASSIGNED, /* Y */ + F_UNASSIGNED, /* Z */ + F_XKEY, /* [ */ + F_UNASSIGNED, /* \ */ + F_UNASSIGNED, /* ] */ + F_TOBEG, /* ^ */ + F_UNASSIGNED, /* _ */ + F_UNASSIGNED, /* ` */ + V_ADD, /* a */ + F_WORDBACK, /* b */ + V_CHGMETA, /* c */ + V_DELMETA, /* d */ + V_EWORD, /* e */ + V_CHAR_FWD, /* f */ + F_UNASSIGNED, /* g */ + F_CHARBACK, /* h */ + V_INSERT, /* i */ + F_DOWN_HIST, /* j */ + F_UP_HIST, /* k */ + F_CHARFWD, /* l */ + F_UNASSIGNED, /* m */ + V_RSRCH_FWD, /* n */ + F_UNASSIGNED, /* o */ + F_UNASSIGNED, /* p */ + F_UNASSIGNED, /* q */ + V_REPLONE, /* r */ + V_SUBSTCHAR, /* s */ + V_CHARTO_FWD, /* t */ + V_UNDO, /* u */ + F_EXPAND_VARS, /* v */ + V_WORDBEGNEXT, /* w */ + F_DELNEXT_EOF, /* x */ + F_UNASSIGNED, /* y */ + F_UNASSIGNED, /* z */ + F_UNASSIGNED, /* { */ + F_UNASSIGNED, /* | */ + F_UNASSIGNED, /* } */ + V_CHGCASE, /* ~ */ + F_DELPREV, /* ^? */ + F_UNASSIGNED, /* M-^@ */ + F_UNASSIGNED, /* M-^A */ + F_UNASSIGNED, /* M-^B */ + F_UNASSIGNED, /* M-^C */ + F_UNASSIGNED, /* M-^D */ + F_UNASSIGNED, /* M-^E */ + F_UNASSIGNED, /* M-^F */ + F_UNASSIGNED, /* M-^G */ + F_UNASSIGNED, /* M-^H */ + F_UNASSIGNED, /* M-^I */ + F_UNASSIGNED, /* M-^J */ + F_UNASSIGNED, /* M-^K */ + F_UNASSIGNED, /* M-^L */ + F_UNASSIGNED, /* M-^M */ + F_UNASSIGNED, /* M-^N */ + F_UNASSIGNED, /* M-^O */ + F_UNASSIGNED, /* M-^P */ + F_UNASSIGNED, /* M-^Q */ + F_UNASSIGNED, /* M-^R */ + F_UNASSIGNED, /* M-^S */ + F_UNASSIGNED, /* M-^T */ + F_UNASSIGNED, /* M-^U */ + F_UNASSIGNED, /* M-^V */ + F_UNASSIGNED, /* M-^W */ + F_UNASSIGNED, /* M-^X */ + F_UNASSIGNED, /* M-^Y */ + F_UNASSIGNED, /* M-^Z */ + F_UNASSIGNED, /* M-^[ */ + F_UNASSIGNED, /* M-^\ */ + F_UNASSIGNED, /* M-^] */ + F_UNASSIGNED, /* M-^^ */ + F_UNASSIGNED, /* M-^_ */ + F_UNASSIGNED, /* M-SPACE */ + F_UNASSIGNED, /* M-! */ + F_UNASSIGNED, /* M-" */ + F_UNASSIGNED, /* M-# */ + F_UNASSIGNED, /* M-$ */ + F_UNASSIGNED, /* M-% */ + F_UNASSIGNED, /* M-& */ + F_UNASSIGNED, /* M-' */ + F_UNASSIGNED, /* M-( */ + F_UNASSIGNED, /* M-) */ + F_UNASSIGNED, /* M-* */ + F_UNASSIGNED, /* M-+ */ + F_UNASSIGNED, /* M-, */ + F_UNASSIGNED, /* M-- */ + F_UNASSIGNED, /* M-. */ + F_UNASSIGNED, /* M-/ */ + F_UNASSIGNED, /* M-0 */ + F_UNASSIGNED, /* M-1 */ + F_UNASSIGNED, /* M-2 */ + F_UNASSIGNED, /* M-3 */ + F_UNASSIGNED, /* M-4 */ + F_UNASSIGNED, /* M-5 */ + F_UNASSIGNED, /* M-6 */ + F_UNASSIGNED, /* M-7 */ + F_UNASSIGNED, /* M-8 */ + F_UNASSIGNED, /* M-9 */ + F_UNASSIGNED, /* M-: */ + F_UNASSIGNED, /* M-; */ + F_UNASSIGNED, /* M-< */ + F_UNASSIGNED, /* M-= */ + F_UNASSIGNED, /* M-> */ + F_HELPME, /* M-? */ + F_UNASSIGNED, /* M-@ */ + F_UNASSIGNED, /* M-A */ + F_UNASSIGNED, /* M-B */ + F_UNASSIGNED, /* M-C */ + F_UNASSIGNED, /* M-D */ + F_UNASSIGNED, /* M-E */ + F_UNASSIGNED, /* M-F */ + F_UNASSIGNED, /* M-G */ + F_UNASSIGNED, /* M-H */ + F_UNASSIGNED, /* M-I */ + F_UNASSIGNED, /* M-J */ + F_UNASSIGNED, /* M-K */ + F_UNASSIGNED, /* M-L */ + F_UNASSIGNED, /* M-M */ + F_UNASSIGNED, /* M-N */ + F_XKEY, /* M-O *//* extended key esc PWP Mar 88 */ + F_UNASSIGNED, /* M-P */ + F_UNASSIGNED, /* M-Q */ + F_UNASSIGNED, /* M-R */ + F_UNASSIGNED, /* M-S */ + F_UNASSIGNED, /* M-T */ + F_UNASSIGNED, /* M-U */ + F_UNASSIGNED, /* M-V */ + F_UNASSIGNED, /* M-W */ + F_UNASSIGNED, /* M-X */ + F_UNASSIGNED, /* M-Y */ + F_UNASSIGNED, /* M-Z */ + F_XKEY, /* M-[ *//* extended key esc -mf Oct 87 */ + F_UNASSIGNED, /* M-\ */ + F_UNASSIGNED, /* M-] */ + F_UNASSIGNED, /* M-^ */ + F_UNASSIGNED, /* M-_ */ + F_UNASSIGNED, /* M-` */ + F_UNASSIGNED, /* M-a */ + F_UNASSIGNED, /* M-b */ + F_UNASSIGNED, /* M-c */ + F_UNASSIGNED, /* M-d */ + F_UNASSIGNED, /* M-e */ + F_UNASSIGNED, /* M-f */ + F_UNASSIGNED, /* M-g */ + F_UNASSIGNED, /* M-h */ + F_UNASSIGNED, /* M-i */ + F_UNASSIGNED, /* M-j */ + F_UNASSIGNED, /* M-k */ + F_UNASSIGNED, /* M-l */ + F_UNASSIGNED, /* M-m */ + F_UNASSIGNED, /* M-n */ + F_UNASSIGNED, /* M-o */ + F_UNASSIGNED, /* M-p */ + F_UNASSIGNED, /* M-q */ + F_UNASSIGNED, /* M-r */ + F_UNASSIGNED, /* M-s */ + F_UNASSIGNED, /* M-t */ + F_UNASSIGNED, /* M-u */ + F_UNASSIGNED, /* M-v */ + F_UNASSIGNED, /* M-w */ + F_UNASSIGNED, /* M-x */ + F_UNASSIGNED, /* M-y */ + F_UNASSIGNED, /* M-z */ + F_UNASSIGNED, /* M-{ */ + F_UNASSIGNED, /* M-| */ + F_UNASSIGNED, /* M-} */ + F_UNASSIGNED, /* M-~ */ + F_UNASSIGNED /* M-^? */ +}; +#endif /* WINNT_NATIVE */ + + +void +editinit(void) +{ + struct KeyFuncs *f; + +#if defined(NLS_CATALOGS) || defined(WINNT_NATIVE) + int i; + + for (i = 0; i < F_NUM_FUNCNAMES; i++) + xfree((ptr_t)(intptr_t)FuncNames[i].desc); +#endif + + f = FuncNames; + f->name = "backward-char"; + f->func = F_CHARBACK; + f->desc = CSAVS(3, 1, "Move back a character"); + + f++; + f->name = "backward-delete-char"; + f->func = F_DELPREV; + f->desc = CSAVS(3, 2, "Delete the character behind cursor"); + + f++; + f->name = "backward-delete-word"; + f->func = F_DELWORDPREV; + f->desc = CSAVS(3, 3, + "Cut from beginning of current word to cursor - saved in cut buffer"); + + f++; + f->name = "backward-kill-line"; + f->func = F_KILLBEG; + f->desc = CSAVS(3, 4, + "Cut from beginning of line to cursor - save in cut buffer"); + + f++; + f->name = "backward-word"; + f->func = F_WORDBACK; + f->desc = CSAVS(3, 5, "Move to beginning of current word"); + + f++; + f->name = "beginning-of-line"; + f->func = F_TOBEG; + f->desc = CSAVS(3, 6, "Move to beginning of line"); + + f++; + f->name = "capitalize-word"; + f->func = F_CASECAPITAL; + f->desc = CSAVS(3, 7, + "Capitalize the characters from cursor to end of current word"); + + f++; + f->name = "change-case"; + f->func = V_CHGCASE; + f->desc = CSAVS(3, 8, + "Vi change case of character under cursor and advance one character"); + + f++; + f->name = "change-till-end-of-line"; + f->func = V_CHGTOEND; /* backward compat. */ + f->desc = CSAVS(3, 9, "Vi change to end of line"); + + f++; + f->name = "clear-screen"; + f->func = F_CLEARDISP; + f->desc = CSAVS(3, 10, "Clear screen leaving current line on top"); + + f++; + f->name = "complete-word"; + f->func = F_COMPLETE; + f->desc = CSAVS(3, 11, "Complete current word"); + + f++; + f->name = "complete-word-fwd"; + f->func = F_COMPLETE_FWD; + f->desc = CSAVS(3, 12, "Tab forward through files"); + + f++; + f->name = "complete-word-back"; + f->func = F_COMPLETE_BACK; + f->desc = CSAVS(3, 13, "Tab backward through files"); + + f++; + f->name = "complete-word-raw"; + f->func = F_COMPLETE_ALL; + f->desc = CSAVS(3, 14, + "Complete current word ignoring programmable completions"); + + f++; + f->name = "copy-prev-word"; + f->func = F_COPYPREV; + f->desc = CSAVS(3, 15, "Copy current word to cursor"); + + f++; + f->name = "copy-region-as-kill"; + f->func = F_COPYREGION; + f->desc = CSAVS(3, 16, "Copy area between mark and cursor to cut buffer"); + + f++; + f->name = "dabbrev-expand"; + f->func = F_DABBREV_EXPAND; + f->desc = CSAVS(3, 17, + "Expand to preceding word for which this is a prefix"); + + f++; + f->name = "delete-char"; + f->func = F_DELNEXT; + f->desc = CSAVS(3, 18, "Delete character under cursor"); + + f++; + f->name = "delete-char-or-eof"; + f->func = F_DELNEXT_EOF; + f->desc = CSAVS(3, 19, + "Delete character under cursor or signal end of file on an empty line"); + + f++; + f->name = "delete-char-or-list"; + f->func = F_DELNEXT_LIST; + f->desc = CSAVS(3, 20, + "Delete character under cursor or list completions if at end of line"); + + f++; + f->name = "delete-char-or-list-or-eof"; + f->func = F_DELNEXT_LIST_EOF; + f->desc = CSAVS(3, 21, + "Delete character under cursor, list completions or signal end of file"); + + f++; + f->name = "delete-word"; + f->func = F_DELWORDNEXT; + f->desc = CSAVS(3, 22, + "Cut from cursor to end of current word - save in cut buffer"); + + f++; + f->name = "digit"; + f->func = F_DIGIT; + f->desc = CSAVS(3, 23, "Adds to argument if started or enters digit"); + + f++; + f->name = "digit-argument"; + f->func = F_ARGDIGIT; + f->desc = CSAVS(3, 24, "Digit that starts argument"); + + f++; + f->name = "down-history"; + f->func = F_DOWN_HIST; + f->desc = CSAVS(3, 25, "Move to next history line"); + + f++; + f->name = "downcase-word"; + f->func = F_CASELOWER; + f->desc = CSAVS(3, 26, + "Lowercase the characters from cursor to end of current word"); + + f++; + f->name = "end-of-file"; + f->func = F_SEND_EOF; + f->desc = CSAVS(3, 27, "Indicate end of file"); + + f++; + f->name = "end-of-line"; + f->func = F_TOEND; + f->desc = CSAVS(3, 28, "Move cursor to end of line"); + + f++; + f->name = "exchange-point-and-mark"; + f->func = F_EXCHANGE_MARK; + f->desc = CSAVS(3, 29, "Exchange the cursor and mark"); + + f++; + f->name = "expand-glob"; + f->func = F_EXPAND_GLOB; + f->desc = CSAVS(3, 30, "Expand file name wildcards"); + + f++; + f->name = "expand-history"; + f->func = F_EXPAND_HISTORY; + f->desc = CSAVS(3, 31, "Expand history escapes"); + + f++; + f->name = "expand-line"; + f->func = F_EXPAND; + f->desc = CSAVS(3, 32, "Expand the history escapes in a line"); + + f++; + f->name = "expand-variables"; + f->func = F_EXPAND_VARS; + f->desc = CSAVS(3, 33, "Expand variables"); + + f++; + f->name = "forward-char"; + f->func = F_CHARFWD; + f->desc = CSAVS(3, 34, "Move forward one character"); + + f++; + f->name = "forward-word"; + f->func = F_WORDFWD; + f->desc = CSAVS(3, 35, "Move forward to end of current word"); + + f++; + f->name = "gosmacs-transpose-chars"; + f->func = F_GCHARSWITCH; + f->desc = CSAVS(3, 36, "Exchange the two characters before the cursor"); + + f++; + f->name = "history-search-backward"; + f->func = F_UP_SEARCH_HIST; + f->desc = CSAVS(3, 37, + "Search in history backward for line beginning as current"); + + f++; + f->name = "history-search-forward"; + f->func = F_DOWN_SEARCH_HIST; + f->desc = CSAVS(3, 38, + "Search in history forward for line beginning as current"); + + f++; + f->name = "insert-last-word"; + f->func = F_LAST_ITEM; + f->desc = CSAVS(3, 39, "Insert last item of previous command"); + + f++; + f->name = "i-search-fwd"; + f->func = F_INC_FWD; + f->desc = CSAVS(3, 40, "Incremental search forward"); + + f++; + f->name = "i-search-back"; + f->func = F_INC_BACK; + f->desc = CSAVS(3, 41, "Incremental search backward"); + + f++; + f->name = "keyboard-quit"; + f->func = F_STARTOVER; + f->desc = CSAVS(3, 42, "Clear line"); + + f++; + f->name = "kill-line"; + f->func = F_KILLEND; + f->desc = CSAVS(3, 43, "Cut to end of line and save in cut buffer"); + + f++; + f->name = "kill-region"; + f->func = F_KILLREGION; + f->desc = CSAVS(3, 44, + "Cut area between mark and cursor and save in cut buffer"); + + f++; + f->name = "kill-whole-line"; + f->func = F_KILLALL; + f->desc = CSAVS(3, 45, "Cut the entire line and save in cut buffer"); + + f++; + f->name = "list-choices"; + f->func = F_LIST_CHOICES; + f->desc = CSAVS(3, 46, "List choices for completion"); + + f++; + f->name = "list-choices-raw"; + f->func = F_LIST_ALL; + f->desc = CSAVS(3, 47, + "List choices for completion overriding programmable completion"); + + f++; + f->name = "list-glob"; + f->func = F_LIST_GLOB; + f->desc = CSAVS(3, 48, "List file name wildcard matches"); + + f++; + f->name = "list-or-eof"; + f->func = F_LIST_EOF; + f->desc = CSAVS(3, 49, + "List choices for completion or indicate end of file if empty line"); + + f++; + f->name = "load-average"; + f->func = F_LOAD_AVERAGE; + f->desc = CSAVS(3, 50, "Display load average and current process status"); + + f++; + f->name = "magic-space"; + f->func = F_MAGIC_SPACE; + f->desc = CSAVS(3, 51, "Expand history escapes and insert a space"); + + f++; + f->name = "newline"; + f->func = F_NEWLINE; + f->desc = CSAVS(3, 52, "Execute command"); + + f++; + f->name = "newline-and-hold"; + f->func = F_NEWLINE_HOLD; + f->desc = CSAVS(3, 122, "Execute command and keep current line"); + + f++; + f->name = "newline-and-down-history"; + f->func = F_NEWLINE_DOWN_HIST; + f->desc = CSAVS(3, 123, "Execute command and move to next history line"); + + f++; + f->name = "normalize-path"; + f->func = F_PATH_NORM; + f->desc = CSAVS(3, 53, + "Expand pathnames, eliminating leading .'s and ..'s"); + + f++; + f->name = "normalize-command"; + f->func = F_COMMAND_NORM; + f->desc = CSAVS(3, 54, + "Expand commands to the resulting pathname or alias"); + + f++; + f->name = "overwrite-mode"; + f->func = F_INSOVR; + f->desc = CSAVS(3, 55, + "Switch from insert to overwrite mode or vice versa"); + + f++; + f->name = "prefix-meta"; + f->func = F_METANEXT; + f->desc = CSAVS(3, 56, "Add 8th bit to next character typed"); + + f++; + f->name = "quoted-insert"; + f->func = F_QUOTE; + f->desc = CSAVS(3, 57, "Add the next character typed to the line verbatim"); + + f++; + f->name = "redisplay"; + f->func = F_REDISP; + f->desc = CSAVS(3, 58, "Redisplay everything"); + + f++; + f->name = "run-fg-editor"; + f->func = F_RUN_FG_EDITOR; + f->desc = CSAVS(3, 59, "Restart stopped editor"); + + f++; + f->name = "run-help"; + f->func = F_HELPME; + f->desc = CSAVS(3, 60, "Look for help on current command"); + + f++; + f->name = "self-insert-command"; + f->func = F_INSERT; + f->desc = CSAVS(3, 61, "This character is added to the line"); + + f++; + f->name = "sequence-lead-in"; + f->func = F_XKEY; + f->desc = CSAVS(3, 62, + "This character is the first in a character sequence"); + + f++; + f->name = "set-mark-command"; + f->func = F_SET_MARK; + f->desc = CSAVS(3, 63, "Set the mark at cursor"); + + f++; + f->name = "spell-word"; + f->func = F_CORRECT; + f->desc = CSAVS(3, 64, "Correct the spelling of current word"); + + f++; + f->name = "spell-line"; + f->func = F_CORRECT_L; + f->desc = CSAVS(3, 65, "Correct the spelling of entire line"); + + f++; + f->name = "stuff-char"; + f->func = F_STUFF_CHAR; + f->desc = CSAVS(3, 66, "Send character to tty in cooked mode"); + + f++; + f->name = "toggle-literal-history"; + f->func = F_TOGGLE_HIST; + f->desc = CSAVS(3, 67, + "Toggle between literal and lexical current history line"); + + f++; + f->name = "transpose-chars"; + f->func = F_CHARSWITCH; + f->desc = CSAVS(3, 68, + "Exchange the character to the left of the cursor with the one under"); + + f++; + f->name = "transpose-gosling"; + f->func = F_GCHARSWITCH; + f->desc = CSAVS(3, 69, "Exchange the two characters before the cursor"); + + f++; + f->name = "tty-dsusp"; + f->func = F_TTY_DSUSP; + f->desc = CSAVS(3, 70, "Tty delayed suspend character"); + + f++; + f->name = "tty-flush-output"; + f->func = F_TTY_FLUSHO; + f->desc = CSAVS(3, 71, "Tty flush output character"); + + f++; + f->name = "tty-sigintr"; + f->func = F_TTY_INT; + f->desc = CSAVS(3, 72, "Tty interrupt character"); + + f++; + f->name = "tty-sigquit"; + f->func = F_TTY_QUIT; + f->desc = CSAVS(3, 73, "Tty quit character"); + + f++; + f->name = "tty-sigtsusp"; + f->func = F_TTY_TSUSP; + f->desc = CSAVS(3, 74, "Tty suspend character"); + + f++; + f->name = "tty-start-output"; + f->func = F_TTY_STARTO; + f->desc = CSAVS(3, 75, "Tty allow output character"); + + f++; + f->name = "tty-stop-output"; + f->func = F_TTY_STOPO; + f->desc = CSAVS(3, 76, "Tty disallow output character"); + + f++; + f->name = "undefined-key"; + f->func = F_UNASSIGNED; + f->desc = CSAVS(3, 77, "Indicates unbound character"); + + f++; + f->name = "universal-argument"; + f->func = F_ARGFOUR; + f->desc = CSAVS(3, 78, "Emacs universal argument (argument times 4)"); + + f++; + f->name = "up-history"; + f->func = F_UP_HIST; + f->desc = CSAVS(3, 79, "Move to previous history line"); + + f++; + f->name = "upcase-word"; + f->func = F_CASEUPPER; + f->desc = CSAVS(3, 80, + "Uppercase the characters from cursor to end of current word"); + + f++; + f->name = "vi-beginning-of-next-word"; + f->func = V_WORDBEGNEXT; + f->desc = CSAVS(3, 81, "Vi goto the beginning of next word"); + + f++; + f->name = "vi-add"; + f->func = V_ADD; + f->desc = CSAVS(3, 82, "Vi enter insert mode after the cursor"); + + f++; + f->name = "vi-add-at-eol"; + f->func = V_ADDEND; + f->desc = CSAVS(3, 83, "Vi enter insert mode at end of line"); + + f++; + f->name = "vi-chg-case"; + f->func = V_CHGCASE; + f->desc = CSAVS(3, 84, + "Vi change case of character under cursor and advance one character"); + + f++; + f->name = "vi-chg-meta"; + f->func = V_CHGMETA; + f->desc = CSAVS(3, 85, "Vi change prefix command"); + + f++; + f->name = "vi-chg-to-eol"; + f->func = V_CHGTOEND; + f->desc = CSAVS(3, 86, "Vi change to end of line"); + + f++; + f->name = "vi-cmd-mode"; + f->func = V_CMD_MODE; + f->desc = CSAVS(3, 87, + "Enter vi command mode (use alternative key bindings)"); + + f++; + f->name = "vi-cmd-mode-complete"; + f->func = V_CM_COMPLETE; + f->desc = CSAVS(3, 88, "Vi command mode complete current word"); + + f++; + f->name = "vi-delprev"; + f->func = V_DELPREV; + f->desc = CSAVS(3, 89, "Vi move to previous character (backspace)"); + + f++; + f->name = "vi-delmeta"; + f->func = V_DELMETA; + f->desc = CSAVS(3, 90, "Vi delete prefix command"); + + f++; + f->name = "vi-endword"; + f->func = V_ENDWORD; + f->desc = CSAVS(3, 91, + "Vi move to the end of the current space delimited word"); + + f++; + f->name = "vi-eword"; + f->func = V_EWORD; + f->desc = CSAVS(3, 92, "Vi move to the end of the current word"); + + f++; + f->name = "vi-char-back"; + f->func = V_CHAR_BACK; + f->desc = CSAVS(3, 93, "Vi move to the character specified backward"); + + f++; + f->name = "vi-char-fwd"; + f->func = V_CHAR_FWD; + f->desc = CSAVS(3, 94, "Vi move to the character specified forward"); + + f++; + f->name = "vi-charto-back"; + f->func = V_CHARTO_BACK; + f->desc = CSAVS(3, 95, "Vi move up to the character specified backward"); + + f++; + f->name = "vi-charto-fwd"; + f->func = V_CHARTO_FWD; + f->desc = CSAVS(3, 96, "Vi move up to the character specified forward"); + + f++; + f->name = "vi-insert"; + f->func = V_INSERT; + f->desc = CSAVS(3, 97, "Enter vi insert mode"); + + f++; + f->name = "vi-insert-at-bol"; + f->func = V_INSBEG; + f->desc = CSAVS(3, 98, "Enter vi insert mode at beginning of line"); + + f++; + f->name = "vi-repeat-char-fwd"; + f->func = V_RCHAR_FWD; + f->desc = CSAVS(3, 99, + "Vi repeat current character search in the same search direction"); + + f++; + f->name = "vi-repeat-char-back"; + f->func = V_RCHAR_BACK; + f->desc = CSAVS(3, 100, + "Vi repeat current character search in the opposite search direction"); + + f++; + f->name = "vi-repeat-search-fwd"; + f->func = V_RSRCH_FWD; + f->desc = CSAVS(3, 101, + "Vi repeat current search in the same search direction"); + + f++; + f->name = "vi-repeat-search-back"; + f->func = V_RSRCH_BACK; + f->desc = CSAVS(3, 102, + "Vi repeat current search in the opposite search direction"); + + f++; + f->name = "vi-replace-char"; + f->func = V_REPLONE; + f->desc = CSAVS(3, 103, + "Vi replace character under the cursor with the next character typed"); + + f++; + f->name = "vi-replace-mode"; + f->func = V_REPLMODE; + f->desc = CSAVS(3, 104, "Vi replace mode"); + + f++; + f->name = "vi-search-back"; + f->func = V_USH_META; + f->desc = CSAVS(3, 105, "Vi search history backward"); + + f++; + f->name = "vi-search-fwd"; + f->func = V_DSH_META; + f->desc = CSAVS(3, 106, "Vi search history forward"); + + f++; + f->name = "vi-substitute-char"; + f->func = V_SUBSTCHAR; + f->desc = CSAVS(3, 107, + "Vi replace character under the cursor and enter insert mode"); + + f++; + f->name = "vi-substitute-line"; + f->func = V_SUBSTLINE; + f->desc = CSAVS(3, 108, "Vi replace entire line"); + + f++; + f->name = "vi-word-back"; + f->func = V_WORDBACK; + f->desc = CSAVS(3, 109, "Vi move to the previous word"); + + f++; + f->name = "vi-word-fwd"; + f->func = V_WORDFWD; + f->desc = CSAVS(3, 110, "Vi move to the next word"); + + f++; + f->name = "vi-undo"; + f->func = V_UNDO; + f->desc = CSAVS(3, 111, "Vi undo last change"); + + f++; + f->name = "vi-zero"; + f->func = V_ZERO; + f->desc = CSAVS(3, 112, "Vi goto the beginning of line"); + + f++; + f->name = "which-command"; + f->func = F_WHICH; + f->desc = CSAVS(3, 113, "Perform which of current command"); + + f++; + f->name = "yank"; + f->func = F_YANK_KILL; + f->desc = CSAVS(3, 114, "Paste cut buffer at cursor position"); + + f++; + f->name = "yank-pop"; + f->func = F_YANK_POP; + f->desc = CSAVS(3, 115, + "Replace just-yanked text with yank from earlier kill"); + + f++; + f->name = "e_copy_to_clipboard"; + f->func = F_COPY_CLIP; + f->desc = CSAVS(3, 116, + "(WIN32 only) Copy cut buffer to system clipboard"); + + f++; + f->name = "e_paste_from_clipboard"; + f->func = F_PASTE_CLIP; + f->desc = CSAVS(3, 117, + "(WIN32 only) Paste clipboard buffer at cursor position"); + + f++; + f->name = "e_dosify_next"; + f->func = F_DOSIFY_NEXT; + f->desc = CSAVS(3, 118, + "(WIN32 only) Convert each '/' in next word to '\\\\'"); + + f++; + f->name = "e_dosify_prev"; + f->func = F_DOSIFY_PREV; + f->desc = CSAVS(3, 119, + "(WIN32 only) Convert each '/' in previous word to '\\\\'"); + + f++; + f->name = "e_page_up"; + f->func = F_PAGE_UP; + f->desc = CSAVS(3, 120, "(WIN32 only) Page visible console window up"); + + f++; + f->name = "e_page_down"; + f->func = F_PAGE_DOWN; + f->desc = CSAVS(3, 121, "(WIN32 only) Page visible console window down"); + + f++; + f->name = NULL; + f->func = 0; + f->desc = NULL; + + f++; + if (f - FuncNames != F_NUM_FUNCNAMES) + abort(); +} + +#ifdef DEBUG_EDIT +void +CheckMaps(void) +{ /* check the size of the key maps */ + int c1 = (NT_NUM_KEYS * sizeof(KEYCMD)); + + if ((sizeof(CcKeyMap)) != c1) + xprintf("CcKeyMap should be %d entries, but is %d.\r\n", + NT_NUM_KEYS, sizeof(CcKeyMap) / sizeof(KEYCMD))); + + if ((sizeof(CcAltMap)) != c1) + xprintf("CcAltMap should be %d entries, but is %d.\r\n", + NT_NUM_KEYS, (sizeof(CcAltMap) / sizeof(KEYCMD))); + + if ((sizeof(CcEmacsMap)) != c1) + xprintf("CcEmacsMap should be %d entries, but is %d.\r\n", + NT_NUM_KEYS, (sizeof(CcEmacsMap) / sizeof(KEYCMD))); + + if ((sizeof(CcViMap)) != c1) + xprintf("CcViMap should be %d entries, but is %d.\r\n", + NT_NUM_KEYS, (sizeof(CcViMap) / sizeof(KEYCMD))); + + if ((sizeof(CcViCmdMap)) != c1) + xprintf("CcViCmdMap should be %d entries, but is %d.\r\n", + NT_NUM_KEYS, (sizeof(CcViCmdMap) / sizeof(KEYCMD))); +} + +#endif + +int MapsAreInited = 0; +int NLSMapsAreInited = 0; +int NoNLSRebind; + +void +ed_InitNLSMaps(void) +{ + int i; + + if (AsciiOnly) + return; + if (NoNLSRebind) + return; + for (i = 0200; i <= 0377; i++) { + if (Isprint(CTL_ESC(i))) { + CcKeyMap[CTL_ESC(i)] = F_INSERT; + } + } + NLSMapsAreInited = 1; +} + +static void +ed_InitMetaBindings(void) +{ + Char buf[3]; + int i; + CStr cstr; + KEYCMD *map; + + map = CcKeyMap; + for (i = 0; i <= 0377 && CcKeyMap[CTL_ESC(i)] != F_METANEXT; i++) + continue; + if (i > 0377) { + for (i = 0; i <= 0377 && CcAltMap[CTL_ESC(i)] != F_METANEXT; i++) + continue; + if (i > 0377) { + i = '\033'; + if (VImode) + map = CcAltMap; + } + else { + map = CcAltMap; + } + } + buf[0] = (Char)CTL_ESC(i); + buf[2] = 0; + cstr.buf = buf; + cstr.len = 2; + for (i = 0200; i <= 0377; i++) { + if (map[CTL_ESC(i)] != F_INSERT && map[CTL_ESC(i)] != F_UNASSIGNED && map[CTL_ESC(i)] != F_XKEY) { + buf[1] = CTL_ESC(i & ASCII); + AddXkey(&cstr, XmapCmd((int) map[CTL_ESC(i)]), XK_CMD); + } + } + map[buf[0]] = F_XKEY; +} + +void +ed_InitVIMaps(void) +{ + int i; + + VImode = 1; + ResetXmap(); + for (i = 0; i < NT_NUM_KEYS; i++) { + CcKeyMap[i] = CcViMap[i]; + CcAltMap[i] = CcViCmdMap[i]; + } + ed_InitMetaBindings(); + ed_InitNLSMaps(); + ResetArrowKeys(); + BindArrowKeys(); +} + +void +ed_InitEmacsMaps(void) +{ + int i; + Char buf[3]; + CStr cstr; + cstr.buf = buf; + cstr.len = 2; + + VImode = 0; + ResetXmap(); + for (i = 0; i < NT_NUM_KEYS; i++) { + CcKeyMap[i] = CcEmacsMap[i]; + CcAltMap[i] = F_UNASSIGNED; + } + ed_InitMetaBindings(); + ed_InitNLSMaps(); + buf[0] = CTL_ESC('\030'); + buf[2] = 0; + buf[1] = CTL_ESC('\030'); + AddXkey(&cstr, XmapCmd(F_EXCHANGE_MARK), XK_CMD); + buf[1] = '*'; + AddXkey(&cstr, XmapCmd(F_EXPAND_GLOB), XK_CMD); + buf[1] = '$'; + AddXkey(&cstr, XmapCmd(F_EXPAND_VARS), XK_CMD); + buf[1] = 'G'; + AddXkey(&cstr, XmapCmd(F_LIST_GLOB), XK_CMD); + buf[1] = 'g'; + AddXkey(&cstr, XmapCmd(F_LIST_GLOB), XK_CMD); + buf[1] = 'n'; + AddXkey(&cstr, XmapCmd(F_PATH_NORM), XK_CMD); + buf[1] = 'N'; + AddXkey(&cstr, XmapCmd(F_PATH_NORM), XK_CMD); + buf[1] = '?'; + AddXkey(&cstr, XmapCmd(F_COMMAND_NORM), XK_CMD); + buf[1] = '\t'; + AddXkey(&cstr, XmapCmd(F_COMPLETE_ALL), XK_CMD); + buf[1] = CTL_ESC('\004'); /* ^D */ + AddXkey(&cstr, XmapCmd(F_LIST_ALL), XK_CMD); + ResetArrowKeys(); + BindArrowKeys(); +} + +void +ed_InitMaps(void) +{ + if (MapsAreInited) + return; +#ifndef IS_ASCII + /* This machine has an EBCDIC charset. The assumptions made for the + * initialized keymaps therefore don't hold, since they are based on + * ASCII (or ISO8859-1). + * Here, we do a one-time transformation to EBCDIC environment + * for the key initializations. + */ + { + KEYCMD temp[NT_NUM_KEYS]; + static KEYCMD *const list[3] = { CcEmacsMap, CcViMap, CcViCmdMap }; + int i, table; + + for (table=0; table<3; ++table) + { + /* copy ASCII ordered map to temp table */ + for (i = 0; i < NT_NUM_KEYS; i++) { + temp[i] = list[table][i]; + } + /* write back as EBCDIC ordered map */ + for (i = 0; i < NT_NUM_KEYS; i++) { + list[table][_toebcdic[i]] = temp[i]; + } + } + } +#endif /* !IS_ASCII */ + +#ifdef VIDEFAULT + ed_InitVIMaps(); +#else + ed_InitEmacsMaps(); +#endif + + MapsAreInited = 1; +} |