159243Sobrien/*
259243Sobrien * ed.defns.c: Editor function definitions and initialization
359243Sobrien */
459243Sobrien/*-
559243Sobrien * Copyright (c) 1980, 1991 The Regents of the University of California.
659243Sobrien * All rights reserved.
759243Sobrien *
859243Sobrien * Redistribution and use in source and binary forms, with or without
959243Sobrien * modification, are permitted provided that the following conditions
1059243Sobrien * are met:
1159243Sobrien * 1. Redistributions of source code must retain the above copyright
1259243Sobrien *    notice, this list of conditions and the following disclaimer.
1359243Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1459243Sobrien *    notice, this list of conditions and the following disclaimer in the
1559243Sobrien *    documentation and/or other materials provided with the distribution.
16100616Smp * 3. Neither the name of the University nor the names of its contributors
1759243Sobrien *    may be used to endorse or promote products derived from this software
1859243Sobrien *    without specific prior written permission.
1959243Sobrien *
2059243Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2159243Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2259243Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2359243Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2459243Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2559243Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2659243Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2759243Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2859243Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2959243Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3059243Sobrien * SUCH DAMAGE.
3159243Sobrien */
3259243Sobrien#include "sh.h"
3359243Sobrien#include "ed.h"
3459243Sobrien
35167465Smpstatic	void		ed_InitMetaBindings 	(void);
3659243Sobrien
3759243SobrienPFCmd   CcFuncTbl[] = {		/* table of available commands */
3859243Sobrien    e_unassigned,
3959243Sobrien/* no #define here -- this is a dummy to detect initing of the key map */
4059243Sobrien    e_unassigned,
4159243Sobrien#define		F_UNASSIGNED	1
4259243Sobrien    e_insert,
4359243Sobrien#define		F_INSERT	2
4459243Sobrien    e_newline,
4559243Sobrien#define		F_NEWLINE	3
4659243Sobrien    e_delprev,
4759243Sobrien#define		F_DELPREV	4
4859243Sobrien    e_delnext,
4959243Sobrien#define		F_DELNEXT	5
5059243Sobrien    e_toend,
5159243Sobrien#define		F_TOEND		6
5259243Sobrien    e_tobeg,
5359243Sobrien#define		F_TOBEG		7
5459243Sobrien    e_charback,
5559243Sobrien#define		F_CHARBACK	8
5659243Sobrien    e_charfwd,
5759243Sobrien#define		F_CHARFWD	9
5859243Sobrien    e_quote,
5959243Sobrien#define		F_QUOTE		10
6059243Sobrien    e_startover,
6159243Sobrien#define		F_STARTOVER	11
6259243Sobrien    e_redisp,
6359243Sobrien#define		F_REDISP	12
6459243Sobrien    e_tty_int,
6559243Sobrien#define		F_TTY_INT	13
6659243Sobrien    e_wordback,
6759243Sobrien#define		F_WORDBACK	14
6859243Sobrien    e_wordfwd,
6959243Sobrien#define		F_WORDFWD	15
7059243Sobrien    e_cleardisp,
7159243Sobrien#define		F_CLEARDISP	16
7259243Sobrien    e_complete,
7359243Sobrien#define		F_COMPLETE	17
7459243Sobrien    e_correct,
7559243Sobrien#define		F_CORRECT	18
7659243Sobrien    e_up_hist,
7759243Sobrien#define		F_UP_HIST	19
7859243Sobrien    e_down_hist,
7959243Sobrien#define		F_DOWN_HIST	20
8059243Sobrien    e_up_search_hist,
8159243Sobrien#define		F_UP_SEARCH_HIST	21
8259243Sobrien    e_down_search_hist,
8359243Sobrien#define		F_DOWN_SEARCH_HIST	22
8459243Sobrien    e_helpme,
8559243Sobrien#define		F_HELPME	23
8659243Sobrien    e_list_choices,
8759243Sobrien#define		F_LIST_CHOICES	24
8859243Sobrien    e_delwordprev,
8959243Sobrien#define		F_DELWORDPREV	25
9059243Sobrien    e_delwordnext,
9159243Sobrien#define		F_DELWORDNEXT	26
9259243Sobrien    e_digit,
9359243Sobrien#define		F_DIGIT		27
9459243Sobrien    e_killend,
9559243Sobrien#define		F_KILLEND	28
9659243Sobrien    e_killbeg,
9759243Sobrien#define		F_KILLBEG	29
9859243Sobrien    e_metanext,
9959243Sobrien#define		F_METANEXT	30
10059243Sobrien    e_send_eof,
10159243Sobrien#define		F_SEND_EOF	31
10259243Sobrien    e_charswitch,
10359243Sobrien#define		F_CHARSWITCH	32
10459243Sobrien    e_which,
10559243Sobrien#define		F_WHICH		33
10659243Sobrien    e_yank_kill,
10759243Sobrien#define		F_YANK_KILL	34
10859243Sobrien    e_tty_dsusp,
10959243Sobrien#define		F_TTY_DSUSP	35
11059243Sobrien    e_tty_flusho,
11159243Sobrien#define		F_TTY_FLUSHO	36
11259243Sobrien    e_tty_quit,
11359243Sobrien#define		F_TTY_QUIT	37
11459243Sobrien    e_tty_tsusp,
11559243Sobrien#define		F_TTY_TSUSP	38
11659243Sobrien    e_tty_stopo,
11759243Sobrien#define		F_TTY_STOPO	39
11859243Sobrien    e_tty_starto,
11959243Sobrien#define		F_TTY_STARTO	40
12059243Sobrien    e_argfour,
12159243Sobrien#define		F_ARGFOUR	41
12259243Sobrien    e_set_mark,
12359243Sobrien#define		F_SET_MARK	42
12459243Sobrien    e_exchange_mark,
12559243Sobrien#define		F_EXCHANGE_MARK	43
12659243Sobrien    e_last_item,
12759243Sobrien#define		F_LAST_ITEM	44
12859243Sobrien    e_delnext_list_eof,
12959243Sobrien#define		F_DELNEXT_LIST_EOF	45
13059243Sobrien    v_cmd_mode,
13159243Sobrien#define		V_CMD_MODE	46
13259243Sobrien    v_insert,
13359243Sobrien#define		V_INSERT	47
13459243Sobrien    e_argdigit,
13559243Sobrien#define		F_ARGDIGIT	48
13659243Sobrien    e_killregion,
13759243Sobrien#define		F_KILLREGION	49
13859243Sobrien    e_copyregion,
13959243Sobrien#define		F_COPYREGION	50
14059243Sobrien    e_gcharswitch,
14159243Sobrien#define		F_GCHARSWITCH	51
14259243Sobrien    e_run_fg_editor,
14359243Sobrien#define		F_RUN_FG_EDITOR	52
14459243Sobrien    e_unassigned,	/* place holder for sequence lead in character */
14559243Sobrien#define		F_XKEY		53
14659243Sobrien    e_uppercase,
14759243Sobrien#define         F_CASEUPPER     54
14859243Sobrien    e_lowercase,
14959243Sobrien#define         F_CASELOWER     55
150316957Sdchagin    e_capitalcase,
15159243Sobrien#define         F_CASECAPITAL   56
15259243Sobrien    v_zero,
15359243Sobrien#define		V_ZERO		57
15459243Sobrien    v_add,
15559243Sobrien#define		V_ADD		58
15659243Sobrien    v_addend,
15759243Sobrien#define		V_ADDEND	59
15859243Sobrien    v_wordbegnext,
15959243Sobrien#define		V_WORDBEGNEXT	60
16059243Sobrien    e_killall,
16159243Sobrien#define		F_KILLALL	61
16259243Sobrien    e_unassigned,
16359243Sobrien/* F_EXTENDNEXT removed */
16459243Sobrien    v_insbeg,
16559243Sobrien#define		V_INSBEG	63
16659243Sobrien    v_replmode,
16759243Sobrien#define		V_REPLMODE	64
16859243Sobrien    v_replone,
16959243Sobrien#define		V_REPLONE	65
17059243Sobrien    v_substline,
17159243Sobrien#define		V_SUBSTLINE	66
17259243Sobrien    v_substchar,
17359243Sobrien#define		V_SUBSTCHAR	67
17459243Sobrien    v_chgtoend,
17559243Sobrien#define		V_CHGTOEND	68
17659243Sobrien    e_list_eof,
17759243Sobrien#define		F_LIST_EOF	69
17859243Sobrien    e_list_glob,
17959243Sobrien#define		F_LIST_GLOB	70
18059243Sobrien    e_expand_history,
18159243Sobrien#define		F_EXPAND_HISTORY	71
18259243Sobrien    e_magic_space,
18359243Sobrien#define		F_MAGIC_SPACE	72
18459243Sobrien    e_insovr,
18559243Sobrien#define		F_INSOVR	73
18659243Sobrien    v_cm_complete,
18759243Sobrien#define		V_CM_COMPLETE	74
18859243Sobrien    e_copyprev,
18959243Sobrien#define		F_COPYPREV	75
19059243Sobrien    e_correctl,
19159243Sobrien#define		F_CORRECT_L	76
19259243Sobrien    e_expand_glob,
19359243Sobrien#define		F_EXPAND_GLOB	77
19459243Sobrien    e_expand_vars,
19559243Sobrien#define		F_EXPAND_VARS	78
19659243Sobrien    e_toggle_hist,
19759243Sobrien#define		F_TOGGLE_HIST	79
19859243Sobrien    v_change_case,
19959243Sobrien#define		V_CHGCASE	80
20059243Sobrien    e_expand,
20159243Sobrien#define		F_EXPAND	81
20259243Sobrien    e_load_average,
20359243Sobrien#define		F_LOAD_AVERAGE	82
20459243Sobrien    v_delprev,
20559243Sobrien#define		V_DELPREV	83
20659243Sobrien    v_delmeta,
20759243Sobrien#define		V_DELMETA	84
20859243Sobrien    v_wordfwd,
20959243Sobrien#define		V_WORDFWD	85
21059243Sobrien    v_wordback,
21159243Sobrien#define		V_WORDBACK	86
21259243Sobrien    v_endword,
21359243Sobrien#define		V_ENDWORD	87
21459243Sobrien    v_eword,
21559243Sobrien#define		V_EWORD		88
21659243Sobrien    v_undo,
21759243Sobrien#define		V_UNDO		89
21859243Sobrien    v_ush_meta,
21959243Sobrien#define		V_USH_META	90
22059243Sobrien    v_dsh_meta,
22159243Sobrien#define		V_DSH_META	91
22259243Sobrien    v_rsrch_fwd,
22359243Sobrien#define		V_RSRCH_FWD	92
22459243Sobrien    v_rsrch_back,
22559243Sobrien#define		V_RSRCH_BACK	93
22659243Sobrien    v_char_fwd,
22759243Sobrien#define		V_CHAR_FWD	94
22859243Sobrien    v_char_back,
22959243Sobrien#define		V_CHAR_BACK	95
23059243Sobrien    v_chgmeta,
23159243Sobrien#define		V_CHGMETA	96
23259243Sobrien    e_inc_fwd,
23359243Sobrien#define		F_INC_FWD	97
23459243Sobrien    e_inc_back,
23559243Sobrien#define		F_INC_BACK	98
23659243Sobrien    v_rchar_fwd,
23759243Sobrien#define		V_RCHAR_FWD	99
23859243Sobrien    v_rchar_back,
23959243Sobrien#define		V_RCHAR_BACK	100
24059243Sobrien    v_charto_fwd,
24159243Sobrien#define		V_CHARTO_FWD	101
24259243Sobrien    v_charto_back,
24359243Sobrien#define		V_CHARTO_BACK	102
24459243Sobrien    e_normalize_path,
24559243Sobrien#define		F_PATH_NORM	103
24659243Sobrien    e_delnext_eof,		/* added by mtk@ari.ncl.omron.co.jp (920818) */
24759243Sobrien#define		F_DELNEXT_EOF	104
24859243Sobrien    e_stuff_char,
24959243Sobrien#define		F_STUFF_CHAR	105
25059243Sobrien    e_complete_all,
25159243Sobrien#define		F_COMPLETE_ALL	106
25259243Sobrien    e_list_all,
25359243Sobrien#define		F_LIST_ALL	107
25459243Sobrien    e_complete_fwd,
25559243Sobrien#define		F_COMPLETE_FWD	108
25659243Sobrien    e_complete_back,
25759243Sobrien#define		F_COMPLETE_BACK	109
25859243Sobrien    e_delnext_list,
25959243Sobrien#define		F_DELNEXT_LIST	110
26059243Sobrien    e_normalize_command,
26159243Sobrien#define		F_COMMAND_NORM	111
26259243Sobrien    e_dabbrev_expand,
26359243Sobrien#define		F_DABBREV_EXPAND	112
26483098Smp    e_dosify_next,
265354195Sbrooks#define		F_DOSIFY_NEXT	113
26683098Smp    e_dosify_prev,
267354195Sbrooks#define		F_DOSIFY_PREV	114
26883098Smp    e_page_up,
269354195Sbrooks#define		F_PAGE_UP	115
27083098Smp    e_page_down,
271354195Sbrooks#define		F_PAGE_DOWN	116
27283098Smp    e_yank_pop,
273354195Sbrooks#define		F_YANK_POP	117
274167465Smp    e_newline_hold,
275354195Sbrooks#define		F_NEWLINE_HOLD	118
276167465Smp    e_newline_down_hist,
277354195Sbrooks#define		F_NEWLINE_DOWN_HIST	119
27859243Sobrien    0				/* DUMMY VALUE */
279354195Sbrooks#define		F_NUM_FNS	120
28059243Sobrien
28159243Sobrien};
28259243Sobrien
28359243SobrienKEYCMD  NumFuns = F_NUM_FNS;
28459243Sobrien
28559243SobrienKEYCMD  CcKeyMap[NT_NUM_KEYS];		/* the real key map */
28659243SobrienKEYCMD  CcAltMap[NT_NUM_KEYS];		/* the alternative key map */
28759243Sobrien#define	F_NUM_FUNCNAMES	(F_NUM_FNS + 2)
28859243Sobrienstruct KeyFuncs FuncNames[F_NUM_FUNCNAMES];
28959243Sobrien
29069408Sache#ifdef WINNT_NATIVE
29159243Sobrienextern KEYCMD CcEmacsMap[];
29259243Sobrienextern KEYCMD CcViMap[];
29359243Sobrienextern KEYCMD  CcViCmdMap[];
29469408Sache#else /* !WINNT_NATIVE*/
29559243SobrienKEYCMD  CcEmacsMap[] = {
29659243Sobrien/* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
29759243Sobrien   bytes long */
29859243Sobrien
29959243Sobrien    F_SET_MARK,			/* ^@ */
30059243Sobrien    F_TOBEG,			/* ^A */
30159243Sobrien    F_CHARBACK,			/* ^B */
30259243Sobrien    F_TTY_INT,			/* ^C */
30359243Sobrien    F_DELNEXT_LIST_EOF,		/* ^D */
30459243Sobrien    F_TOEND,			/* ^E */
30559243Sobrien    F_CHARFWD,			/* ^F */
30659243Sobrien    F_UNASSIGNED,		/* ^G */
30759243Sobrien    F_DELPREV,			/* ^H */
30859243Sobrien    F_COMPLETE,			/* ^I */
30959243Sobrien    F_NEWLINE,			/* ^J */
31059243Sobrien    F_KILLEND,			/* ^K */
31159243Sobrien    F_CLEARDISP,		/* ^L */
31259243Sobrien    F_NEWLINE,			/* ^M */
31359243Sobrien    F_DOWN_HIST,		/* ^N */
31459243Sobrien    F_TTY_FLUSHO,		/* ^O */
31559243Sobrien    F_UP_HIST,			/* ^P */
31659243Sobrien    F_TTY_STARTO,		/* ^Q */
31759243Sobrien    F_REDISP,			/* ^R */
31859243Sobrien    F_TTY_STOPO,		/* ^S */
31959243Sobrien    F_CHARSWITCH,		/* ^T */
32059243Sobrien    F_KILLALL,			/* ^U */
32159243Sobrien    F_QUOTE,			/* ^V */
32259243Sobrien    F_KILLREGION,		/* ^W */
32359243Sobrien    F_XKEY,			/* ^X */
32459243Sobrien    F_YANK_KILL,		/* ^Y */
32559243Sobrien    F_TTY_TSUSP,		/* ^Z */
32659243Sobrien    F_METANEXT,			/* ^[ */
32759243Sobrien    F_TTY_QUIT,			/* ^\ */
32859243Sobrien    F_TTY_DSUSP,		/* ^] */
32959243Sobrien    F_UNASSIGNED,		/* ^^ */
33059243Sobrien    F_UNASSIGNED,		/* ^_ */
33159243Sobrien    F_INSERT,			/* SPACE */
33259243Sobrien    F_INSERT,			/* ! */
33359243Sobrien    F_INSERT,			/* " */
33459243Sobrien    F_INSERT,			/* # */
33559243Sobrien    F_INSERT,			/* $ */
33659243Sobrien    F_INSERT,			/* % */
33759243Sobrien    F_INSERT,			/* & */
33859243Sobrien    F_INSERT,			/* ' */
33959243Sobrien    F_INSERT,			/* ( */
34059243Sobrien    F_INSERT,			/* ) */
34159243Sobrien    F_INSERT,			/* * */
34259243Sobrien    F_INSERT,			/* + */
34359243Sobrien    F_INSERT,			/* , */
34459243Sobrien    F_INSERT,			/* - */
34559243Sobrien    F_INSERT,			/* . */
34659243Sobrien    F_INSERT,			/* / */
34759243Sobrien    F_DIGIT,			/* 0 */
34859243Sobrien    F_DIGIT,			/* 1 */
34959243Sobrien    F_DIGIT,			/* 2 */
35059243Sobrien    F_DIGIT,			/* 3 */
35159243Sobrien    F_DIGIT,			/* 4 */
35259243Sobrien    F_DIGIT,			/* 5 */
35359243Sobrien    F_DIGIT,			/* 6 */
35459243Sobrien    F_DIGIT,			/* 7 */
35559243Sobrien    F_DIGIT,			/* 8 */
35659243Sobrien    F_DIGIT,			/* 9 */
35759243Sobrien    F_INSERT,			/* : */
35859243Sobrien    F_INSERT,			/* ; */
35959243Sobrien    F_INSERT,			/* < */
36059243Sobrien    F_INSERT,			/* = */
36159243Sobrien    F_INSERT,			/* > */
36259243Sobrien    F_INSERT,			/* ? */
36359243Sobrien    F_INSERT,			/* @ */
36459243Sobrien    F_INSERT,			/* A */
36559243Sobrien    F_INSERT,			/* B */
36659243Sobrien    F_INSERT,			/* C */
36759243Sobrien    F_INSERT,			/* D */
36859243Sobrien    F_INSERT,			/* E */
36959243Sobrien    F_INSERT,			/* F */
37059243Sobrien    F_INSERT,			/* G */
37159243Sobrien    F_INSERT,			/* H */
37259243Sobrien    F_INSERT,			/* I */
37359243Sobrien    F_INSERT,			/* J */
37459243Sobrien    F_INSERT,			/* K */
37559243Sobrien    F_INSERT,			/* L */
37659243Sobrien    F_INSERT,			/* M */
37759243Sobrien    F_INSERT,			/* N */
37859243Sobrien    F_INSERT,			/* O */
37959243Sobrien    F_INSERT,			/* P */
38059243Sobrien    F_INSERT,			/* Q */
38159243Sobrien    F_INSERT,			/* R */
38259243Sobrien    F_INSERT,			/* S */
38359243Sobrien    F_INSERT,			/* T */
38459243Sobrien    F_INSERT,			/* U */
38559243Sobrien    F_INSERT,			/* V */
38659243Sobrien    F_INSERT,			/* W */
38759243Sobrien    F_INSERT,			/* X */
38859243Sobrien    F_INSERT,			/* Y */
38959243Sobrien    F_INSERT,			/* Z */
39059243Sobrien    F_INSERT,			/* [ */
39159243Sobrien    F_INSERT,			/* \ */
39259243Sobrien    F_INSERT,			/* ] */
39359243Sobrien    F_INSERT,			/* ^ */
39459243Sobrien    F_INSERT,			/* _ */
39559243Sobrien    F_INSERT,			/* ` */
39659243Sobrien    F_INSERT,			/* a */
39759243Sobrien    F_INSERT,			/* b */
39859243Sobrien    F_INSERT,			/* c */
39959243Sobrien    F_INSERT,			/* d */
40059243Sobrien    F_INSERT,			/* e */
40159243Sobrien    F_INSERT,			/* f */
40259243Sobrien    F_INSERT,			/* g */
40359243Sobrien    F_INSERT,			/* h */
40459243Sobrien    F_INSERT,			/* i */
40559243Sobrien    F_INSERT,			/* j */
40659243Sobrien    F_INSERT,			/* k */
40759243Sobrien    F_INSERT,			/* l */
40859243Sobrien    F_INSERT,			/* m */
40959243Sobrien    F_INSERT,			/* n */
41059243Sobrien    F_INSERT,			/* o */
41159243Sobrien    F_INSERT,			/* p */
41259243Sobrien    F_INSERT,			/* q */
41359243Sobrien    F_INSERT,			/* r */
41459243Sobrien    F_INSERT,			/* s */
41559243Sobrien    F_INSERT,			/* t */
41659243Sobrien    F_INSERT,			/* u */
41759243Sobrien    F_INSERT,			/* v */
41859243Sobrien    F_INSERT,			/* w */
41959243Sobrien    F_INSERT,			/* x */
42059243Sobrien    F_INSERT,			/* y */
42159243Sobrien    F_INSERT,			/* z */
42259243Sobrien    F_INSERT,			/* { */
42359243Sobrien    F_INSERT,			/* | */
42459243Sobrien    F_INSERT,			/* } */
42559243Sobrien    F_INSERT,			/* ~ */
42659243Sobrien    F_DELPREV,			/* ^? */
42759243Sobrien    F_UNASSIGNED,		/* M-^@ */
42859243Sobrien    F_UNASSIGNED,		/* M-^A */
42959243Sobrien    F_UNASSIGNED,		/* M-^B */
43059243Sobrien    F_UNASSIGNED,		/* M-^C */
43159243Sobrien    F_LIST_CHOICES,		/* M-^D */
43259243Sobrien    F_UNASSIGNED,		/* M-^E */
43359243Sobrien    F_UNASSIGNED,		/* M-^F */
43459243Sobrien    F_UNASSIGNED,		/* M-^G */
43559243Sobrien    F_DELWORDPREV,		/* M-^H */
43659243Sobrien    F_COMPLETE,			/* M-^I */
43759243Sobrien    F_UNASSIGNED,		/* M-^J */
43859243Sobrien    F_UNASSIGNED,		/* M-^K */
43959243Sobrien    F_CLEARDISP,		/* M-^L */
44059243Sobrien    F_UNASSIGNED,		/* M-^M */
44159243Sobrien    F_UNASSIGNED,		/* M-^N */
44259243Sobrien    F_UNASSIGNED,		/* M-^O */
44359243Sobrien    F_UNASSIGNED,		/* M-^P */
44459243Sobrien    F_UNASSIGNED,		/* M-^Q */
44559243Sobrien    F_UNASSIGNED,		/* M-^R */
44659243Sobrien    F_UNASSIGNED,		/* M-^S */
44759243Sobrien    F_UNASSIGNED,		/* M-^T */
44859243Sobrien    F_UNASSIGNED,		/* M-^U */
44959243Sobrien    F_UNASSIGNED,		/* M-^V */
45059243Sobrien    F_UNASSIGNED,		/* M-^W */
45159243Sobrien    F_UNASSIGNED,		/* M-^X */
45259243Sobrien    F_UNASSIGNED,		/* M-^Y */
45359243Sobrien    F_RUN_FG_EDITOR,		/* M-^Z */
45459243Sobrien    F_COMPLETE,			/* M-^[ */
45559243Sobrien    F_UNASSIGNED,		/* M-^\ */
45659243Sobrien    F_UNASSIGNED,		/* M-^] */
45759243Sobrien    F_UNASSIGNED,		/* M-^^ */
45859243Sobrien    F_COPYPREV,			/* M-^_ */
45959243Sobrien    F_EXPAND_HISTORY,		/* M-SPACE */
46059243Sobrien    F_EXPAND_HISTORY,		/* M-! */
46159243Sobrien    F_UNASSIGNED,		/* M-" */
46259243Sobrien    F_UNASSIGNED,		/* M-# */
46359243Sobrien    F_CORRECT_L,		/* M-$ */
46459243Sobrien    F_UNASSIGNED,		/* M-% */
46559243Sobrien    F_UNASSIGNED,		/* M-& */
46659243Sobrien    F_UNASSIGNED,		/* M-' */
46759243Sobrien    F_UNASSIGNED,		/* M-( */
46859243Sobrien    F_UNASSIGNED,		/* M-) */
46959243Sobrien    F_UNASSIGNED,		/* M-* */
47059243Sobrien    F_UNASSIGNED,		/* M-+ */
47159243Sobrien    F_UNASSIGNED,		/* M-, */
47259243Sobrien    F_UNASSIGNED,		/* M-- */
47359243Sobrien    F_UNASSIGNED,		/* M-. */
47459243Sobrien    F_DABBREV_EXPAND,		/* M-/ */
47559243Sobrien    F_ARGDIGIT,			/* M-0 */
47659243Sobrien    F_ARGDIGIT,			/* M-1 */
47759243Sobrien    F_ARGDIGIT,			/* M-2 */
47859243Sobrien    F_ARGDIGIT,			/* M-3 */
47959243Sobrien    F_ARGDIGIT,			/* M-4 */
48059243Sobrien    F_ARGDIGIT,			/* M-5 */
48159243Sobrien    F_ARGDIGIT,			/* M-6 */
48259243Sobrien    F_ARGDIGIT,			/* M-7 */
48359243Sobrien    F_ARGDIGIT,			/* M-8 */
48459243Sobrien    F_ARGDIGIT,			/* M-9 */
48559243Sobrien    F_UNASSIGNED,		/* M-: */
48659243Sobrien    F_UNASSIGNED,		/* M-; */
48759243Sobrien    F_UNASSIGNED,		/* M-< */
48859243Sobrien    F_UNASSIGNED,		/* M-= */
48959243Sobrien    F_UNASSIGNED,		/* M-> */
49059243Sobrien    F_WHICH,			/* M-? */
49159243Sobrien    F_UNASSIGNED,		/* M-@ */
492167465Smp    F_NEWLINE_HOLD,		/* M-A */
49359243Sobrien    F_WORDBACK,			/* M-B */
49459243Sobrien    F_CASECAPITAL,		/* M-C */
49559243Sobrien    F_DELWORDNEXT,		/* M-D */
49659243Sobrien    F_UNASSIGNED,		/* M-E */
49759243Sobrien    F_WORDFWD,			/* M-F */
49859243Sobrien    F_UNASSIGNED,		/* M-G */
49959243Sobrien    F_HELPME,			/* M-H */
50059243Sobrien    F_UNASSIGNED,		/* M-I */
50159243Sobrien    F_UNASSIGNED,		/* M-J */
50259243Sobrien    F_UNASSIGNED,		/* M-K */
50359243Sobrien    F_CASELOWER,		/* M-L */
50459243Sobrien    F_UNASSIGNED,		/* M-M */
50559243Sobrien    F_DOWN_SEARCH_HIST,		/* M-N */
50659243Sobrien    F_XKEY,			/* M-O *//* extended key esc PWP Mar 88 */
50759243Sobrien    F_UP_SEARCH_HIST,		/* M-P */
50859243Sobrien    F_UNASSIGNED,		/* M-Q */
50959243Sobrien    F_TOGGLE_HIST,		/* M-R */
51059243Sobrien    F_CORRECT,			/* M-S */
51159243Sobrien    F_UNASSIGNED,		/* M-T */
51259243Sobrien    F_CASEUPPER,		/* M-U */
51359243Sobrien    F_UNASSIGNED,		/* M-V */
51459243Sobrien    F_COPYREGION,		/* M-W */
51559243Sobrien    F_UNASSIGNED,		/* M-X */
51683098Smp    F_YANK_POP,			/* M-Y */
51759243Sobrien    F_UNASSIGNED,		/* M-Z */
51859243Sobrien    F_XKEY,			/* M-[ *//* extended key esc -mf Oct 87 */
51959243Sobrien    F_UNASSIGNED,		/* M-\ */
52059243Sobrien    F_UNASSIGNED,		/* M-] */
52159243Sobrien    F_UNASSIGNED,		/* M-^ */
52259243Sobrien    F_LAST_ITEM,		/* M-_ */
52359243Sobrien    F_UNASSIGNED,		/* M-` */
524167465Smp    F_NEWLINE_HOLD,		/* M-a */
52559243Sobrien    F_WORDBACK,			/* M-b */
52659243Sobrien    F_CASECAPITAL,		/* M-c */
52759243Sobrien    F_DELWORDNEXT,		/* M-d */
52859243Sobrien    F_UNASSIGNED,		/* M-e */
52959243Sobrien    F_WORDFWD,			/* M-f */
53059243Sobrien    F_UNASSIGNED,		/* M-g */
53159243Sobrien    F_HELPME,			/* M-h */
53259243Sobrien    F_UNASSIGNED,		/* M-i */
53359243Sobrien    F_UNASSIGNED,		/* M-j */
53459243Sobrien    F_UNASSIGNED,		/* M-k */
53559243Sobrien    F_CASELOWER,		/* M-l */
53659243Sobrien    F_UNASSIGNED,		/* M-m */
53759243Sobrien    F_DOWN_SEARCH_HIST,		/* M-n */
53859243Sobrien    F_UNASSIGNED,		/* M-o */
53959243Sobrien    F_UP_SEARCH_HIST,		/* M-p */
54059243Sobrien    F_UNASSIGNED,		/* M-q */
54159243Sobrien    F_TOGGLE_HIST,		/* M-r */
54259243Sobrien    F_CORRECT,			/* M-s */
54359243Sobrien    F_UNASSIGNED,		/* M-t */
54459243Sobrien    F_CASEUPPER,		/* M-u */
54559243Sobrien    F_UNASSIGNED,		/* M-v */
54659243Sobrien    F_COPYREGION,		/* M-w */
54759243Sobrien    F_UNASSIGNED,		/* M-x */
54883098Smp    F_YANK_POP,			/* M-y */
54959243Sobrien    F_UNASSIGNED,		/* M-z */
55059243Sobrien    F_UNASSIGNED,		/* M-{ */
55159243Sobrien    F_UNASSIGNED,		/* M-| */
55259243Sobrien    F_UNASSIGNED,		/* M-} */
55359243Sobrien    F_UNASSIGNED,		/* M-~ */
55459243Sobrien    F_DELWORDPREV		/* M-^? */
55559243Sobrien};
55659243Sobrien
55759243Sobrien/*
55859243Sobrien * keymap table for vi.  Each index into above tbl; should be
55959243Sobrien * 256 entries long.  Vi mode uses a sticky-extend to do command mode:
56059243Sobrien * insert mode characters are in the normal keymap, and command mode
56159243Sobrien * in the extended keymap.
56259243Sobrien */
56359243Sobrienstatic KEYCMD  CcViMap[] = {
56459243Sobrien#ifdef KSHVI
56559243Sobrien    F_UNASSIGNED,		/* ^@ */
56659243Sobrien    F_INSERT,			/* ^A */
56759243Sobrien    F_INSERT,			/* ^B */
56859243Sobrien    F_INSERT,			/* ^C */
56959243Sobrien    F_INSERT,			/* ^D */
57059243Sobrien    F_INSERT,			/* ^E */
57159243Sobrien    F_INSERT,			/* ^F */
57259243Sobrien    F_INSERT,			/* ^G */
57359243Sobrien    V_DELPREV,			/* ^H */   /* BackSpace key */
57459243Sobrien    F_COMPLETE,			/* ^I */   /* Tab Key  */
57559243Sobrien    F_NEWLINE,			/* ^J */
57659243Sobrien    F_INSERT,			/* ^K */
57759243Sobrien    F_INSERT,			/* ^L */
57859243Sobrien    F_NEWLINE,			/* ^M */
57959243Sobrien    F_INSERT,			/* ^N */
58059243Sobrien    F_INSERT,			/* ^O */
58159243Sobrien    F_INSERT,			/* ^P */
58259243Sobrien    F_TTY_STARTO,		/* ^Q */
58359243Sobrien    F_INSERT,			/* ^R */
58459243Sobrien    F_INSERT,			/* ^S */
58559243Sobrien    F_INSERT,			/* ^T */
58659243Sobrien    F_INSERT,			/* ^U */
58759243Sobrien    F_QUOTE,			/* ^V */
58859243Sobrien    F_DELWORDPREV,		/* ^W */  /* Only until start edit pos */
58959243Sobrien    F_INSERT,			/* ^X */
59059243Sobrien    F_INSERT,			/* ^Y */
59159243Sobrien    F_INSERT,			/* ^Z */
59259243Sobrien    V_CMD_MODE,			/* ^[ */  /* [ Esc ] key */
59359243Sobrien    F_TTY_QUIT,			/* ^\ */
59459243Sobrien    F_INSERT,			/* ^] */
59559243Sobrien    F_INSERT,			/* ^^ */
59659243Sobrien    F_INSERT,			/* ^_ */
59759243Sobrien#else /* !KSHVI */
59859243Sobrien    F_UNASSIGNED,		/* ^@ */   /* NOTE: These mapping do NOT */
59959243Sobrien    F_TOBEG,			/* ^A */   /* Correspond well to the KSH */
60059243Sobrien    F_CHARBACK,			/* ^B */   /* VI editting assignments    */
60159243Sobrien    F_TTY_INT,			/* ^C */   /* On the other hand they are */
60259243Sobrien    F_LIST_EOF,			/* ^D */   /* convenient any many people */
60359243Sobrien    F_TOEND,			/* ^E */   /* have gotten used to them   */
60459243Sobrien    F_CHARFWD,			/* ^F */
60559243Sobrien    F_LIST_GLOB,		/* ^G */
60659243Sobrien    F_DELPREV,			/* ^H */   /* BackSpace key */
60759243Sobrien    F_COMPLETE,			/* ^I */   /* Tab Key */
60859243Sobrien    F_NEWLINE,			/* ^J */
60959243Sobrien    F_KILLEND,			/* ^K */
61059243Sobrien    F_CLEARDISP,		/* ^L */
61159243Sobrien    F_NEWLINE,			/* ^M */
61259243Sobrien    F_DOWN_HIST,		/* ^N */
61359243Sobrien    F_TTY_FLUSHO,		/* ^O */
61459243Sobrien    F_UP_HIST,			/* ^P */
61559243Sobrien    F_TTY_STARTO,		/* ^Q */
61659243Sobrien    F_REDISP,			/* ^R */
61759243Sobrien    F_TTY_STOPO,		/* ^S */
61859243Sobrien    F_CHARSWITCH,		/* ^T */
61959243Sobrien    F_KILLBEG,			/* ^U */
62059243Sobrien    F_QUOTE,			/* ^V */
62159243Sobrien    F_DELWORDPREV,		/* ^W */
62259243Sobrien    F_EXPAND,			/* ^X */
62359243Sobrien    F_TTY_DSUSP,		/* ^Y */
62459243Sobrien    F_TTY_TSUSP,		/* ^Z */
62559243Sobrien    V_CMD_MODE,			/* ^[ */
62659243Sobrien    F_TTY_QUIT,			/* ^\ */
62759243Sobrien    F_UNASSIGNED,		/* ^] */
62859243Sobrien    F_UNASSIGNED,		/* ^^ */
62959243Sobrien    F_UNASSIGNED,		/* ^_ */
63059243Sobrien#endif  /* KSHVI */
63159243Sobrien    F_INSERT,			/* SPACE */
63259243Sobrien    F_INSERT,			/* ! */
63359243Sobrien    F_INSERT,			/* " */
63459243Sobrien    F_INSERT,			/* # */
63559243Sobrien    F_INSERT,			/* $ */
63659243Sobrien    F_INSERT,			/* % */
63759243Sobrien    F_INSERT,			/* & */
63859243Sobrien    F_INSERT,			/* ' */
63959243Sobrien    F_INSERT,			/* ( */
64059243Sobrien    F_INSERT,			/* ) */
64159243Sobrien    F_INSERT,			/* * */
64259243Sobrien    F_INSERT,			/* + */
64359243Sobrien    F_INSERT,			/* , */
64459243Sobrien    F_INSERT,			/* - */
64559243Sobrien    F_INSERT,			/* . */
64659243Sobrien    F_INSERT,			/* / */
64759243Sobrien    F_INSERT,			/* 0 */
64859243Sobrien    F_INSERT,			/* 1 */
64959243Sobrien    F_INSERT,			/* 2 */
65059243Sobrien    F_INSERT,			/* 3 */
65159243Sobrien    F_INSERT,			/* 4 */
65259243Sobrien    F_INSERT,			/* 5 */
65359243Sobrien    F_INSERT,			/* 6 */
65459243Sobrien    F_INSERT,			/* 7 */
65559243Sobrien    F_INSERT,			/* 8 */
65659243Sobrien    F_INSERT,			/* 9 */
65759243Sobrien    F_INSERT,			/* : */
65859243Sobrien    F_INSERT,			/* ; */
65959243Sobrien    F_INSERT,			/* < */
66059243Sobrien    F_INSERT,			/* = */
66159243Sobrien    F_INSERT,			/* > */
66259243Sobrien    F_INSERT,			/* ? */
66359243Sobrien    F_INSERT,			/* @ */
66459243Sobrien    F_INSERT,			/* A */
66559243Sobrien    F_INSERT,			/* B */
66659243Sobrien    F_INSERT,			/* C */
66759243Sobrien    F_INSERT,			/* D */
66859243Sobrien    F_INSERT,			/* E */
66959243Sobrien    F_INSERT,			/* F */
67059243Sobrien    F_INSERT,			/* G */
67159243Sobrien    F_INSERT,			/* H */
67259243Sobrien    F_INSERT,			/* I */
67359243Sobrien    F_INSERT,			/* J */
67459243Sobrien    F_INSERT,			/* K */
67559243Sobrien    F_INSERT,			/* L */
67659243Sobrien    F_INSERT,			/* M */
67759243Sobrien    F_INSERT,			/* N */
67859243Sobrien    F_INSERT,			/* O */
67959243Sobrien    F_INSERT,			/* P */
68059243Sobrien    F_INSERT,			/* Q */
68159243Sobrien    F_INSERT,			/* R */
68259243Sobrien    F_INSERT,			/* S */
68359243Sobrien    F_INSERT,			/* T */
68459243Sobrien    F_INSERT,			/* U */
68559243Sobrien    F_INSERT,			/* V */
68659243Sobrien    F_INSERT,			/* W */
68759243Sobrien    F_INSERT,			/* X */
68859243Sobrien    F_INSERT,			/* Y */
68959243Sobrien    F_INSERT,			/* Z */
69059243Sobrien    F_INSERT,			/* [ */
69159243Sobrien    F_INSERT,			/* \ */
69259243Sobrien    F_INSERT,			/* ] */
69359243Sobrien    F_INSERT,			/* ^ */
69459243Sobrien    F_INSERT,			/* _ */
69559243Sobrien    F_INSERT,			/* ` */
69659243Sobrien    F_INSERT,			/* a */
69759243Sobrien    F_INSERT,			/* b */
69859243Sobrien    F_INSERT,			/* c */
69959243Sobrien    F_INSERT,			/* d */
70059243Sobrien    F_INSERT,			/* e */
70159243Sobrien    F_INSERT,			/* f */
70259243Sobrien    F_INSERT,			/* g */
70359243Sobrien    F_INSERT,			/* h */
70459243Sobrien    F_INSERT,			/* i */
70559243Sobrien    F_INSERT,			/* j */
70659243Sobrien    F_INSERT,			/* k */
70759243Sobrien    F_INSERT,			/* l */
70859243Sobrien    F_INSERT,			/* m */
70959243Sobrien    F_INSERT,			/* n */
71059243Sobrien    F_INSERT,			/* o */
71159243Sobrien    F_INSERT,			/* p */
71259243Sobrien    F_INSERT,			/* q */
71359243Sobrien    F_INSERT,			/* r */
71459243Sobrien    F_INSERT,			/* s */
71559243Sobrien    F_INSERT,			/* t */
71659243Sobrien    F_INSERT,			/* u */
71759243Sobrien    F_INSERT,			/* v */
71859243Sobrien    F_INSERT,			/* w */
71959243Sobrien    F_INSERT,			/* x */
72059243Sobrien    F_INSERT,			/* y */
72159243Sobrien    F_INSERT,			/* z */
72259243Sobrien    F_INSERT,			/* { */
72359243Sobrien    F_INSERT,			/* | */
72459243Sobrien    F_INSERT,			/* } */
72559243Sobrien    F_INSERT,			/* ~ */
72659243Sobrien    F_DELPREV,			/* ^? */
72759243Sobrien    F_UNASSIGNED,		/* M-^@ */
72859243Sobrien    F_UNASSIGNED,		/* M-^A */
72959243Sobrien    F_UNASSIGNED,		/* M-^B */
73059243Sobrien    F_UNASSIGNED,		/* M-^C */
73159243Sobrien    F_UNASSIGNED,		/* M-^D */
73259243Sobrien    F_UNASSIGNED,		/* M-^E */
73359243Sobrien    F_UNASSIGNED,		/* M-^F */
73459243Sobrien    F_UNASSIGNED,		/* M-^G */
73559243Sobrien    F_UNASSIGNED,		/* M-^H */
73659243Sobrien    F_UNASSIGNED,		/* M-^I */
73759243Sobrien    F_UNASSIGNED,		/* M-^J */
73859243Sobrien    F_UNASSIGNED,		/* M-^K */
73959243Sobrien    F_UNASSIGNED,		/* M-^L */
74059243Sobrien    F_UNASSIGNED,		/* M-^M */
74159243Sobrien    F_UNASSIGNED,		/* M-^N */
74259243Sobrien    F_UNASSIGNED,		/* M-^O */
74359243Sobrien    F_UNASSIGNED,		/* M-^P */
74459243Sobrien    F_UNASSIGNED,		/* M-^Q */
74559243Sobrien    F_UNASSIGNED,		/* M-^R */
74659243Sobrien    F_UNASSIGNED,		/* M-^S */
74759243Sobrien    F_UNASSIGNED,		/* M-^T */
74859243Sobrien    F_UNASSIGNED,		/* M-^U */
74959243Sobrien    F_UNASSIGNED,		/* M-^V */
75059243Sobrien    F_UNASSIGNED,		/* M-^W */
75159243Sobrien    F_UNASSIGNED,		/* M-^X */
75259243Sobrien    F_UNASSIGNED,		/* M-^Y */
75359243Sobrien    F_UNASSIGNED,		/* M-^Z */
75459243Sobrien    F_UNASSIGNED,		/* M-^[ */
75559243Sobrien    F_UNASSIGNED,		/* M-^\ */
75659243Sobrien    F_UNASSIGNED,		/* M-^] */
75759243Sobrien    F_UNASSIGNED,		/* M-^^ */
75859243Sobrien    F_UNASSIGNED,		/* M-^_ */
75959243Sobrien    F_UNASSIGNED,		/* M-SPACE */
76059243Sobrien    F_UNASSIGNED,		/* M-! */
76159243Sobrien    F_UNASSIGNED,		/* M-" */
76259243Sobrien    F_UNASSIGNED,		/* M-# */
76359243Sobrien    F_UNASSIGNED,		/* M-$ */
76459243Sobrien    F_UNASSIGNED,		/* M-% */
76559243Sobrien    F_UNASSIGNED,		/* M-& */
76659243Sobrien    F_UNASSIGNED,		/* M-' */
76759243Sobrien    F_UNASSIGNED,		/* M-( */
76859243Sobrien    F_UNASSIGNED,		/* M-) */
76959243Sobrien    F_UNASSIGNED,		/* M-* */
77059243Sobrien    F_UNASSIGNED,		/* M-+ */
77159243Sobrien    F_UNASSIGNED,		/* M-, */
77259243Sobrien    F_UNASSIGNED,		/* M-- */
77359243Sobrien    F_UNASSIGNED,		/* M-. */
77459243Sobrien    F_UNASSIGNED,		/* M-/ */
77559243Sobrien    F_UNASSIGNED,		/* M-0 */
77659243Sobrien    F_UNASSIGNED,		/* M-1 */
77759243Sobrien    F_UNASSIGNED,		/* M-2 */
77859243Sobrien    F_UNASSIGNED,		/* M-3 */
77959243Sobrien    F_UNASSIGNED,		/* M-4 */
78059243Sobrien    F_UNASSIGNED,		/* M-5 */
78159243Sobrien    F_UNASSIGNED,		/* M-6 */
78259243Sobrien    F_UNASSIGNED,		/* M-7 */
78359243Sobrien    F_UNASSIGNED,		/* M-8 */
78459243Sobrien    F_UNASSIGNED,		/* M-9 */
78559243Sobrien    F_UNASSIGNED,		/* M-: */
78659243Sobrien    F_UNASSIGNED,		/* M-; */
78759243Sobrien    F_UNASSIGNED,		/* M-< */
78859243Sobrien    F_UNASSIGNED,		/* M-= */
78959243Sobrien    F_UNASSIGNED,		/* M-> */
79059243Sobrien    F_UNASSIGNED,		/* M-? */
79159243Sobrien    F_UNASSIGNED,		/* M-@ */
79259243Sobrien    F_UNASSIGNED,		/* M-A */
79359243Sobrien    F_UNASSIGNED,		/* M-B */
79459243Sobrien    F_UNASSIGNED,		/* M-C */
79559243Sobrien    F_UNASSIGNED,		/* M-D */
79659243Sobrien    F_UNASSIGNED,		/* M-E */
79759243Sobrien    F_UNASSIGNED,		/* M-F */
79859243Sobrien    F_UNASSIGNED,		/* M-G */
79959243Sobrien    F_UNASSIGNED,		/* M-H */
80059243Sobrien    F_UNASSIGNED,		/* M-I */
80159243Sobrien    F_UNASSIGNED,		/* M-J */
80259243Sobrien    F_UNASSIGNED,		/* M-K */
80359243Sobrien    F_UNASSIGNED,		/* M-L */
80459243Sobrien    F_UNASSIGNED,		/* M-M */
80559243Sobrien    F_UNASSIGNED,		/* M-N */
80659243Sobrien    F_UNASSIGNED,		/* M-O */
80759243Sobrien    F_UNASSIGNED,		/* M-P */
80859243Sobrien    F_UNASSIGNED,		/* M-Q */
80959243Sobrien    F_UNASSIGNED,		/* M-R */
81059243Sobrien    F_UNASSIGNED,		/* M-S */
81159243Sobrien    F_UNASSIGNED,		/* M-T */
81259243Sobrien    F_UNASSIGNED,		/* M-U */
81359243Sobrien    F_UNASSIGNED,		/* M-V */
81459243Sobrien    F_UNASSIGNED,		/* M-W */
81559243Sobrien    F_UNASSIGNED,		/* M-X */
81659243Sobrien    F_UNASSIGNED,		/* M-Y */
81759243Sobrien    F_UNASSIGNED,		/* M-Z */
81859243Sobrien    F_UNASSIGNED,		/* M-[ */
81959243Sobrien    F_UNASSIGNED,		/* M-\ */
82059243Sobrien    F_UNASSIGNED,		/* M-] */
82159243Sobrien    F_UNASSIGNED,		/* M-^ */
82259243Sobrien    F_UNASSIGNED,		/* M-_ */
82359243Sobrien    F_UNASSIGNED,		/* M-` */
82459243Sobrien    F_UNASSIGNED,		/* M-a */
82559243Sobrien    F_UNASSIGNED,		/* M-b */
82659243Sobrien    F_UNASSIGNED,		/* M-c */
82759243Sobrien    F_UNASSIGNED,		/* M-d */
82859243Sobrien    F_UNASSIGNED,		/* M-e */
82959243Sobrien    F_UNASSIGNED,		/* M-f */
83059243Sobrien    F_UNASSIGNED,		/* M-g */
83159243Sobrien    F_UNASSIGNED,		/* M-h */
83259243Sobrien    F_UNASSIGNED,		/* M-i */
83359243Sobrien    F_UNASSIGNED,		/* M-j */
83459243Sobrien    F_UNASSIGNED,		/* M-k */
83559243Sobrien    F_UNASSIGNED,		/* M-l */
83659243Sobrien    F_UNASSIGNED,		/* M-m */
83759243Sobrien    F_UNASSIGNED,		/* M-n */
83859243Sobrien    F_UNASSIGNED,		/* M-o */
83959243Sobrien    F_UNASSIGNED,		/* M-p */
84059243Sobrien    F_UNASSIGNED,		/* M-q */
84159243Sobrien    F_UNASSIGNED,		/* M-r */
84259243Sobrien    F_UNASSIGNED,		/* M-s */
84359243Sobrien    F_UNASSIGNED,		/* M-t */
84459243Sobrien    F_UNASSIGNED,		/* M-u */
84559243Sobrien    F_UNASSIGNED,		/* M-v */
84659243Sobrien    F_UNASSIGNED,		/* M-w */
84759243Sobrien    F_UNASSIGNED,		/* M-x */
84859243Sobrien    F_UNASSIGNED,		/* M-y */
84959243Sobrien    F_UNASSIGNED,		/* M-z */
85059243Sobrien    F_UNASSIGNED,		/* M-{ */
85159243Sobrien    F_UNASSIGNED,		/* M-| */
85259243Sobrien    F_UNASSIGNED,		/* M-} */
85359243Sobrien    F_UNASSIGNED,		/* M-~ */
85459243Sobrien    F_UNASSIGNED		/* M-^? */
85559243Sobrien};
85659243Sobrien
85759243SobrienKEYCMD  CcViCmdMap[] = {
85859243Sobrien    F_UNASSIGNED,		/* ^@ */
85959243Sobrien    F_TOBEG,			/* ^A */
86059243Sobrien    F_UNASSIGNED,		/* ^B */
86159243Sobrien    F_TTY_INT,			/* ^C */
86259243Sobrien    F_LIST_CHOICES,		/* ^D */
86359243Sobrien    F_TOEND,			/* ^E */
86459243Sobrien    F_UNASSIGNED,		/* ^F */
86559243Sobrien    F_LIST_GLOB,		/* ^G */
86659243Sobrien    F_CHARBACK,			/* ^H */
86759243Sobrien    V_CM_COMPLETE,		/* ^I */
86859243Sobrien    F_NEWLINE,			/* ^J */
86959243Sobrien    F_KILLEND,			/* ^K */
87059243Sobrien    F_CLEARDISP,		/* ^L */
87159243Sobrien    F_NEWLINE,			/* ^M */
87259243Sobrien    F_DOWN_HIST,		/* ^N */
87359243Sobrien    F_TTY_FLUSHO,		/* ^O */
87459243Sobrien    F_UP_HIST,			/* ^P */
87559243Sobrien    F_TTY_STARTO,		/* ^Q */
87659243Sobrien    F_REDISP,			/* ^R */
87759243Sobrien    F_TTY_STOPO,		/* ^S */
87859243Sobrien    F_UNASSIGNED,		/* ^T */
87959243Sobrien    F_KILLBEG,			/* ^U */
88059243Sobrien    F_UNASSIGNED,		/* ^V */
88159243Sobrien    F_DELWORDPREV,		/* ^W */
88259243Sobrien    F_EXPAND,			/* ^X */
88359243Sobrien    F_UNASSIGNED,		/* ^Y */
88459243Sobrien    F_UNASSIGNED,		/* ^Z */
88559243Sobrien    F_METANEXT,			/* ^[ */
88659243Sobrien    F_TTY_QUIT,			/* ^\ */
88759243Sobrien    F_UNASSIGNED,		/* ^] */
88859243Sobrien    F_UNASSIGNED,		/* ^^ */
88959243Sobrien    F_UNASSIGNED,		/* ^_ */
89059243Sobrien    F_CHARFWD,			/* SPACE */
89159243Sobrien    F_EXPAND_HISTORY,		/* ! */
89259243Sobrien    F_UNASSIGNED,		/* " */
89359243Sobrien    F_UNASSIGNED,		/* # */
89459243Sobrien    F_TOEND,			/* $ */
89559243Sobrien    F_UNASSIGNED,		/* % */
89659243Sobrien    F_UNASSIGNED,		/* & */
89759243Sobrien    F_UNASSIGNED,		/* ' */
89859243Sobrien    F_UNASSIGNED,		/* ( */
89959243Sobrien    F_UNASSIGNED,		/* ) */
90059243Sobrien    F_EXPAND_GLOB,		/* * */
90159243Sobrien    F_DOWN_HIST,		/* + */
90259243Sobrien    V_RCHAR_BACK,		/* , */
90359243Sobrien    F_UP_HIST,			/* - */
90459243Sobrien    F_UNASSIGNED,		/* . */
90559243Sobrien    V_DSH_META,			/* / */
90659243Sobrien    V_ZERO,			/* 0 */
90759243Sobrien    F_ARGDIGIT,			/* 1 */
90859243Sobrien    F_ARGDIGIT,			/* 2 */
90959243Sobrien    F_ARGDIGIT,			/* 3 */
91059243Sobrien    F_ARGDIGIT,			/* 4 */
91159243Sobrien    F_ARGDIGIT,			/* 5 */
91259243Sobrien    F_ARGDIGIT,			/* 6 */
91359243Sobrien    F_ARGDIGIT,			/* 7 */
91459243Sobrien    F_ARGDIGIT,			/* 8 */
91559243Sobrien    F_ARGDIGIT,			/* 9 */
91659243Sobrien    F_UNASSIGNED,		/* : */
91759243Sobrien    V_RCHAR_FWD,		/* ; */
91859243Sobrien    F_UNASSIGNED,		/* < */
91959243Sobrien    F_UNASSIGNED,		/* = */
92059243Sobrien    F_UNASSIGNED,		/* > */
92159243Sobrien    V_USH_META,			/* ? */
92259243Sobrien    F_UNASSIGNED,		/* @ */
92359243Sobrien    V_ADDEND,			/* A */
92459243Sobrien    V_WORDBACK,			/* B */
92559243Sobrien    V_CHGTOEND,			/* C */
92659243Sobrien    F_KILLEND,			/* D */
92759243Sobrien    V_ENDWORD,			/* E */
92859243Sobrien    V_CHAR_BACK,		/* F */
92959243Sobrien    F_UNASSIGNED,		/* G */
93059243Sobrien    F_UNASSIGNED,		/* H */
93159243Sobrien    V_INSBEG,			/* I */
93259243Sobrien    F_DOWN_SEARCH_HIST,		/* J */
93359243Sobrien    F_UP_SEARCH_HIST,		/* K */
93459243Sobrien    F_UNASSIGNED,		/* L */
93559243Sobrien    F_UNASSIGNED,		/* M */
93659243Sobrien    V_RSRCH_BACK,		/* N */
93759243Sobrien    F_XKEY,			/* O */
93859243Sobrien    F_UNASSIGNED,		/* P */
93959243Sobrien    F_UNASSIGNED,		/* Q */
94059243Sobrien    V_REPLMODE,			/* R */
94159243Sobrien    V_SUBSTLINE,		/* S */
94259243Sobrien    V_CHARTO_BACK,		/* T */
94359243Sobrien    F_UNASSIGNED,		/* U */
94459243Sobrien    F_EXPAND_VARS,		/* V */
94559243Sobrien    V_WORDFWD,			/* W */
94659243Sobrien    F_DELPREV,			/* X */
94759243Sobrien    F_UNASSIGNED,		/* Y */
94859243Sobrien    F_UNASSIGNED,		/* Z */
94959243Sobrien    F_XKEY,			/* [ */
95059243Sobrien    F_UNASSIGNED,		/* \ */
95159243Sobrien    F_UNASSIGNED,		/* ] */
95259243Sobrien    F_TOBEG,			/* ^ */
95359243Sobrien    F_UNASSIGNED,		/* _ */
95459243Sobrien    F_UNASSIGNED,		/* ` */
95559243Sobrien    V_ADD,			/* a */
95659243Sobrien    F_WORDBACK,			/* b */
95759243Sobrien    V_CHGMETA,			/* c */
95859243Sobrien    V_DELMETA,			/* d */
95959243Sobrien    V_EWORD,			/* e */
96059243Sobrien    V_CHAR_FWD,			/* f */
96159243Sobrien    F_UNASSIGNED,		/* g */
96259243Sobrien    F_CHARBACK,			/* h */
96359243Sobrien    V_INSERT,			/* i */
96459243Sobrien    F_DOWN_HIST,		/* j */
96559243Sobrien    F_UP_HIST,			/* k */
96659243Sobrien    F_CHARFWD,			/* l */
96759243Sobrien    F_UNASSIGNED,		/* m */
96859243Sobrien    V_RSRCH_FWD,		/* n */
96959243Sobrien    F_UNASSIGNED,		/* o */
97059243Sobrien    F_UNASSIGNED,		/* p */
97159243Sobrien    F_UNASSIGNED,		/* q */
97259243Sobrien    V_REPLONE,			/* r */
97359243Sobrien    V_SUBSTCHAR,		/* s */
97459243Sobrien    V_CHARTO_FWD,		/* t */
97559243Sobrien    V_UNDO,			/* u */
97659243Sobrien    F_EXPAND_VARS,		/* v */
97759243Sobrien    V_WORDBEGNEXT,		/* w */
97859243Sobrien    F_DELNEXT_EOF,		/* x */
97959243Sobrien    F_UNASSIGNED,		/* y */
98059243Sobrien    F_UNASSIGNED,		/* z */
98159243Sobrien    F_UNASSIGNED,		/* { */
98259243Sobrien    F_UNASSIGNED,		/* | */
98359243Sobrien    F_UNASSIGNED,		/* } */
98459243Sobrien    V_CHGCASE,			/* ~ */
98559243Sobrien    F_DELPREV,			/* ^? */
98659243Sobrien    F_UNASSIGNED,		/* M-^@ */
98759243Sobrien    F_UNASSIGNED,		/* M-^A */
98859243Sobrien    F_UNASSIGNED,		/* M-^B */
98959243Sobrien    F_UNASSIGNED,		/* M-^C */
99059243Sobrien    F_UNASSIGNED,		/* M-^D */
99159243Sobrien    F_UNASSIGNED,		/* M-^E */
99259243Sobrien    F_UNASSIGNED,		/* M-^F */
99359243Sobrien    F_UNASSIGNED,		/* M-^G */
99459243Sobrien    F_UNASSIGNED,		/* M-^H */
99559243Sobrien    F_UNASSIGNED,		/* M-^I */
99659243Sobrien    F_UNASSIGNED,		/* M-^J */
99759243Sobrien    F_UNASSIGNED,		/* M-^K */
99859243Sobrien    F_UNASSIGNED,		/* M-^L */
99959243Sobrien    F_UNASSIGNED,		/* M-^M */
100059243Sobrien    F_UNASSIGNED,		/* M-^N */
100159243Sobrien    F_UNASSIGNED,		/* M-^O */
100259243Sobrien    F_UNASSIGNED,		/* M-^P */
100359243Sobrien    F_UNASSIGNED,		/* M-^Q */
100459243Sobrien    F_UNASSIGNED,		/* M-^R */
100559243Sobrien    F_UNASSIGNED,		/* M-^S */
100659243Sobrien    F_UNASSIGNED,		/* M-^T */
100759243Sobrien    F_UNASSIGNED,		/* M-^U */
100859243Sobrien    F_UNASSIGNED,		/* M-^V */
100959243Sobrien    F_UNASSIGNED,		/* M-^W */
101059243Sobrien    F_UNASSIGNED,		/* M-^X */
101159243Sobrien    F_UNASSIGNED,		/* M-^Y */
101259243Sobrien    F_UNASSIGNED,		/* M-^Z */
101359243Sobrien    F_UNASSIGNED,		/* M-^[ */
101459243Sobrien    F_UNASSIGNED,		/* M-^\ */
101559243Sobrien    F_UNASSIGNED,		/* M-^] */
101659243Sobrien    F_UNASSIGNED,		/* M-^^ */
101759243Sobrien    F_UNASSIGNED,		/* M-^_ */
101859243Sobrien    F_UNASSIGNED,		/* M-SPACE */
101959243Sobrien    F_UNASSIGNED,		/* M-! */
102059243Sobrien    F_UNASSIGNED,		/* M-" */
102159243Sobrien    F_UNASSIGNED,		/* M-# */
102259243Sobrien    F_UNASSIGNED,		/* M-$ */
102359243Sobrien    F_UNASSIGNED,		/* M-% */
102459243Sobrien    F_UNASSIGNED,		/* M-& */
102559243Sobrien    F_UNASSIGNED,		/* M-' */
102659243Sobrien    F_UNASSIGNED,		/* M-( */
102759243Sobrien    F_UNASSIGNED,		/* M-) */
102859243Sobrien    F_UNASSIGNED,		/* M-* */
102959243Sobrien    F_UNASSIGNED,		/* M-+ */
103059243Sobrien    F_UNASSIGNED,		/* M-, */
103159243Sobrien    F_UNASSIGNED,		/* M-- */
103259243Sobrien    F_UNASSIGNED,		/* M-. */
103359243Sobrien    F_UNASSIGNED,		/* M-/ */
103459243Sobrien    F_UNASSIGNED,		/* M-0 */
103559243Sobrien    F_UNASSIGNED,		/* M-1 */
103659243Sobrien    F_UNASSIGNED,		/* M-2 */
103759243Sobrien    F_UNASSIGNED,		/* M-3 */
103859243Sobrien    F_UNASSIGNED,		/* M-4 */
103959243Sobrien    F_UNASSIGNED,		/* M-5 */
104059243Sobrien    F_UNASSIGNED,		/* M-6 */
104159243Sobrien    F_UNASSIGNED,		/* M-7 */
104259243Sobrien    F_UNASSIGNED,		/* M-8 */
104359243Sobrien    F_UNASSIGNED,		/* M-9 */
104459243Sobrien    F_UNASSIGNED,		/* M-: */
104559243Sobrien    F_UNASSIGNED,		/* M-; */
104659243Sobrien    F_UNASSIGNED,		/* M-< */
104759243Sobrien    F_UNASSIGNED,		/* M-= */
104859243Sobrien    F_UNASSIGNED,		/* M-> */
104959243Sobrien    F_HELPME,			/* M-? */
105059243Sobrien    F_UNASSIGNED,		/* M-@ */
105159243Sobrien    F_UNASSIGNED,		/* M-A */
105259243Sobrien    F_UNASSIGNED,		/* M-B */
105359243Sobrien    F_UNASSIGNED,		/* M-C */
105459243Sobrien    F_UNASSIGNED,		/* M-D */
105559243Sobrien    F_UNASSIGNED,		/* M-E */
105659243Sobrien    F_UNASSIGNED,		/* M-F */
105759243Sobrien    F_UNASSIGNED,		/* M-G */
105859243Sobrien    F_UNASSIGNED,		/* M-H */
105959243Sobrien    F_UNASSIGNED,		/* M-I */
106059243Sobrien    F_UNASSIGNED,		/* M-J */
106159243Sobrien    F_UNASSIGNED,		/* M-K */
106259243Sobrien    F_UNASSIGNED,		/* M-L */
106359243Sobrien    F_UNASSIGNED,		/* M-M */
106459243Sobrien    F_UNASSIGNED,		/* M-N */
106559243Sobrien    F_XKEY,			/* M-O *//* extended key esc PWP Mar 88 */
106659243Sobrien    F_UNASSIGNED,		/* M-P */
106759243Sobrien    F_UNASSIGNED,		/* M-Q */
106859243Sobrien    F_UNASSIGNED,		/* M-R */
106959243Sobrien    F_UNASSIGNED,		/* M-S */
107059243Sobrien    F_UNASSIGNED,		/* M-T */
107159243Sobrien    F_UNASSIGNED,		/* M-U */
107259243Sobrien    F_UNASSIGNED,		/* M-V */
107359243Sobrien    F_UNASSIGNED,		/* M-W */
107459243Sobrien    F_UNASSIGNED,		/* M-X */
107559243Sobrien    F_UNASSIGNED,		/* M-Y */
107659243Sobrien    F_UNASSIGNED,		/* M-Z */
107759243Sobrien    F_XKEY,			/* M-[ *//* extended key esc -mf Oct 87 */
107859243Sobrien    F_UNASSIGNED,		/* M-\ */
107959243Sobrien    F_UNASSIGNED,		/* M-] */
108059243Sobrien    F_UNASSIGNED,		/* M-^ */
108159243Sobrien    F_UNASSIGNED,		/* M-_ */
108259243Sobrien    F_UNASSIGNED,		/* M-` */
108359243Sobrien    F_UNASSIGNED,		/* M-a */
108459243Sobrien    F_UNASSIGNED,		/* M-b */
108559243Sobrien    F_UNASSIGNED,		/* M-c */
108659243Sobrien    F_UNASSIGNED,		/* M-d */
108759243Sobrien    F_UNASSIGNED,		/* M-e */
108859243Sobrien    F_UNASSIGNED,		/* M-f */
108959243Sobrien    F_UNASSIGNED,		/* M-g */
109059243Sobrien    F_UNASSIGNED,		/* M-h */
109159243Sobrien    F_UNASSIGNED,		/* M-i */
109259243Sobrien    F_UNASSIGNED,		/* M-j */
109359243Sobrien    F_UNASSIGNED,		/* M-k */
109459243Sobrien    F_UNASSIGNED,		/* M-l */
109559243Sobrien    F_UNASSIGNED,		/* M-m */
109659243Sobrien    F_UNASSIGNED,		/* M-n */
109759243Sobrien    F_UNASSIGNED,		/* M-o */
109859243Sobrien    F_UNASSIGNED,		/* M-p */
109959243Sobrien    F_UNASSIGNED,		/* M-q */
110059243Sobrien    F_UNASSIGNED,		/* M-r */
110159243Sobrien    F_UNASSIGNED,		/* M-s */
110259243Sobrien    F_UNASSIGNED,		/* M-t */
110359243Sobrien    F_UNASSIGNED,		/* M-u */
110459243Sobrien    F_UNASSIGNED,		/* M-v */
110559243Sobrien    F_UNASSIGNED,		/* M-w */
110659243Sobrien    F_UNASSIGNED,		/* M-x */
110759243Sobrien    F_UNASSIGNED,		/* M-y */
110859243Sobrien    F_UNASSIGNED,		/* M-z */
110959243Sobrien    F_UNASSIGNED,		/* M-{ */
111059243Sobrien    F_UNASSIGNED,		/* M-| */
111159243Sobrien    F_UNASSIGNED,		/* M-} */
111259243Sobrien    F_UNASSIGNED,		/* M-~ */
111359243Sobrien    F_UNASSIGNED		/* M-^? */
111459243Sobrien};
111569408Sache#endif /* WINNT_NATIVE */
111659243Sobrien
111759243Sobrien
111859243Sobrienvoid
1119167465Smpeditinit(void)
112059243Sobrien{
112159243Sobrien    struct KeyFuncs *f;
112259243Sobrien
112369408Sache#if defined(NLS_CATALOGS) || defined(WINNT_NATIVE)
112459243Sobrien    int i;
112559243Sobrien
112659243Sobrien    for (i = 0; i < F_NUM_FUNCNAMES; i++)
1127167465Smp	xfree((ptr_t)(intptr_t)FuncNames[i].desc);
112859243Sobrien#endif
112959243Sobrien
113059243Sobrien    f = FuncNames;
113159243Sobrien    f->name = "backward-char";
113259243Sobrien    f->func = F_CHARBACK;
113359243Sobrien    f->desc = CSAVS(3, 1, "Move back a character");
113459243Sobrien
113559243Sobrien    f++;
113659243Sobrien    f->name = "backward-delete-char";
113759243Sobrien    f->func = F_DELPREV;
113859243Sobrien    f->desc = CSAVS(3, 2, "Delete the character behind cursor");
113959243Sobrien
114059243Sobrien    f++;
114159243Sobrien    f->name = "backward-delete-word";
114259243Sobrien    f->func = F_DELWORDPREV;
114359243Sobrien    f->desc = CSAVS(3, 3,
114459243Sobrien	"Cut from beginning of current word to cursor - saved in cut buffer");
114559243Sobrien
114659243Sobrien    f++;
114759243Sobrien    f->name = "backward-kill-line";
114859243Sobrien    f->func = F_KILLBEG;
114959243Sobrien    f->desc = CSAVS(3, 4,
115059243Sobrien	"Cut from beginning of line to cursor - save in cut buffer");
115159243Sobrien
115259243Sobrien    f++;
115359243Sobrien    f->name = "backward-word";
115459243Sobrien    f->func = F_WORDBACK;
115559243Sobrien    f->desc = CSAVS(3, 5, "Move to beginning of current word");
115659243Sobrien
115759243Sobrien    f++;
115859243Sobrien    f->name = "beginning-of-line";
115959243Sobrien    f->func = F_TOBEG;
116059243Sobrien    f->desc = CSAVS(3, 6, "Move to beginning of line");
116159243Sobrien
116259243Sobrien    f++;
116359243Sobrien    f->name = "capitalize-word";
116459243Sobrien    f->func = F_CASECAPITAL;
116559243Sobrien    f->desc = CSAVS(3, 7,
116659243Sobrien	"Capitalize the characters from cursor to end of current word");
116759243Sobrien
116859243Sobrien    f++;
116959243Sobrien    f->name = "change-case";
117059243Sobrien    f->func = V_CHGCASE;
117159243Sobrien    f->desc = CSAVS(3, 8,
117259243Sobrien	"Vi change case of character under cursor and advance one character");
117359243Sobrien
117459243Sobrien    f++;
117559243Sobrien    f->name = "change-till-end-of-line";
117659243Sobrien    f->func = V_CHGTOEND;	/* backward compat. */
117759243Sobrien    f->desc = CSAVS(3, 9, "Vi change to end of line");
117859243Sobrien
117959243Sobrien    f++;
118059243Sobrien    f->name = "clear-screen";
118159243Sobrien    f->func = F_CLEARDISP;
118259243Sobrien    f->desc = CSAVS(3, 10, "Clear screen leaving current line on top");
118359243Sobrien
118459243Sobrien    f++;
118559243Sobrien    f->name = "complete-word";
118659243Sobrien    f->func = F_COMPLETE;
118759243Sobrien    f->desc = CSAVS(3, 11, "Complete current word");
118859243Sobrien
118959243Sobrien    f++;
119059243Sobrien    f->name = "complete-word-fwd";
119159243Sobrien    f->func = F_COMPLETE_FWD;
119259243Sobrien    f->desc = CSAVS(3, 12, "Tab forward through files");
119359243Sobrien
119459243Sobrien    f++;
119559243Sobrien    f->name = "complete-word-back";
119659243Sobrien    f->func = F_COMPLETE_BACK;
119759243Sobrien    f->desc = CSAVS(3, 13, "Tab backward through files");
119859243Sobrien
119959243Sobrien    f++;
120059243Sobrien    f->name = "complete-word-raw";
120159243Sobrien    f->func = F_COMPLETE_ALL;
120259243Sobrien    f->desc = CSAVS(3, 14,
120359243Sobrien	"Complete current word ignoring programmable completions");
120459243Sobrien
120559243Sobrien    f++;
120659243Sobrien    f->name = "copy-prev-word";
120759243Sobrien    f->func = F_COPYPREV;
120859243Sobrien    f->desc = CSAVS(3, 15, "Copy current word to cursor");
120959243Sobrien
121059243Sobrien    f++;
121159243Sobrien    f->name = "copy-region-as-kill";
121259243Sobrien    f->func = F_COPYREGION;
121359243Sobrien    f->desc = CSAVS(3, 16, "Copy area between mark and cursor to cut buffer");
121459243Sobrien
121559243Sobrien    f++;
121659243Sobrien    f->name = "dabbrev-expand";
121759243Sobrien    f->func = F_DABBREV_EXPAND;
121859243Sobrien    f->desc = CSAVS(3, 17,
121959243Sobrien		    "Expand to preceding word for which this is a prefix");
122059243Sobrien
122159243Sobrien    f++;
122259243Sobrien    f->name = "delete-char";
122359243Sobrien    f->func = F_DELNEXT;
122459243Sobrien    f->desc = CSAVS(3, 18, "Delete character under cursor");
122559243Sobrien
122659243Sobrien    f++;
122759243Sobrien    f->name = "delete-char-or-eof";
122859243Sobrien    f->func = F_DELNEXT_EOF;
122959243Sobrien    f->desc = CSAVS(3, 19,
123059243Sobrien	"Delete character under cursor or signal end of file on an empty line");
123159243Sobrien
123259243Sobrien    f++;
123359243Sobrien    f->name = "delete-char-or-list";
123459243Sobrien    f->func = F_DELNEXT_LIST;
123559243Sobrien    f->desc = CSAVS(3, 20,
123659243Sobrien	"Delete character under cursor or list completions if at end of line");
123759243Sobrien
123859243Sobrien    f++;
123959243Sobrien    f->name = "delete-char-or-list-or-eof";
124059243Sobrien    f->func = F_DELNEXT_LIST_EOF;
124159243Sobrien    f->desc = CSAVS(3, 21,
124259243Sobrien    "Delete character under cursor, list completions or signal end of file");
124359243Sobrien
124459243Sobrien    f++;
124559243Sobrien    f->name = "delete-word";
124659243Sobrien    f->func = F_DELWORDNEXT;
124759243Sobrien    f->desc = CSAVS(3, 22,
124859243Sobrien	"Cut from cursor to end of current word - save in cut buffer");
124959243Sobrien
125059243Sobrien    f++;
125159243Sobrien    f->name = "digit";
125259243Sobrien    f->func = F_DIGIT;
125359243Sobrien    f->desc = CSAVS(3, 23, "Adds to argument if started or enters digit");
125459243Sobrien
125559243Sobrien    f++;
125659243Sobrien    f->name = "digit-argument";
125759243Sobrien    f->func = F_ARGDIGIT;
125859243Sobrien    f->desc = CSAVS(3, 24, "Digit that starts argument");
125959243Sobrien
126059243Sobrien    f++;
126159243Sobrien    f->name = "down-history";
126259243Sobrien    f->func = F_DOWN_HIST;
126359243Sobrien    f->desc = CSAVS(3, 25, "Move to next history line");
126459243Sobrien
126559243Sobrien    f++;
126659243Sobrien    f->name = "downcase-word";
126759243Sobrien    f->func = F_CASELOWER;
126859243Sobrien    f->desc = CSAVS(3, 26,
126959243Sobrien	"Lowercase the characters from cursor to end of current word");
127059243Sobrien
127159243Sobrien    f++;
127259243Sobrien    f->name = "end-of-file";
127359243Sobrien    f->func = F_SEND_EOF;
127459243Sobrien    f->desc = CSAVS(3, 27, "Indicate end of file");
127559243Sobrien
127659243Sobrien    f++;
127759243Sobrien    f->name = "end-of-line";
127859243Sobrien    f->func = F_TOEND;
127959243Sobrien    f->desc = CSAVS(3, 28, "Move cursor to end of line");
128059243Sobrien
128159243Sobrien    f++;
128259243Sobrien    f->name = "exchange-point-and-mark";
128359243Sobrien    f->func = F_EXCHANGE_MARK;
128459243Sobrien    f->desc = CSAVS(3, 29, "Exchange the cursor and mark");
128559243Sobrien
128659243Sobrien    f++;
128759243Sobrien    f->name = "expand-glob";
128859243Sobrien    f->func = F_EXPAND_GLOB;
128959243Sobrien    f->desc = CSAVS(3, 30, "Expand file name wildcards");
129059243Sobrien
129159243Sobrien    f++;
129259243Sobrien    f->name = "expand-history";
129359243Sobrien    f->func = F_EXPAND_HISTORY;
129459243Sobrien    f->desc = CSAVS(3, 31, "Expand history escapes");
129559243Sobrien
129659243Sobrien    f++;
129759243Sobrien    f->name = "expand-line";
129859243Sobrien    f->func = F_EXPAND;
129959243Sobrien    f->desc = CSAVS(3, 32, "Expand the history escapes in a line");
130059243Sobrien
130159243Sobrien    f++;
130259243Sobrien    f->name = "expand-variables";
130359243Sobrien    f->func = F_EXPAND_VARS;
130459243Sobrien    f->desc = CSAVS(3, 33, "Expand variables");
130559243Sobrien
130659243Sobrien    f++;
130759243Sobrien    f->name = "forward-char";
130859243Sobrien    f->func = F_CHARFWD;
130959243Sobrien    f->desc = CSAVS(3, 34, "Move forward one character");
131059243Sobrien
131159243Sobrien    f++;
131259243Sobrien    f->name = "forward-word";
131359243Sobrien    f->func = F_WORDFWD;
131459243Sobrien    f->desc = CSAVS(3, 35, "Move forward to end of current word");
131559243Sobrien
131659243Sobrien    f++;
131759243Sobrien    f->name = "gosmacs-transpose-chars";
131859243Sobrien    f->func = F_GCHARSWITCH;
131959243Sobrien    f->desc = CSAVS(3, 36, "Exchange the two characters before the cursor");
132059243Sobrien
132159243Sobrien    f++;
132259243Sobrien    f->name = "history-search-backward";
132359243Sobrien    f->func = F_UP_SEARCH_HIST;
132459243Sobrien    f->desc = CSAVS(3, 37,
132559243Sobrien	"Search in history backward for line beginning as current");
132659243Sobrien
132759243Sobrien    f++;
132859243Sobrien    f->name = "history-search-forward";
132959243Sobrien    f->func = F_DOWN_SEARCH_HIST;
133059243Sobrien    f->desc = CSAVS(3, 38,
133159243Sobrien	"Search in history forward for line beginning as current");
133259243Sobrien
133359243Sobrien    f++;
133459243Sobrien    f->name = "insert-last-word";
133559243Sobrien    f->func = F_LAST_ITEM;
133659243Sobrien    f->desc = CSAVS(3, 39, "Insert last item of previous command");
133759243Sobrien
133859243Sobrien    f++;
133959243Sobrien    f->name = "i-search-fwd";
134059243Sobrien    f->func = F_INC_FWD;
134159243Sobrien    f->desc = CSAVS(3, 40, "Incremental search forward");
134259243Sobrien
134359243Sobrien    f++;
134459243Sobrien    f->name = "i-search-back";
134559243Sobrien    f->func = F_INC_BACK;
134659243Sobrien    f->desc = CSAVS(3, 41, "Incremental search backward");
134759243Sobrien
134859243Sobrien    f++;
134959243Sobrien    f->name = "keyboard-quit";
135059243Sobrien    f->func = F_STARTOVER;
135159243Sobrien    f->desc = CSAVS(3, 42, "Clear line");
135259243Sobrien
135359243Sobrien    f++;
135459243Sobrien    f->name = "kill-line";
135559243Sobrien    f->func = F_KILLEND;
135659243Sobrien    f->desc = CSAVS(3, 43, "Cut to end of line and save in cut buffer");
135759243Sobrien
135859243Sobrien    f++;
135959243Sobrien    f->name = "kill-region";
136059243Sobrien    f->func = F_KILLREGION;
136159243Sobrien    f->desc = CSAVS(3, 44,
136259243Sobrien	"Cut area between mark and cursor and save in cut buffer");
136359243Sobrien
136459243Sobrien    f++;
136559243Sobrien    f->name = "kill-whole-line";
136659243Sobrien    f->func = F_KILLALL;
136759243Sobrien    f->desc = CSAVS(3, 45, "Cut the entire line and save in cut buffer");
136859243Sobrien
136959243Sobrien    f++;
137059243Sobrien    f->name = "list-choices";
137159243Sobrien    f->func = F_LIST_CHOICES;
137259243Sobrien    f->desc = CSAVS(3, 46, "List choices for completion");
137359243Sobrien
137459243Sobrien    f++;
137559243Sobrien    f->name = "list-choices-raw";
137659243Sobrien    f->func = F_LIST_ALL;
137759243Sobrien    f->desc = CSAVS(3, 47,
137859243Sobrien	"List choices for completion overriding programmable completion");
137959243Sobrien
138059243Sobrien    f++;
138159243Sobrien    f->name = "list-glob";
138259243Sobrien    f->func = F_LIST_GLOB;
138359243Sobrien    f->desc = CSAVS(3, 48, "List file name wildcard matches");
138459243Sobrien
138559243Sobrien    f++;
138659243Sobrien    f->name = "list-or-eof";
138759243Sobrien    f->func = F_LIST_EOF;
138859243Sobrien    f->desc = CSAVS(3, 49,
138959243Sobrien	"List choices for completion or indicate end of file if empty line");
139059243Sobrien
139159243Sobrien    f++;
139259243Sobrien    f->name = "load-average";
139359243Sobrien    f->func = F_LOAD_AVERAGE;
139459243Sobrien    f->desc = CSAVS(3, 50, "Display load average and current process status");
139559243Sobrien
139659243Sobrien    f++;
139759243Sobrien    f->name = "magic-space";
139859243Sobrien    f->func = F_MAGIC_SPACE;
139959243Sobrien    f->desc = CSAVS(3, 51, "Expand history escapes and insert a space");
140059243Sobrien
140159243Sobrien    f++;
140259243Sobrien    f->name = "newline";
140359243Sobrien    f->func = F_NEWLINE;
140459243Sobrien    f->desc = CSAVS(3, 52, "Execute command");
140559243Sobrien
140659243Sobrien    f++;
1407167465Smp    f->name = "newline-and-hold";
1408167465Smp    f->func = F_NEWLINE_HOLD;
1409167465Smp    f->desc = CSAVS(3, 122, "Execute command and keep current line");
1410167465Smp
1411167465Smp    f++;
1412167465Smp    f->name = "newline-and-down-history";
1413167465Smp    f->func = F_NEWLINE_DOWN_HIST;
1414167465Smp    f->desc = CSAVS(3, 123, "Execute command and move to next history line");
1415167465Smp
1416167465Smp    f++;
141759243Sobrien    f->name = "normalize-path";
141859243Sobrien    f->func = F_PATH_NORM;
141959243Sobrien    f->desc = CSAVS(3, 53,
142059243Sobrien		    "Expand pathnames, eliminating leading .'s and ..'s");
142159243Sobrien
142259243Sobrien    f++;
142359243Sobrien    f->name = "normalize-command";
142459243Sobrien    f->func = F_COMMAND_NORM;
142559243Sobrien    f->desc = CSAVS(3, 54,
142659243Sobrien		    "Expand commands to the resulting pathname or alias");
142759243Sobrien
142859243Sobrien    f++;
142959243Sobrien    f->name = "overwrite-mode";
143059243Sobrien    f->func = F_INSOVR;
143159243Sobrien    f->desc = CSAVS(3, 55,
143259243Sobrien		    "Switch from insert to overwrite mode or vice versa");
143359243Sobrien
143459243Sobrien    f++;
143559243Sobrien    f->name = "prefix-meta";
143659243Sobrien    f->func = F_METANEXT;
143759243Sobrien    f->desc = CSAVS(3, 56, "Add 8th bit to next character typed");
143859243Sobrien
143959243Sobrien    f++;
144059243Sobrien    f->name = "quoted-insert";
144159243Sobrien    f->func = F_QUOTE;
144259243Sobrien    f->desc = CSAVS(3, 57, "Add the next character typed to the line verbatim");
144359243Sobrien
144459243Sobrien    f++;
144559243Sobrien    f->name = "redisplay";
144659243Sobrien    f->func = F_REDISP;
144759243Sobrien    f->desc = CSAVS(3, 58, "Redisplay everything");
144859243Sobrien
144959243Sobrien    f++;
145059243Sobrien    f->name = "run-fg-editor";
145159243Sobrien    f->func = F_RUN_FG_EDITOR;
145259243Sobrien    f->desc = CSAVS(3, 59, "Restart stopped editor");
145359243Sobrien
145459243Sobrien    f++;
145559243Sobrien    f->name = "run-help";
145659243Sobrien    f->func = F_HELPME;
145759243Sobrien    f->desc = CSAVS(3, 60, "Look for help on current command");
145859243Sobrien
145959243Sobrien    f++;
146059243Sobrien    f->name = "self-insert-command";
146159243Sobrien    f->func = F_INSERT;
146259243Sobrien    f->desc = CSAVS(3, 61, "This character is added to the line");
146359243Sobrien
146459243Sobrien    f++;
146559243Sobrien    f->name = "sequence-lead-in";
146659243Sobrien    f->func = F_XKEY;
146759243Sobrien    f->desc = CSAVS(3, 62,
146859243Sobrien	"This character is the first in a character sequence");
146959243Sobrien
147059243Sobrien    f++;
147159243Sobrien    f->name = "set-mark-command";
147259243Sobrien    f->func = F_SET_MARK;
147359243Sobrien    f->desc = CSAVS(3, 63, "Set the mark at cursor");
147459243Sobrien
147559243Sobrien    f++;
147659243Sobrien    f->name = "spell-word";
147759243Sobrien    f->func = F_CORRECT;
147859243Sobrien    f->desc = CSAVS(3, 64, "Correct the spelling of current word");
147959243Sobrien
148059243Sobrien    f++;
148159243Sobrien    f->name = "spell-line";
148259243Sobrien    f->func = F_CORRECT_L;
148359243Sobrien    f->desc = CSAVS(3, 65, "Correct the spelling of entire line");
148459243Sobrien
148559243Sobrien    f++;
148659243Sobrien    f->name = "stuff-char";
148759243Sobrien    f->func = F_STUFF_CHAR;
148859243Sobrien    f->desc = CSAVS(3, 66, "Send character to tty in cooked mode");
148959243Sobrien
149059243Sobrien    f++;
149159243Sobrien    f->name = "toggle-literal-history";
149259243Sobrien    f->func = F_TOGGLE_HIST;
149359243Sobrien    f->desc = CSAVS(3, 67,
149459243Sobrien	"Toggle between literal and lexical current history line");
149559243Sobrien
149659243Sobrien    f++;
149759243Sobrien    f->name = "transpose-chars";
149859243Sobrien    f->func = F_CHARSWITCH;
149959243Sobrien    f->desc = CSAVS(3, 68,
150059243Sobrien	"Exchange the character to the left of the cursor with the one under");
150159243Sobrien
150259243Sobrien    f++;
150359243Sobrien    f->name = "transpose-gosling";
150459243Sobrien    f->func = F_GCHARSWITCH;
150559243Sobrien    f->desc = CSAVS(3, 69, "Exchange the two characters before the cursor");
150659243Sobrien
150759243Sobrien    f++;
150859243Sobrien    f->name = "tty-dsusp";
150959243Sobrien    f->func = F_TTY_DSUSP;
151059243Sobrien    f->desc = CSAVS(3, 70, "Tty delayed suspend character");
151159243Sobrien
151259243Sobrien    f++;
151359243Sobrien    f->name = "tty-flush-output";
151459243Sobrien    f->func = F_TTY_FLUSHO;
151559243Sobrien    f->desc = CSAVS(3, 71, "Tty flush output character");
151659243Sobrien
151759243Sobrien    f++;
151859243Sobrien    f->name = "tty-sigintr";
151959243Sobrien    f->func = F_TTY_INT;
152059243Sobrien    f->desc = CSAVS(3, 72, "Tty interrupt character");
152159243Sobrien
152259243Sobrien    f++;
152359243Sobrien    f->name = "tty-sigquit";
152459243Sobrien    f->func = F_TTY_QUIT;
152559243Sobrien    f->desc = CSAVS(3, 73, "Tty quit character");
152659243Sobrien
152759243Sobrien    f++;
152859243Sobrien    f->name = "tty-sigtsusp";
152959243Sobrien    f->func = F_TTY_TSUSP;
153059243Sobrien    f->desc = CSAVS(3, 74, "Tty suspend character");
153159243Sobrien
153259243Sobrien    f++;
153359243Sobrien    f->name = "tty-start-output";
153459243Sobrien    f->func = F_TTY_STARTO;
153559243Sobrien    f->desc = CSAVS(3, 75, "Tty allow output character");
153659243Sobrien
153759243Sobrien    f++;
153859243Sobrien    f->name = "tty-stop-output";
153959243Sobrien    f->func = F_TTY_STOPO;
154059243Sobrien    f->desc = CSAVS(3, 76, "Tty disallow output character");
154159243Sobrien
154259243Sobrien    f++;
154359243Sobrien    f->name = "undefined-key";
154459243Sobrien    f->func = F_UNASSIGNED;
154559243Sobrien    f->desc = CSAVS(3, 77, "Indicates unbound character");
154659243Sobrien
154759243Sobrien    f++;
154859243Sobrien    f->name = "universal-argument";
154959243Sobrien    f->func = F_ARGFOUR;
155059243Sobrien    f->desc = CSAVS(3, 78, "Emacs universal argument (argument times 4)");
155159243Sobrien
155259243Sobrien    f++;
155359243Sobrien    f->name = "up-history";
155459243Sobrien    f->func = F_UP_HIST;
155559243Sobrien    f->desc = CSAVS(3, 79, "Move to previous history line");
155659243Sobrien
155759243Sobrien    f++;
155859243Sobrien    f->name = "upcase-word";
155959243Sobrien    f->func = F_CASEUPPER;
156059243Sobrien    f->desc = CSAVS(3, 80,
156159243Sobrien	"Uppercase the characters from cursor to end of current word");
156259243Sobrien
156359243Sobrien    f++;
156459243Sobrien    f->name = "vi-beginning-of-next-word";
156559243Sobrien    f->func = V_WORDBEGNEXT;
156659243Sobrien    f->desc = CSAVS(3, 81, "Vi goto the beginning of next word");
156759243Sobrien
156859243Sobrien    f++;
156959243Sobrien    f->name = "vi-add";
157059243Sobrien    f->func = V_ADD;
157159243Sobrien    f->desc = CSAVS(3, 82, "Vi enter insert mode after the cursor");
157259243Sobrien
157359243Sobrien    f++;
157459243Sobrien    f->name = "vi-add-at-eol";
157559243Sobrien    f->func = V_ADDEND;
157659243Sobrien    f->desc = CSAVS(3, 83, "Vi enter insert mode at end of line");
157759243Sobrien
157859243Sobrien    f++;
157959243Sobrien    f->name = "vi-chg-case";
158059243Sobrien    f->func = V_CHGCASE;
158159243Sobrien    f->desc = CSAVS(3, 84,
158259243Sobrien	"Vi change case of character under cursor and advance one character");
158359243Sobrien
158459243Sobrien    f++;
158559243Sobrien    f->name = "vi-chg-meta";
158659243Sobrien    f->func = V_CHGMETA;
158759243Sobrien    f->desc = CSAVS(3, 85, "Vi change prefix command");
158859243Sobrien
158959243Sobrien    f++;
159059243Sobrien    f->name = "vi-chg-to-eol";
159159243Sobrien    f->func = V_CHGTOEND;
159259243Sobrien    f->desc = CSAVS(3, 86, "Vi change to end of line");
159359243Sobrien
159459243Sobrien    f++;
159559243Sobrien    f->name = "vi-cmd-mode";
159659243Sobrien    f->func = V_CMD_MODE;
159759243Sobrien    f->desc = CSAVS(3, 87,
159859243Sobrien	"Enter vi command mode (use alternative key bindings)");
159959243Sobrien
160059243Sobrien    f++;
160159243Sobrien    f->name = "vi-cmd-mode-complete";
160259243Sobrien    f->func = V_CM_COMPLETE;
160359243Sobrien    f->desc = CSAVS(3, 88, "Vi command mode complete current word");
160459243Sobrien
160559243Sobrien    f++;
160659243Sobrien    f->name = "vi-delprev";
160759243Sobrien    f->func = V_DELPREV;
160859243Sobrien    f->desc = CSAVS(3, 89, "Vi move to previous character (backspace)");
160959243Sobrien
161059243Sobrien    f++;
161159243Sobrien    f->name = "vi-delmeta";
161259243Sobrien    f->func = V_DELMETA;
161359243Sobrien    f->desc = CSAVS(3, 90, "Vi delete prefix command");
161459243Sobrien
161559243Sobrien    f++;
161659243Sobrien    f->name = "vi-endword";
161759243Sobrien    f->func = V_ENDWORD;
161859243Sobrien    f->desc = CSAVS(3, 91,
161959243Sobrien	"Vi move to the end of the current space delimited word");
162059243Sobrien
162159243Sobrien    f++;
162259243Sobrien    f->name = "vi-eword";
162359243Sobrien    f->func = V_EWORD;
162459243Sobrien    f->desc = CSAVS(3, 92, "Vi move to the end of the current word");
162559243Sobrien
162659243Sobrien    f++;
162759243Sobrien    f->name = "vi-char-back";
162859243Sobrien    f->func = V_CHAR_BACK;
162959243Sobrien    f->desc = CSAVS(3, 93, "Vi move to the character specified backward");
163059243Sobrien
163159243Sobrien    f++;
163259243Sobrien    f->name = "vi-char-fwd";
163359243Sobrien    f->func = V_CHAR_FWD;
163459243Sobrien    f->desc = CSAVS(3, 94, "Vi move to the character specified forward");
163559243Sobrien
163659243Sobrien    f++;
163759243Sobrien    f->name = "vi-charto-back";
163859243Sobrien    f->func = V_CHARTO_BACK;
163959243Sobrien    f->desc = CSAVS(3, 95, "Vi move up to the character specified backward");
164059243Sobrien
164159243Sobrien    f++;
164259243Sobrien    f->name = "vi-charto-fwd";
164359243Sobrien    f->func = V_CHARTO_FWD;
164459243Sobrien    f->desc = CSAVS(3, 96, "Vi move up to the character specified forward");
164559243Sobrien
164659243Sobrien    f++;
164759243Sobrien    f->name = "vi-insert";
164859243Sobrien    f->func = V_INSERT;
164959243Sobrien    f->desc = CSAVS(3, 97, "Enter vi insert mode");
165059243Sobrien
165159243Sobrien    f++;
165259243Sobrien    f->name = "vi-insert-at-bol";
165359243Sobrien    f->func = V_INSBEG;
165459243Sobrien    f->desc = CSAVS(3, 98, "Enter vi insert mode at beginning of line");
165559243Sobrien
165659243Sobrien    f++;
165759243Sobrien    f->name = "vi-repeat-char-fwd";
165859243Sobrien    f->func = V_RCHAR_FWD;
165959243Sobrien    f->desc = CSAVS(3, 99,
166059243Sobrien	"Vi repeat current character search in the same search direction");
166159243Sobrien
166259243Sobrien    f++;
166359243Sobrien    f->name = "vi-repeat-char-back";
166459243Sobrien    f->func = V_RCHAR_BACK;
166559243Sobrien    f->desc = CSAVS(3, 100,
166659243Sobrien	"Vi repeat current character search in the opposite search direction");
166759243Sobrien
166859243Sobrien    f++;
166959243Sobrien    f->name = "vi-repeat-search-fwd";
167059243Sobrien    f->func = V_RSRCH_FWD;
167159243Sobrien    f->desc = CSAVS(3, 101,
167259243Sobrien	"Vi repeat current search in the same search direction");
167359243Sobrien
167459243Sobrien    f++;
167559243Sobrien    f->name = "vi-repeat-search-back";
167659243Sobrien    f->func = V_RSRCH_BACK;
167759243Sobrien    f->desc = CSAVS(3, 102,
167859243Sobrien	"Vi repeat current search in the opposite search direction");
167959243Sobrien
168059243Sobrien    f++;
168159243Sobrien    f->name = "vi-replace-char";
168259243Sobrien    f->func = V_REPLONE;
168359243Sobrien    f->desc = CSAVS(3, 103,
168459243Sobrien	"Vi replace character under the cursor with the next character typed");
168559243Sobrien
168659243Sobrien    f++;
168759243Sobrien    f->name = "vi-replace-mode";
168859243Sobrien    f->func = V_REPLMODE;
168959243Sobrien    f->desc = CSAVS(3, 104, "Vi replace mode");
169059243Sobrien
169159243Sobrien    f++;
169259243Sobrien    f->name = "vi-search-back";
169359243Sobrien    f->func = V_USH_META;
169459243Sobrien    f->desc = CSAVS(3, 105, "Vi search history backward");
169559243Sobrien
169659243Sobrien    f++;
169759243Sobrien    f->name = "vi-search-fwd";
169859243Sobrien    f->func = V_DSH_META;
169959243Sobrien    f->desc = CSAVS(3, 106, "Vi search history forward");
170059243Sobrien
170159243Sobrien    f++;
170259243Sobrien    f->name = "vi-substitute-char";
170359243Sobrien    f->func = V_SUBSTCHAR;
170459243Sobrien    f->desc = CSAVS(3, 107,
170559243Sobrien	"Vi replace character under the cursor and enter insert mode");
170659243Sobrien
170759243Sobrien    f++;
170859243Sobrien    f->name = "vi-substitute-line";
170959243Sobrien    f->func = V_SUBSTLINE;
171059243Sobrien    f->desc = CSAVS(3, 108, "Vi replace entire line");
171159243Sobrien
171259243Sobrien    f++;
171359243Sobrien    f->name = "vi-word-back";
171459243Sobrien    f->func = V_WORDBACK;
171559243Sobrien    f->desc = CSAVS(3, 109, "Vi move to the previous word");
171659243Sobrien
171759243Sobrien    f++;
171859243Sobrien    f->name = "vi-word-fwd";
171959243Sobrien    f->func = V_WORDFWD;
172059243Sobrien    f->desc = CSAVS(3, 110, "Vi move to the next word");
172159243Sobrien
172259243Sobrien    f++;
172359243Sobrien    f->name = "vi-undo";
172459243Sobrien    f->func = V_UNDO;
172559243Sobrien    f->desc = CSAVS(3, 111, "Vi undo last change");
172659243Sobrien
172759243Sobrien    f++;
172859243Sobrien    f->name = "vi-zero";
172959243Sobrien    f->func = V_ZERO;
173059243Sobrien    f->desc = CSAVS(3, 112, "Vi goto the beginning of line");
173159243Sobrien
173259243Sobrien    f++;
173359243Sobrien    f->name = "which-command";
173459243Sobrien    f->func = F_WHICH;
173559243Sobrien    f->desc = CSAVS(3, 113, "Perform which of current command");
173659243Sobrien
173759243Sobrien    f++;
173859243Sobrien    f->name = "yank";
173959243Sobrien    f->func = F_YANK_KILL;
174059243Sobrien    f->desc = CSAVS(3, 114, "Paste cut buffer at cursor position");
174159243Sobrien
174259243Sobrien    f++;
174383098Smp    f->name = "yank-pop";
174483098Smp    f->func = F_YANK_POP;
174583098Smp    f->desc = CSAVS(3, 115,
174683098Smp	"Replace just-yanked text with yank from earlier kill");
174783098Smp
174883098Smp    f++;
174959243Sobrien    f->name = "e_dosify_next";
175059243Sobrien    f->func = F_DOSIFY_NEXT;
175183098Smp    f->desc = CSAVS(3, 118,
175283098Smp	"(WIN32 only) Convert each '/' in next word to '\\\\'");
175383098Smp
175459243Sobrien    f++;
175559243Sobrien    f->name = "e_dosify_prev";
175659243Sobrien    f->func = F_DOSIFY_PREV;
175783098Smp    f->desc = CSAVS(3, 119,
175883098Smp	"(WIN32 only) Convert each '/' in previous word to '\\\\'");
175983098Smp
176069408Sache    f++;
176169408Sache    f->name = "e_page_up";
176269408Sache    f->func = F_PAGE_UP;
176383098Smp    f->desc = CSAVS(3, 120, "(WIN32 only) Page visible console window up");
176483098Smp
176569408Sache    f++;
176669408Sache    f->name = "e_page_down";
176769408Sache    f->func = F_PAGE_DOWN;
176883098Smp    f->desc = CSAVS(3, 121, "(WIN32 only) Page visible console window down");
176959243Sobrien
177059243Sobrien    f++;
177159243Sobrien    f->name = NULL;
177259243Sobrien    f->func = 0;
177359243Sobrien    f->desc = NULL;
177459243Sobrien
177559243Sobrien    f++;
177659243Sobrien    if (f - FuncNames != F_NUM_FUNCNAMES)
177759243Sobrien	abort();
177859243Sobrien}
177959243Sobrien
178059243Sobrien#ifdef DEBUG_EDIT
178159243Sobrienvoid
1782167465SmpCheckMaps(void)
178359243Sobrien{		/* check the size of the key maps */
1784316957Sdchagin    size_t     c1 = NT_NUM_KEYS * sizeof(KEYCMD);
178559243Sobrien
1786316957Sdchagin    if (sizeof(CcKeyMap) != c1)
1787316957Sdchagin	xprintf("CcKeyMap should be %u entries, but is %zu.\r\n",
1788316957Sdchagin		NT_NUM_KEYS, sizeof(CcKeyMap) / sizeof(KEYCMD));
178959243Sobrien
1790316957Sdchagin    if (sizeof(CcAltMap) != c1)
1791316957Sdchagin	xprintf("CcAltMap should be %u entries, but is %zu.\r\n",
1792316957Sdchagin		NT_NUM_KEYS, sizeof(CcAltMap) / sizeof(KEYCMD));
179359243Sobrien
1794316957Sdchagin    if (sizeof(CcEmacsMap) != c1)
1795316957Sdchagin	xprintf("CcEmacsMap should be %u entries, but is %zu.\r\n",
1796316957Sdchagin		NT_NUM_KEYS, sizeof(CcEmacsMap) / sizeof(KEYCMD));
179759243Sobrien
1798316957Sdchagin    if (sizeof(CcViMap) != c1)
1799316957Sdchagin	xprintf("CcViMap should be %u entries, but is %zu.\r\n",
1800316957Sdchagin		NT_NUM_KEYS, sizeof(CcViMap) / sizeof(KEYCMD));
180159243Sobrien
1802316957Sdchagin    if (sizeof(CcViCmdMap) != c1)
1803316957Sdchagin	xprintf("CcViCmdMap should be %u entries, but is %zu.\r\n",
1804316957Sdchagin		NT_NUM_KEYS, sizeof(CcViCmdMap) / sizeof(KEYCMD));
180559243Sobrien}
180659243Sobrien
180759243Sobrien#endif
180859243Sobrien
1809145479Smpint    MapsAreInited = 0;
1810145479Smpint    NLSMapsAreInited = 0;
1811145479Smpint    NoNLSRebind;
181259243Sobrien
181359243Sobrienvoid
1814167465Smped_InitNLSMaps(void)
181559243Sobrien{
1816145479Smp    int i;
181759243Sobrien
181859243Sobrien    if (AsciiOnly)
181959243Sobrien	return;
182059243Sobrien    if (NoNLSRebind)
182159243Sobrien	return;
182259243Sobrien    for (i = 0200; i <= 0377; i++) {
1823145479Smp	if (Isprint(CTL_ESC(i))) {
1824145479Smp	    CcKeyMap[CTL_ESC(i)] = F_INSERT;
182559243Sobrien	}
182659243Sobrien    }
182759243Sobrien    NLSMapsAreInited = 1;
182859243Sobrien}
182959243Sobrien
183059243Sobrienstatic void
1831167465Smped_InitMetaBindings(void)
183259243Sobrien{
183359243Sobrien    Char    buf[3];
183459243Sobrien    int     i;
183559243Sobrien    CStr    cstr;
183659243Sobrien    KEYCMD *map;
183759243Sobrien
183859243Sobrien    map = CcKeyMap;
1839145479Smp    for (i = 0; i <= 0377 && CcKeyMap[CTL_ESC(i)] != F_METANEXT; i++)
184059243Sobrien	continue;
184159243Sobrien    if (i > 0377) {
1842145479Smp	for (i = 0; i <= 0377 && CcAltMap[CTL_ESC(i)] != F_METANEXT; i++)
184359243Sobrien	    continue;
184459243Sobrien	if (i > 0377) {
1845145479Smp	    i = '\033';
184659243Sobrien	    if (VImode)
184759243Sobrien		map = CcAltMap;
184859243Sobrien	}
184959243Sobrien	else {
185059243Sobrien	    map = CcAltMap;
185159243Sobrien	}
185259243Sobrien    }
1853145479Smp    buf[0] = (Char)CTL_ESC(i);
185459243Sobrien    buf[2] = 0;
185559243Sobrien    cstr.buf = buf;
185659243Sobrien    cstr.len = 2;
185759243Sobrien    for (i = 0200; i <= 0377; i++) {
1858145479Smp	if (map[CTL_ESC(i)] != F_INSERT && map[CTL_ESC(i)] != F_UNASSIGNED && map[CTL_ESC(i)] != F_XKEY) {
1859145479Smp	    buf[1] = CTL_ESC(i & ASCII);
1860145479Smp	    AddXkey(&cstr, XmapCmd((int) map[CTL_ESC(i)]), XK_CMD);
186159243Sobrien	}
186259243Sobrien    }
186359243Sobrien    map[buf[0]] = F_XKEY;
186459243Sobrien}
186559243Sobrien
186659243Sobrienvoid
1867167465Smped_InitVIMaps(void)
186859243Sobrien{
1869145479Smp    int i;
187059243Sobrien
187159243Sobrien    VImode = 1;
1872316957Sdchagin    setNS(STRvimode);
1873316957Sdchagin    update_wordchars();
1874316957Sdchagin
187559243Sobrien    ResetXmap();
187659243Sobrien    for (i = 0; i < NT_NUM_KEYS; i++) {
187759243Sobrien	CcKeyMap[i] = CcViMap[i];
187859243Sobrien	CcAltMap[i] = CcViCmdMap[i];
187959243Sobrien    }
188059243Sobrien    ed_InitMetaBindings();
188159243Sobrien    ed_InitNLSMaps();
188259243Sobrien    ResetArrowKeys();
188359243Sobrien    BindArrowKeys();
188459243Sobrien}
188559243Sobrien
188659243Sobrienvoid
1887167465Smped_InitEmacsMaps(void)
188859243Sobrien{
188959243Sobrien    int     i;
189059243Sobrien    Char    buf[3];
189159243Sobrien    CStr    cstr;
189259243Sobrien    cstr.buf = buf;
189359243Sobrien    cstr.len = 2;
189459243Sobrien
189559243Sobrien    VImode = 0;
1896316957Sdchagin    if (adrof(STRvimode))
1897316957Sdchagin	unsetv(STRvimode);
1898316957Sdchagin    update_wordchars();
1899316957Sdchagin
190059243Sobrien    ResetXmap();
190159243Sobrien    for (i = 0; i < NT_NUM_KEYS; i++) {
190259243Sobrien	CcKeyMap[i] = CcEmacsMap[i];
190359243Sobrien	CcAltMap[i] = F_UNASSIGNED;
190459243Sobrien    }
190559243Sobrien    ed_InitMetaBindings();
190659243Sobrien    ed_InitNLSMaps();
190759243Sobrien    buf[0] = CTL_ESC('\030');
190859243Sobrien    buf[2] = 0;
190959243Sobrien    buf[1] = CTL_ESC('\030');
191059243Sobrien    AddXkey(&cstr, XmapCmd(F_EXCHANGE_MARK), XK_CMD);
191159243Sobrien    buf[1] = '*';
191259243Sobrien    AddXkey(&cstr, XmapCmd(F_EXPAND_GLOB),   XK_CMD);
191359243Sobrien    buf[1] = '$';
191459243Sobrien    AddXkey(&cstr, XmapCmd(F_EXPAND_VARS),   XK_CMD);
191559243Sobrien    buf[1] = 'G';
191659243Sobrien    AddXkey(&cstr, XmapCmd(F_LIST_GLOB),     XK_CMD);
191759243Sobrien    buf[1] = 'g';
191859243Sobrien    AddXkey(&cstr, XmapCmd(F_LIST_GLOB),     XK_CMD);
191959243Sobrien    buf[1] = 'n';
192059243Sobrien    AddXkey(&cstr, XmapCmd(F_PATH_NORM),     XK_CMD);
192159243Sobrien    buf[1] = 'N';
192259243Sobrien    AddXkey(&cstr, XmapCmd(F_PATH_NORM),     XK_CMD);
192359243Sobrien    buf[1] = '?';
192459243Sobrien    AddXkey(&cstr, XmapCmd(F_COMMAND_NORM),  XK_CMD);
192559243Sobrien    buf[1] = '\t';
192659243Sobrien    AddXkey(&cstr, XmapCmd(F_COMPLETE_ALL),  XK_CMD);
192759243Sobrien    buf[1] = CTL_ESC('\004');	/* ^D */
192859243Sobrien    AddXkey(&cstr, XmapCmd(F_LIST_ALL),      XK_CMD);
192959243Sobrien    ResetArrowKeys();
193059243Sobrien    BindArrowKeys();
193159243Sobrien}
193259243Sobrien
193359243Sobrienvoid
1934167465Smped_InitMaps(void)
193559243Sobrien{
193659243Sobrien    if (MapsAreInited)
193759243Sobrien	return;
193869408Sache#ifndef IS_ASCII
193959243Sobrien    /* This machine has an EBCDIC charset. The assumptions made for the
194059243Sobrien     * initialized keymaps therefore don't hold, since they are based on
194159243Sobrien     * ASCII (or ISO8859-1).
194259243Sobrien     * Here, we do a one-time transformation to EBCDIC environment
194359243Sobrien     * for the key initializations.
194459243Sobrien     */
194559243Sobrien    {
194659243Sobrien	KEYCMD temp[NT_NUM_KEYS];
194759243Sobrien	static KEYCMD *const list[3] = { CcEmacsMap, CcViMap, CcViCmdMap };
1948145479Smp	int i, table;
194959243Sobrien
195059243Sobrien	for (table=0; table<3; ++table)
195159243Sobrien	{
195259243Sobrien	    /* copy ASCII ordered map to temp table */
195359243Sobrien	    for (i = 0; i < NT_NUM_KEYS; i++) {
195459243Sobrien		temp[i] = list[table][i];
195559243Sobrien	    }
195659243Sobrien	    /* write back as EBCDIC ordered map */
195759243Sobrien	    for (i = 0; i < NT_NUM_KEYS; i++) {
195859243Sobrien		list[table][_toebcdic[i]] = temp[i];
195959243Sobrien	    }
196059243Sobrien	}
196159243Sobrien    }
196269408Sache#endif /* !IS_ASCII */
196359243Sobrien
196459243Sobrien#ifdef VIDEFAULT
196559243Sobrien    ed_InitVIMaps();
196659243Sobrien#else
196759243Sobrien    ed_InitEmacsMaps();
196859243Sobrien#endif
196959243Sobrien
197059243Sobrien    MapsAreInited = 1;
197159243Sobrien}
1972