Annotation of embedaddon/readline/keymaps.c, revision 1.1.1.1
1.1 misho 1: /* keymaps.c -- Functions and keymaps for the GNU Readline library. */
2:
3: /* Copyright (C) 1988,1989-2009 Free Software Foundation, Inc.
4:
5: This file is part of the GNU Readline Library (Readline), a library
6: for reading lines of text with interactive input and history editing.
7:
8: Readline is free software: you can redistribute it and/or modify
9: it under the terms of the GNU General Public License as published by
10: the Free Software Foundation, either version 3 of the License, or
11: (at your option) any later version.
12:
13: Readline is distributed in the hope that it will be useful,
14: but WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16: GNU General Public License for more details.
17:
18: You should have received a copy of the GNU General Public License
19: along with Readline. If not, see <http://www.gnu.org/licenses/>.
20: */
21:
22: #define READLINE_LIBRARY
23:
24: #if defined (HAVE_CONFIG_H)
25: # include <config.h>
26: #endif
27:
28: #if defined (HAVE_STDLIB_H)
29: # include <stdlib.h>
30: #else
31: # include "ansi_stdlib.h"
32: #endif /* HAVE_STDLIB_H */
33:
34: #include <stdio.h> /* for FILE * definition for readline.h */
35:
36: #include "readline.h"
37: #include "rlconf.h"
38:
39: #include "emacs_keymap.c"
40:
41: #if defined (VI_MODE)
42: #include "vi_keymap.c"
43: #endif
44:
45: #include "xmalloc.h"
46:
47: /* **************************************************************** */
48: /* */
49: /* Functions for manipulating Keymaps. */
50: /* */
51: /* **************************************************************** */
52:
53:
54: /* Return a new, empty keymap.
55: Free it with free() when you are done. */
56: Keymap
57: rl_make_bare_keymap ()
58: {
59: register int i;
60: Keymap keymap;
61:
62: keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY));
63: for (i = 0; i < KEYMAP_SIZE; i++)
64: {
65: keymap[i].type = ISFUNC;
66: keymap[i].function = (rl_command_func_t *)NULL;
67: }
68:
69: #if 0
70: for (i = 'A'; i < ('Z' + 1); i++)
71: {
72: keymap[i].type = ISFUNC;
73: keymap[i].function = rl_do_lowercase_version;
74: }
75: #endif
76:
77: return (keymap);
78: }
79:
80: /* Return a new keymap which is a copy of MAP. Just copies pointers, does
81: not copy text of macros or descend into child keymaps. */
82: Keymap
83: rl_copy_keymap (map)
84: Keymap map;
85: {
86: register int i;
87: Keymap temp;
88:
89: temp = rl_make_bare_keymap ();
90: for (i = 0; i < KEYMAP_SIZE; i++)
91: {
92: temp[i].type = map[i].type;
93: temp[i].function = map[i].function;
94: }
95: return (temp);
96: }
97:
98: /* Return a new keymap with the printing characters bound to rl_insert,
99: the uppercase Meta characters bound to run their lowercase equivalents,
100: and the Meta digits bound to produce numeric arguments. */
101: Keymap
102: rl_make_keymap ()
103: {
104: register int i;
105: Keymap newmap;
106:
107: newmap = rl_make_bare_keymap ();
108:
109: /* All ASCII printing characters are self-inserting. */
110: for (i = ' '; i < 127; i++)
111: newmap[i].function = rl_insert;
112:
113: newmap[TAB].function = rl_insert;
114: newmap[RUBOUT].function = rl_rubout; /* RUBOUT == 127 */
115: newmap[CTRL('H')].function = rl_rubout;
116:
117: #if KEYMAP_SIZE > 128
118: /* Printing characters in ISO Latin-1 and some 8-bit character sets. */
119: for (i = 128; i < 256; i++)
120: newmap[i].function = rl_insert;
121: #endif /* KEYMAP_SIZE > 128 */
122:
123: return (newmap);
124: }
125:
126: /* Free the storage associated with MAP. */
127: void
128: rl_discard_keymap (map)
129: Keymap map;
130: {
131: int i;
132:
133: if (map == 0)
134: return;
135:
136: for (i = 0; i < KEYMAP_SIZE; i++)
137: {
138: switch (map[i].type)
139: {
140: case ISFUNC:
141: break;
142:
143: case ISKMAP:
144: rl_discard_keymap ((Keymap)map[i].function);
145: xfree ((char *)map[i].function);
146: break;
147:
148: case ISMACR:
149: xfree ((char *)map[i].function);
150: break;
151: }
152: }
153: }
154:
155: /* Convenience function that discards, then frees, MAP. */
156: void
157: rl_free_keymap (map)
158: Keymap map;
159: {
160: rl_discard_keymap (map);
161: xfree ((char *)map);
162: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>