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