]> git.ipfire.org Git - thirdparty/bash.git/blame - lib/readline/keymaps.c
Bash-4.2 distribution sources and documentation
[thirdparty/bash.git] / lib / readline / keymaps.c
CommitLineData
726f6388
JA
1/* keymaps.c -- Functions and keymaps for the GNU Readline library. */
2
3185942a 3/* Copyright (C) 1988,1989-2009 Free Software Foundation, Inc.
726f6388 4
3185942a
JA
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.
726f6388 7
3185942a
JA
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.
726f6388 12
3185942a
JA
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.
726f6388
JA
17
18 You should have received a copy of the GNU General Public License
3185942a
JA
19 along with Readline. If not, see <http://www.gnu.org/licenses/>.
20*/
21
726f6388
JA
22#define READLINE_LIBRARY
23
24#if defined (HAVE_CONFIG_H)
ccc6cda3 25# include <config.h>
726f6388
JA
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
bb70624e
JA
34#include <stdio.h> /* for FILE * definition for readline.h */
35
36#include "readline.h"
726f6388 37#include "rlconf.h"
bb70624e 38
726f6388
JA
39#include "emacs_keymap.c"
40
41#if defined (VI_MODE)
42#include "vi_keymap.c"
43#endif
44
bb70624e 45#include "xmalloc.h"
726f6388
JA
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. */
56Keymap
57rl_make_bare_keymap ()
58{
59 register int i;
0001803f 60 Keymap keymap;
726f6388 61
0001803f 62 keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY));
726f6388
JA
63 for (i = 0; i < KEYMAP_SIZE; i++)
64 {
65 keymap[i].type = ISFUNC;
28ef6c31 66 keymap[i].function = (rl_command_func_t *)NULL;
726f6388
JA
67 }
68
b80f6443 69#if 0
726f6388
JA
70 for (i = 'A'; i < ('Z' + 1); i++)
71 {
72 keymap[i].type = ISFUNC;
73 keymap[i].function = rl_do_lowercase_version;
74 }
b80f6443 75#endif
726f6388
JA
76
77 return (keymap);
78}
79
0001803f
CR
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. */
726f6388
JA
82Keymap
83rl_copy_keymap (map)
84 Keymap map;
85{
86 register int i;
b80f6443 87 Keymap temp;
726f6388 88
b80f6443 89 temp = rl_make_bare_keymap ();
726f6388
JA
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. */
101Keymap
102rl_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;
ccc6cda3 114 newmap[RUBOUT].function = rl_rubout; /* RUBOUT == 127 */
726f6388
JA
115 newmap[CTRL('H')].function = rl_rubout;
116
117#if KEYMAP_SIZE > 128
b80f6443
JA
118 /* Printing characters in ISO Latin-1 and some 8-bit character sets. */
119 for (i = 128; i < 256; i++)
726f6388
JA
120 newmap[i].function = rl_insert;
121#endif /* KEYMAP_SIZE > 128 */
122
123 return (newmap);
124}
125
126/* Free the storage associated with MAP. */
127void
128rl_discard_keymap (map)
b72432fd 129 Keymap map;
726f6388
JA
130{
131 int i;
132
0001803f 133 if (map == 0)
726f6388
JA
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);
495aee44 145 xfree ((char *)map[i].function);
726f6388
JA
146 break;
147
148 case ISMACR:
495aee44 149 xfree ((char *)map[i].function);
726f6388
JA
150 break;
151 }
152 }
153}
0001803f
CR
154
155/* Convenience function that discards, then frees, MAP. */
156void
157rl_free_keymap (map)
158 Keymap map;
159{
160 rl_discard_keymap (map);
495aee44 161 xfree ((char *)map);
0001803f 162}