Initial revision
[external/binutils.git] / readline / vi_keymap.c
1 /* vi_keymap.c -- the keymap for vi_mode in readline (). */
2
3 /* Copyright (C) 1988,1989 Free Software Foundation, Inc.
4
5    This file is part of GNU Readline, a library for reading lines
6    of text with interactive input and history editing.
7
8    Readline is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by the
10    Free Software Foundation; either version 1, or (at your option) any
11    later version.
12
13    Readline is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with Readline; see the file COPYING.  If not, write to the Free
20    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
21
22 #ifndef FILE
23 #include <stdio.h>
24 #endif /* FILE */
25
26 #include "readline.h"
27
28 extern KEYMAP_ENTRY_ARRAY vi_escape_keymap;
29
30 /* The keymap arrays for handling vi mode. */
31 KEYMAP_ENTRY_ARRAY vi_movement_keymap = {
32
33   /* The regular control keys come first. */
34   { ISFUNC, (Function *)0x0 },          /* Control-@ */
35   { ISFUNC, (Function *)0x0 },          /* Control-a */
36   { ISFUNC, (Function *)0x0 },          /* Control-b */
37   { ISFUNC, (Function *)0x0 },          /* Control-c */
38   { ISFUNC, rl_vi_eof_maybe },          /* Control-d */
39   { ISFUNC, rl_emacs_editing_mode },    /* Control-e */
40   { ISFUNC, (Function *)0x0 },          /* Control-f */
41   { ISFUNC, rl_abort },                 /* Control-g */
42   { ISFUNC, rl_backward },              /* Control-h */
43   { ISFUNC, (Function *)0x0 },          /* Control-i */
44   { ISFUNC, rl_newline },               /* Control-j */
45   { ISFUNC, rl_kill_line },             /* Control-k */
46   { ISFUNC, rl_clear_screen },          /* Control-l */
47   { ISFUNC, rl_newline },               /* Control-m */
48   { ISFUNC, rl_get_next_history },      /* Control-n */
49   { ISFUNC, (Function *)0x0 },          /* Control-o */
50   { ISFUNC, rl_get_previous_history },  /* Control-p */
51   { ISFUNC, rl_quoted_insert },         /* Control-q */
52   { ISFUNC, rl_reverse_search_history }, /* Control-r */
53   { ISFUNC, rl_forward_search_history }, /* Control-s */
54   { ISFUNC, rl_transpose_chars },       /* Control-t */
55   { ISFUNC, rl_unix_line_discard },     /* Control-u */
56   { ISFUNC, rl_quoted_insert },         /* Control-v */
57   { ISFUNC, rl_unix_word_rubout },      /* Control-w */
58   { ISFUNC, (Function *)0x0 },          /* Control-x */
59   { ISFUNC, rl_yank },                  /* Control-y */
60   { ISFUNC, (Function *)0x0 },          /* Control-z */
61
62   { ISKMAP, (Function *)vi_escape_keymap }, /* Control-[ */
63   { ISFUNC, (Function *)0x0 },          /* Control-\ */
64   { ISFUNC, (Function *)0x0 },          /* Control-] */
65   { ISFUNC, (Function *)0x0 },          /* Control-^ */
66   { ISFUNC, rl_undo_command },          /* Control-_ */
67
68   /* The start of printing characters. */
69   { ISFUNC, rl_forward },               /* SPACE */
70   { ISFUNC, (Function *)0x0 },          /* ! */
71   { ISFUNC, (Function *)0x0 },          /* " */
72   { ISFUNC, rl_vi_comment },            /* # */
73   { ISFUNC, rl_end_of_line },           /* $ */
74   { ISFUNC, rl_vi_match },              /* % */
75   { ISFUNC, (Function *)0x0 },          /* & */
76   { ISFUNC, (Function *)0x0 },          /* ' */
77   { ISFUNC, (Function *)0x0 },          /* ( */
78   { ISFUNC, (Function *)0x0 },          /* ) */
79   { ISFUNC, rl_vi_complete },           /* * */
80   { ISFUNC, rl_get_next_history},       /* + */
81   { ISFUNC, rl_vi_char_search },        /* , */
82   { ISFUNC, rl_get_previous_history },  /* - */
83   { ISFUNC, (Function *)0x0 },          /* . */
84   { ISFUNC, rl_vi_search },             /* / */
85
86   /* Regular digits. */
87   { ISFUNC, rl_vi_arg_digit },          /* 0 */
88   { ISFUNC, rl_vi_arg_digit },          /* 1 */
89   { ISFUNC, rl_vi_arg_digit },          /* 2 */
90   { ISFUNC, rl_vi_arg_digit },          /* 3 */
91   { ISFUNC, rl_vi_arg_digit },          /* 4 */
92   { ISFUNC, rl_vi_arg_digit },          /* 5 */
93   { ISFUNC, rl_vi_arg_digit },          /* 6 */
94   { ISFUNC, rl_vi_arg_digit },          /* 7 */
95   { ISFUNC, rl_vi_arg_digit },          /* 8 */
96   { ISFUNC, rl_vi_arg_digit },          /* 9 */
97
98   /* A little more punctuation. */
99   { ISFUNC, (Function *)0x0 },          /* : */
100   { ISFUNC, rl_vi_char_search },        /* ; */
101   { ISFUNC, (Function *)0x0 },          /* < */
102   { ISFUNC, (Function *)0x0 },          /* = */
103   { ISFUNC, (Function *)0x0 },          /* > */
104   { ISFUNC, rl_vi_search },             /* ? */
105   { ISFUNC, (Function *)0x0 },          /* @ */
106
107   /* Uppercase alphabet. */
108   { ISFUNC, rl_vi_append_eol },         /* A */
109   { ISFUNC, rl_vi_prev_word},           /* B */
110   { ISFUNC, rl_vi_change_to },          /* C */
111   { ISFUNC, rl_vi_delete_to },          /* D */
112   { ISFUNC, rl_vi_end_word },           /* E */
113   { ISFUNC, rl_vi_char_search },        /* F */
114   { ISFUNC, (Function *)0x0 },          /* G */
115   { ISFUNC, (Function *)0x0 },          /* H */
116   { ISFUNC, rl_vi_insert_beg },         /* I */
117   { ISFUNC, (Function *)0x0 },          /* J */
118   { ISFUNC, (Function *)0x0 },          /* K */
119   { ISFUNC, (Function *)0x0 },          /* L */
120   { ISFUNC, (Function *)0x0 },          /* M */
121   { ISFUNC, rl_vi_search_again },       /* N */
122   { ISFUNC, (Function *)0x0 },          /* O */
123   { ISFUNC, rl_vi_put },                /* P */
124   { ISFUNC, (Function *)0x0 },          /* Q */
125   { ISFUNC, rl_vi_replace },            /* R */
126   { ISFUNC, rl_vi_subst },              /* S */
127   { ISFUNC, rl_vi_char_search },        /* T */
128   { ISFUNC, rl_revert_line },           /* U */
129   { ISFUNC, (Function *)0x0 },          /* V */
130   { ISFUNC, rl_vi_next_word },          /* W */
131   { ISFUNC, rl_rubout },                /* X */
132   { ISFUNC, rl_vi_yank_to },            /* Y */
133   { ISFUNC, (Function *)0x0 },          /* Z */
134
135   /* Some more punctuation. */
136   { ISFUNC, (Function *)0x0 },          /* [ */
137   { ISFUNC, (Function *)0x0 },          /* \ */
138   { ISFUNC, (Function *)0x0 },          /* ] */
139   { ISFUNC, rl_vi_first_print },        /* ^ */
140   { ISFUNC, rl_vi_yank_arg },           /* _ */
141   { ISFUNC, (Function *)0x0 },          /* ` */
142
143   /* Lowercase alphabet. */
144   { ISFUNC, rl_vi_append_mode },        /* a */
145   { ISFUNC, rl_vi_prev_word },          /* b */
146   { ISFUNC, rl_vi_change_to },          /* c */
147   { ISFUNC, rl_vi_delete_to },          /* d */
148   { ISFUNC, rl_vi_end_word },           /* e */
149   { ISFUNC, rl_vi_char_search },        /* f */
150   { ISFUNC, (Function *)0x0 },          /* g */
151   { ISFUNC, rl_backward },              /* h */
152   { ISFUNC, rl_vi_insertion_mode },     /* i */
153   { ISFUNC, rl_get_next_history },      /* j */
154   { ISFUNC, rl_get_previous_history },  /* k */
155   { ISFUNC, rl_forward },               /* l */
156   { ISFUNC, (Function *)0x0 },          /* m */
157   { ISFUNC, rl_vi_search_again },       /* n */
158   { ISFUNC, (Function *)0x0 },          /* o */
159   { ISFUNC, rl_vi_put },                /* p */
160   { ISFUNC, (Function *)0x0 },          /* q */
161   { ISFUNC, rl_vi_change_char },        /* r */
162   { ISFUNC, rl_vi_subst },              /* s */
163   { ISFUNC, rl_vi_char_search },        /* t */
164   { ISFUNC, rl_undo_command },          /* u */
165   { ISFUNC, (Function *)0x0 },          /* v */
166   { ISFUNC, rl_vi_next_word },          /* w */
167   { ISFUNC, rl_vi_delete },             /* x */
168   { ISFUNC, rl_vi_yank_to },            /* y */
169   { ISFUNC, (Function *)0x0 },          /* z */
170
171   /* Final punctuation. */
172   { ISFUNC, (Function *)0x0 },          /* { */
173   { ISFUNC, rl_vi_column },             /* | */
174   { ISFUNC, (Function *)0x0 },          /* } */
175   { ISFUNC, rl_vi_change_case },        /* ~ */
176   { ISFUNC, rl_backward }               /* RUBOUT */
177 };
178
179
180 KEYMAP_ENTRY_ARRAY vi_insertion_keymap = {
181
182   /* The regular control keys come first. */
183   { ISFUNC, (Function *)0x0 },          /* Control-@ */
184   { ISFUNC, rl_insert },                /* Control-a */
185   { ISFUNC, rl_insert },                /* Control-b */
186   { ISFUNC, rl_insert },                /* Control-c */
187   { ISFUNC, rl_vi_eof_maybe },          /* Control-d */
188   { ISFUNC, rl_insert },                /* Control-e */
189   { ISFUNC, rl_insert },                /* Control-f */
190   { ISFUNC, rl_insert },                /* Control-g */
191   { ISFUNC, rl_rubout },                /* Control-h */
192   { ISFUNC, rl_complete },              /* Control-i */
193   { ISFUNC, rl_newline },               /* Control-j */
194   { ISFUNC, rl_insert },                /* Control-k */
195   { ISFUNC, rl_insert },                /* Control-l */
196   { ISFUNC, rl_newline },               /* Control-m */
197   { ISFUNC, rl_insert },                /* Control-n */
198   { ISFUNC, rl_insert },                /* Control-o */
199   { ISFUNC, rl_insert },                /* Control-p */
200   { ISFUNC, rl_insert },                /* Control-q */
201   { ISFUNC, rl_reverse_search_history }, /* Control-r */
202   { ISFUNC, rl_forward_search_history }, /* Control-s */
203   { ISFUNC, rl_transpose_chars },       /* Control-t */
204   { ISFUNC, rl_unix_line_discard },     /* Control-u */
205   { ISFUNC, rl_quoted_insert },         /* Control-v */
206   { ISFUNC, rl_unix_word_rubout },      /* Control-w */
207   { ISFUNC, rl_insert },                /* Control-x */
208   { ISFUNC, rl_yank },                  /* Control-y */
209   { ISFUNC, rl_insert },                /* Control-z */
210
211   { ISFUNC, rl_vi_movement_mode },      /* Control-[ */
212   { ISFUNC, rl_insert },                /* Control-\ */
213   { ISFUNC, rl_insert },                /* Control-] */
214   { ISFUNC, rl_insert },                /* Control-^ */
215   { ISFUNC, rl_undo_command },          /* Control-_ */
216
217   /* The start of printing characters. */
218   { ISFUNC, rl_insert },                /* SPACE */
219   { ISFUNC, rl_insert },                /* ! */
220   { ISFUNC, rl_insert },                /* " */
221   { ISFUNC, rl_insert },                /* # */
222   { ISFUNC, rl_insert },                /* $ */
223   { ISFUNC, rl_insert },                /* % */
224   { ISFUNC, rl_insert },                /* & */
225   { ISFUNC, rl_insert },                /* ' */
226   { ISFUNC, rl_insert },                /* ( */
227   { ISFUNC, rl_insert },                /* ) */
228   { ISFUNC, rl_insert },                /* * */
229   { ISFUNC, rl_insert },                /* + */
230   { ISFUNC, rl_insert },                /* , */
231   { ISFUNC, rl_insert },                /* - */
232   { ISFUNC, rl_insert },                /* . */
233   { ISFUNC, rl_insert },                /* / */
234
235   /* Regular digits. */
236   { ISFUNC, rl_insert },                /* 0 */
237   { ISFUNC, rl_insert },                /* 1 */
238   { ISFUNC, rl_insert },                /* 2 */
239   { ISFUNC, rl_insert },                /* 3 */
240   { ISFUNC, rl_insert },                /* 4 */
241   { ISFUNC, rl_insert },                /* 5 */
242   { ISFUNC, rl_insert },                /* 6 */
243   { ISFUNC, rl_insert },                /* 7 */
244   { ISFUNC, rl_insert },                /* 8 */
245   { ISFUNC, rl_insert },                /* 9 */
246
247   /* A little more punctuation. */
248   { ISFUNC, rl_insert },                /* : */
249   { ISFUNC, rl_insert },                /* ; */
250   { ISFUNC, rl_insert },                /* < */
251   { ISFUNC, rl_insert },                /* = */
252   { ISFUNC, rl_insert },                /* > */
253   { ISFUNC, rl_insert },                /* ? */
254   { ISFUNC, rl_insert },                /* @ */
255
256   /* Uppercase alphabet. */
257   { ISFUNC, rl_insert },                /* A */
258   { ISFUNC, rl_insert },                /* B */
259   { ISFUNC, rl_insert },                /* C */
260   { ISFUNC, rl_insert },                /* D */
261   { ISFUNC, rl_insert },                /* E */
262   { ISFUNC, rl_insert },                /* F */
263   { ISFUNC, rl_insert },                /* G */
264   { ISFUNC, rl_insert },                /* H */
265   { ISFUNC, rl_insert },                /* I */
266   { ISFUNC, rl_insert },                /* J */
267   { ISFUNC, rl_insert },                /* K */
268   { ISFUNC, rl_insert },                /* L */
269   { ISFUNC, rl_insert },                /* M */
270   { ISFUNC, rl_insert },                /* N */
271   { ISFUNC, rl_insert },                /* O */
272   { ISFUNC, rl_insert },                /* P */
273   { ISFUNC, rl_insert },                /* Q */
274   { ISFUNC, rl_insert },                /* R */
275   { ISFUNC, rl_insert },                /* S */
276   { ISFUNC, rl_insert },                /* T */
277   { ISFUNC, rl_insert },                /* U */
278   { ISFUNC, rl_insert },                /* V */
279   { ISFUNC, rl_insert },                /* W */
280   { ISFUNC, rl_insert },                /* X */
281   { ISFUNC, rl_insert },                /* Y */
282   { ISFUNC, rl_insert },                /* Z */
283
284   /* Some more punctuation. */
285   { ISFUNC, rl_insert },                /* [ */
286   { ISFUNC, rl_insert },                /* \ */
287   { ISFUNC, rl_insert },                /* ] */
288   { ISFUNC, rl_insert },                /* ^ */
289   { ISFUNC, rl_insert },                /* _ */
290   { ISFUNC, rl_insert },                /* ` */
291
292   /* Lowercase alphabet. */
293   { ISFUNC, rl_insert },                /* a */
294   { ISFUNC, rl_insert },                /* b */
295   { ISFUNC, rl_insert },                /* c */
296   { ISFUNC, rl_insert },                /* d */
297   { ISFUNC, rl_insert },                /* e */
298   { ISFUNC, rl_insert },                /* f */
299   { ISFUNC, rl_insert },                /* g */
300   { ISFUNC, rl_insert },                /* h */
301   { ISFUNC, rl_insert },                /* i */
302   { ISFUNC, rl_insert },                /* j */
303   { ISFUNC, rl_insert },                /* k */
304   { ISFUNC, rl_insert },                /* l */
305   { ISFUNC, rl_insert },                /* m */
306   { ISFUNC, rl_insert },                /* n */
307   { ISFUNC, rl_insert },                /* o */
308   { ISFUNC, rl_insert },                /* p */
309   { ISFUNC, rl_insert },                /* q */
310   { ISFUNC, rl_insert },                /* r */
311   { ISFUNC, rl_insert },                /* s */
312   { ISFUNC, rl_insert },                /* t */
313   { ISFUNC, rl_insert },                /* u */
314   { ISFUNC, rl_insert },                /* v */
315   { ISFUNC, rl_insert },                /* w */
316   { ISFUNC, rl_insert },                /* x */
317   { ISFUNC, rl_insert },                /* y */
318   { ISFUNC, rl_insert },                /* z */
319
320   /* Final punctuation. */
321   { ISFUNC, rl_insert },                /* { */
322   { ISFUNC, rl_insert },                /* | */
323   { ISFUNC, rl_insert },                /* } */
324   { ISFUNC, rl_insert },                /* ~ */
325   { ISFUNC, rl_rubout }                 /* RUBOUT */
326 };
327
328 KEYMAP_ENTRY_ARRAY vi_escape_keymap = {
329
330   /* The regular control keys come first. */
331   { ISFUNC, (Function *)0x0 },          /* Control-@ */
332   { ISFUNC, (Function *)0x0 },          /* Control-a */
333   { ISFUNC, (Function *)0x0 },          /* Control-b */
334   { ISFUNC, (Function *)0x0 },          /* Control-c */
335   { ISFUNC, (Function *)0x0 },          /* Control-d */
336   { ISFUNC, (Function *)0x0 },          /* Control-e */
337   { ISFUNC, (Function *)0x0 },          /* Control-f */
338   { ISFUNC, (Function *)0x0 },          /* Control-g */
339   { ISFUNC, (Function *)0x0 },          /* Control-h */
340   { ISFUNC, rl_tab_insert},             /* Control-i */
341   { ISFUNC, rl_emacs_editing_mode},     /* Control-j */
342   { ISFUNC, rl_kill_line },             /* Control-k */
343   { ISFUNC, (Function *)0x0 },          /* Control-l */
344   { ISFUNC, rl_emacs_editing_mode},     /* Control-m */
345   { ISFUNC, (Function *)0x0 },          /* Control-n */
346   { ISFUNC, (Function *)0x0 },          /* Control-o */
347   { ISFUNC, (Function *)0x0 },          /* Control-p */
348   { ISFUNC, (Function *)0x0 },          /* Control-q */
349   { ISFUNC, (Function *)0x0 },          /* Control-r */
350   { ISFUNC, (Function *)0x0 },          /* Control-s */
351   { ISFUNC, (Function *)0x0 },          /* Control-t */
352   { ISFUNC, (Function *)0x0 },          /* Control-u */
353   { ISFUNC, (Function *)0x0 },          /* Control-v */
354   { ISFUNC, (Function *)0x0 },          /* Control-w */
355   { ISFUNC, (Function *)0x0 },          /* Control-x */
356   { ISFUNC, (Function *)0x0 },          /* Control-y */
357   { ISFUNC, (Function *)0x0 },          /* Control-z */
358
359   { ISFUNC, rl_vi_movement_mode },      /* Control-[ */
360   { ISFUNC, (Function *)0x0 },          /* Control-\ */
361   { ISFUNC, (Function *)0x0 },          /* Control-] */
362   { ISFUNC, (Function *)0x0 },          /* Control-^ */
363   { ISFUNC, rl_undo_command },          /* Control-_ */
364
365   /* The start of printing characters. */
366   { ISFUNC, (Function *)0x0 },          /* SPACE */
367   { ISFUNC, (Function *)0x0 },          /* ! */
368   { ISFUNC, (Function *)0x0 },          /* " */
369   { ISFUNC, (Function *)0x0 },          /* # */
370   { ISFUNC, (Function *)0x0 },          /* $ */
371   { ISFUNC, (Function *)0x0 },          /* % */
372   { ISFUNC, (Function *)0x0 },          /* & */
373   { ISFUNC, (Function *)0x0 },          /* ' */
374   { ISFUNC, (Function *)0x0 },          /* ( */
375   { ISFUNC, (Function *)0x0 },          /* ) */
376   { ISFUNC, (Function *)0x0 },          /* * */
377   { ISFUNC, (Function *)0x0 },          /* + */
378   { ISFUNC, (Function *)0x0 },          /* , */
379   { ISFUNC, (Function *)0x0 },          /* - */
380   { ISFUNC, (Function *)0x0 },          /* . */
381   { ISFUNC, (Function *)0x0 },          /* / */
382
383   /* Regular digits. */
384   { ISFUNC, rl_vi_arg_digit },          /* 0 */
385   { ISFUNC, rl_vi_arg_digit },          /* 1 */
386   { ISFUNC, rl_vi_arg_digit },          /* 2 */
387   { ISFUNC, rl_vi_arg_digit },          /* 3 */
388   { ISFUNC, rl_vi_arg_digit },          /* 4 */
389   { ISFUNC, rl_vi_arg_digit },          /* 5 */
390   { ISFUNC, rl_vi_arg_digit },          /* 6 */
391   { ISFUNC, rl_vi_arg_digit },          /* 7 */
392   { ISFUNC, rl_vi_arg_digit },          /* 8 */
393   { ISFUNC, rl_vi_arg_digit },          /* 9 */
394
395   /* A little more punctuation. */
396   { ISFUNC, (Function *)0x0 },          /* : */
397   { ISFUNC, (Function *)0x0 },          /* ; */
398   { ISFUNC, (Function *)0x0 },          /* < */
399   { ISFUNC, (Function *)0x0 },          /* = */
400   { ISFUNC, (Function *)0x0 },          /* > */
401   { ISFUNC, (Function *)0x0 },          /* ? */
402   { ISFUNC, (Function *)0x0 },          /* @ */
403
404   /* Uppercase alphabet. */
405   { ISFUNC, rl_do_lowercase_version },  /* A */
406   { ISFUNC, rl_do_lowercase_version },  /* B */
407   { ISFUNC, rl_do_lowercase_version },  /* C */
408   { ISFUNC, rl_do_lowercase_version },  /* D */
409   { ISFUNC, rl_do_lowercase_version },  /* E */
410   { ISFUNC, rl_do_lowercase_version },  /* F */
411   { ISFUNC, rl_do_lowercase_version },  /* G */
412   { ISFUNC, rl_do_lowercase_version },  /* H */
413   { ISFUNC, rl_do_lowercase_version },  /* I */
414   { ISFUNC, rl_do_lowercase_version },  /* J */
415   { ISFUNC, rl_do_lowercase_version },  /* K */
416   { ISFUNC, rl_do_lowercase_version },  /* L */
417   { ISFUNC, rl_do_lowercase_version },  /* M */
418   { ISFUNC, rl_do_lowercase_version },  /* N */
419   { ISFUNC, rl_do_lowercase_version },  /* O */
420   { ISFUNC, rl_do_lowercase_version },  /* P */
421   { ISFUNC, rl_do_lowercase_version },  /* Q */
422   { ISFUNC, rl_do_lowercase_version },  /* R */
423   { ISFUNC, rl_do_lowercase_version },  /* S */
424   { ISFUNC, rl_do_lowercase_version },  /* T */
425   { ISFUNC, rl_do_lowercase_version },  /* U */
426   { ISFUNC, rl_do_lowercase_version },  /* V */
427   { ISFUNC, rl_do_lowercase_version },  /* W */
428   { ISFUNC, rl_do_lowercase_version },  /* X */
429   { ISFUNC, rl_do_lowercase_version },  /* Y */
430   { ISFUNC, rl_do_lowercase_version },  /* Z */
431
432   /* Some more punctuation. */
433   { ISFUNC, (Function *)0x0 },          /* [ */
434   { ISFUNC, (Function *)0x0 },          /* \ */
435   { ISFUNC, (Function *)0x0 },          /* ] */
436   { ISFUNC, (Function *)0x0 },          /* ^ */
437   { ISFUNC, (Function *)0x0 },          /* _ */
438   { ISFUNC, (Function *)0x0 },          /* ` */
439
440   /* Lowercase alphabet. */
441   { ISFUNC, (Function *)0x0 },          /* a */
442   { ISFUNC, (Function *)0x0 },          /* b */
443   { ISFUNC, (Function *)0x0 },          /* c */
444   { ISFUNC, (Function *)0x0 },          /* d */
445   { ISFUNC, (Function *)0x0 },          /* e */
446   { ISFUNC, (Function *)0x0 },          /* f */
447   { ISFUNC, (Function *)0x0 },          /* g */
448   { ISFUNC, (Function *)0x0 },          /* h */
449   { ISFUNC, (Function *)0x0 },          /* i */
450   { ISFUNC, (Function *)0x0 },          /* j */
451   { ISFUNC, (Function *)0x0 },          /* k */
452   { ISFUNC, (Function *)0x0 },          /* l */
453   { ISFUNC, (Function *)0x0 },          /* m */
454   { ISFUNC, (Function *)0x0 },          /* n */
455   { ISFUNC, (Function *)0x0 },          /* o */
456   { ISFUNC, (Function *)0x0 },          /* p */
457   { ISFUNC, (Function *)0x0 },          /* q */
458   { ISFUNC, (Function *)0x0 },          /* r */
459   { ISFUNC, (Function *)0x0 },          /* s */
460   { ISFUNC, (Function *)0x0 },          /* t */
461   { ISFUNC, (Function *)0x0 },          /* u */
462   { ISFUNC, (Function *)0x0 },          /* v */
463   { ISFUNC, (Function *)0x0 },          /* w */
464   { ISFUNC, (Function *)0x0 },          /* x */
465   { ISFUNC, (Function *)0x0 },          /* y */
466   { ISFUNC, (Function *)0x0 },          /* z */
467
468   /* Final punctuation. */
469   { ISFUNC, (Function *)0x0 },          /* { */
470   { ISFUNC, (Function *)0x0 },          /* | */
471   { ISFUNC, (Function *)0x0 },          /* } */
472   { ISFUNC, (Function *)0x0 },          /* ~ */
473   { ISFUNC, rl_backward_kill_word }     /* RUBOUT */
474 };