Annotation of embedaddon/readline/keymaps.c, revision 1.1.1.2
1.1 misho 1: /* keymaps.c -- Functions and keymaps for the GNU Readline library. */
2:
1.1.1.2 ! misho 3: /* Copyright (C) 1988,1989-2009,2017 Free Software Foundation, Inc.
1.1 misho 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
1.1.1.2 ! misho 57: rl_make_bare_keymap (void)
1.1 misho 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:
1.1.1.2 ! misho 80: /* A convenience function that returns 1 if there are no keys bound to
! 81: functions in KEYMAP */
! 82: int
! 83: rl_empty_keymap (Keymap keymap)
! 84: {
! 85: int i;
! 86:
! 87: for (i = 0; i < ANYOTHERKEY; i++)
! 88: {
! 89: if (keymap[i].type != ISFUNC || keymap[i].function)
! 90: return 0;
! 91: }
! 92: return 1;
! 93: }
! 94:
1.1 misho 95: /* Return a new keymap which is a copy of MAP. Just copies pointers, does
96: not copy text of macros or descend into child keymaps. */
97: Keymap
1.1.1.2 ! misho 98: rl_copy_keymap (Keymap map)
1.1 misho 99: {
100: register int i;
101: Keymap temp;
102:
103: temp = rl_make_bare_keymap ();
104: for (i = 0; i < KEYMAP_SIZE; i++)
105: {
106: temp[i].type = map[i].type;
107: temp[i].function = map[i].function;
108: }
109: return (temp);
110: }
111:
112: /* Return a new keymap with the printing characters bound to rl_insert,
113: the uppercase Meta characters bound to run their lowercase equivalents,
114: and the Meta digits bound to produce numeric arguments. */
115: Keymap
1.1.1.2 ! misho 116: rl_make_keymap (void)
1.1 misho 117: {
118: register int i;
119: Keymap newmap;
120:
121: newmap = rl_make_bare_keymap ();
122:
123: /* All ASCII printing characters are self-inserting. */
124: for (i = ' '; i < 127; i++)
125: newmap[i].function = rl_insert;
126:
127: newmap[TAB].function = rl_insert;
128: newmap[RUBOUT].function = rl_rubout; /* RUBOUT == 127 */
129: newmap[CTRL('H')].function = rl_rubout;
130:
131: #if KEYMAP_SIZE > 128
132: /* Printing characters in ISO Latin-1 and some 8-bit character sets. */
133: for (i = 128; i < 256; i++)
134: newmap[i].function = rl_insert;
135: #endif /* KEYMAP_SIZE > 128 */
136:
137: return (newmap);
138: }
139:
140: /* Free the storage associated with MAP. */
141: void
1.1.1.2 ! misho 142: rl_discard_keymap (Keymap map)
1.1 misho 143: {
144: int i;
145:
146: if (map == 0)
147: return;
148:
149: for (i = 0; i < KEYMAP_SIZE; i++)
150: {
151: switch (map[i].type)
152: {
153: case ISFUNC:
154: break;
155:
156: case ISKMAP:
157: rl_discard_keymap ((Keymap)map[i].function);
158: xfree ((char *)map[i].function);
159: break;
160:
161: case ISMACR:
162: xfree ((char *)map[i].function);
163: break;
164: }
165: }
166: }
167:
168: /* Convenience function that discards, then frees, MAP. */
169: void
1.1.1.2 ! misho 170: rl_free_keymap (Keymap map)
1.1 misho 171: {
172: rl_discard_keymap (map);
173: xfree ((char *)map);
174: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>