~mysql/mysql-server/mysql-6.0

« back to all changes in this revision

Viewing changes to cmd-line-utils/libedit/map.c

  • Committer: vva at r18
  • Date: 2003-01-18 16:28:48 UTC
  • mto: (1403.60.3)
  • mto: This revision was merged to the branch mainline in revision 1412.
  • Revision ID: sp1r-vva@eagle.mysql.r18.ru-20030118162848-51479
changes for readline/libedit configuration

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      $NetBSD: map.c,v 1.14 2001/01/09 17:22:09 jdolecek Exp $        */
 
2
 
 
3
/*-
 
4
 * Copyright (c) 1992, 1993
 
5
 *      The Regents of the University of California.  All rights reserved.
 
6
 *
 
7
 * This code is derived from software contributed to Berkeley by
 
8
 * Christos Zoulas of Cornell University.
 
9
 *
 
10
 * Redistribution and use in source and binary forms, with or without
 
11
 * modification, are permitted provided that the following conditions
 
12
 * are met:
 
13
 * 1. Redistributions of source code must retain the above copyright
 
14
 *    notice, this list of conditions and the following disclaimer.
 
15
 * 2. Redistributions in binary form must reproduce the above copyright
 
16
 *    notice, this list of conditions and the following disclaimer in the
 
17
 *    documentation and/or other materials provided with the distribution.
 
18
 * 3. All advertising materials mentioning features or use of this software
 
19
 *    must display the following acknowledgement:
 
20
 *      This product includes software developed by the University of
 
21
 *      California, Berkeley and its contributors.
 
22
 * 4. Neither the name of the University nor the names of its contributors
 
23
 *    may be used to endorse or promote products derived from this software
 
24
 *    without specific prior written permission.
 
25
 *
 
26
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
27
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
28
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
29
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
30
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
31
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
32
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
33
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
34
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
35
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
36
 * SUCH DAMAGE.
 
37
 */
 
38
 
 
39
#include "compat.h"
 
40
#if !defined(lint) && !defined(SCCSID)
 
41
#if 0
 
42
static char sccsid[] = "@(#)map.c       8.1 (Berkeley) 6/4/93";
 
43
#else
 
44
__RCSID("$NetBSD: map.c,v 1.14 2001/01/09 17:22:09 jdolecek Exp $");
 
45
#endif
 
46
#endif /* not lint && not SCCSID */
 
47
 
 
48
/*
 
49
 * map.c: Editor function definitions
 
50
 */
 
51
#include "sys.h"
 
52
#include <stdlib.h>
 
53
#include "el.h"
 
54
 
 
55
#define N_KEYS 256
 
56
 
 
57
private void    map_print_key(EditLine *, el_action_t *, const char *);
 
58
private void    map_print_some_keys(EditLine *, el_action_t *, int, int);
 
59
private void    map_print_all_keys(EditLine *);
 
60
private void    map_init_nls(EditLine *);
 
61
private void    map_init_meta(EditLine *);
 
62
 
 
63
/* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
 
64
 
 
65
 
 
66
private const el_action_t  el_map_emacs[] = {
 
67
        /*   0 */       EM_SET_MARK,            /* ^@ */
 
68
        /*   1 */       ED_MOVE_TO_BEG,         /* ^A */
 
69
        /*   2 */       ED_PREV_CHAR,           /* ^B */
 
70
        /*   3 */       ED_TTY_SIGINT,          /* ^C */
 
71
        /*   4 */       EM_DELETE_OR_LIST,      /* ^D */
 
72
        /*   5 */       ED_MOVE_TO_END,         /* ^E */
 
73
        /*   6 */       ED_NEXT_CHAR,           /* ^F */
 
74
        /*   7 */       ED_UNASSIGNED,          /* ^G */
 
75
        /*   8 */       ED_DELETE_PREV_CHAR,    /* ^H */
 
76
        /*   9 */       ED_UNASSIGNED,          /* ^I */
 
77
        /*  10 */       ED_NEWLINE,             /* ^J */
 
78
        /*  11 */       ED_KILL_LINE,           /* ^K */
 
79
        /*  12 */       ED_CLEAR_SCREEN,        /* ^L */
 
80
        /*  13 */       ED_NEWLINE,             /* ^M */
 
81
        /*  14 */       ED_NEXT_HISTORY,        /* ^N */
 
82
        /*  15 */       ED_TTY_FLUSH_OUTPUT,    /* ^O */
 
83
        /*  16 */       ED_PREV_HISTORY,        /* ^P */
 
84
        /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
 
85
        /*  18 */       ED_REDISPLAY,           /* ^R */
 
86
        /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
 
87
        /*  20 */       ED_TRANSPOSE_CHARS,     /* ^T */
 
88
        /*  21 */       EM_KILL_LINE,           /* ^U */
 
89
        /*  22 */       ED_QUOTED_INSERT,       /* ^V */
 
90
        /*  23 */       EM_KILL_REGION,         /* ^W */
 
91
        /*  24 */       ED_SEQUENCE_LEAD_IN,    /* ^X */
 
92
        /*  25 */       EM_YANK,                /* ^Y */
 
93
        /*  26 */       ED_TTY_SIGTSTP,         /* ^Z */
 
94
        /*  27 */       EM_META_NEXT,           /* ^[ */
 
95
        /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
 
96
        /*  29 */       ED_TTY_DSUSP,           /* ^] */
 
97
        /*  30 */       ED_UNASSIGNED,          /* ^^ */
 
98
        /*  31 */       ED_UNASSIGNED,          /* ^_ */
 
99
        /*  32 */       ED_INSERT,              /* SPACE */
 
100
        /*  33 */       ED_INSERT,              /* ! */
 
101
        /*  34 */       ED_INSERT,              /* " */
 
102
        /*  35 */       ED_INSERT,              /* # */
 
103
        /*  36 */       ED_INSERT,              /* $ */
 
104
        /*  37 */       ED_INSERT,              /* % */
 
105
        /*  38 */       ED_INSERT,              /* & */
 
106
        /*  39 */       ED_INSERT,              /* ' */
 
107
        /*  40 */       ED_INSERT,              /* ( */
 
108
        /*  41 */       ED_INSERT,              /* ) */
 
109
        /*  42 */       ED_INSERT,              /* * */
 
110
        /*  43 */       ED_INSERT,              /* + */
 
111
        /*  44 */       ED_INSERT,              /* , */
 
112
        /*  45 */       ED_INSERT,              /* - */
 
113
        /*  46 */       ED_INSERT,              /* . */
 
114
        /*  47 */       ED_INSERT,              /* / */
 
115
        /*  48 */       ED_DIGIT,               /* 0 */
 
116
        /*  49 */       ED_DIGIT,               /* 1 */
 
117
        /*  50 */       ED_DIGIT,               /* 2 */
 
118
        /*  51 */       ED_DIGIT,               /* 3 */
 
119
        /*  52 */       ED_DIGIT,               /* 4 */
 
120
        /*  53 */       ED_DIGIT,               /* 5 */
 
121
        /*  54 */       ED_DIGIT,               /* 6 */
 
122
        /*  55 */       ED_DIGIT,               /* 7 */
 
123
        /*  56 */       ED_DIGIT,               /* 8 */
 
124
        /*  57 */       ED_DIGIT,               /* 9 */
 
125
        /*  58 */       ED_INSERT,              /* : */
 
126
        /*  59 */       ED_INSERT,              /* ; */
 
127
        /*  60 */       ED_INSERT,              /* < */
 
128
        /*  61 */       ED_INSERT,              /* = */
 
129
        /*  62 */       ED_INSERT,              /* > */
 
130
        /*  63 */       ED_INSERT,              /* ? */
 
131
        /*  64 */       ED_INSERT,              /* @ */
 
132
        /*  65 */       ED_INSERT,              /* A */
 
133
        /*  66 */       ED_INSERT,              /* B */
 
134
        /*  67 */       ED_INSERT,              /* C */
 
135
        /*  68 */       ED_INSERT,              /* D */
 
136
        /*  69 */       ED_INSERT,              /* E */
 
137
        /*  70 */       ED_INSERT,              /* F */
 
138
        /*  71 */       ED_INSERT,              /* G */
 
139
        /*  72 */       ED_INSERT,              /* H */
 
140
        /*  73 */       ED_INSERT,              /* I */
 
141
        /*  74 */       ED_INSERT,              /* J */
 
142
        /*  75 */       ED_INSERT,              /* K */
 
143
        /*  76 */       ED_INSERT,              /* L */
 
144
        /*  77 */       ED_INSERT,              /* M */
 
145
        /*  78 */       ED_INSERT,              /* N */
 
146
        /*  79 */       ED_INSERT,              /* O */
 
147
        /*  80 */       ED_INSERT,              /* P */
 
148
        /*  81 */       ED_INSERT,              /* Q */
 
149
        /*  82 */       ED_INSERT,              /* R */
 
150
        /*  83 */       ED_INSERT,              /* S */
 
151
        /*  84 */       ED_INSERT,              /* T */
 
152
        /*  85 */       ED_INSERT,              /* U */
 
153
        /*  86 */       ED_INSERT,              /* V */
 
154
        /*  87 */       ED_INSERT,              /* W */
 
155
        /*  88 */       ED_INSERT,              /* X */
 
156
        /*  89 */       ED_INSERT,              /* Y */
 
157
        /*  90 */       ED_INSERT,              /* Z */
 
158
        /*  91 */       ED_INSERT,              /* [ */
 
159
        /*  92 */       ED_INSERT,              /* \ */
 
160
        /*  93 */       ED_INSERT,              /* ] */
 
161
        /*  94 */       ED_INSERT,              /* ^ */
 
162
        /*  95 */       ED_INSERT,              /* _ */
 
163
        /*  96 */       ED_INSERT,              /* ` */
 
164
        /*  97 */       ED_INSERT,              /* a */
 
165
        /*  98 */       ED_INSERT,              /* b */
 
166
        /*  99 */       ED_INSERT,              /* c */
 
167
        /* 100 */       ED_INSERT,              /* d */
 
168
        /* 101 */       ED_INSERT,              /* e */
 
169
        /* 102 */       ED_INSERT,              /* f */
 
170
        /* 103 */       ED_INSERT,              /* g */
 
171
        /* 104 */       ED_INSERT,              /* h */
 
172
        /* 105 */       ED_INSERT,              /* i */
 
173
        /* 106 */       ED_INSERT,              /* j */
 
174
        /* 107 */       ED_INSERT,              /* k */
 
175
        /* 108 */       ED_INSERT,              /* l */
 
176
        /* 109 */       ED_INSERT,              /* m */
 
177
        /* 110 */       ED_INSERT,              /* n */
 
178
        /* 111 */       ED_INSERT,              /* o */
 
179
        /* 112 */       ED_INSERT,              /* p */
 
180
        /* 113 */       ED_INSERT,              /* q */
 
181
        /* 114 */       ED_INSERT,              /* r */
 
182
        /* 115 */       ED_INSERT,              /* s */
 
183
        /* 116 */       ED_INSERT,              /* t */
 
184
        /* 117 */       ED_INSERT,              /* u */
 
185
        /* 118 */       ED_INSERT,              /* v */
 
186
        /* 119 */       ED_INSERT,              /* w */
 
187
        /* 120 */       ED_INSERT,              /* x */
 
188
        /* 121 */       ED_INSERT,              /* y */
 
189
        /* 122 */       ED_INSERT,              /* z */
 
190
        /* 123 */       ED_INSERT,              /* { */
 
191
        /* 124 */       ED_INSERT,              /* | */
 
192
        /* 125 */       ED_INSERT,              /* } */
 
193
        /* 126 */       ED_INSERT,              /* ~ */
 
194
        /* 127 */       ED_DELETE_PREV_CHAR,    /* ^? */
 
195
        /* 128 */       ED_UNASSIGNED,          /* M-^@ */
 
196
        /* 129 */       ED_UNASSIGNED,          /* M-^A */
 
197
        /* 130 */       ED_UNASSIGNED,          /* M-^B */
 
198
        /* 131 */       ED_UNASSIGNED,          /* M-^C */
 
199
        /* 132 */       ED_UNASSIGNED,          /* M-^D */
 
200
        /* 133 */       ED_UNASSIGNED,          /* M-^E */
 
201
        /* 134 */       ED_UNASSIGNED,          /* M-^F */
 
202
        /* 135 */       ED_UNASSIGNED,          /* M-^G */
 
203
        /* 136 */       ED_DELETE_PREV_WORD,    /* M-^H */
 
204
        /* 137 */       ED_UNASSIGNED,          /* M-^I */
 
205
        /* 138 */       ED_UNASSIGNED,          /* M-^J */
 
206
        /* 139 */       ED_UNASSIGNED,          /* M-^K */
 
207
        /* 140 */       ED_CLEAR_SCREEN,        /* M-^L */
 
208
        /* 141 */       ED_UNASSIGNED,          /* M-^M */
 
209
        /* 142 */       ED_UNASSIGNED,          /* M-^N */
 
210
        /* 143 */       ED_UNASSIGNED,          /* M-^O */
 
211
        /* 144 */       ED_UNASSIGNED,          /* M-^P */
 
212
        /* 145 */       ED_UNASSIGNED,          /* M-^Q */
 
213
        /* 146 */       ED_UNASSIGNED,          /* M-^R */
 
214
        /* 147 */       ED_UNASSIGNED,          /* M-^S */
 
215
        /* 148 */       ED_UNASSIGNED,          /* M-^T */
 
216
        /* 149 */       ED_UNASSIGNED,          /* M-^U */
 
217
        /* 150 */       ED_UNASSIGNED,          /* M-^V */
 
218
        /* 151 */       ED_UNASSIGNED,          /* M-^W */
 
219
        /* 152 */       ED_UNASSIGNED,          /* M-^X */
 
220
        /* 153 */       ED_UNASSIGNED,          /* M-^Y */
 
221
        /* 154 */       ED_UNASSIGNED,          /* M-^Z */
 
222
        /* 155 */       ED_UNASSIGNED,          /* M-^[ */
 
223
        /* 156 */       ED_UNASSIGNED,          /* M-^\ */
 
224
        /* 157 */       ED_UNASSIGNED,          /* M-^] */
 
225
        /* 158 */       ED_UNASSIGNED,          /* M-^^ */
 
226
        /* 159 */       EM_COPY_PREV_WORD,      /* M-^_ */
 
227
        /* 160 */       ED_UNASSIGNED,          /* M-SPACE */
 
228
        /* 161 */       ED_UNASSIGNED,          /* M-! */
 
229
        /* 162 */       ED_UNASSIGNED,          /* M-" */
 
230
        /* 163 */       ED_UNASSIGNED,          /* M-# */
 
231
        /* 164 */       ED_UNASSIGNED,          /* M-$ */
 
232
        /* 165 */       ED_UNASSIGNED,          /* M-% */
 
233
        /* 166 */       ED_UNASSIGNED,          /* M-& */
 
234
        /* 167 */       ED_UNASSIGNED,          /* M-' */
 
235
        /* 168 */       ED_UNASSIGNED,          /* M-( */
 
236
        /* 169 */       ED_UNASSIGNED,          /* M-) */
 
237
        /* 170 */       ED_UNASSIGNED,          /* M-* */
 
238
        /* 171 */       ED_UNASSIGNED,          /* M-+ */
 
239
        /* 172 */       ED_UNASSIGNED,          /* M-, */
 
240
        /* 173 */       ED_UNASSIGNED,          /* M-- */
 
241
        /* 174 */       ED_UNASSIGNED,          /* M-. */
 
242
        /* 175 */       ED_UNASSIGNED,          /* M-/ */
 
243
        /* 176 */       ED_ARGUMENT_DIGIT,      /* M-0 */
 
244
        /* 177 */       ED_ARGUMENT_DIGIT,      /* M-1 */
 
245
        /* 178 */       ED_ARGUMENT_DIGIT,      /* M-2 */
 
246
        /* 179 */       ED_ARGUMENT_DIGIT,      /* M-3 */
 
247
        /* 180 */       ED_ARGUMENT_DIGIT,      /* M-4 */
 
248
        /* 181 */       ED_ARGUMENT_DIGIT,      /* M-5 */
 
249
        /* 182 */       ED_ARGUMENT_DIGIT,      /* M-6 */
 
250
        /* 183 */       ED_ARGUMENT_DIGIT,      /* M-7 */
 
251
        /* 184 */       ED_ARGUMENT_DIGIT,      /* M-8 */
 
252
        /* 185 */       ED_ARGUMENT_DIGIT,      /* M-9 */
 
253
        /* 186 */       ED_UNASSIGNED,          /* M-: */
 
254
        /* 187 */       ED_UNASSIGNED,          /* M-; */
 
255
        /* 188 */       ED_UNASSIGNED,          /* M-< */
 
256
        /* 189 */       ED_UNASSIGNED,          /* M-= */
 
257
        /* 190 */       ED_UNASSIGNED,          /* M-> */
 
258
        /* 191 */       ED_UNASSIGNED,          /* M-? */
 
259
        /* 192 */       ED_UNASSIGNED,          /* M-@ */
 
260
        /* 193 */       ED_UNASSIGNED,          /* M-A */
 
261
        /* 194 */       ED_PREV_WORD,           /* M-B */
 
262
        /* 195 */       EM_CAPITOL_CASE,        /* M-C */
 
263
        /* 196 */       EM_DELETE_NEXT_WORD,    /* M-D */
 
264
        /* 197 */       ED_UNASSIGNED,          /* M-E */
 
265
        /* 198 */       EM_NEXT_WORD,           /* M-F */
 
266
        /* 199 */       ED_UNASSIGNED,          /* M-G */
 
267
        /* 200 */       ED_UNASSIGNED,          /* M-H */
 
268
        /* 201 */       ED_UNASSIGNED,          /* M-I */
 
269
        /* 202 */       ED_UNASSIGNED,          /* M-J */
 
270
        /* 203 */       ED_UNASSIGNED,          /* M-K */
 
271
        /* 204 */       EM_LOWER_CASE,          /* M-L */
 
272
        /* 205 */       ED_UNASSIGNED,          /* M-M */
 
273
        /* 206 */       ED_SEARCH_NEXT_HISTORY, /* M-N */
 
274
        /* 207 */       ED_SEQUENCE_LEAD_IN,    /* M-O */
 
275
        /* 208 */       ED_SEARCH_PREV_HISTORY, /* M-P */
 
276
        /* 209 */       ED_UNASSIGNED,          /* M-Q */
 
277
        /* 210 */       ED_UNASSIGNED,          /* M-R */
 
278
        /* 211 */       ED_UNASSIGNED,          /* M-S */
 
279
        /* 212 */       ED_UNASSIGNED,          /* M-T */
 
280
        /* 213 */       EM_UPPER_CASE,          /* M-U */
 
281
        /* 214 */       ED_UNASSIGNED,          /* M-V */
 
282
        /* 215 */       EM_COPY_REGION,         /* M-W */
 
283
        /* 216 */       ED_COMMAND,             /* M-X */
 
284
        /* 217 */       ED_UNASSIGNED,          /* M-Y */
 
285
        /* 218 */       ED_UNASSIGNED,          /* M-Z */
 
286
        /* 219 */       ED_SEQUENCE_LEAD_IN,    /* M-[ */
 
287
        /* 220 */       ED_UNASSIGNED,          /* M-\ */
 
288
        /* 221 */       ED_UNASSIGNED,          /* M-] */
 
289
        /* 222 */       ED_UNASSIGNED,          /* M-^ */
 
290
        /* 223 */       ED_UNASSIGNED,          /* M-_ */
 
291
        /* 223 */       ED_UNASSIGNED,          /* M-` */
 
292
        /* 224 */       ED_UNASSIGNED,          /* M-a */
 
293
        /* 225 */       ED_PREV_WORD,           /* M-b */
 
294
        /* 226 */       EM_CAPITOL_CASE,        /* M-c */
 
295
        /* 227 */       EM_DELETE_NEXT_WORD,    /* M-d */
 
296
        /* 228 */       ED_UNASSIGNED,          /* M-e */
 
297
        /* 229 */       EM_NEXT_WORD,           /* M-f */
 
298
        /* 230 */       ED_UNASSIGNED,          /* M-g */
 
299
        /* 231 */       ED_UNASSIGNED,          /* M-h */
 
300
        /* 232 */       ED_UNASSIGNED,          /* M-i */
 
301
        /* 233 */       ED_UNASSIGNED,          /* M-j */
 
302
        /* 234 */       ED_UNASSIGNED,          /* M-k */
 
303
        /* 235 */       EM_LOWER_CASE,          /* M-l */
 
304
        /* 236 */       ED_UNASSIGNED,          /* M-m */
 
305
        /* 237 */       ED_SEARCH_NEXT_HISTORY, /* M-n */
 
306
        /* 238 */       ED_UNASSIGNED,          /* M-o */
 
307
        /* 239 */       ED_SEARCH_PREV_HISTORY, /* M-p */
 
308
        /* 240 */       ED_UNASSIGNED,          /* M-q */
 
309
        /* 241 */       ED_UNASSIGNED,          /* M-r */
 
310
        /* 242 */       ED_UNASSIGNED,          /* M-s */
 
311
        /* 243 */       ED_UNASSIGNED,          /* M-t */
 
312
        /* 244 */       EM_UPPER_CASE,          /* M-u */
 
313
        /* 245 */       ED_UNASSIGNED,          /* M-v */
 
314
        /* 246 */       EM_COPY_REGION,         /* M-w */
 
315
        /* 247 */       ED_COMMAND,             /* M-x */
 
316
        /* 248 */       ED_UNASSIGNED,          /* M-y */
 
317
        /* 249 */       ED_UNASSIGNED,          /* M-z */
 
318
        /* 250 */       ED_UNASSIGNED,          /* M-{ */
 
319
        /* 251 */       ED_UNASSIGNED,          /* M-| */
 
320
        /* 252 */       ED_UNASSIGNED,          /* M-} */
 
321
        /* 253 */       ED_UNASSIGNED,          /* M-~ */
 
322
        /* 254 */       ED_DELETE_PREV_WORD     /* M-^? */
 
323
        /* 255 */
 
324
};
 
325
 
 
326
 
 
327
/*
 
328
 * keymap table for vi.  Each index into above tbl; should be
 
329
 * N_KEYS entries long.  Vi mode uses a sticky-extend to do command mode:
 
330
 * insert mode characters are in the normal keymap, and command mode
 
331
 * in the extended keymap.
 
332
 */
 
333
private const el_action_t  el_map_vi_insert[] = {
 
334
#ifdef KSHVI
 
335
        /*   0 */       ED_UNASSIGNED,          /* ^@ */
 
336
        /*   1 */       ED_INSERT,              /* ^A */
 
337
        /*   2 */       ED_INSERT,              /* ^B */
 
338
        /*   3 */       ED_INSERT,              /* ^C */
 
339
        /*   4 */       VI_LIST_OR_EOF,         /* ^D */
 
340
        /*   5 */       ED_INSERT,              /* ^E */
 
341
        /*   6 */       ED_INSERT,              /* ^F */
 
342
        /*   7 */       ED_INSERT,              /* ^G */
 
343
        /*   8 */       VI_DELETE_PREV_CHAR,    /* ^H */   /* BackSpace key */
 
344
        /*   9 */       ED_INSERT,              /* ^I */   /* Tab Key  */
 
345
        /*  10 */       ED_NEWLINE,             /* ^J */
 
346
        /*  11 */       ED_INSERT,              /* ^K */
 
347
        /*  12 */       ED_INSERT,              /* ^L */
 
348
        /*  13 */       ED_NEWLINE,             /* ^M */
 
349
        /*  14 */       ED_INSERT,              /* ^N */
 
350
        /*  15 */       ED_INSERT,              /* ^O */
 
351
        /*  16 */       ED_INSERT,              /* ^P */
 
352
        /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
 
353
        /*  18 */       ED_INSERT,              /* ^R */
 
354
        /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
 
355
        /*  20 */       ED_INSERT,              /* ^T */
 
356
        /*  21 */       VI_KILL_LINE_PREV,      /* ^U */
 
357
        /*  22 */       ED_QUOTED_INSERT,       /* ^V */
 
358
        /*  23 */       ED_DELETE_PREV_WORD,    /* ^W */
 
359
                /* ED_DELETE_PREV_WORD: Only until strt edit pos */
 
360
        /*  24 */       ED_INSERT,              /* ^X */
 
361
        /*  25 */       ED_INSERT,              /* ^Y */
 
362
        /*  26 */       ED_INSERT,              /* ^Z */
 
363
        /*  27 */       VI_COMMAND_MODE,        /* ^[ */  /* [ Esc ] key */
 
364
        /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
 
365
        /*  29 */       ED_INSERT,              /* ^] */
 
366
        /*  30 */       ED_INSERT,              /* ^^ */
 
367
        /*  31 */       ED_INSERT,              /* ^_ */
 
368
#else /* !KSHVI */
 
369
                                /*
 
370
                                 * NOTE: These mappings do NOT Correspond well
 
371
                                 * to the KSH VI editing assignments.
 
372
                                 * On the other and they are convenient and
 
373
                                 * many people have have gotten used to them.
 
374
                                 */
 
375
        /*   0 */       ED_UNASSIGNED,          /* ^@ */
 
376
        /*   1 */       ED_MOVE_TO_BEG,         /* ^A */
 
377
        /*   2 */       ED_PREV_CHAR,           /* ^B */
 
378
        /*   3 */       ED_TTY_SIGINT,          /* ^C */
 
379
        /*   4 */       VI_LIST_OR_EOF,         /* ^D */
 
380
        /*   5 */       ED_MOVE_TO_END,         /* ^E */
 
381
        /*   6 */       ED_NEXT_CHAR,           /* ^F */
 
382
        /*   7 */       ED_UNASSIGNED,          /* ^G */
 
383
        /*   8 */       ED_DELETE_PREV_CHAR,    /* ^H */   /* BackSpace key */
 
384
        /*   9 */       ED_UNASSIGNED,          /* ^I */   /* Tab Key */
 
385
        /*  10 */       ED_NEWLINE,             /* ^J */
 
386
        /*  11 */       ED_KILL_LINE,           /* ^K */
 
387
        /*  12 */       ED_CLEAR_SCREEN,        /* ^L */
 
388
        /*  13 */       ED_NEWLINE,             /* ^M */
 
389
        /*  14 */       ED_NEXT_HISTORY,        /* ^N */
 
390
        /*  15 */       ED_TTY_FLUSH_OUTPUT,    /* ^O */
 
391
        /*  16 */       ED_PREV_HISTORY,        /* ^P */
 
392
        /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
 
393
        /*  18 */       ED_REDISPLAY,           /* ^R */
 
394
        /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
 
395
        /*  20 */       ED_TRANSPOSE_CHARS,     /* ^T */
 
396
        /*  21 */       VI_KILL_LINE_PREV,      /* ^U */
 
397
        /*  22 */       ED_QUOTED_INSERT,       /* ^V */
 
398
        /*  23 */       ED_DELETE_PREV_WORD,    /* ^W */
 
399
        /*  24 */       ED_UNASSIGNED,          /* ^X */
 
400
        /*  25 */       ED_TTY_DSUSP,           /* ^Y */
 
401
        /*  26 */       ED_TTY_SIGTSTP,         /* ^Z */
 
402
        /*  27 */       VI_COMMAND_MODE,        /* ^[ */
 
403
        /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
 
404
        /*  29 */       ED_UNASSIGNED,          /* ^] */
 
405
        /*  30 */       ED_UNASSIGNED,          /* ^^ */
 
406
        /*  31 */       ED_UNASSIGNED,          /* ^_ */
 
407
#endif  /* KSHVI */
 
408
        /*  32 */       ED_INSERT,              /* SPACE */
 
409
        /*  33 */       ED_INSERT,              /* ! */
 
410
        /*  34 */       ED_INSERT,              /* " */
 
411
        /*  35 */       ED_INSERT,              /* # */
 
412
        /*  36 */       ED_INSERT,              /* $ */
 
413
        /*  37 */       ED_INSERT,              /* % */
 
414
        /*  38 */       ED_INSERT,              /* & */
 
415
        /*  39 */       ED_INSERT,              /* ' */
 
416
        /*  40 */       ED_INSERT,              /* ( */
 
417
        /*  41 */       ED_INSERT,              /* ) */
 
418
        /*  42 */       ED_INSERT,              /* * */
 
419
        /*  43 */       ED_INSERT,              /* + */
 
420
        /*  44 */       ED_INSERT,              /* , */
 
421
        /*  45 */       ED_INSERT,              /* - */
 
422
        /*  46 */       ED_INSERT,              /* . */
 
423
        /*  47 */       ED_INSERT,              /* / */
 
424
        /*  48 */       ED_INSERT,              /* 0 */
 
425
        /*  49 */       ED_INSERT,              /* 1 */
 
426
        /*  50 */       ED_INSERT,              /* 2 */
 
427
        /*  51 */       ED_INSERT,              /* 3 */
 
428
        /*  52 */       ED_INSERT,              /* 4 */
 
429
        /*  53 */       ED_INSERT,              /* 5 */
 
430
        /*  54 */       ED_INSERT,              /* 6 */
 
431
        /*  55 */       ED_INSERT,              /* 7 */
 
432
        /*  56 */       ED_INSERT,              /* 8 */
 
433
        /*  57 */       ED_INSERT,              /* 9 */
 
434
        /*  58 */       ED_INSERT,              /* : */
 
435
        /*  59 */       ED_INSERT,              /* ; */
 
436
        /*  60 */       ED_INSERT,              /* < */
 
437
        /*  61 */       ED_INSERT,              /* = */
 
438
        /*  62 */       ED_INSERT,              /* > */
 
439
        /*  63 */       ED_INSERT,              /* ? */
 
440
        /*  64 */       ED_INSERT,              /* @ */
 
441
        /*  65 */       ED_INSERT,              /* A */
 
442
        /*  66 */       ED_INSERT,              /* B */
 
443
        /*  67 */       ED_INSERT,              /* C */
 
444
        /*  68 */       ED_INSERT,              /* D */
 
445
        /*  69 */       ED_INSERT,              /* E */
 
446
        /*  70 */       ED_INSERT,              /* F */
 
447
        /*  71 */       ED_INSERT,              /* G */
 
448
        /*  72 */       ED_INSERT,              /* H */
 
449
        /*  73 */       ED_INSERT,              /* I */
 
450
        /*  74 */       ED_INSERT,              /* J */
 
451
        /*  75 */       ED_INSERT,              /* K */
 
452
        /*  76 */       ED_INSERT,              /* L */
 
453
        /*  77 */       ED_INSERT,              /* M */
 
454
        /*  78 */       ED_INSERT,              /* N */
 
455
        /*  79 */       ED_INSERT,              /* O */
 
456
        /*  80 */       ED_INSERT,              /* P */
 
457
        /*  81 */       ED_INSERT,              /* Q */
 
458
        /*  82 */       ED_INSERT,              /* R */
 
459
        /*  83 */       ED_INSERT,              /* S */
 
460
        /*  84 */       ED_INSERT,              /* T */
 
461
        /*  85 */       ED_INSERT,              /* U */
 
462
        /*  86 */       ED_INSERT,              /* V */
 
463
        /*  87 */       ED_INSERT,              /* W */
 
464
        /*  88 */       ED_INSERT,              /* X */
 
465
        /*  89 */       ED_INSERT,              /* Y */
 
466
        /*  90 */       ED_INSERT,              /* Z */
 
467
        /*  91 */       ED_INSERT,              /* [ */
 
468
        /*  92 */       ED_INSERT,              /* \ */
 
469
        /*  93 */       ED_INSERT,              /* ] */
 
470
        /*  94 */       ED_INSERT,              /* ^ */
 
471
        /*  95 */       ED_INSERT,              /* _ */
 
472
        /*  96 */       ED_INSERT,              /* ` */
 
473
        /*  97 */       ED_INSERT,              /* a */
 
474
        /*  98 */       ED_INSERT,              /* b */
 
475
        /*  99 */       ED_INSERT,              /* c */
 
476
        /* 100 */       ED_INSERT,              /* d */
 
477
        /* 101 */       ED_INSERT,              /* e */
 
478
        /* 102 */       ED_INSERT,              /* f */
 
479
        /* 103 */       ED_INSERT,              /* g */
 
480
        /* 104 */       ED_INSERT,              /* h */
 
481
        /* 105 */       ED_INSERT,              /* i */
 
482
        /* 106 */       ED_INSERT,              /* j */
 
483
        /* 107 */       ED_INSERT,              /* k */
 
484
        /* 108 */       ED_INSERT,              /* l */
 
485
        /* 109 */       ED_INSERT,              /* m */
 
486
        /* 110 */       ED_INSERT,              /* n */
 
487
        /* 111 */       ED_INSERT,              /* o */
 
488
        /* 112 */       ED_INSERT,              /* p */
 
489
        /* 113 */       ED_INSERT,              /* q */
 
490
        /* 114 */       ED_INSERT,              /* r */
 
491
        /* 115 */       ED_INSERT,              /* s */
 
492
        /* 116 */       ED_INSERT,              /* t */
 
493
        /* 117 */       ED_INSERT,              /* u */
 
494
        /* 118 */       ED_INSERT,              /* v */
 
495
        /* 119 */       ED_INSERT,              /* w */
 
496
        /* 120 */       ED_INSERT,              /* x */
 
497
        /* 121 */       ED_INSERT,              /* y */
 
498
        /* 122 */       ED_INSERT,              /* z */
 
499
        /* 123 */       ED_INSERT,              /* { */
 
500
        /* 124 */       ED_INSERT,              /* | */
 
501
        /* 125 */       ED_INSERT,              /* } */
 
502
        /* 126 */       ED_INSERT,              /* ~ */
 
503
        /* 127 */       ED_DELETE_PREV_CHAR,    /* ^? */
 
504
        /* 128 */       ED_UNASSIGNED,          /* M-^@ */
 
505
        /* 129 */       ED_UNASSIGNED,          /* M-^A */
 
506
        /* 130 */       ED_UNASSIGNED,          /* M-^B */
 
507
        /* 131 */       ED_UNASSIGNED,          /* M-^C */
 
508
        /* 132 */       ED_UNASSIGNED,          /* M-^D */
 
509
        /* 133 */       ED_UNASSIGNED,          /* M-^E */
 
510
        /* 134 */       ED_UNASSIGNED,          /* M-^F */
 
511
        /* 135 */       ED_UNASSIGNED,          /* M-^G */
 
512
        /* 136 */       ED_UNASSIGNED,          /* M-^H */
 
513
        /* 137 */       ED_UNASSIGNED,          /* M-^I */
 
514
        /* 138 */       ED_UNASSIGNED,          /* M-^J */
 
515
        /* 139 */       ED_UNASSIGNED,          /* M-^K */
 
516
        /* 140 */       ED_UNASSIGNED,          /* M-^L */
 
517
        /* 141 */       ED_UNASSIGNED,          /* M-^M */
 
518
        /* 142 */       ED_UNASSIGNED,          /* M-^N */
 
519
        /* 143 */       ED_UNASSIGNED,          /* M-^O */
 
520
        /* 144 */       ED_UNASSIGNED,          /* M-^P */
 
521
        /* 145 */       ED_UNASSIGNED,          /* M-^Q */
 
522
        /* 146 */       ED_UNASSIGNED,          /* M-^R */
 
523
        /* 147 */       ED_UNASSIGNED,          /* M-^S */
 
524
        /* 148 */       ED_UNASSIGNED,          /* M-^T */
 
525
        /* 149 */       ED_UNASSIGNED,          /* M-^U */
 
526
        /* 150 */       ED_UNASSIGNED,          /* M-^V */
 
527
        /* 151 */       ED_UNASSIGNED,          /* M-^W */
 
528
        /* 152 */       ED_UNASSIGNED,          /* M-^X */
 
529
        /* 153 */       ED_UNASSIGNED,          /* M-^Y */
 
530
        /* 154 */       ED_UNASSIGNED,          /* M-^Z */
 
531
        /* 155 */       ED_UNASSIGNED,          /* M-^[ */
 
532
        /* 156 */       ED_UNASSIGNED,          /* M-^\ */
 
533
        /* 157 */       ED_UNASSIGNED,          /* M-^] */
 
534
        /* 158 */       ED_UNASSIGNED,          /* M-^^ */
 
535
        /* 159 */       ED_UNASSIGNED,          /* M-^_ */
 
536
        /* 160 */       ED_UNASSIGNED,          /* M-SPACE */
 
537
        /* 161 */       ED_UNASSIGNED,          /* M-! */
 
538
        /* 162 */       ED_UNASSIGNED,          /* M-" */
 
539
        /* 163 */       ED_UNASSIGNED,          /* M-# */
 
540
        /* 164 */       ED_UNASSIGNED,          /* M-$ */
 
541
        /* 165 */       ED_UNASSIGNED,          /* M-% */
 
542
        /* 166 */       ED_UNASSIGNED,          /* M-& */
 
543
        /* 167 */       ED_UNASSIGNED,          /* M-' */
 
544
        /* 168 */       ED_UNASSIGNED,          /* M-( */
 
545
        /* 169 */       ED_UNASSIGNED,          /* M-) */
 
546
        /* 170 */       ED_UNASSIGNED,          /* M-* */
 
547
        /* 171 */       ED_UNASSIGNED,          /* M-+ */
 
548
        /* 172 */       ED_UNASSIGNED,          /* M-, */
 
549
        /* 173 */       ED_UNASSIGNED,          /* M-- */
 
550
        /* 174 */       ED_UNASSIGNED,          /* M-. */
 
551
        /* 175 */       ED_UNASSIGNED,          /* M-/ */
 
552
        /* 176 */       ED_UNASSIGNED,          /* M-0 */
 
553
        /* 177 */       ED_UNASSIGNED,          /* M-1 */
 
554
        /* 178 */       ED_UNASSIGNED,          /* M-2 */
 
555
        /* 179 */       ED_UNASSIGNED,          /* M-3 */
 
556
        /* 180 */       ED_UNASSIGNED,          /* M-4 */
 
557
        /* 181 */       ED_UNASSIGNED,          /* M-5 */
 
558
        /* 182 */       ED_UNASSIGNED,          /* M-6 */
 
559
        /* 183 */       ED_UNASSIGNED,          /* M-7 */
 
560
        /* 184 */       ED_UNASSIGNED,          /* M-8 */
 
561
        /* 185 */       ED_UNASSIGNED,          /* M-9 */
 
562
        /* 186 */       ED_UNASSIGNED,          /* M-: */
 
563
        /* 187 */       ED_UNASSIGNED,          /* M-; */
 
564
        /* 188 */       ED_UNASSIGNED,          /* M-< */
 
565
        /* 189 */       ED_UNASSIGNED,          /* M-= */
 
566
        /* 190 */       ED_UNASSIGNED,          /* M-> */
 
567
        /* 191 */       ED_UNASSIGNED,          /* M-? */
 
568
        /* 192 */       ED_UNASSIGNED,          /* M-@ */
 
569
        /* 193 */       ED_UNASSIGNED,          /* M-A */
 
570
        /* 194 */       ED_UNASSIGNED,          /* M-B */
 
571
        /* 195 */       ED_UNASSIGNED,          /* M-C */
 
572
        /* 196 */       ED_UNASSIGNED,          /* M-D */
 
573
        /* 197 */       ED_UNASSIGNED,          /* M-E */
 
574
        /* 198 */       ED_UNASSIGNED,          /* M-F */
 
575
        /* 199 */       ED_UNASSIGNED,          /* M-G */
 
576
        /* 200 */       ED_UNASSIGNED,          /* M-H */
 
577
        /* 201 */       ED_UNASSIGNED,          /* M-I */
 
578
        /* 202 */       ED_UNASSIGNED,          /* M-J */
 
579
        /* 203 */       ED_UNASSIGNED,          /* M-K */
 
580
        /* 204 */       ED_UNASSIGNED,          /* M-L */
 
581
        /* 205 */       ED_UNASSIGNED,          /* M-M */
 
582
        /* 206 */       ED_UNASSIGNED,          /* M-N */
 
583
        /* 207 */       ED_UNASSIGNED,          /* M-O */
 
584
        /* 208 */       ED_UNASSIGNED,          /* M-P */
 
585
        /* 209 */       ED_UNASSIGNED,          /* M-Q */
 
586
        /* 210 */       ED_UNASSIGNED,          /* M-R */
 
587
        /* 211 */       ED_UNASSIGNED,          /* M-S */
 
588
        /* 212 */       ED_UNASSIGNED,          /* M-T */
 
589
        /* 213 */       ED_UNASSIGNED,          /* M-U */
 
590
        /* 214 */       ED_UNASSIGNED,          /* M-V */
 
591
        /* 215 */       ED_UNASSIGNED,          /* M-W */
 
592
        /* 216 */       ED_UNASSIGNED,          /* M-X */
 
593
        /* 217 */       ED_UNASSIGNED,          /* M-Y */
 
594
        /* 218 */       ED_UNASSIGNED,          /* M-Z */
 
595
        /* 219 */       ED_UNASSIGNED,          /* M-[ */
 
596
        /* 220 */       ED_UNASSIGNED,          /* M-\ */
 
597
        /* 221 */       ED_UNASSIGNED,          /* M-] */
 
598
        /* 222 */       ED_UNASSIGNED,          /* M-^ */
 
599
        /* 223 */       ED_UNASSIGNED,          /* M-_ */
 
600
        /* 224 */       ED_UNASSIGNED,          /* M-` */
 
601
        /* 225 */       ED_UNASSIGNED,          /* M-a */
 
602
        /* 226 */       ED_UNASSIGNED,          /* M-b */
 
603
        /* 227 */       ED_UNASSIGNED,          /* M-c */
 
604
        /* 228 */       ED_UNASSIGNED,          /* M-d */
 
605
        /* 229 */       ED_UNASSIGNED,          /* M-e */
 
606
        /* 230 */       ED_UNASSIGNED,          /* M-f */
 
607
        /* 231 */       ED_UNASSIGNED,          /* M-g */
 
608
        /* 232 */       ED_UNASSIGNED,          /* M-h */
 
609
        /* 233 */       ED_UNASSIGNED,          /* M-i */
 
610
        /* 234 */       ED_UNASSIGNED,          /* M-j */
 
611
        /* 235 */       ED_UNASSIGNED,          /* M-k */
 
612
        /* 236 */       ED_UNASSIGNED,          /* M-l */
 
613
        /* 237 */       ED_UNASSIGNED,          /* M-m */
 
614
        /* 238 */       ED_UNASSIGNED,          /* M-n */
 
615
        /* 239 */       ED_UNASSIGNED,          /* M-o */
 
616
        /* 240 */       ED_UNASSIGNED,          /* M-p */
 
617
        /* 241 */       ED_UNASSIGNED,          /* M-q */
 
618
        /* 242 */       ED_UNASSIGNED,          /* M-r */
 
619
        /* 243 */       ED_UNASSIGNED,          /* M-s */
 
620
        /* 244 */       ED_UNASSIGNED,          /* M-t */
 
621
        /* 245 */       ED_UNASSIGNED,          /* M-u */
 
622
        /* 246 */       ED_UNASSIGNED,          /* M-v */
 
623
        /* 247 */       ED_UNASSIGNED,          /* M-w */
 
624
        /* 248 */       ED_UNASSIGNED,          /* M-x */
 
625
        /* 249 */       ED_UNASSIGNED,          /* M-y */
 
626
        /* 250 */       ED_UNASSIGNED,          /* M-z */
 
627
        /* 251 */       ED_UNASSIGNED,          /* M-{ */
 
628
        /* 252 */       ED_UNASSIGNED,          /* M-| */
 
629
        /* 253 */       ED_UNASSIGNED,          /* M-} */
 
630
        /* 254 */       ED_UNASSIGNED,          /* M-~ */
 
631
        /* 255 */       ED_UNASSIGNED           /* M-^? */
 
632
};
 
633
 
 
634
private const el_action_t el_map_vi_command[] = {
 
635
        /*   0 */       ED_UNASSIGNED,          /* ^@ */
 
636
        /*   1 */       ED_MOVE_TO_BEG,         /* ^A */
 
637
        /*   2 */       ED_UNASSIGNED,          /* ^B */
 
638
        /*   3 */       ED_TTY_SIGINT,          /* ^C */
 
639
        /*   4 */       ED_UNASSIGNED,          /* ^D */
 
640
        /*   5 */       ED_MOVE_TO_END,         /* ^E */
 
641
        /*   6 */       ED_UNASSIGNED,          /* ^F */
 
642
        /*   7 */       ED_UNASSIGNED,          /* ^G */
 
643
        /*   8 */       ED_PREV_CHAR,           /* ^H */
 
644
        /*   9 */       ED_UNASSIGNED,          /* ^I */
 
645
        /*  10 */       ED_NEWLINE,             /* ^J */
 
646
        /*  11 */       ED_KILL_LINE,           /* ^K */
 
647
        /*  12 */       ED_CLEAR_SCREEN,        /* ^L */
 
648
        /*  13 */       ED_NEWLINE,             /* ^M */
 
649
        /*  14 */       ED_NEXT_HISTORY,        /* ^N */
 
650
        /*  15 */       ED_TTY_FLUSH_OUTPUT,    /* ^O */
 
651
        /*  16 */       ED_PREV_HISTORY,        /* ^P */
 
652
        /*  17 */       ED_TTY_START_OUTPUT,    /* ^Q */
 
653
        /*  18 */       ED_REDISPLAY,           /* ^R */
 
654
        /*  19 */       ED_TTY_STOP_OUTPUT,     /* ^S */
 
655
        /*  20 */       ED_UNASSIGNED,          /* ^T */
 
656
        /*  21 */       VI_KILL_LINE_PREV,      /* ^U */
 
657
        /*  22 */       ED_UNASSIGNED,          /* ^V */
 
658
        /*  23 */       ED_DELETE_PREV_WORD,    /* ^W */
 
659
        /*  24 */       ED_UNASSIGNED,          /* ^X */
 
660
        /*  25 */       ED_UNASSIGNED,          /* ^Y */
 
661
        /*  26 */       ED_UNASSIGNED,          /* ^Z */
 
662
        /*  27 */       EM_META_NEXT,           /* ^[ */
 
663
        /*  28 */       ED_TTY_SIGQUIT,         /* ^\ */
 
664
        /*  29 */       ED_UNASSIGNED,          /* ^] */
 
665
        /*  30 */       ED_UNASSIGNED,          /* ^^ */
 
666
        /*  31 */       ED_UNASSIGNED,          /* ^_ */
 
667
        /*  32 */       ED_NEXT_CHAR,           /* SPACE */
 
668
        /*  33 */       ED_UNASSIGNED,          /* ! */
 
669
        /*  34 */       ED_UNASSIGNED,          /* " */
 
670
        /*  35 */       ED_UNASSIGNED,          /* # */
 
671
        /*  36 */       ED_MOVE_TO_END,         /* $ */
 
672
        /*  37 */       ED_UNASSIGNED,          /* % */
 
673
        /*  38 */       ED_UNASSIGNED,          /* & */
 
674
        /*  39 */       ED_UNASSIGNED,          /* ' */
 
675
        /*  40 */       ED_UNASSIGNED,          /* ( */
 
676
        /*  41 */       ED_UNASSIGNED,          /* ) */
 
677
        /*  42 */       ED_UNASSIGNED,          /* * */
 
678
        /*  43 */       ED_NEXT_HISTORY,        /* + */
 
679
        /*  44 */       VI_REPEAT_PREV_CHAR,    /* , */
 
680
        /*  45 */       ED_PREV_HISTORY,        /* - */
 
681
        /*  46 */       ED_UNASSIGNED,          /* . */
 
682
        /*  47 */       VI_SEARCH_PREV,         /* / */
 
683
        /*  48 */       VI_ZERO,                /* 0 */
 
684
        /*  49 */       ED_ARGUMENT_DIGIT,      /* 1 */
 
685
        /*  50 */       ED_ARGUMENT_DIGIT,      /* 2 */
 
686
        /*  51 */       ED_ARGUMENT_DIGIT,      /* 3 */
 
687
        /*  52 */       ED_ARGUMENT_DIGIT,      /* 4 */
 
688
        /*  53 */       ED_ARGUMENT_DIGIT,      /* 5 */
 
689
        /*  54 */       ED_ARGUMENT_DIGIT,      /* 6 */
 
690
        /*  55 */       ED_ARGUMENT_DIGIT,      /* 7 */
 
691
        /*  56 */       ED_ARGUMENT_DIGIT,      /* 8 */
 
692
        /*  57 */       ED_ARGUMENT_DIGIT,      /* 9 */
 
693
        /*  58 */       ED_COMMAND,             /* : */
 
694
        /*  59 */       VI_REPEAT_NEXT_CHAR,    /* ; */
 
695
        /*  60 */       ED_UNASSIGNED,          /* < */
 
696
        /*  61 */       ED_UNASSIGNED,          /* = */
 
697
        /*  62 */       ED_UNASSIGNED,          /* > */
 
698
        /*  63 */       VI_SEARCH_NEXT,         /* ? */
 
699
        /*  64 */       ED_UNASSIGNED,          /* @ */
 
700
        /*  65 */       VI_ADD_AT_EOL,          /* A */
 
701
        /*  66 */       VI_PREV_SPACE_WORD,     /* B */
 
702
        /*  67 */       VI_CHANGE_TO_EOL,       /* C */
 
703
        /*  68 */       ED_KILL_LINE,           /* D */
 
704
        /*  69 */       VI_TO_END_WORD,         /* E */
 
705
        /*  70 */       VI_PREV_CHAR,           /* F */
 
706
        /*  71 */       ED_UNASSIGNED,          /* G */
 
707
        /*  72 */       ED_UNASSIGNED,          /* H */
 
708
        /*  73 */       VI_INSERT_AT_BOL,       /* I */
 
709
        /*  74 */       ED_SEARCH_NEXT_HISTORY, /* J */
 
710
        /*  75 */       ED_SEARCH_PREV_HISTORY, /* K */
 
711
        /*  76 */       ED_UNASSIGNED,          /* L */
 
712
        /*  77 */       ED_UNASSIGNED,          /* M */
 
713
        /*  78 */       VI_REPEAT_SEARCH_PREV,  /* N */
 
714
        /*  79 */       ED_SEQUENCE_LEAD_IN,    /* O */
 
715
        /*  80 */       VI_PASTE_PREV,          /* P */
 
716
        /*  81 */       ED_UNASSIGNED,          /* Q */
 
717
        /*  82 */       VI_REPLACE_MODE,        /* R */
 
718
        /*  83 */       VI_SUBSTITUTE_LINE,     /* S */
 
719
        /*  84 */       VI_TO_PREV_CHAR,        /* T */
 
720
        /*  85 */       ED_UNASSIGNED,          /* U */
 
721
        /*  86 */       ED_UNASSIGNED,          /* V */
 
722
        /*  87 */       VI_NEXT_SPACE_WORD,     /* W */
 
723
        /*  88 */       ED_DELETE_PREV_CHAR,    /* X */
 
724
        /*  89 */       ED_UNASSIGNED,          /* Y */
 
725
        /*  90 */       ED_UNASSIGNED,          /* Z */
 
726
        /*  91 */       ED_SEQUENCE_LEAD_IN,    /* [ */
 
727
        /*  92 */       ED_UNASSIGNED,          /* \ */
 
728
        /*  93 */       ED_UNASSIGNED,          /* ] */
 
729
        /*  94 */       ED_MOVE_TO_BEG,         /* ^ */
 
730
        /*  95 */       ED_UNASSIGNED,          /* _ */
 
731
        /*  96 */       ED_UNASSIGNED,          /* ` */
 
732
        /*  97 */       VI_ADD,                 /* a */
 
733
        /*  98 */       VI_PREV_WORD,           /* b */
 
734
        /*  99 */       VI_CHANGE_META,         /* c */
 
735
        /* 100 */       VI_DELETE_META,         /* d */
 
736
        /* 101 */       VI_END_WORD,            /* e */
 
737
        /* 102 */       VI_NEXT_CHAR,           /* f */
 
738
        /* 103 */       ED_UNASSIGNED,          /* g */
 
739
        /* 104 */       ED_PREV_CHAR,           /* h */
 
740
        /* 105 */       VI_INSERT,              /* i */
 
741
        /* 106 */       ED_NEXT_HISTORY,        /* j */
 
742
        /* 107 */       ED_PREV_HISTORY,        /* k */
 
743
        /* 108 */       ED_NEXT_CHAR,           /* l */
 
744
        /* 109 */       ED_UNASSIGNED,          /* m */
 
745
        /* 110 */       VI_REPEAT_SEARCH_NEXT,  /* n */
 
746
        /* 111 */       ED_UNASSIGNED,          /* o */
 
747
        /* 112 */       VI_PASTE_NEXT,          /* p */
 
748
        /* 113 */       ED_UNASSIGNED,          /* q */
 
749
        /* 114 */       VI_REPLACE_CHAR,        /* r */
 
750
        /* 115 */       VI_SUBSTITUTE_CHAR,     /* s */
 
751
        /* 116 */       VI_TO_NEXT_CHAR,        /* t */
 
752
        /* 117 */       VI_UNDO,                /* u */
 
753
        /* 118 */       ED_UNASSIGNED,          /* v */
 
754
        /* 119 */       VI_NEXT_WORD,           /* w */
 
755
        /* 120 */       ED_DELETE_NEXT_CHAR,    /* x */
 
756
        /* 121 */       ED_UNASSIGNED,          /* y */
 
757
        /* 122 */       ED_UNASSIGNED,          /* z */
 
758
        /* 123 */       ED_UNASSIGNED,          /* { */
 
759
        /* 124 */       ED_UNASSIGNED,          /* | */
 
760
        /* 125 */       ED_UNASSIGNED,          /* } */
 
761
        /* 126 */       VI_CHANGE_CASE,         /* ~ */
 
762
        /* 127 */       ED_DELETE_PREV_CHAR,    /* ^? */
 
763
        /* 128 */       ED_UNASSIGNED,          /* M-^@ */
 
764
        /* 129 */       ED_UNASSIGNED,          /* M-^A */
 
765
        /* 130 */       ED_UNASSIGNED,          /* M-^B */
 
766
        /* 131 */       ED_UNASSIGNED,          /* M-^C */
 
767
        /* 132 */       ED_UNASSIGNED,          /* M-^D */
 
768
        /* 133 */       ED_UNASSIGNED,          /* M-^E */
 
769
        /* 134 */       ED_UNASSIGNED,          /* M-^F */
 
770
        /* 135 */       ED_UNASSIGNED,          /* M-^G */
 
771
        /* 136 */       ED_UNASSIGNED,          /* M-^H */
 
772
        /* 137 */       ED_UNASSIGNED,          /* M-^I */
 
773
        /* 138 */       ED_UNASSIGNED,          /* M-^J */
 
774
        /* 139 */       ED_UNASSIGNED,          /* M-^K */
 
775
        /* 140 */       ED_UNASSIGNED,          /* M-^L */
 
776
        /* 141 */       ED_UNASSIGNED,          /* M-^M */
 
777
        /* 142 */       ED_UNASSIGNED,          /* M-^N */
 
778
        /* 143 */       ED_UNASSIGNED,          /* M-^O */
 
779
        /* 144 */       ED_UNASSIGNED,          /* M-^P */
 
780
        /* 145 */       ED_UNASSIGNED,          /* M-^Q */
 
781
        /* 146 */       ED_UNASSIGNED,          /* M-^R */
 
782
        /* 147 */       ED_UNASSIGNED,          /* M-^S */
 
783
        /* 148 */       ED_UNASSIGNED,          /* M-^T */
 
784
        /* 149 */       ED_UNASSIGNED,          /* M-^U */
 
785
        /* 150 */       ED_UNASSIGNED,          /* M-^V */
 
786
        /* 151 */       ED_UNASSIGNED,          /* M-^W */
 
787
        /* 152 */       ED_UNASSIGNED,          /* M-^X */
 
788
        /* 153 */       ED_UNASSIGNED,          /* M-^Y */
 
789
        /* 154 */       ED_UNASSIGNED,          /* M-^Z */
 
790
        /* 155 */       ED_UNASSIGNED,          /* M-^[ */
 
791
        /* 156 */       ED_UNASSIGNED,          /* M-^\ */
 
792
        /* 157 */       ED_UNASSIGNED,          /* M-^] */
 
793
        /* 158 */       ED_UNASSIGNED,          /* M-^^ */
 
794
        /* 159 */       ED_UNASSIGNED,          /* M-^_ */
 
795
        /* 160 */       ED_UNASSIGNED,          /* M-SPACE */
 
796
        /* 161 */       ED_UNASSIGNED,          /* M-! */
 
797
        /* 162 */       ED_UNASSIGNED,          /* M-" */
 
798
        /* 163 */       ED_UNASSIGNED,          /* M-# */
 
799
        /* 164 */       ED_UNASSIGNED,          /* M-$ */
 
800
        /* 165 */       ED_UNASSIGNED,          /* M-% */
 
801
        /* 166 */       ED_UNASSIGNED,          /* M-& */
 
802
        /* 167 */       ED_UNASSIGNED,          /* M-' */
 
803
        /* 168 */       ED_UNASSIGNED,          /* M-( */
 
804
        /* 169 */       ED_UNASSIGNED,          /* M-) */
 
805
        /* 170 */       ED_UNASSIGNED,          /* M-* */
 
806
        /* 171 */       ED_UNASSIGNED,          /* M-+ */
 
807
        /* 172 */       ED_UNASSIGNED,          /* M-, */
 
808
        /* 173 */       ED_UNASSIGNED,          /* M-- */
 
809
        /* 174 */       ED_UNASSIGNED,          /* M-. */
 
810
        /* 175 */       ED_UNASSIGNED,          /* M-/ */
 
811
        /* 176 */       ED_UNASSIGNED,          /* M-0 */
 
812
        /* 177 */       ED_UNASSIGNED,          /* M-1 */
 
813
        /* 178 */       ED_UNASSIGNED,          /* M-2 */
 
814
        /* 179 */       ED_UNASSIGNED,          /* M-3 */
 
815
        /* 180 */       ED_UNASSIGNED,          /* M-4 */
 
816
        /* 181 */       ED_UNASSIGNED,          /* M-5 */
 
817
        /* 182 */       ED_UNASSIGNED,          /* M-6 */
 
818
        /* 183 */       ED_UNASSIGNED,          /* M-7 */
 
819
        /* 184 */       ED_UNASSIGNED,          /* M-8 */
 
820
        /* 185 */       ED_UNASSIGNED,          /* M-9 */
 
821
        /* 186 */       ED_UNASSIGNED,          /* M-: */
 
822
        /* 187 */       ED_UNASSIGNED,          /* M-; */
 
823
        /* 188 */       ED_UNASSIGNED,          /* M-< */
 
824
        /* 189 */       ED_UNASSIGNED,          /* M-= */
 
825
        /* 190 */       ED_UNASSIGNED,          /* M-> */
 
826
        /* 191 */       ED_UNASSIGNED,          /* M-? */
 
827
        /* 192 */       ED_UNASSIGNED,          /* M-@ */
 
828
        /* 193 */       ED_UNASSIGNED,          /* M-A */
 
829
        /* 194 */       ED_UNASSIGNED,          /* M-B */
 
830
        /* 195 */       ED_UNASSIGNED,          /* M-C */
 
831
        /* 196 */       ED_UNASSIGNED,          /* M-D */
 
832
        /* 197 */       ED_UNASSIGNED,          /* M-E */
 
833
        /* 198 */       ED_UNASSIGNED,          /* M-F */
 
834
        /* 199 */       ED_UNASSIGNED,          /* M-G */
 
835
        /* 200 */       ED_UNASSIGNED,          /* M-H */
 
836
        /* 201 */       ED_UNASSIGNED,          /* M-I */
 
837
        /* 202 */       ED_UNASSIGNED,          /* M-J */
 
838
        /* 203 */       ED_UNASSIGNED,          /* M-K */
 
839
        /* 204 */       ED_UNASSIGNED,          /* M-L */
 
840
        /* 205 */       ED_UNASSIGNED,          /* M-M */
 
841
        /* 206 */       ED_UNASSIGNED,          /* M-N */
 
842
        /* 207 */       ED_SEQUENCE_LEAD_IN,    /* M-O */
 
843
        /* 208 */       ED_UNASSIGNED,          /* M-P */
 
844
        /* 209 */       ED_UNASSIGNED,          /* M-Q */
 
845
        /* 210 */       ED_UNASSIGNED,          /* M-R */
 
846
        /* 211 */       ED_UNASSIGNED,          /* M-S */
 
847
        /* 212 */       ED_UNASSIGNED,          /* M-T */
 
848
        /* 213 */       ED_UNASSIGNED,          /* M-U */
 
849
        /* 214 */       ED_UNASSIGNED,          /* M-V */
 
850
        /* 215 */       ED_UNASSIGNED,          /* M-W */
 
851
        /* 216 */       ED_UNASSIGNED,          /* M-X */
 
852
        /* 217 */       ED_UNASSIGNED,          /* M-Y */
 
853
        /* 218 */       ED_UNASSIGNED,          /* M-Z */
 
854
        /* 219 */       ED_SEQUENCE_LEAD_IN,    /* M-[ */
 
855
        /* 220 */       ED_UNASSIGNED,          /* M-\ */
 
856
        /* 221 */       ED_UNASSIGNED,          /* M-] */
 
857
        /* 222 */       ED_UNASSIGNED,          /* M-^ */
 
858
        /* 223 */       ED_UNASSIGNED,          /* M-_ */
 
859
        /* 224 */       ED_UNASSIGNED,          /* M-` */
 
860
        /* 225 */       ED_UNASSIGNED,          /* M-a */
 
861
        /* 226 */       ED_UNASSIGNED,          /* M-b */
 
862
        /* 227 */       ED_UNASSIGNED,          /* M-c */
 
863
        /* 228 */       ED_UNASSIGNED,          /* M-d */
 
864
        /* 229 */       ED_UNASSIGNED,          /* M-e */
 
865
        /* 230 */       ED_UNASSIGNED,          /* M-f */
 
866
        /* 231 */       ED_UNASSIGNED,          /* M-g */
 
867
        /* 232 */       ED_UNASSIGNED,          /* M-h */
 
868
        /* 233 */       ED_UNASSIGNED,          /* M-i */
 
869
        /* 234 */       ED_UNASSIGNED,          /* M-j */
 
870
        /* 235 */       ED_UNASSIGNED,          /* M-k */
 
871
        /* 236 */       ED_UNASSIGNED,          /* M-l */
 
872
        /* 237 */       ED_UNASSIGNED,          /* M-m */
 
873
        /* 238 */       ED_UNASSIGNED,          /* M-n */
 
874
        /* 239 */       ED_UNASSIGNED,          /* M-o */
 
875
        /* 240 */       ED_UNASSIGNED,          /* M-p */
 
876
        /* 241 */       ED_UNASSIGNED,          /* M-q */
 
877
        /* 242 */       ED_UNASSIGNED,          /* M-r */
 
878
        /* 243 */       ED_UNASSIGNED,          /* M-s */
 
879
        /* 244 */       ED_UNASSIGNED,          /* M-t */
 
880
        /* 245 */       ED_UNASSIGNED,          /* M-u */
 
881
        /* 246 */       ED_UNASSIGNED,          /* M-v */
 
882
        /* 247 */       ED_UNASSIGNED,          /* M-w */
 
883
        /* 248 */       ED_UNASSIGNED,          /* M-x */
 
884
        /* 249 */       ED_UNASSIGNED,          /* M-y */
 
885
        /* 250 */       ED_UNASSIGNED,          /* M-z */
 
886
        /* 251 */       ED_UNASSIGNED,          /* M-{ */
 
887
        /* 252 */       ED_UNASSIGNED,          /* M-| */
 
888
        /* 253 */       ED_UNASSIGNED,          /* M-} */
 
889
        /* 254 */       ED_UNASSIGNED,          /* M-~ */
 
890
        /* 255 */       ED_UNASSIGNED           /* M-^? */
 
891
};
 
892
 
 
893
 
 
894
/* map_init():
 
895
 *      Initialize and allocate the maps
 
896
 */
 
897
protected int
 
898
map_init(EditLine *el)
 
899
{
 
900
 
 
901
        /*
 
902
         * Make sure those are correct before starting.
 
903
         */
 
904
#ifdef MAP_DEBUG
 
905
        if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
 
906
                EL_ABORT((el->errfile, "Emacs map incorrect\n"));
 
907
        if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
 
908
                EL_ABORT((el->errfile, "Vi command map incorrect\n"));
 
909
        if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
 
910
                EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
 
911
#endif
 
912
 
 
913
        el->el_map.alt = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS);
 
914
        if (el->el_map.alt == NULL)
 
915
                return (-1);
 
916
        el->el_map.key = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS);
 
917
        if (el->el_map.key == NULL)
 
918
                return (-1);
 
919
        el->el_map.emacs = el_map_emacs;
 
920
        el->el_map.vic = el_map_vi_command;
 
921
        el->el_map.vii = el_map_vi_insert;
 
922
        el->el_map.help = (el_bindings_t *) el_malloc(sizeof(el_bindings_t) *
 
923
            EL_NUM_FCNS);
 
924
        if (el->el_map.help == NULL)
 
925
                return (-1);
 
926
        (void) memcpy(el->el_map.help, help__get(),
 
927
            sizeof(el_bindings_t) * EL_NUM_FCNS);
 
928
        el->el_map.func = (el_func_t *)el_malloc(sizeof(el_func_t) *
 
929
            EL_NUM_FCNS);
 
930
        if (el->el_map.func == NULL)
 
931
                return (-1);
 
932
        memcpy(el->el_map.func, func__get(), sizeof(el_func_t) * EL_NUM_FCNS);
 
933
        el->el_map.nfunc = EL_NUM_FCNS;
 
934
 
 
935
#ifdef VIDEFAULT
 
936
        map_init_vi(el);
 
937
#else
 
938
        map_init_emacs(el);
 
939
#endif /* VIDEFAULT */
 
940
        return (0);
 
941
}
 
942
 
 
943
 
 
944
/* map_end():
 
945
 *      Free the space taken by the editor maps
 
946
 */
 
947
protected void
 
948
map_end(EditLine *el)
 
949
{
 
950
 
 
951
        el_free((ptr_t) el->el_map.alt);
 
952
        el->el_map.alt = NULL;
 
953
        el_free((ptr_t) el->el_map.key);
 
954
        el->el_map.key = NULL;
 
955
        el->el_map.emacs = NULL;
 
956
        el->el_map.vic = NULL;
 
957
        el->el_map.vii = NULL;
 
958
        el_free((ptr_t) el->el_map.help);
 
959
        el->el_map.help = NULL;
 
960
        el_free((ptr_t) el->el_map.func);
 
961
        el->el_map.func = NULL;
 
962
}
 
963
 
 
964
 
 
965
/* map_init_nls():
 
966
 *      Find all the printable keys and bind them to self insert
 
967
 */
 
968
private void
 
969
map_init_nls(EditLine *el)
 
970
{
 
971
        int i;
 
972
 
 
973
        el_action_t *map = el->el_map.key;
 
974
 
 
975
        for (i = 0200; i <= 0377; i++)
 
976
                if (isprint(i))
 
977
                        map[i] = ED_INSERT;
 
978
}
 
979
 
 
980
 
 
981
/* map_init_meta():
 
982
 *      Bind all the meta keys to the appropriate ESC-<key> sequence
 
983
 */
 
984
private void
 
985
map_init_meta(EditLine *el)
 
986
{
 
987
        char buf[3];
 
988
        int i;
 
989
        el_action_t *map = el->el_map.key;
 
990
        el_action_t *alt = el->el_map.alt;
 
991
 
 
992
        for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
 
993
                continue;
 
994
 
 
995
        if (i > 0377) {
 
996
                for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
 
997
                        continue;
 
998
                if (i > 0377) {
 
999
                        i = 033;
 
1000
                        if (el->el_map.type == MAP_VI)
 
1001
                                map = alt;
 
1002
                } else
 
1003
                        map = alt;
 
1004
        }
 
1005
        buf[0] = (char) i;
 
1006
        buf[2] = 0;
 
1007
        for (i = 0200; i <= 0377; i++)
 
1008
                switch (map[i]) {
 
1009
                case ED_INSERT:
 
1010
                case ED_UNASSIGNED:
 
1011
                case ED_SEQUENCE_LEAD_IN:
 
1012
                        break;
 
1013
                default:
 
1014
                        buf[1] = i & 0177;
 
1015
                        key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD);
 
1016
                        break;
 
1017
                }
 
1018
        map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
 
1019
}
 
1020
 
 
1021
 
 
1022
/* map_init_vi():
 
1023
 *      Initialize the vi bindings
 
1024
 */
 
1025
protected void
 
1026
map_init_vi(EditLine *el)
 
1027
{
 
1028
        int i;
 
1029
        el_action_t *key = el->el_map.key;
 
1030
        el_action_t *alt = el->el_map.alt;
 
1031
        const el_action_t *vii = el->el_map.vii;
 
1032
        const el_action_t *vic = el->el_map.vic;
 
1033
 
 
1034
        el->el_map.type = MAP_VI;
 
1035
        el->el_map.current = el->el_map.key;
 
1036
 
 
1037
        key_reset(el);
 
1038
 
 
1039
        for (i = 0; i < N_KEYS; i++) {
 
1040
                key[i] = vii[i];
 
1041
                alt[i] = vic[i];
 
1042
        }
 
1043
 
 
1044
        map_init_meta(el);
 
1045
        map_init_nls(el);
 
1046
 
 
1047
        tty_bind_char(el, 1);
 
1048
        term_bind_arrow(el);
 
1049
}
 
1050
 
 
1051
 
 
1052
/* map_init_emacs():
 
1053
 *      Initialize the emacs bindings
 
1054
 */
 
1055
protected void
 
1056
map_init_emacs(EditLine *el)
 
1057
{
 
1058
        int i;
 
1059
        char buf[3];
 
1060
        el_action_t *key = el->el_map.key;
 
1061
        el_action_t *alt = el->el_map.alt;
 
1062
        const el_action_t *emacs = el->el_map.emacs;
 
1063
 
 
1064
        el->el_map.type = MAP_EMACS;
 
1065
        el->el_map.current = el->el_map.key;
 
1066
        key_reset(el);
 
1067
 
 
1068
        for (i = 0; i < N_KEYS; i++) {
 
1069
                key[i] = emacs[i];
 
1070
                alt[i] = ED_UNASSIGNED;
 
1071
        }
 
1072
 
 
1073
        map_init_meta(el);
 
1074
        map_init_nls(el);
 
1075
 
 
1076
        buf[0] = CONTROL('X');
 
1077
        buf[1] = CONTROL('X');
 
1078
        buf[2] = 0;
 
1079
        key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
 
1080
 
 
1081
        tty_bind_char(el, 1);
 
1082
        term_bind_arrow(el);
 
1083
}
 
1084
 
 
1085
 
 
1086
/* map_set_editor():
 
1087
 *      Set the editor
 
1088
 */
 
1089
protected int
 
1090
map_set_editor(EditLine *el, char *editor)
 
1091
{
 
1092
 
 
1093
        if (strcmp(editor, "emacs") == 0) {
 
1094
                map_init_emacs(el);
 
1095
                return (0);
 
1096
        }
 
1097
        if (strcmp(editor, "vi") == 0) {
 
1098
                map_init_vi(el);
 
1099
                return (0);
 
1100
        }
 
1101
        return (-1);
 
1102
}
 
1103
 
 
1104
 
 
1105
/* map_get_editor():
 
1106
 *      Retrieve the editor
 
1107
 */
 
1108
protected int
 
1109
map_get_editor(EditLine *el, const char **editor)
 
1110
{
 
1111
 
 
1112
        if (editor == NULL)
 
1113
                return (-1);
 
1114
        switch (el->el_map.type) {
 
1115
        case MAP_EMACS:
 
1116
                *editor = "emacs";
 
1117
                return (0);
 
1118
        case MAP_VI:
 
1119
                *editor = "vi";
 
1120
                return (0);
 
1121
        }
 
1122
        return (-1);
 
1123
}
 
1124
 
 
1125
 
 
1126
/* map_print_key():
 
1127
 *      Print the function description for 1 key
 
1128
 */
 
1129
private void
 
1130
map_print_key(EditLine *el, el_action_t *map, const char *in)
 
1131
{
 
1132
        char outbuf[EL_BUFSIZ];
 
1133
        el_bindings_t *bp;
 
1134
 
 
1135
        if (in[0] == '\0' || in[1] == '\0') {
 
1136
                (void) key__decode_str(in, outbuf, "");
 
1137
                for (bp = el->el_map.help; bp->name != NULL; bp++)
 
1138
                        if (bp->func == map[(unsigned char) *in]) {
 
1139
                                (void) fprintf(el->el_outfile,
 
1140
                                    "%s\t->\t%s\n", outbuf, bp->name);
 
1141
                                return;
 
1142
                        }
 
1143
        } else
 
1144
                key_print(el, in);
 
1145
}
 
1146
 
 
1147
 
 
1148
/* map_print_some_keys():
 
1149
 *      Print keys from first to last
 
1150
 */
 
1151
private void
 
1152
map_print_some_keys(EditLine *el, el_action_t *map, int first, int last)
 
1153
{
 
1154
        el_bindings_t *bp;
 
1155
        char firstbuf[2], lastbuf[2];
 
1156
        char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
 
1157
 
 
1158
        firstbuf[0] = first;
 
1159
        firstbuf[1] = 0;
 
1160
        lastbuf[0] = last;
 
1161
        lastbuf[1] = 0;
 
1162
        if (map[first] == ED_UNASSIGNED) {
 
1163
                if (first == last)
 
1164
                        (void) fprintf(el->el_outfile,
 
1165
                            "%-15s->  is undefined\n",
 
1166
                            key__decode_str(firstbuf, unparsbuf, STRQQ));
 
1167
                return;
 
1168
        }
 
1169
        for (bp = el->el_map.help; bp->name != NULL; bp++) {
 
1170
                if (bp->func == map[first]) {
 
1171
                        if (first == last) {
 
1172
                                (void) fprintf(el->el_outfile, "%-15s->  %s\n",
 
1173
                                    key__decode_str(firstbuf, unparsbuf, STRQQ),
 
1174
                                    bp->name);
 
1175
                        } else {
 
1176
                                (void) fprintf(el->el_outfile,
 
1177
                                    "%-4s to %-7s->  %s\n",
 
1178
                                    key__decode_str(firstbuf, unparsbuf, STRQQ),
 
1179
                                    key__decode_str(lastbuf, extrabuf, STRQQ),
 
1180
                                    bp->name);
 
1181
                        }
 
1182
                        return;
 
1183
                }
 
1184
        }
 
1185
#ifdef MAP_DEBUG
 
1186
        if (map == el->el_map.key) {
 
1187
                (void) fprintf(el->el_outfile,
 
1188
                    "BUG!!! %s isn't bound to anything.\n",
 
1189
                    key__decode_str(firstbuf, unparsbuf, STRQQ));
 
1190
                (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
 
1191
                    first, el->el_map.key[first]);
 
1192
        } else {
 
1193
                (void) fprintf(el->el_outfile,
 
1194
                    "BUG!!! %s isn't bound to anything.\n",
 
1195
                    key__decode_str(firstbuf, unparsbuf, STRQQ));
 
1196
                (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
 
1197
                    first, el->el_map.alt[first]);
 
1198
        }
 
1199
#endif
 
1200
        EL_ABORT((el->el_errfile, "Error printing keys\n"));
 
1201
}
 
1202
 
 
1203
 
 
1204
/* map_print_all_keys():
 
1205
 *      Print the function description for all keys.
 
1206
 */
 
1207
private void
 
1208
map_print_all_keys(EditLine *el)
 
1209
{
 
1210
        int prev, i;
 
1211
 
 
1212
        (void) fprintf(el->el_outfile, "Standard key bindings\n");
 
1213
        prev = 0;
 
1214
        for (i = 0; i < N_KEYS; i++) {
 
1215
                if (el->el_map.key[prev] == el->el_map.key[i])
 
1216
                        continue;
 
1217
                map_print_some_keys(el, el->el_map.key, prev, i - 1);
 
1218
                prev = i;
 
1219
        }
 
1220
        map_print_some_keys(el, el->el_map.key, prev, i - 1);
 
1221
 
 
1222
        (void) fprintf(el->el_outfile, "Alternative key bindings\n");
 
1223
        prev = 0;
 
1224
        for (i = 0; i < N_KEYS; i++) {
 
1225
                if (el->el_map.alt[prev] == el->el_map.alt[i])
 
1226
                        continue;
 
1227
                map_print_some_keys(el, el->el_map.alt, prev, i - 1);
 
1228
                prev = i;
 
1229
        }
 
1230
        map_print_some_keys(el, el->el_map.alt, prev, i - 1);
 
1231
 
 
1232
        (void) fprintf(el->el_outfile, "Multi-character bindings\n");
 
1233
        key_print(el, "");
 
1234
        (void) fprintf(el->el_outfile, "Arrow key bindings\n");
 
1235
        term_print_arrow(el, "");
 
1236
}
 
1237
 
 
1238
 
 
1239
/* map_bind():
 
1240
 *      Add/remove/change bindings
 
1241
 */
 
1242
protected int
 
1243
map_bind(EditLine *el, int argc, const char **argv)
 
1244
{
 
1245
        el_action_t *map;
 
1246
        int ntype, rem;
 
1247
        const char *p;
 
1248
        char inbuf[EL_BUFSIZ];
 
1249
        char outbuf[EL_BUFSIZ];
 
1250
        const char *in = NULL;
 
1251
        char *out = NULL;
 
1252
        el_bindings_t *bp;
 
1253
        int cmd;
 
1254
        int key;
 
1255
 
 
1256
        if (argv == NULL)
 
1257
                return (-1);
 
1258
 
 
1259
        map = el->el_map.key;
 
1260
        ntype = XK_CMD;
 
1261
        key = rem = 0;
 
1262
        for (argc = 1; (p = argv[argc]) != NULL; argc++)
 
1263
                if (p[0] == '-')
 
1264
                        switch (p[1]) {
 
1265
                        case 'a':
 
1266
                                map = el->el_map.alt;
 
1267
                                break;
 
1268
 
 
1269
                        case 's':
 
1270
                                ntype = XK_STR;
 
1271
                                break;
 
1272
#ifdef notyet
 
1273
                        case 'c':
 
1274
                                ntype = XK_EXE;
 
1275
                                break;
 
1276
#endif
 
1277
                        case 'k':
 
1278
                                key = 1;
 
1279
                                break;
 
1280
 
 
1281
                        case 'r':
 
1282
                                rem = 1;
 
1283
                                break;
 
1284
 
 
1285
                        case 'v':
 
1286
                                map_init_vi(el);
 
1287
                                return (0);
 
1288
 
 
1289
                        case 'e':
 
1290
                                map_init_emacs(el);
 
1291
                                return (0);
 
1292
 
 
1293
                        case 'l':
 
1294
                                for (bp = el->el_map.help; bp->name != NULL;
 
1295
                                    bp++)
 
1296
                                        (void) fprintf(el->el_outfile,
 
1297
                                            "%s\n\t%s\n",
 
1298
                                            bp->name, bp->description);
 
1299
                                return (0);
 
1300
                        default:
 
1301
                                (void) fprintf(el->el_errfile,
 
1302
                                    "%s: Invalid switch `%c'.\n",
 
1303
                                    argv[0], p[1]);
 
1304
                        }
 
1305
                else
 
1306
                        break;
 
1307
 
 
1308
        if (argv[argc] == NULL) {
 
1309
                map_print_all_keys(el);
 
1310
                return (0);
 
1311
        }
 
1312
        if (key)
 
1313
                in = argv[argc++];
 
1314
        else if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
 
1315
                (void) fprintf(el->el_errfile,
 
1316
                    "%s: Invalid \\ or ^ in instring.\n",
 
1317
                    argv[0]);
 
1318
                return (-1);
 
1319
        }
 
1320
        if (rem) {
 
1321
                if (key) {
 
1322
                        (void) term_clear_arrow(el, in);
 
1323
                        return (-1);
 
1324
                }
 
1325
                if (in[1])
 
1326
                        (void) key_delete(el, in);
 
1327
                else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
 
1328
                        (void) key_delete(el, in);
 
1329
                else
 
1330
                        map[(unsigned char) *in] = ED_UNASSIGNED;
 
1331
                return (0);
 
1332
        }
 
1333
        if (argv[argc] == NULL) {
 
1334
                if (key)
 
1335
                        term_print_arrow(el, in);
 
1336
                else
 
1337
                        map_print_key(el, map, in);
 
1338
                return (0);
 
1339
        }
 
1340
#ifdef notyet
 
1341
        if (argv[argc + 1] != NULL) {
 
1342
                bindkey_usage();
 
1343
                return (-1);
 
1344
        }
 
1345
#endif
 
1346
 
 
1347
        switch (ntype) {
 
1348
        case XK_STR:
 
1349
        case XK_EXE:
 
1350
                if ((out = parse__string(outbuf, argv[argc])) == NULL) {
 
1351
                        (void) fprintf(el->el_errfile,
 
1352
                            "%s: Invalid \\ or ^ in outstring.\n", argv[0]);
 
1353
                        return (-1);
 
1354
                }
 
1355
                if (key)
 
1356
                        term_set_arrow(el, in, key_map_str(el, out), ntype);
 
1357
                else
 
1358
                        key_add(el, in, key_map_str(el, out), ntype);
 
1359
                map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
 
1360
                break;
 
1361
 
 
1362
        case XK_CMD:
 
1363
                if ((cmd = parse_cmd(el, argv[argc])) == -1) {
 
1364
                        (void) fprintf(el->el_errfile,
 
1365
                            "%s: Invalid command `%s'.\n", argv[0], argv[argc]);
 
1366
                        return (-1);
 
1367
                }
 
1368
                if (key)
 
1369
                        term_set_arrow(el, in, key_map_str(el, out), ntype);
 
1370
                else {
 
1371
                        if (in[1]) {
 
1372
                                key_add(el, in, key_map_cmd(el, cmd), ntype);
 
1373
                                map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
 
1374
                        } else {
 
1375
                                key_clear(el, map, in);
 
1376
                                map[(unsigned char) *in] = cmd;
 
1377
                        }
 
1378
                }
 
1379
                break;
 
1380
 
 
1381
        default:
 
1382
                EL_ABORT((el->el_errfile, "Bad XK_ type\n", ntype));
 
1383
                break;
 
1384
        }
 
1385
        return (0);
 
1386
}
 
1387
 
 
1388
 
 
1389
/* map_addfunc():
 
1390
 *      add a user defined function
 
1391
 */
 
1392
protected int
 
1393
map_addfunc(EditLine *el, const char *name, const char *help, el_func_t func)
 
1394
{
 
1395
        void *p;
 
1396
        int nf = el->el_map.nfunc + 2;
 
1397
 
 
1398
        if (name == NULL || help == NULL || func == NULL)
 
1399
                return (-1);
 
1400
 
 
1401
        if ((p = el_realloc(el->el_map.func, nf * sizeof(el_func_t))) == NULL)
 
1402
                return (-1);
 
1403
        el->el_map.func = (el_func_t *) p;
 
1404
        if ((p = el_realloc(el->el_map.help, nf * sizeof(el_bindings_t)))
 
1405
            == NULL)
 
1406
                return (-1);
 
1407
        el->el_map.help = (el_bindings_t *) p;
 
1408
 
 
1409
        nf = el->el_map.nfunc;
 
1410
        el->el_map.func[nf] = func;
 
1411
 
 
1412
        el->el_map.help[nf].name = name;
 
1413
        el->el_map.help[nf].func = nf;
 
1414
        el->el_map.help[nf].description = help;
 
1415
        el->el_map.help[++nf].name = NULL;
 
1416
        el->el_map.nfunc++;
 
1417
 
 
1418
        return (0);
 
1419
}