ed.defns.c revision 167465
1/* $Header: /p/tcsh/cvsroot/tcsh/ed.defns.c,v 3.46 2006/03/02 18:46:44 christos Exp $ */
2/*
3 * ed.defns.c: Editor function definitions and initialization
4 */
5/*-
6 * Copyright (c) 1980, 1991 The Regents of the University of California.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the University nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33#include "sh.h"
34
35RCSID("$tcsh: ed.defns.c,v 3.46 2006/03/02 18:46:44 christos Exp $")
36
37#include "ed.h"
38
39static	void		ed_InitMetaBindings 	(void);
40
41PFCmd   CcFuncTbl[] = {		/* table of available commands */
42    e_unassigned,
43/* no #define here -- this is a dummy to detect initing of the key map */
44    e_unassigned,
45#define		F_UNASSIGNED	1
46    e_insert,
47#define		F_INSERT	2
48    e_newline,
49#define		F_NEWLINE	3
50    e_delprev,
51#define		F_DELPREV	4
52    e_delnext,
53#define		F_DELNEXT	5
54    e_toend,
55#define		F_TOEND		6
56    e_tobeg,
57#define		F_TOBEG		7
58    e_charback,
59#define		F_CHARBACK	8
60    e_charfwd,
61#define		F_CHARFWD	9
62    e_quote,
63#define		F_QUOTE		10
64    e_startover,
65#define		F_STARTOVER	11
66    e_redisp,
67#define		F_REDISP	12
68    e_tty_int,
69#define		F_TTY_INT	13
70    e_wordback,
71#define		F_WORDBACK	14
72    e_wordfwd,
73#define		F_WORDFWD	15
74    e_cleardisp,
75#define		F_CLEARDISP	16
76    e_complete,
77#define		F_COMPLETE	17
78    e_correct,
79#define		F_CORRECT	18
80    e_up_hist,
81#define		F_UP_HIST	19
82    e_down_hist,
83#define		F_DOWN_HIST	20
84    e_up_search_hist,
85#define		F_UP_SEARCH_HIST	21
86    e_down_search_hist,
87#define		F_DOWN_SEARCH_HIST	22
88    e_helpme,
89#define		F_HELPME	23
90    e_list_choices,
91#define		F_LIST_CHOICES	24
92    e_delwordprev,
93#define		F_DELWORDPREV	25
94    e_delwordnext,
95#define		F_DELWORDNEXT	26
96    e_digit,
97#define		F_DIGIT		27
98    e_killend,
99#define		F_KILLEND	28
100    e_killbeg,
101#define		F_KILLBEG	29
102    e_metanext,
103#define		F_METANEXT	30
104    e_send_eof,
105#define		F_SEND_EOF	31
106    e_charswitch,
107#define		F_CHARSWITCH	32
108    e_which,
109#define		F_WHICH		33
110    e_yank_kill,
111#define		F_YANK_KILL	34
112    e_tty_dsusp,
113#define		F_TTY_DSUSP	35
114    e_tty_flusho,
115#define		F_TTY_FLUSHO	36
116    e_tty_quit,
117#define		F_TTY_QUIT	37
118    e_tty_tsusp,
119#define		F_TTY_TSUSP	38
120    e_tty_stopo,
121#define		F_TTY_STOPO	39
122    e_tty_starto,
123#define		F_TTY_STARTO	40
124    e_argfour,
125#define		F_ARGFOUR	41
126    e_set_mark,
127#define		F_SET_MARK	42
128    e_exchange_mark,
129#define		F_EXCHANGE_MARK	43
130    e_last_item,
131#define		F_LAST_ITEM	44
132    e_delnext_list_eof,
133#define		F_DELNEXT_LIST_EOF	45
134    v_cmd_mode,
135#define		V_CMD_MODE	46
136    v_insert,
137#define		V_INSERT	47
138    e_argdigit,
139#define		F_ARGDIGIT	48
140    e_killregion,
141#define		F_KILLREGION	49
142    e_copyregion,
143#define		F_COPYREGION	50
144    e_gcharswitch,
145#define		F_GCHARSWITCH	51
146    e_run_fg_editor,
147#define		F_RUN_FG_EDITOR	52
148    e_unassigned,	/* place holder for sequence lead in character */
149#define		F_XKEY		53
150    e_uppercase,
151#define         F_CASEUPPER     54
152    e_lowercase,
153#define         F_CASELOWER     55
154    e_capitolcase,
155#define         F_CASECAPITAL   56
156    v_zero,
157#define		V_ZERO		57
158    v_add,
159#define		V_ADD		58
160    v_addend,
161#define		V_ADDEND	59
162    v_wordbegnext,
163#define		V_WORDBEGNEXT	60
164    e_killall,
165#define		F_KILLALL	61
166    e_unassigned,
167/* F_EXTENDNEXT removed */
168    v_insbeg,
169#define		V_INSBEG	63
170    v_replmode,
171#define		V_REPLMODE	64
172    v_replone,
173#define		V_REPLONE	65
174    v_substline,
175#define		V_SUBSTLINE	66
176    v_substchar,
177#define		V_SUBSTCHAR	67
178    v_chgtoend,
179#define		V_CHGTOEND	68
180    e_list_eof,
181#define		F_LIST_EOF	69
182    e_list_glob,
183#define		F_LIST_GLOB	70
184    e_expand_history,
185#define		F_EXPAND_HISTORY	71
186    e_magic_space,
187#define		F_MAGIC_SPACE	72
188    e_insovr,
189#define		F_INSOVR	73
190    v_cm_complete,
191#define		V_CM_COMPLETE	74
192    e_copyprev,
193#define		F_COPYPREV	75
194    e_correctl,
195#define		F_CORRECT_L	76
196    e_expand_glob,
197#define		F_EXPAND_GLOB	77
198    e_expand_vars,
199#define		F_EXPAND_VARS	78
200    e_toggle_hist,
201#define		F_TOGGLE_HIST	79
202    v_change_case,
203#define		V_CHGCASE	80
204    e_expand,
205#define		F_EXPAND	81
206    e_load_average,
207#define		F_LOAD_AVERAGE	82
208    v_delprev,
209#define		V_DELPREV	83
210    v_delmeta,
211#define		V_DELMETA	84
212    v_wordfwd,
213#define		V_WORDFWD	85
214    v_wordback,
215#define		V_WORDBACK	86
216    v_endword,
217#define		V_ENDWORD	87
218    v_eword,
219#define		V_EWORD		88
220    v_undo,
221#define		V_UNDO		89
222    v_ush_meta,
223#define		V_USH_META	90
224    v_dsh_meta,
225#define		V_DSH_META	91
226    v_rsrch_fwd,
227#define		V_RSRCH_FWD	92
228    v_rsrch_back,
229#define		V_RSRCH_BACK	93
230    v_char_fwd,
231#define		V_CHAR_FWD	94
232    v_char_back,
233#define		V_CHAR_BACK	95
234    v_chgmeta,
235#define		V_CHGMETA	96
236    e_inc_fwd,
237#define		F_INC_FWD	97
238    e_inc_back,
239#define		F_INC_BACK	98
240    v_rchar_fwd,
241#define		V_RCHAR_FWD	99
242    v_rchar_back,
243#define		V_RCHAR_BACK	100
244    v_charto_fwd,
245#define		V_CHARTO_FWD	101
246    v_charto_back,
247#define		V_CHARTO_BACK	102
248    e_normalize_path,
249#define		F_PATH_NORM	103
250    e_delnext_eof,		/* added by mtk@ari.ncl.omron.co.jp (920818) */
251#define		F_DELNEXT_EOF	104
252    e_stuff_char,
253#define		F_STUFF_CHAR	105
254    e_complete_all,
255#define		F_COMPLETE_ALL	106
256    e_list_all,
257#define		F_LIST_ALL	107
258    e_complete_fwd,
259#define		F_COMPLETE_FWD	108
260    e_complete_back,
261#define		F_COMPLETE_BACK	109
262    e_delnext_list,
263#define		F_DELNEXT_LIST	110
264    e_normalize_command,
265#define		F_COMMAND_NORM	111
266    e_dabbrev_expand,
267#define		F_DABBREV_EXPAND	112
268    e_copy_to_clipboard,
269#define		F_COPY_CLIP	113
270    e_paste_from_clipboard,
271#define		F_PASTE_CLIP	114
272    e_dosify_next,
273#define		F_DOSIFY_NEXT	115
274    e_dosify_prev,
275#define		F_DOSIFY_PREV	116
276    e_page_up,
277#define		F_PAGE_UP	117
278    e_page_down,
279#define		F_PAGE_DOWN	118
280    e_yank_pop,
281#define		F_YANK_POP	119
282    e_newline_hold,
283#define		F_NEWLINE_HOLD	120
284    e_newline_down_hist,
285#define		F_NEWLINE_DOWN_HIST	121
286    0				/* DUMMY VALUE */
287#define		F_NUM_FNS	122
288
289};
290
291KEYCMD  NumFuns = F_NUM_FNS;
292
293KEYCMD  CcKeyMap[NT_NUM_KEYS];		/* the real key map */
294KEYCMD  CcAltMap[NT_NUM_KEYS];		/* the alternative key map */
295#define	F_NUM_FUNCNAMES	(F_NUM_FNS + 2)
296struct KeyFuncs FuncNames[F_NUM_FUNCNAMES];
297
298#ifdef WINNT_NATIVE
299extern KEYCMD CcEmacsMap[];
300extern KEYCMD CcViMap[];
301extern KEYCMD  CcViCmdMap[];
302#else /* !WINNT_NATIVE*/
303KEYCMD  CcEmacsMap[] = {
304/* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
305   bytes long */
306
307    F_SET_MARK,			/* ^@ */
308    F_TOBEG,			/* ^A */
309    F_CHARBACK,			/* ^B */
310    F_TTY_INT,			/* ^C */
311    F_DELNEXT_LIST_EOF,		/* ^D */
312    F_TOEND,			/* ^E */
313    F_CHARFWD,			/* ^F */
314    F_UNASSIGNED,		/* ^G */
315    F_DELPREV,			/* ^H */
316    F_COMPLETE,			/* ^I */
317    F_NEWLINE,			/* ^J */
318    F_KILLEND,			/* ^K */
319    F_CLEARDISP,		/* ^L */
320    F_NEWLINE,			/* ^M */
321    F_DOWN_HIST,		/* ^N */
322    F_TTY_FLUSHO,		/* ^O */
323    F_UP_HIST,			/* ^P */
324    F_TTY_STARTO,		/* ^Q */
325    F_REDISP,			/* ^R */
326    F_TTY_STOPO,		/* ^S */
327    F_CHARSWITCH,		/* ^T */
328    F_KILLALL,			/* ^U */
329    F_QUOTE,			/* ^V */
330    F_KILLREGION,		/* ^W */
331    F_XKEY,			/* ^X */
332    F_YANK_KILL,		/* ^Y */
333    F_TTY_TSUSP,		/* ^Z */
334    F_METANEXT,			/* ^[ */
335    F_TTY_QUIT,			/* ^\ */
336    F_TTY_DSUSP,		/* ^] */
337    F_UNASSIGNED,		/* ^^ */
338    F_UNASSIGNED,		/* ^_ */
339    F_INSERT,			/* SPACE */
340    F_INSERT,			/* ! */
341    F_INSERT,			/* " */
342    F_INSERT,			/* # */
343    F_INSERT,			/* $ */
344    F_INSERT,			/* % */
345    F_INSERT,			/* & */
346    F_INSERT,			/* ' */
347    F_INSERT,			/* ( */
348    F_INSERT,			/* ) */
349    F_INSERT,			/* * */
350    F_INSERT,			/* + */
351    F_INSERT,			/* , */
352    F_INSERT,			/* - */
353    F_INSERT,			/* . */
354    F_INSERT,			/* / */
355    F_DIGIT,			/* 0 */
356    F_DIGIT,			/* 1 */
357    F_DIGIT,			/* 2 */
358    F_DIGIT,			/* 3 */
359    F_DIGIT,			/* 4 */
360    F_DIGIT,			/* 5 */
361    F_DIGIT,			/* 6 */
362    F_DIGIT,			/* 7 */
363    F_DIGIT,			/* 8 */
364    F_DIGIT,			/* 9 */
365    F_INSERT,			/* : */
366    F_INSERT,			/* ; */
367    F_INSERT,			/* < */
368    F_INSERT,			/* = */
369    F_INSERT,			/* > */
370    F_INSERT,			/* ? */
371    F_INSERT,			/* @ */
372    F_INSERT,			/* A */
373    F_INSERT,			/* B */
374    F_INSERT,			/* C */
375    F_INSERT,			/* D */
376    F_INSERT,			/* E */
377    F_INSERT,			/* F */
378    F_INSERT,			/* G */
379    F_INSERT,			/* H */
380    F_INSERT,			/* I */
381    F_INSERT,			/* J */
382    F_INSERT,			/* K */
383    F_INSERT,			/* L */
384    F_INSERT,			/* M */
385    F_INSERT,			/* N */
386    F_INSERT,			/* O */
387    F_INSERT,			/* P */
388    F_INSERT,			/* Q */
389    F_INSERT,			/* R */
390    F_INSERT,			/* S */
391    F_INSERT,			/* T */
392    F_INSERT,			/* U */
393    F_INSERT,			/* V */
394    F_INSERT,			/* W */
395    F_INSERT,			/* X */
396    F_INSERT,			/* Y */
397    F_INSERT,			/* Z */
398    F_INSERT,			/* [ */
399    F_INSERT,			/* \ */
400    F_INSERT,			/* ] */
401    F_INSERT,			/* ^ */
402    F_INSERT,			/* _ */
403    F_INSERT,			/* ` */
404    F_INSERT,			/* a */
405    F_INSERT,			/* b */
406    F_INSERT,			/* c */
407    F_INSERT,			/* d */
408    F_INSERT,			/* e */
409    F_INSERT,			/* f */
410    F_INSERT,			/* g */
411    F_INSERT,			/* h */
412    F_INSERT,			/* i */
413    F_INSERT,			/* j */
414    F_INSERT,			/* k */
415    F_INSERT,			/* l */
416    F_INSERT,			/* m */
417    F_INSERT,			/* n */
418    F_INSERT,			/* o */
419    F_INSERT,			/* p */
420    F_INSERT,			/* q */
421    F_INSERT,			/* r */
422    F_INSERT,			/* s */
423    F_INSERT,			/* t */
424    F_INSERT,			/* u */
425    F_INSERT,			/* v */
426    F_INSERT,			/* w */
427    F_INSERT,			/* x */
428    F_INSERT,			/* y */
429    F_INSERT,			/* z */
430    F_INSERT,			/* { */
431    F_INSERT,			/* | */
432    F_INSERT,			/* } */
433    F_INSERT,			/* ~ */
434    F_DELPREV,			/* ^? */
435    F_UNASSIGNED,		/* M-^@ */
436    F_UNASSIGNED,		/* M-^A */
437    F_UNASSIGNED,		/* M-^B */
438    F_UNASSIGNED,		/* M-^C */
439    F_LIST_CHOICES,		/* M-^D */
440    F_UNASSIGNED,		/* M-^E */
441    F_UNASSIGNED,		/* M-^F */
442    F_UNASSIGNED,		/* M-^G */
443    F_DELWORDPREV,		/* M-^H */
444    F_COMPLETE,			/* M-^I */
445    F_UNASSIGNED,		/* M-^J */
446    F_UNASSIGNED,		/* M-^K */
447    F_CLEARDISP,		/* M-^L */
448    F_UNASSIGNED,		/* M-^M */
449    F_UNASSIGNED,		/* M-^N */
450    F_UNASSIGNED,		/* M-^O */
451    F_UNASSIGNED,		/* M-^P */
452    F_UNASSIGNED,		/* M-^Q */
453    F_UNASSIGNED,		/* M-^R */
454    F_UNASSIGNED,		/* M-^S */
455    F_UNASSIGNED,		/* M-^T */
456    F_UNASSIGNED,		/* M-^U */
457    F_UNASSIGNED,		/* M-^V */
458    F_UNASSIGNED,		/* M-^W */
459    F_UNASSIGNED,		/* M-^X */
460    F_UNASSIGNED,		/* M-^Y */
461    F_RUN_FG_EDITOR,		/* M-^Z */
462    F_COMPLETE,			/* M-^[ */
463    F_UNASSIGNED,		/* M-^\ */
464    F_UNASSIGNED,		/* M-^] */
465    F_UNASSIGNED,		/* M-^^ */
466    F_COPYPREV,			/* M-^_ */
467    F_EXPAND_HISTORY,		/* M-SPACE */
468    F_EXPAND_HISTORY,		/* M-! */
469    F_UNASSIGNED,		/* M-" */
470    F_UNASSIGNED,		/* M-# */
471    F_CORRECT_L,		/* M-$ */
472    F_UNASSIGNED,		/* M-% */
473    F_UNASSIGNED,		/* M-& */
474    F_UNASSIGNED,		/* M-' */
475    F_UNASSIGNED,		/* M-( */
476    F_UNASSIGNED,		/* M-) */
477    F_UNASSIGNED,		/* M-* */
478    F_UNASSIGNED,		/* M-+ */
479    F_UNASSIGNED,		/* M-, */
480    F_UNASSIGNED,		/* M-- */
481    F_UNASSIGNED,		/* M-. */
482    F_DABBREV_EXPAND,		/* M-/ */
483    F_ARGDIGIT,			/* M-0 */
484    F_ARGDIGIT,			/* M-1 */
485    F_ARGDIGIT,			/* M-2 */
486    F_ARGDIGIT,			/* M-3 */
487    F_ARGDIGIT,			/* M-4 */
488    F_ARGDIGIT,			/* M-5 */
489    F_ARGDIGIT,			/* M-6 */
490    F_ARGDIGIT,			/* M-7 */
491    F_ARGDIGIT,			/* M-8 */
492    F_ARGDIGIT,			/* M-9 */
493    F_UNASSIGNED,		/* M-: */
494    F_UNASSIGNED,		/* M-; */
495    F_UNASSIGNED,		/* M-< */
496    F_UNASSIGNED,		/* M-= */
497    F_UNASSIGNED,		/* M-> */
498    F_WHICH,			/* M-? */
499    F_UNASSIGNED,		/* M-@ */
500    F_NEWLINE_HOLD,		/* M-A */
501    F_WORDBACK,			/* M-B */
502    F_CASECAPITAL,		/* M-C */
503    F_DELWORDNEXT,		/* M-D */
504    F_UNASSIGNED,		/* M-E */
505    F_WORDFWD,			/* M-F */
506    F_UNASSIGNED,		/* M-G */
507    F_HELPME,			/* M-H */
508    F_UNASSIGNED,		/* M-I */
509    F_UNASSIGNED,		/* M-J */
510    F_UNASSIGNED,		/* M-K */
511    F_CASELOWER,		/* M-L */
512    F_UNASSIGNED,		/* M-M */
513    F_DOWN_SEARCH_HIST,		/* M-N */
514    F_XKEY,			/* M-O *//* extended key esc PWP Mar 88 */
515    F_UP_SEARCH_HIST,		/* M-P */
516    F_UNASSIGNED,		/* M-Q */
517    F_TOGGLE_HIST,		/* M-R */
518    F_CORRECT,			/* M-S */
519    F_UNASSIGNED,		/* M-T */
520    F_CASEUPPER,		/* M-U */
521    F_UNASSIGNED,		/* M-V */
522    F_COPYREGION,		/* M-W */
523    F_UNASSIGNED,		/* M-X */
524    F_YANK_POP,			/* M-Y */
525    F_UNASSIGNED,		/* M-Z */
526    F_XKEY,			/* M-[ *//* extended key esc -mf Oct 87 */
527    F_UNASSIGNED,		/* M-\ */
528    F_UNASSIGNED,		/* M-] */
529    F_UNASSIGNED,		/* M-^ */
530    F_LAST_ITEM,		/* M-_ */
531    F_UNASSIGNED,		/* M-` */
532    F_NEWLINE_HOLD,		/* M-a */
533    F_WORDBACK,			/* M-b */
534    F_CASECAPITAL,		/* M-c */
535    F_DELWORDNEXT,		/* M-d */
536    F_UNASSIGNED,		/* M-e */
537    F_WORDFWD,			/* M-f */
538    F_UNASSIGNED,		/* M-g */
539    F_HELPME,			/* M-h */
540    F_UNASSIGNED,		/* M-i */
541    F_UNASSIGNED,		/* M-j */
542    F_UNASSIGNED,		/* M-k */
543    F_CASELOWER,		/* M-l */
544    F_UNASSIGNED,		/* M-m */
545    F_DOWN_SEARCH_HIST,		/* M-n */
546    F_UNASSIGNED,		/* M-o */
547    F_UP_SEARCH_HIST,		/* M-p */
548    F_UNASSIGNED,		/* M-q */
549    F_TOGGLE_HIST,		/* M-r */
550    F_CORRECT,			/* M-s */
551    F_UNASSIGNED,		/* M-t */
552    F_CASEUPPER,		/* M-u */
553    F_UNASSIGNED,		/* M-v */
554    F_COPYREGION,		/* M-w */
555    F_UNASSIGNED,		/* M-x */
556    F_YANK_POP,			/* M-y */
557    F_UNASSIGNED,		/* M-z */
558    F_UNASSIGNED,		/* M-{ */
559    F_UNASSIGNED,		/* M-| */
560    F_UNASSIGNED,		/* M-} */
561    F_UNASSIGNED,		/* M-~ */
562    F_DELWORDPREV		/* M-^? */
563};
564
565/*
566 * keymap table for vi.  Each index into above tbl; should be
567 * 256 entries long.  Vi mode uses a sticky-extend to do command mode:
568 * insert mode characters are in the normal keymap, and command mode
569 * in the extended keymap.
570 */
571static KEYCMD  CcViMap[] = {
572#ifdef KSHVI
573    F_UNASSIGNED,		/* ^@ */
574    F_INSERT,			/* ^A */
575    F_INSERT,			/* ^B */
576    F_INSERT,			/* ^C */
577    F_INSERT,			/* ^D */
578    F_INSERT,			/* ^E */
579    F_INSERT,			/* ^F */
580    F_INSERT,			/* ^G */
581    V_DELPREV,			/* ^H */   /* BackSpace key */
582    F_COMPLETE,			/* ^I */   /* Tab Key  */
583    F_NEWLINE,			/* ^J */
584    F_INSERT,			/* ^K */
585    F_INSERT,			/* ^L */
586    F_NEWLINE,			/* ^M */
587    F_INSERT,			/* ^N */
588    F_INSERT,			/* ^O */
589    F_INSERT,			/* ^P */
590    F_TTY_STARTO,		/* ^Q */
591    F_INSERT,			/* ^R */
592    F_INSERT,			/* ^S */
593    F_INSERT,			/* ^T */
594    F_INSERT,			/* ^U */
595    F_QUOTE,			/* ^V */
596    F_DELWORDPREV,		/* ^W */  /* Only until start edit pos */
597    F_INSERT,			/* ^X */
598    F_INSERT,			/* ^Y */
599    F_INSERT,			/* ^Z */
600    V_CMD_MODE,			/* ^[ */  /* [ Esc ] key */
601    F_TTY_QUIT,			/* ^\ */
602    F_INSERT,			/* ^] */
603    F_INSERT,			/* ^^ */
604    F_INSERT,			/* ^_ */
605#else /* !KSHVI */
606    F_UNASSIGNED,		/* ^@ */   /* NOTE: These mapping do NOT */
607    F_TOBEG,			/* ^A */   /* Correspond well to the KSH */
608    F_CHARBACK,			/* ^B */   /* VI editting assignments    */
609    F_TTY_INT,			/* ^C */   /* On the other hand they are */
610    F_LIST_EOF,			/* ^D */   /* convenient any many people */
611    F_TOEND,			/* ^E */   /* have gotten used to them   */
612    F_CHARFWD,			/* ^F */
613    F_LIST_GLOB,		/* ^G */
614    F_DELPREV,			/* ^H */   /* BackSpace key */
615    F_COMPLETE,			/* ^I */   /* Tab Key */
616    F_NEWLINE,			/* ^J */
617    F_KILLEND,			/* ^K */
618    F_CLEARDISP,		/* ^L */
619    F_NEWLINE,			/* ^M */
620    F_DOWN_HIST,		/* ^N */
621    F_TTY_FLUSHO,		/* ^O */
622    F_UP_HIST,			/* ^P */
623    F_TTY_STARTO,		/* ^Q */
624    F_REDISP,			/* ^R */
625    F_TTY_STOPO,		/* ^S */
626    F_CHARSWITCH,		/* ^T */
627    F_KILLBEG,			/* ^U */
628    F_QUOTE,			/* ^V */
629    F_DELWORDPREV,		/* ^W */
630    F_EXPAND,			/* ^X */
631    F_TTY_DSUSP,		/* ^Y */
632    F_TTY_TSUSP,		/* ^Z */
633    V_CMD_MODE,			/* ^[ */
634    F_TTY_QUIT,			/* ^\ */
635    F_UNASSIGNED,		/* ^] */
636    F_UNASSIGNED,		/* ^^ */
637    F_UNASSIGNED,		/* ^_ */
638#endif  /* KSHVI */
639    F_INSERT,			/* SPACE */
640    F_INSERT,			/* ! */
641    F_INSERT,			/* " */
642    F_INSERT,			/* # */
643    F_INSERT,			/* $ */
644    F_INSERT,			/* % */
645    F_INSERT,			/* & */
646    F_INSERT,			/* ' */
647    F_INSERT,			/* ( */
648    F_INSERT,			/* ) */
649    F_INSERT,			/* * */
650    F_INSERT,			/* + */
651    F_INSERT,			/* , */
652    F_INSERT,			/* - */
653    F_INSERT,			/* . */
654    F_INSERT,			/* / */
655    F_INSERT,			/* 0 */
656    F_INSERT,			/* 1 */
657    F_INSERT,			/* 2 */
658    F_INSERT,			/* 3 */
659    F_INSERT,			/* 4 */
660    F_INSERT,			/* 5 */
661    F_INSERT,			/* 6 */
662    F_INSERT,			/* 7 */
663    F_INSERT,			/* 8 */
664    F_INSERT,			/* 9 */
665    F_INSERT,			/* : */
666    F_INSERT,			/* ; */
667    F_INSERT,			/* < */
668    F_INSERT,			/* = */
669    F_INSERT,			/* > */
670    F_INSERT,			/* ? */
671    F_INSERT,			/* @ */
672    F_INSERT,			/* A */
673    F_INSERT,			/* B */
674    F_INSERT,			/* C */
675    F_INSERT,			/* D */
676    F_INSERT,			/* E */
677    F_INSERT,			/* F */
678    F_INSERT,			/* G */
679    F_INSERT,			/* H */
680    F_INSERT,			/* I */
681    F_INSERT,			/* J */
682    F_INSERT,			/* K */
683    F_INSERT,			/* L */
684    F_INSERT,			/* M */
685    F_INSERT,			/* N */
686    F_INSERT,			/* O */
687    F_INSERT,			/* P */
688    F_INSERT,			/* Q */
689    F_INSERT,			/* R */
690    F_INSERT,			/* S */
691    F_INSERT,			/* T */
692    F_INSERT,			/* U */
693    F_INSERT,			/* V */
694    F_INSERT,			/* W */
695    F_INSERT,			/* X */
696    F_INSERT,			/* Y */
697    F_INSERT,			/* Z */
698    F_INSERT,			/* [ */
699    F_INSERT,			/* \ */
700    F_INSERT,			/* ] */
701    F_INSERT,			/* ^ */
702    F_INSERT,			/* _ */
703    F_INSERT,			/* ` */
704    F_INSERT,			/* a */
705    F_INSERT,			/* b */
706    F_INSERT,			/* c */
707    F_INSERT,			/* d */
708    F_INSERT,			/* e */
709    F_INSERT,			/* f */
710    F_INSERT,			/* g */
711    F_INSERT,			/* h */
712    F_INSERT,			/* i */
713    F_INSERT,			/* j */
714    F_INSERT,			/* k */
715    F_INSERT,			/* l */
716    F_INSERT,			/* m */
717    F_INSERT,			/* n */
718    F_INSERT,			/* o */
719    F_INSERT,			/* p */
720    F_INSERT,			/* q */
721    F_INSERT,			/* r */
722    F_INSERT,			/* s */
723    F_INSERT,			/* t */
724    F_INSERT,			/* u */
725    F_INSERT,			/* v */
726    F_INSERT,			/* w */
727    F_INSERT,			/* x */
728    F_INSERT,			/* y */
729    F_INSERT,			/* z */
730    F_INSERT,			/* { */
731    F_INSERT,			/* | */
732    F_INSERT,			/* } */
733    F_INSERT,			/* ~ */
734    F_DELPREV,			/* ^? */
735    F_UNASSIGNED,		/* M-^@ */
736    F_UNASSIGNED,		/* M-^A */
737    F_UNASSIGNED,		/* M-^B */
738    F_UNASSIGNED,		/* M-^C */
739    F_UNASSIGNED,		/* M-^D */
740    F_UNASSIGNED,		/* M-^E */
741    F_UNASSIGNED,		/* M-^F */
742    F_UNASSIGNED,		/* M-^G */
743    F_UNASSIGNED,		/* M-^H */
744    F_UNASSIGNED,		/* M-^I */
745    F_UNASSIGNED,		/* M-^J */
746    F_UNASSIGNED,		/* M-^K */
747    F_UNASSIGNED,		/* M-^L */
748    F_UNASSIGNED,		/* M-^M */
749    F_UNASSIGNED,		/* M-^N */
750    F_UNASSIGNED,		/* M-^O */
751    F_UNASSIGNED,		/* M-^P */
752    F_UNASSIGNED,		/* M-^Q */
753    F_UNASSIGNED,		/* M-^R */
754    F_UNASSIGNED,		/* M-^S */
755    F_UNASSIGNED,		/* M-^T */
756    F_UNASSIGNED,		/* M-^U */
757    F_UNASSIGNED,		/* M-^V */
758    F_UNASSIGNED,		/* M-^W */
759    F_UNASSIGNED,		/* M-^X */
760    F_UNASSIGNED,		/* M-^Y */
761    F_UNASSIGNED,		/* M-^Z */
762    F_UNASSIGNED,		/* M-^[ */
763    F_UNASSIGNED,		/* M-^\ */
764    F_UNASSIGNED,		/* M-^] */
765    F_UNASSIGNED,		/* M-^^ */
766    F_UNASSIGNED,		/* M-^_ */
767    F_UNASSIGNED,		/* M-SPACE */
768    F_UNASSIGNED,		/* M-! */
769    F_UNASSIGNED,		/* M-" */
770    F_UNASSIGNED,		/* M-# */
771    F_UNASSIGNED,		/* M-$ */
772    F_UNASSIGNED,		/* M-% */
773    F_UNASSIGNED,		/* M-& */
774    F_UNASSIGNED,		/* M-' */
775    F_UNASSIGNED,		/* M-( */
776    F_UNASSIGNED,		/* M-) */
777    F_UNASSIGNED,		/* M-* */
778    F_UNASSIGNED,		/* M-+ */
779    F_UNASSIGNED,		/* M-, */
780    F_UNASSIGNED,		/* M-- */
781    F_UNASSIGNED,		/* M-. */
782    F_UNASSIGNED,		/* M-/ */
783    F_UNASSIGNED,		/* M-0 */
784    F_UNASSIGNED,		/* M-1 */
785    F_UNASSIGNED,		/* M-2 */
786    F_UNASSIGNED,		/* M-3 */
787    F_UNASSIGNED,		/* M-4 */
788    F_UNASSIGNED,		/* M-5 */
789    F_UNASSIGNED,		/* M-6 */
790    F_UNASSIGNED,		/* M-7 */
791    F_UNASSIGNED,		/* M-8 */
792    F_UNASSIGNED,		/* M-9 */
793    F_UNASSIGNED,		/* M-: */
794    F_UNASSIGNED,		/* M-; */
795    F_UNASSIGNED,		/* M-< */
796    F_UNASSIGNED,		/* M-= */
797    F_UNASSIGNED,		/* M-> */
798    F_UNASSIGNED,		/* M-? */
799    F_UNASSIGNED,		/* M-@ */
800    F_UNASSIGNED,		/* M-A */
801    F_UNASSIGNED,		/* M-B */
802    F_UNASSIGNED,		/* M-C */
803    F_UNASSIGNED,		/* M-D */
804    F_UNASSIGNED,		/* M-E */
805    F_UNASSIGNED,		/* M-F */
806    F_UNASSIGNED,		/* M-G */
807    F_UNASSIGNED,		/* M-H */
808    F_UNASSIGNED,		/* M-I */
809    F_UNASSIGNED,		/* M-J */
810    F_UNASSIGNED,		/* M-K */
811    F_UNASSIGNED,		/* M-L */
812    F_UNASSIGNED,		/* M-M */
813    F_UNASSIGNED,		/* M-N */
814    F_UNASSIGNED,		/* M-O */
815    F_UNASSIGNED,		/* M-P */
816    F_UNASSIGNED,		/* M-Q */
817    F_UNASSIGNED,		/* M-R */
818    F_UNASSIGNED,		/* M-S */
819    F_UNASSIGNED,		/* M-T */
820    F_UNASSIGNED,		/* M-U */
821    F_UNASSIGNED,		/* M-V */
822    F_UNASSIGNED,		/* M-W */
823    F_UNASSIGNED,		/* M-X */
824    F_UNASSIGNED,		/* M-Y */
825    F_UNASSIGNED,		/* M-Z */
826    F_UNASSIGNED,		/* M-[ */
827    F_UNASSIGNED,		/* M-\ */
828    F_UNASSIGNED,		/* M-] */
829    F_UNASSIGNED,		/* M-^ */
830    F_UNASSIGNED,		/* M-_ */
831    F_UNASSIGNED,		/* M-` */
832    F_UNASSIGNED,		/* M-a */
833    F_UNASSIGNED,		/* M-b */
834    F_UNASSIGNED,		/* M-c */
835    F_UNASSIGNED,		/* M-d */
836    F_UNASSIGNED,		/* M-e */
837    F_UNASSIGNED,		/* M-f */
838    F_UNASSIGNED,		/* M-g */
839    F_UNASSIGNED,		/* M-h */
840    F_UNASSIGNED,		/* M-i */
841    F_UNASSIGNED,		/* M-j */
842    F_UNASSIGNED,		/* M-k */
843    F_UNASSIGNED,		/* M-l */
844    F_UNASSIGNED,		/* M-m */
845    F_UNASSIGNED,		/* M-n */
846    F_UNASSIGNED,		/* M-o */
847    F_UNASSIGNED,		/* M-p */
848    F_UNASSIGNED,		/* M-q */
849    F_UNASSIGNED,		/* M-r */
850    F_UNASSIGNED,		/* M-s */
851    F_UNASSIGNED,		/* M-t */
852    F_UNASSIGNED,		/* M-u */
853    F_UNASSIGNED,		/* M-v */
854    F_UNASSIGNED,		/* M-w */
855    F_UNASSIGNED,		/* M-x */
856    F_UNASSIGNED,		/* M-y */
857    F_UNASSIGNED,		/* M-z */
858    F_UNASSIGNED,		/* M-{ */
859    F_UNASSIGNED,		/* M-| */
860    F_UNASSIGNED,		/* M-} */
861    F_UNASSIGNED,		/* M-~ */
862    F_UNASSIGNED		/* M-^? */
863};
864
865KEYCMD  CcViCmdMap[] = {
866    F_UNASSIGNED,		/* ^@ */
867    F_TOBEG,			/* ^A */
868    F_UNASSIGNED,		/* ^B */
869    F_TTY_INT,			/* ^C */
870    F_LIST_CHOICES,		/* ^D */
871    F_TOEND,			/* ^E */
872    F_UNASSIGNED,		/* ^F */
873    F_LIST_GLOB,		/* ^G */
874    F_CHARBACK,			/* ^H */
875    V_CM_COMPLETE,		/* ^I */
876    F_NEWLINE,			/* ^J */
877    F_KILLEND,			/* ^K */
878    F_CLEARDISP,		/* ^L */
879    F_NEWLINE,			/* ^M */
880    F_DOWN_HIST,		/* ^N */
881    F_TTY_FLUSHO,		/* ^O */
882    F_UP_HIST,			/* ^P */
883    F_TTY_STARTO,		/* ^Q */
884    F_REDISP,			/* ^R */
885    F_TTY_STOPO,		/* ^S */
886    F_UNASSIGNED,		/* ^T */
887    F_KILLBEG,			/* ^U */
888    F_UNASSIGNED,		/* ^V */
889    F_DELWORDPREV,		/* ^W */
890    F_EXPAND,			/* ^X */
891    F_UNASSIGNED,		/* ^Y */
892    F_UNASSIGNED,		/* ^Z */
893    F_METANEXT,			/* ^[ */
894    F_TTY_QUIT,			/* ^\ */
895    F_UNASSIGNED,		/* ^] */
896    F_UNASSIGNED,		/* ^^ */
897    F_UNASSIGNED,		/* ^_ */
898    F_CHARFWD,			/* SPACE */
899    F_EXPAND_HISTORY,		/* ! */
900    F_UNASSIGNED,		/* " */
901    F_UNASSIGNED,		/* # */
902    F_TOEND,			/* $ */
903    F_UNASSIGNED,		/* % */
904    F_UNASSIGNED,		/* & */
905    F_UNASSIGNED,		/* ' */
906    F_UNASSIGNED,		/* ( */
907    F_UNASSIGNED,		/* ) */
908    F_EXPAND_GLOB,		/* * */
909    F_DOWN_HIST,		/* + */
910    V_RCHAR_BACK,		/* , */
911    F_UP_HIST,			/* - */
912    F_UNASSIGNED,		/* . */
913    V_DSH_META,			/* / */
914    V_ZERO,			/* 0 */
915    F_ARGDIGIT,			/* 1 */
916    F_ARGDIGIT,			/* 2 */
917    F_ARGDIGIT,			/* 3 */
918    F_ARGDIGIT,			/* 4 */
919    F_ARGDIGIT,			/* 5 */
920    F_ARGDIGIT,			/* 6 */
921    F_ARGDIGIT,			/* 7 */
922    F_ARGDIGIT,			/* 8 */
923    F_ARGDIGIT,			/* 9 */
924    F_UNASSIGNED,		/* : */
925    V_RCHAR_FWD,		/* ; */
926    F_UNASSIGNED,		/* < */
927    F_UNASSIGNED,		/* = */
928    F_UNASSIGNED,		/* > */
929    V_USH_META,			/* ? */
930    F_UNASSIGNED,		/* @ */
931    V_ADDEND,			/* A */
932    V_WORDBACK,			/* B */
933    V_CHGTOEND,			/* C */
934    F_KILLEND,			/* D */
935    V_ENDWORD,			/* E */
936    V_CHAR_BACK,		/* F */
937    F_UNASSIGNED,		/* G */
938    F_UNASSIGNED,		/* H */
939    V_INSBEG,			/* I */
940    F_DOWN_SEARCH_HIST,		/* J */
941    F_UP_SEARCH_HIST,		/* K */
942    F_UNASSIGNED,		/* L */
943    F_UNASSIGNED,		/* M */
944    V_RSRCH_BACK,		/* N */
945    F_XKEY,			/* O */
946    F_UNASSIGNED,		/* P */
947    F_UNASSIGNED,		/* Q */
948    V_REPLMODE,			/* R */
949    V_SUBSTLINE,		/* S */
950    V_CHARTO_BACK,		/* T */
951    F_UNASSIGNED,		/* U */
952    F_EXPAND_VARS,		/* V */
953    V_WORDFWD,			/* W */
954    F_DELPREV,			/* X */
955    F_UNASSIGNED,		/* Y */
956    F_UNASSIGNED,		/* Z */
957    F_XKEY,			/* [ */
958    F_UNASSIGNED,		/* \ */
959    F_UNASSIGNED,		/* ] */
960    F_TOBEG,			/* ^ */
961    F_UNASSIGNED,		/* _ */
962    F_UNASSIGNED,		/* ` */
963    V_ADD,			/* a */
964    F_WORDBACK,			/* b */
965    V_CHGMETA,			/* c */
966    V_DELMETA,			/* d */
967    V_EWORD,			/* e */
968    V_CHAR_FWD,			/* f */
969    F_UNASSIGNED,		/* g */
970    F_CHARBACK,			/* h */
971    V_INSERT,			/* i */
972    F_DOWN_HIST,		/* j */
973    F_UP_HIST,			/* k */
974    F_CHARFWD,			/* l */
975    F_UNASSIGNED,		/* m */
976    V_RSRCH_FWD,		/* n */
977    F_UNASSIGNED,		/* o */
978    F_UNASSIGNED,		/* p */
979    F_UNASSIGNED,		/* q */
980    V_REPLONE,			/* r */
981    V_SUBSTCHAR,		/* s */
982    V_CHARTO_FWD,		/* t */
983    V_UNDO,			/* u */
984    F_EXPAND_VARS,		/* v */
985    V_WORDBEGNEXT,		/* w */
986    F_DELNEXT_EOF,		/* x */
987    F_UNASSIGNED,		/* y */
988    F_UNASSIGNED,		/* z */
989    F_UNASSIGNED,		/* { */
990    F_UNASSIGNED,		/* | */
991    F_UNASSIGNED,		/* } */
992    V_CHGCASE,			/* ~ */
993    F_DELPREV,			/* ^? */
994    F_UNASSIGNED,		/* M-^@ */
995    F_UNASSIGNED,		/* M-^A */
996    F_UNASSIGNED,		/* M-^B */
997    F_UNASSIGNED,		/* M-^C */
998    F_UNASSIGNED,		/* M-^D */
999    F_UNASSIGNED,		/* M-^E */
1000    F_UNASSIGNED,		/* M-^F */
1001    F_UNASSIGNED,		/* M-^G */
1002    F_UNASSIGNED,		/* M-^H */
1003    F_UNASSIGNED,		/* M-^I */
1004    F_UNASSIGNED,		/* M-^J */
1005    F_UNASSIGNED,		/* M-^K */
1006    F_UNASSIGNED,		/* M-^L */
1007    F_UNASSIGNED,		/* M-^M */
1008    F_UNASSIGNED,		/* M-^N */
1009    F_UNASSIGNED,		/* M-^O */
1010    F_UNASSIGNED,		/* M-^P */
1011    F_UNASSIGNED,		/* M-^Q */
1012    F_UNASSIGNED,		/* M-^R */
1013    F_UNASSIGNED,		/* M-^S */
1014    F_UNASSIGNED,		/* M-^T */
1015    F_UNASSIGNED,		/* M-^U */
1016    F_UNASSIGNED,		/* M-^V */
1017    F_UNASSIGNED,		/* M-^W */
1018    F_UNASSIGNED,		/* M-^X */
1019    F_UNASSIGNED,		/* M-^Y */
1020    F_UNASSIGNED,		/* M-^Z */
1021    F_UNASSIGNED,		/* M-^[ */
1022    F_UNASSIGNED,		/* M-^\ */
1023    F_UNASSIGNED,		/* M-^] */
1024    F_UNASSIGNED,		/* M-^^ */
1025    F_UNASSIGNED,		/* M-^_ */
1026    F_UNASSIGNED,		/* M-SPACE */
1027    F_UNASSIGNED,		/* M-! */
1028    F_UNASSIGNED,		/* M-" */
1029    F_UNASSIGNED,		/* M-# */
1030    F_UNASSIGNED,		/* M-$ */
1031    F_UNASSIGNED,		/* M-% */
1032    F_UNASSIGNED,		/* M-& */
1033    F_UNASSIGNED,		/* M-' */
1034    F_UNASSIGNED,		/* M-( */
1035    F_UNASSIGNED,		/* M-) */
1036    F_UNASSIGNED,		/* M-* */
1037    F_UNASSIGNED,		/* M-+ */
1038    F_UNASSIGNED,		/* M-, */
1039    F_UNASSIGNED,		/* M-- */
1040    F_UNASSIGNED,		/* M-. */
1041    F_UNASSIGNED,		/* M-/ */
1042    F_UNASSIGNED,		/* M-0 */
1043    F_UNASSIGNED,		/* M-1 */
1044    F_UNASSIGNED,		/* M-2 */
1045    F_UNASSIGNED,		/* M-3 */
1046    F_UNASSIGNED,		/* M-4 */
1047    F_UNASSIGNED,		/* M-5 */
1048    F_UNASSIGNED,		/* M-6 */
1049    F_UNASSIGNED,		/* M-7 */
1050    F_UNASSIGNED,		/* M-8 */
1051    F_UNASSIGNED,		/* M-9 */
1052    F_UNASSIGNED,		/* M-: */
1053    F_UNASSIGNED,		/* M-; */
1054    F_UNASSIGNED,		/* M-< */
1055    F_UNASSIGNED,		/* M-= */
1056    F_UNASSIGNED,		/* M-> */
1057    F_HELPME,			/* M-? */
1058    F_UNASSIGNED,		/* M-@ */
1059    F_UNASSIGNED,		/* M-A */
1060    F_UNASSIGNED,		/* M-B */
1061    F_UNASSIGNED,		/* M-C */
1062    F_UNASSIGNED,		/* M-D */
1063    F_UNASSIGNED,		/* M-E */
1064    F_UNASSIGNED,		/* M-F */
1065    F_UNASSIGNED,		/* M-G */
1066    F_UNASSIGNED,		/* M-H */
1067    F_UNASSIGNED,		/* M-I */
1068    F_UNASSIGNED,		/* M-J */
1069    F_UNASSIGNED,		/* M-K */
1070    F_UNASSIGNED,		/* M-L */
1071    F_UNASSIGNED,		/* M-M */
1072    F_UNASSIGNED,		/* M-N */
1073    F_XKEY,			/* M-O *//* extended key esc PWP Mar 88 */
1074    F_UNASSIGNED,		/* M-P */
1075    F_UNASSIGNED,		/* M-Q */
1076    F_UNASSIGNED,		/* M-R */
1077    F_UNASSIGNED,		/* M-S */
1078    F_UNASSIGNED,		/* M-T */
1079    F_UNASSIGNED,		/* M-U */
1080    F_UNASSIGNED,		/* M-V */
1081    F_UNASSIGNED,		/* M-W */
1082    F_UNASSIGNED,		/* M-X */
1083    F_UNASSIGNED,		/* M-Y */
1084    F_UNASSIGNED,		/* M-Z */
1085    F_XKEY,			/* M-[ *//* extended key esc -mf Oct 87 */
1086    F_UNASSIGNED,		/* M-\ */
1087    F_UNASSIGNED,		/* M-] */
1088    F_UNASSIGNED,		/* M-^ */
1089    F_UNASSIGNED,		/* M-_ */
1090    F_UNASSIGNED,		/* M-` */
1091    F_UNASSIGNED,		/* M-a */
1092    F_UNASSIGNED,		/* M-b */
1093    F_UNASSIGNED,		/* M-c */
1094    F_UNASSIGNED,		/* M-d */
1095    F_UNASSIGNED,		/* M-e */
1096    F_UNASSIGNED,		/* M-f */
1097    F_UNASSIGNED,		/* M-g */
1098    F_UNASSIGNED,		/* M-h */
1099    F_UNASSIGNED,		/* M-i */
1100    F_UNASSIGNED,		/* M-j */
1101    F_UNASSIGNED,		/* M-k */
1102    F_UNASSIGNED,		/* M-l */
1103    F_UNASSIGNED,		/* M-m */
1104    F_UNASSIGNED,		/* M-n */
1105    F_UNASSIGNED,		/* M-o */
1106    F_UNASSIGNED,		/* M-p */
1107    F_UNASSIGNED,		/* M-q */
1108    F_UNASSIGNED,		/* M-r */
1109    F_UNASSIGNED,		/* M-s */
1110    F_UNASSIGNED,		/* M-t */
1111    F_UNASSIGNED,		/* M-u */
1112    F_UNASSIGNED,		/* M-v */
1113    F_UNASSIGNED,		/* M-w */
1114    F_UNASSIGNED,		/* M-x */
1115    F_UNASSIGNED,		/* M-y */
1116    F_UNASSIGNED,		/* M-z */
1117    F_UNASSIGNED,		/* M-{ */
1118    F_UNASSIGNED,		/* M-| */
1119    F_UNASSIGNED,		/* M-} */
1120    F_UNASSIGNED,		/* M-~ */
1121    F_UNASSIGNED		/* M-^? */
1122};
1123#endif /* WINNT_NATIVE */
1124
1125
1126void
1127editinit(void)
1128{
1129    struct KeyFuncs *f;
1130
1131#if defined(NLS_CATALOGS) || defined(WINNT_NATIVE)
1132    int i;
1133
1134    for (i = 0; i < F_NUM_FUNCNAMES; i++)
1135	xfree((ptr_t)(intptr_t)FuncNames[i].desc);
1136#endif
1137
1138    f = FuncNames;
1139    f->name = "backward-char";
1140    f->func = F_CHARBACK;
1141    f->desc = CSAVS(3, 1, "Move back a character");
1142
1143    f++;
1144    f->name = "backward-delete-char";
1145    f->func = F_DELPREV;
1146    f->desc = CSAVS(3, 2, "Delete the character behind cursor");
1147
1148    f++;
1149    f->name = "backward-delete-word";
1150    f->func = F_DELWORDPREV;
1151    f->desc = CSAVS(3, 3,
1152	"Cut from beginning of current word to cursor - saved in cut buffer");
1153
1154    f++;
1155    f->name = "backward-kill-line";
1156    f->func = F_KILLBEG;
1157    f->desc = CSAVS(3, 4,
1158	"Cut from beginning of line to cursor - save in cut buffer");
1159
1160    f++;
1161    f->name = "backward-word";
1162    f->func = F_WORDBACK;
1163    f->desc = CSAVS(3, 5, "Move to beginning of current word");
1164
1165    f++;
1166    f->name = "beginning-of-line";
1167    f->func = F_TOBEG;
1168    f->desc = CSAVS(3, 6, "Move to beginning of line");
1169
1170    f++;
1171    f->name = "capitalize-word";
1172    f->func = F_CASECAPITAL;
1173    f->desc = CSAVS(3, 7,
1174	"Capitalize the characters from cursor to end of current word");
1175
1176    f++;
1177    f->name = "change-case";
1178    f->func = V_CHGCASE;
1179    f->desc = CSAVS(3, 8,
1180	"Vi change case of character under cursor and advance one character");
1181
1182    f++;
1183    f->name = "change-till-end-of-line";
1184    f->func = V_CHGTOEND;	/* backward compat. */
1185    f->desc = CSAVS(3, 9, "Vi change to end of line");
1186
1187    f++;
1188    f->name = "clear-screen";
1189    f->func = F_CLEARDISP;
1190    f->desc = CSAVS(3, 10, "Clear screen leaving current line on top");
1191
1192    f++;
1193    f->name = "complete-word";
1194    f->func = F_COMPLETE;
1195    f->desc = CSAVS(3, 11, "Complete current word");
1196
1197    f++;
1198    f->name = "complete-word-fwd";
1199    f->func = F_COMPLETE_FWD;
1200    f->desc = CSAVS(3, 12, "Tab forward through files");
1201
1202    f++;
1203    f->name = "complete-word-back";
1204    f->func = F_COMPLETE_BACK;
1205    f->desc = CSAVS(3, 13, "Tab backward through files");
1206
1207    f++;
1208    f->name = "complete-word-raw";
1209    f->func = F_COMPLETE_ALL;
1210    f->desc = CSAVS(3, 14,
1211	"Complete current word ignoring programmable completions");
1212
1213    f++;
1214    f->name = "copy-prev-word";
1215    f->func = F_COPYPREV;
1216    f->desc = CSAVS(3, 15, "Copy current word to cursor");
1217
1218    f++;
1219    f->name = "copy-region-as-kill";
1220    f->func = F_COPYREGION;
1221    f->desc = CSAVS(3, 16, "Copy area between mark and cursor to cut buffer");
1222
1223    f++;
1224    f->name = "dabbrev-expand";
1225    f->func = F_DABBREV_EXPAND;
1226    f->desc = CSAVS(3, 17,
1227		    "Expand to preceding word for which this is a prefix");
1228
1229    f++;
1230    f->name = "delete-char";
1231    f->func = F_DELNEXT;
1232    f->desc = CSAVS(3, 18, "Delete character under cursor");
1233
1234    f++;
1235    f->name = "delete-char-or-eof";
1236    f->func = F_DELNEXT_EOF;
1237    f->desc = CSAVS(3, 19,
1238	"Delete character under cursor or signal end of file on an empty line");
1239
1240    f++;
1241    f->name = "delete-char-or-list";
1242    f->func = F_DELNEXT_LIST;
1243    f->desc = CSAVS(3, 20,
1244	"Delete character under cursor or list completions if at end of line");
1245
1246    f++;
1247    f->name = "delete-char-or-list-or-eof";
1248    f->func = F_DELNEXT_LIST_EOF;
1249    f->desc = CSAVS(3, 21,
1250    "Delete character under cursor, list completions or signal end of file");
1251
1252    f++;
1253    f->name = "delete-word";
1254    f->func = F_DELWORDNEXT;
1255    f->desc = CSAVS(3, 22,
1256	"Cut from cursor to end of current word - save in cut buffer");
1257
1258    f++;
1259    f->name = "digit";
1260    f->func = F_DIGIT;
1261    f->desc = CSAVS(3, 23, "Adds to argument if started or enters digit");
1262
1263    f++;
1264    f->name = "digit-argument";
1265    f->func = F_ARGDIGIT;
1266    f->desc = CSAVS(3, 24, "Digit that starts argument");
1267
1268    f++;
1269    f->name = "down-history";
1270    f->func = F_DOWN_HIST;
1271    f->desc = CSAVS(3, 25, "Move to next history line");
1272
1273    f++;
1274    f->name = "downcase-word";
1275    f->func = F_CASELOWER;
1276    f->desc = CSAVS(3, 26,
1277	"Lowercase the characters from cursor to end of current word");
1278
1279    f++;
1280    f->name = "end-of-file";
1281    f->func = F_SEND_EOF;
1282    f->desc = CSAVS(3, 27, "Indicate end of file");
1283
1284    f++;
1285    f->name = "end-of-line";
1286    f->func = F_TOEND;
1287    f->desc = CSAVS(3, 28, "Move cursor to end of line");
1288
1289    f++;
1290    f->name = "exchange-point-and-mark";
1291    f->func = F_EXCHANGE_MARK;
1292    f->desc = CSAVS(3, 29, "Exchange the cursor and mark");
1293
1294    f++;
1295    f->name = "expand-glob";
1296    f->func = F_EXPAND_GLOB;
1297    f->desc = CSAVS(3, 30, "Expand file name wildcards");
1298
1299    f++;
1300    f->name = "expand-history";
1301    f->func = F_EXPAND_HISTORY;
1302    f->desc = CSAVS(3, 31, "Expand history escapes");
1303
1304    f++;
1305    f->name = "expand-line";
1306    f->func = F_EXPAND;
1307    f->desc = CSAVS(3, 32, "Expand the history escapes in a line");
1308
1309    f++;
1310    f->name = "expand-variables";
1311    f->func = F_EXPAND_VARS;
1312    f->desc = CSAVS(3, 33, "Expand variables");
1313
1314    f++;
1315    f->name = "forward-char";
1316    f->func = F_CHARFWD;
1317    f->desc = CSAVS(3, 34, "Move forward one character");
1318
1319    f++;
1320    f->name = "forward-word";
1321    f->func = F_WORDFWD;
1322    f->desc = CSAVS(3, 35, "Move forward to end of current word");
1323
1324    f++;
1325    f->name = "gosmacs-transpose-chars";
1326    f->func = F_GCHARSWITCH;
1327    f->desc = CSAVS(3, 36, "Exchange the two characters before the cursor");
1328
1329    f++;
1330    f->name = "history-search-backward";
1331    f->func = F_UP_SEARCH_HIST;
1332    f->desc = CSAVS(3, 37,
1333	"Search in history backward for line beginning as current");
1334
1335    f++;
1336    f->name = "history-search-forward";
1337    f->func = F_DOWN_SEARCH_HIST;
1338    f->desc = CSAVS(3, 38,
1339	"Search in history forward for line beginning as current");
1340
1341    f++;
1342    f->name = "insert-last-word";
1343    f->func = F_LAST_ITEM;
1344    f->desc = CSAVS(3, 39, "Insert last item of previous command");
1345
1346    f++;
1347    f->name = "i-search-fwd";
1348    f->func = F_INC_FWD;
1349    f->desc = CSAVS(3, 40, "Incremental search forward");
1350
1351    f++;
1352    f->name = "i-search-back";
1353    f->func = F_INC_BACK;
1354    f->desc = CSAVS(3, 41, "Incremental search backward");
1355
1356    f++;
1357    f->name = "keyboard-quit";
1358    f->func = F_STARTOVER;
1359    f->desc = CSAVS(3, 42, "Clear line");
1360
1361    f++;
1362    f->name = "kill-line";
1363    f->func = F_KILLEND;
1364    f->desc = CSAVS(3, 43, "Cut to end of line and save in cut buffer");
1365
1366    f++;
1367    f->name = "kill-region";
1368    f->func = F_KILLREGION;
1369    f->desc = CSAVS(3, 44,
1370	"Cut area between mark and cursor and save in cut buffer");
1371
1372    f++;
1373    f->name = "kill-whole-line";
1374    f->func = F_KILLALL;
1375    f->desc = CSAVS(3, 45, "Cut the entire line and save in cut buffer");
1376
1377    f++;
1378    f->name = "list-choices";
1379    f->func = F_LIST_CHOICES;
1380    f->desc = CSAVS(3, 46, "List choices for completion");
1381
1382    f++;
1383    f->name = "list-choices-raw";
1384    f->func = F_LIST_ALL;
1385    f->desc = CSAVS(3, 47,
1386	"List choices for completion overriding programmable completion");
1387
1388    f++;
1389    f->name = "list-glob";
1390    f->func = F_LIST_GLOB;
1391    f->desc = CSAVS(3, 48, "List file name wildcard matches");
1392
1393    f++;
1394    f->name = "list-or-eof";
1395    f->func = F_LIST_EOF;
1396    f->desc = CSAVS(3, 49,
1397	"List choices for completion or indicate end of file if empty line");
1398
1399    f++;
1400    f->name = "load-average";
1401    f->func = F_LOAD_AVERAGE;
1402    f->desc = CSAVS(3, 50, "Display load average and current process status");
1403
1404    f++;
1405    f->name = "magic-space";
1406    f->func = F_MAGIC_SPACE;
1407    f->desc = CSAVS(3, 51, "Expand history escapes and insert a space");
1408
1409    f++;
1410    f->name = "newline";
1411    f->func = F_NEWLINE;
1412    f->desc = CSAVS(3, 52, "Execute command");
1413
1414    f++;
1415    f->name = "newline-and-hold";
1416    f->func = F_NEWLINE_HOLD;
1417    f->desc = CSAVS(3, 122, "Execute command and keep current line");
1418
1419    f++;
1420    f->name = "newline-and-down-history";
1421    f->func = F_NEWLINE_DOWN_HIST;
1422    f->desc = CSAVS(3, 123, "Execute command and move to next history line");
1423
1424    f++;
1425    f->name = "normalize-path";
1426    f->func = F_PATH_NORM;
1427    f->desc = CSAVS(3, 53,
1428		    "Expand pathnames, eliminating leading .'s and ..'s");
1429
1430    f++;
1431    f->name = "normalize-command";
1432    f->func = F_COMMAND_NORM;
1433    f->desc = CSAVS(3, 54,
1434		    "Expand commands to the resulting pathname or alias");
1435
1436    f++;
1437    f->name = "overwrite-mode";
1438    f->func = F_INSOVR;
1439    f->desc = CSAVS(3, 55,
1440		    "Switch from insert to overwrite mode or vice versa");
1441
1442    f++;
1443    f->name = "prefix-meta";
1444    f->func = F_METANEXT;
1445    f->desc = CSAVS(3, 56, "Add 8th bit to next character typed");
1446
1447    f++;
1448    f->name = "quoted-insert";
1449    f->func = F_QUOTE;
1450    f->desc = CSAVS(3, 57, "Add the next character typed to the line verbatim");
1451
1452    f++;
1453    f->name = "redisplay";
1454    f->func = F_REDISP;
1455    f->desc = CSAVS(3, 58, "Redisplay everything");
1456
1457    f++;
1458    f->name = "run-fg-editor";
1459    f->func = F_RUN_FG_EDITOR;
1460    f->desc = CSAVS(3, 59, "Restart stopped editor");
1461
1462    f++;
1463    f->name = "run-help";
1464    f->func = F_HELPME;
1465    f->desc = CSAVS(3, 60, "Look for help on current command");
1466
1467    f++;
1468    f->name = "self-insert-command";
1469    f->func = F_INSERT;
1470    f->desc = CSAVS(3, 61, "This character is added to the line");
1471
1472    f++;
1473    f->name = "sequence-lead-in";
1474    f->func = F_XKEY;
1475    f->desc = CSAVS(3, 62,
1476	"This character is the first in a character sequence");
1477
1478    f++;
1479    f->name = "set-mark-command";
1480    f->func = F_SET_MARK;
1481    f->desc = CSAVS(3, 63, "Set the mark at cursor");
1482
1483    f++;
1484    f->name = "spell-word";
1485    f->func = F_CORRECT;
1486    f->desc = CSAVS(3, 64, "Correct the spelling of current word");
1487
1488    f++;
1489    f->name = "spell-line";
1490    f->func = F_CORRECT_L;
1491    f->desc = CSAVS(3, 65, "Correct the spelling of entire line");
1492
1493    f++;
1494    f->name = "stuff-char";
1495    f->func = F_STUFF_CHAR;
1496    f->desc = CSAVS(3, 66, "Send character to tty in cooked mode");
1497
1498    f++;
1499    f->name = "toggle-literal-history";
1500    f->func = F_TOGGLE_HIST;
1501    f->desc = CSAVS(3, 67,
1502	"Toggle between literal and lexical current history line");
1503
1504    f++;
1505    f->name = "transpose-chars";
1506    f->func = F_CHARSWITCH;
1507    f->desc = CSAVS(3, 68,
1508	"Exchange the character to the left of the cursor with the one under");
1509
1510    f++;
1511    f->name = "transpose-gosling";
1512    f->func = F_GCHARSWITCH;
1513    f->desc = CSAVS(3, 69, "Exchange the two characters before the cursor");
1514
1515    f++;
1516    f->name = "tty-dsusp";
1517    f->func = F_TTY_DSUSP;
1518    f->desc = CSAVS(3, 70, "Tty delayed suspend character");
1519
1520    f++;
1521    f->name = "tty-flush-output";
1522    f->func = F_TTY_FLUSHO;
1523    f->desc = CSAVS(3, 71, "Tty flush output character");
1524
1525    f++;
1526    f->name = "tty-sigintr";
1527    f->func = F_TTY_INT;
1528    f->desc = CSAVS(3, 72, "Tty interrupt character");
1529
1530    f++;
1531    f->name = "tty-sigquit";
1532    f->func = F_TTY_QUIT;
1533    f->desc = CSAVS(3, 73, "Tty quit character");
1534
1535    f++;
1536    f->name = "tty-sigtsusp";
1537    f->func = F_TTY_TSUSP;
1538    f->desc = CSAVS(3, 74, "Tty suspend character");
1539
1540    f++;
1541    f->name = "tty-start-output";
1542    f->func = F_TTY_STARTO;
1543    f->desc = CSAVS(3, 75, "Tty allow output character");
1544
1545    f++;
1546    f->name = "tty-stop-output";
1547    f->func = F_TTY_STOPO;
1548    f->desc = CSAVS(3, 76, "Tty disallow output character");
1549
1550    f++;
1551    f->name = "undefined-key";
1552    f->func = F_UNASSIGNED;
1553    f->desc = CSAVS(3, 77, "Indicates unbound character");
1554
1555    f++;
1556    f->name = "universal-argument";
1557    f->func = F_ARGFOUR;
1558    f->desc = CSAVS(3, 78, "Emacs universal argument (argument times 4)");
1559
1560    f++;
1561    f->name = "up-history";
1562    f->func = F_UP_HIST;
1563    f->desc = CSAVS(3, 79, "Move to previous history line");
1564
1565    f++;
1566    f->name = "upcase-word";
1567    f->func = F_CASEUPPER;
1568    f->desc = CSAVS(3, 80,
1569	"Uppercase the characters from cursor to end of current word");
1570
1571    f++;
1572    f->name = "vi-beginning-of-next-word";
1573    f->func = V_WORDBEGNEXT;
1574    f->desc = CSAVS(3, 81, "Vi goto the beginning of next word");
1575
1576    f++;
1577    f->name = "vi-add";
1578    f->func = V_ADD;
1579    f->desc = CSAVS(3, 82, "Vi enter insert mode after the cursor");
1580
1581    f++;
1582    f->name = "vi-add-at-eol";
1583    f->func = V_ADDEND;
1584    f->desc = CSAVS(3, 83, "Vi enter insert mode at end of line");
1585
1586    f++;
1587    f->name = "vi-chg-case";
1588    f->func = V_CHGCASE;
1589    f->desc = CSAVS(3, 84,
1590	"Vi change case of character under cursor and advance one character");
1591
1592    f++;
1593    f->name = "vi-chg-meta";
1594    f->func = V_CHGMETA;
1595    f->desc = CSAVS(3, 85, "Vi change prefix command");
1596
1597    f++;
1598    f->name = "vi-chg-to-eol";
1599    f->func = V_CHGTOEND;
1600    f->desc = CSAVS(3, 86, "Vi change to end of line");
1601
1602    f++;
1603    f->name = "vi-cmd-mode";
1604    f->func = V_CMD_MODE;
1605    f->desc = CSAVS(3, 87,
1606	"Enter vi command mode (use alternative key bindings)");
1607
1608    f++;
1609    f->name = "vi-cmd-mode-complete";
1610    f->func = V_CM_COMPLETE;
1611    f->desc = CSAVS(3, 88, "Vi command mode complete current word");
1612
1613    f++;
1614    f->name = "vi-delprev";
1615    f->func = V_DELPREV;
1616    f->desc = CSAVS(3, 89, "Vi move to previous character (backspace)");
1617
1618    f++;
1619    f->name = "vi-delmeta";
1620    f->func = V_DELMETA;
1621    f->desc = CSAVS(3, 90, "Vi delete prefix command");
1622
1623    f++;
1624    f->name = "vi-endword";
1625    f->func = V_ENDWORD;
1626    f->desc = CSAVS(3, 91,
1627	"Vi move to the end of the current space delimited word");
1628
1629    f++;
1630    f->name = "vi-eword";
1631    f->func = V_EWORD;
1632    f->desc = CSAVS(3, 92, "Vi move to the end of the current word");
1633
1634    f++;
1635    f->name = "vi-char-back";
1636    f->func = V_CHAR_BACK;
1637    f->desc = CSAVS(3, 93, "Vi move to the character specified backward");
1638
1639    f++;
1640    f->name = "vi-char-fwd";
1641    f->func = V_CHAR_FWD;
1642    f->desc = CSAVS(3, 94, "Vi move to the character specified forward");
1643
1644    f++;
1645    f->name = "vi-charto-back";
1646    f->func = V_CHARTO_BACK;
1647    f->desc = CSAVS(3, 95, "Vi move up to the character specified backward");
1648
1649    f++;
1650    f->name = "vi-charto-fwd";
1651    f->func = V_CHARTO_FWD;
1652    f->desc = CSAVS(3, 96, "Vi move up to the character specified forward");
1653
1654    f++;
1655    f->name = "vi-insert";
1656    f->func = V_INSERT;
1657    f->desc = CSAVS(3, 97, "Enter vi insert mode");
1658
1659    f++;
1660    f->name = "vi-insert-at-bol";
1661    f->func = V_INSBEG;
1662    f->desc = CSAVS(3, 98, "Enter vi insert mode at beginning of line");
1663
1664    f++;
1665    f->name = "vi-repeat-char-fwd";
1666    f->func = V_RCHAR_FWD;
1667    f->desc = CSAVS(3, 99,
1668	"Vi repeat current character search in the same search direction");
1669
1670    f++;
1671    f->name = "vi-repeat-char-back";
1672    f->func = V_RCHAR_BACK;
1673    f->desc = CSAVS(3, 100,
1674	"Vi repeat current character search in the opposite search direction");
1675
1676    f++;
1677    f->name = "vi-repeat-search-fwd";
1678    f->func = V_RSRCH_FWD;
1679    f->desc = CSAVS(3, 101,
1680	"Vi repeat current search in the same search direction");
1681
1682    f++;
1683    f->name = "vi-repeat-search-back";
1684    f->func = V_RSRCH_BACK;
1685    f->desc = CSAVS(3, 102,
1686	"Vi repeat current search in the opposite search direction");
1687
1688    f++;
1689    f->name = "vi-replace-char";
1690    f->func = V_REPLONE;
1691    f->desc = CSAVS(3, 103,
1692	"Vi replace character under the cursor with the next character typed");
1693
1694    f++;
1695    f->name = "vi-replace-mode";
1696    f->func = V_REPLMODE;
1697    f->desc = CSAVS(3, 104, "Vi replace mode");
1698
1699    f++;
1700    f->name = "vi-search-back";
1701    f->func = V_USH_META;
1702    f->desc = CSAVS(3, 105, "Vi search history backward");
1703
1704    f++;
1705    f->name = "vi-search-fwd";
1706    f->func = V_DSH_META;
1707    f->desc = CSAVS(3, 106, "Vi search history forward");
1708
1709    f++;
1710    f->name = "vi-substitute-char";
1711    f->func = V_SUBSTCHAR;
1712    f->desc = CSAVS(3, 107,
1713	"Vi replace character under the cursor and enter insert mode");
1714
1715    f++;
1716    f->name = "vi-substitute-line";
1717    f->func = V_SUBSTLINE;
1718    f->desc = CSAVS(3, 108, "Vi replace entire line");
1719
1720    f++;
1721    f->name = "vi-word-back";
1722    f->func = V_WORDBACK;
1723    f->desc = CSAVS(3, 109, "Vi move to the previous word");
1724
1725    f++;
1726    f->name = "vi-word-fwd";
1727    f->func = V_WORDFWD;
1728    f->desc = CSAVS(3, 110, "Vi move to the next word");
1729
1730    f++;
1731    f->name = "vi-undo";
1732    f->func = V_UNDO;
1733    f->desc = CSAVS(3, 111, "Vi undo last change");
1734
1735    f++;
1736    f->name = "vi-zero";
1737    f->func = V_ZERO;
1738    f->desc = CSAVS(3, 112, "Vi goto the beginning of line");
1739
1740    f++;
1741    f->name = "which-command";
1742    f->func = F_WHICH;
1743    f->desc = CSAVS(3, 113, "Perform which of current command");
1744
1745    f++;
1746    f->name = "yank";
1747    f->func = F_YANK_KILL;
1748    f->desc = CSAVS(3, 114, "Paste cut buffer at cursor position");
1749
1750    f++;
1751    f->name = "yank-pop";
1752    f->func = F_YANK_POP;
1753    f->desc = CSAVS(3, 115,
1754	"Replace just-yanked text with yank from earlier kill");
1755
1756    f++;
1757    f->name = "e_copy_to_clipboard";
1758    f->func = F_COPY_CLIP;
1759    f->desc = CSAVS(3, 116,
1760	"(WIN32 only) Copy cut buffer to system clipboard");
1761
1762    f++;
1763    f->name = "e_paste_from_clipboard";
1764    f->func = F_PASTE_CLIP;
1765    f->desc = CSAVS(3, 117,
1766	"(WIN32 only) Paste clipboard buffer at cursor position");
1767
1768    f++;
1769    f->name = "e_dosify_next";
1770    f->func = F_DOSIFY_NEXT;
1771    f->desc = CSAVS(3, 118,
1772	"(WIN32 only) Convert each '/' in next word to '\\\\'");
1773
1774    f++;
1775    f->name = "e_dosify_prev";
1776    f->func = F_DOSIFY_PREV;
1777    f->desc = CSAVS(3, 119,
1778	"(WIN32 only) Convert each '/' in previous word to '\\\\'");
1779
1780    f++;
1781    f->name = "e_page_up";
1782    f->func = F_PAGE_UP;
1783    f->desc = CSAVS(3, 120, "(WIN32 only) Page visible console window up");
1784
1785    f++;
1786    f->name = "e_page_down";
1787    f->func = F_PAGE_DOWN;
1788    f->desc = CSAVS(3, 121, "(WIN32 only) Page visible console window down");
1789
1790    f++;
1791    f->name = NULL;
1792    f->func = 0;
1793    f->desc = NULL;
1794
1795    f++;
1796    if (f - FuncNames != F_NUM_FUNCNAMES)
1797	abort();
1798}
1799
1800#ifdef DEBUG_EDIT
1801void
1802CheckMaps(void)
1803{		/* check the size of the key maps */
1804    int     c1 = (NT_NUM_KEYS * sizeof(KEYCMD));
1805
1806    if ((sizeof(CcKeyMap)) != c1)
1807	xprintf("CcKeyMap should be %d entries, but is %d.\r\n",
1808		NT_NUM_KEYS, sizeof(CcKeyMap) / sizeof(KEYCMD)));
1809
1810    if ((sizeof(CcAltMap)) != c1)
1811	xprintf("CcAltMap should be %d entries, but is %d.\r\n",
1812		NT_NUM_KEYS, (sizeof(CcAltMap) / sizeof(KEYCMD)));
1813
1814    if ((sizeof(CcEmacsMap)) != c1)
1815	xprintf("CcEmacsMap should be %d entries, but is %d.\r\n",
1816		NT_NUM_KEYS, (sizeof(CcEmacsMap) / sizeof(KEYCMD)));
1817
1818    if ((sizeof(CcViMap)) != c1)
1819	xprintf("CcViMap should be %d entries, but is %d.\r\n",
1820		NT_NUM_KEYS, (sizeof(CcViMap) / sizeof(KEYCMD)));
1821
1822    if ((sizeof(CcViCmdMap)) != c1)
1823	xprintf("CcViCmdMap should be %d entries, but is %d.\r\n",
1824		NT_NUM_KEYS, (sizeof(CcViCmdMap) / sizeof(KEYCMD)));
1825}
1826
1827#endif
1828
1829int    MapsAreInited = 0;
1830int    NLSMapsAreInited = 0;
1831int    NoNLSRebind;
1832
1833void
1834ed_InitNLSMaps(void)
1835{
1836    int i;
1837
1838    if (AsciiOnly)
1839	return;
1840    if (NoNLSRebind)
1841	return;
1842    for (i = 0200; i <= 0377; i++) {
1843	if (Isprint(CTL_ESC(i))) {
1844	    CcKeyMap[CTL_ESC(i)] = F_INSERT;
1845	}
1846    }
1847    NLSMapsAreInited = 1;
1848}
1849
1850static void
1851ed_InitMetaBindings(void)
1852{
1853    Char    buf[3];
1854    int     i;
1855    CStr    cstr;
1856    KEYCMD *map;
1857
1858    map = CcKeyMap;
1859    for (i = 0; i <= 0377 && CcKeyMap[CTL_ESC(i)] != F_METANEXT; i++)
1860	continue;
1861    if (i > 0377) {
1862	for (i = 0; i <= 0377 && CcAltMap[CTL_ESC(i)] != F_METANEXT; i++)
1863	    continue;
1864	if (i > 0377) {
1865	    i = '\033';
1866	    if (VImode)
1867		map = CcAltMap;
1868	}
1869	else {
1870	    map = CcAltMap;
1871	}
1872    }
1873    buf[0] = (Char)CTL_ESC(i);
1874    buf[2] = 0;
1875    cstr.buf = buf;
1876    cstr.len = 2;
1877    for (i = 0200; i <= 0377; i++) {
1878	if (map[CTL_ESC(i)] != F_INSERT && map[CTL_ESC(i)] != F_UNASSIGNED && map[CTL_ESC(i)] != F_XKEY) {
1879	    buf[1] = CTL_ESC(i & ASCII);
1880	    AddXkey(&cstr, XmapCmd((int) map[CTL_ESC(i)]), XK_CMD);
1881	}
1882    }
1883    map[buf[0]] = F_XKEY;
1884}
1885
1886void
1887ed_InitVIMaps(void)
1888{
1889    int i;
1890
1891    VImode = 1;
1892    ResetXmap();
1893    for (i = 0; i < NT_NUM_KEYS; i++) {
1894	CcKeyMap[i] = CcViMap[i];
1895	CcAltMap[i] = CcViCmdMap[i];
1896    }
1897    ed_InitMetaBindings();
1898    ed_InitNLSMaps();
1899    ResetArrowKeys();
1900    BindArrowKeys();
1901}
1902
1903void
1904ed_InitEmacsMaps(void)
1905{
1906    int     i;
1907    Char    buf[3];
1908    CStr    cstr;
1909    cstr.buf = buf;
1910    cstr.len = 2;
1911
1912    VImode = 0;
1913    ResetXmap();
1914    for (i = 0; i < NT_NUM_KEYS; i++) {
1915	CcKeyMap[i] = CcEmacsMap[i];
1916	CcAltMap[i] = F_UNASSIGNED;
1917    }
1918    ed_InitMetaBindings();
1919    ed_InitNLSMaps();
1920    buf[0] = CTL_ESC('\030');
1921    buf[2] = 0;
1922    buf[1] = CTL_ESC('\030');
1923    AddXkey(&cstr, XmapCmd(F_EXCHANGE_MARK), XK_CMD);
1924    buf[1] = '*';
1925    AddXkey(&cstr, XmapCmd(F_EXPAND_GLOB),   XK_CMD);
1926    buf[1] = '$';
1927    AddXkey(&cstr, XmapCmd(F_EXPAND_VARS),   XK_CMD);
1928    buf[1] = 'G';
1929    AddXkey(&cstr, XmapCmd(F_LIST_GLOB),     XK_CMD);
1930    buf[1] = 'g';
1931    AddXkey(&cstr, XmapCmd(F_LIST_GLOB),     XK_CMD);
1932    buf[1] = 'n';
1933    AddXkey(&cstr, XmapCmd(F_PATH_NORM),     XK_CMD);
1934    buf[1] = 'N';
1935    AddXkey(&cstr, XmapCmd(F_PATH_NORM),     XK_CMD);
1936    buf[1] = '?';
1937    AddXkey(&cstr, XmapCmd(F_COMMAND_NORM),  XK_CMD);
1938    buf[1] = '\t';
1939    AddXkey(&cstr, XmapCmd(F_COMPLETE_ALL),  XK_CMD);
1940    buf[1] = CTL_ESC('\004');	/* ^D */
1941    AddXkey(&cstr, XmapCmd(F_LIST_ALL),      XK_CMD);
1942    ResetArrowKeys();
1943    BindArrowKeys();
1944}
1945
1946void
1947ed_InitMaps(void)
1948{
1949    if (MapsAreInited)
1950	return;
1951#ifndef IS_ASCII
1952    /* This machine has an EBCDIC charset. The assumptions made for the
1953     * initialized keymaps therefore don't hold, since they are based on
1954     * ASCII (or ISO8859-1).
1955     * Here, we do a one-time transformation to EBCDIC environment
1956     * for the key initializations.
1957     */
1958    {
1959	KEYCMD temp[NT_NUM_KEYS];
1960	static KEYCMD *const list[3] = { CcEmacsMap, CcViMap, CcViCmdMap };
1961	int i, table;
1962
1963	for (table=0; table<3; ++table)
1964	{
1965	    /* copy ASCII ordered map to temp table */
1966	    for (i = 0; i < NT_NUM_KEYS; i++) {
1967		temp[i] = list[table][i];
1968	    }
1969	    /* write back as EBCDIC ordered map */
1970	    for (i = 0; i < NT_NUM_KEYS; i++) {
1971		list[table][_toebcdic[i]] = temp[i];
1972	    }
1973	}
1974    }
1975#endif /* !IS_ASCII */
1976
1977#ifdef VIDEFAULT
1978    ed_InitVIMaps();
1979#else
1980    ed_InitEmacsMaps();
1981#endif
1982
1983    MapsAreInited = 1;
1984}
1985