]> git.ipfire.org Git - thirdparty/bash.git/blame - lib/readline/funmap.c
bash-20150109 remove leftover and stray files
[thirdparty/bash.git] / lib / readline / funmap.c
CommitLineData
726f6388
JA
1/* funmap.c -- attach names to functions. */
2
6faad625 3/* Copyright (C) 1987-2010 Free Software Foundation, Inc.
726f6388 4
2e4498b3
CR
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
2e4498b3
CR
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
726f6388
JA
11 (at your option) any later version.
12
2e4498b3
CR
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
726f6388
JA
16 GNU General Public License for more details.
17
2e4498b3
CR
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
726f6388
JA
22#define READLINE_LIBRARY
23
ccc6cda3
JA
24#if defined (HAVE_CONFIG_H)
25# include <config.h>
26#endif
27
726f6388
JA
28#if !defined (BUFSIZ)
29#include <stdio.h>
30#endif /* BUFSIZ */
31
32#if defined (HAVE_STDLIB_H)
33# include <stdlib.h>
34#else
35# include "ansi_stdlib.h"
36#endif /* HAVE_STDLIB_H */
37
38#include "rlconf.h"
39#include "readline.h"
40
bb70624e
JA
41#include "xmalloc.h"
42
43#ifdef __STDC__
44typedef int QSFUNC (const void *, const void *);
45#else
46typedef int QSFUNC ();
47#endif
48
f73dda09 49extern int _rl_qsort_string_compare PARAMS((char **, char **));
726f6388 50
ccc6cda3
JA
51FUNMAP **funmap;
52static int funmap_size;
53static int funmap_entry;
726f6388
JA
54
55/* After initializing the function map, this is the index of the first
56 program specific function. */
57int funmap_program_specific_entry_start;
58
d3ad40de 59static const FUNMAP default_funmap[] = {
726f6388
JA
60 { "abort", rl_abort },
61 { "accept-line", rl_newline },
62 { "arrow-key-prefix", rl_arrow_keys },
7117c2d2
JA
63 { "backward-byte", rl_backward_byte },
64 { "backward-char", rl_backward_char },
726f6388
JA
65 { "backward-delete-char", rl_rubout },
66 { "backward-kill-line", rl_backward_kill_line },
67 { "backward-kill-word", rl_backward_kill_word },
68 { "backward-word", rl_backward_word },
69 { "beginning-of-history", rl_beginning_of_history },
70 { "beginning-of-line", rl_beg_of_line },
f3aad56d 71 { "bracketed-paste-begin", rl_bracketed_paste_begin },
726f6388
JA
72 { "call-last-kbd-macro", rl_call_last_kbd_macro },
73 { "capitalize-word", rl_capitalize_word },
ccc6cda3
JA
74 { "character-search", rl_char_search },
75 { "character-search-backward", rl_backward_char_search },
726f6388
JA
76 { "clear-screen", rl_clear_screen },
77 { "complete", rl_complete },
ccc6cda3
JA
78 { "copy-backward-word", rl_copy_backward_word },
79 { "copy-forward-word", rl_copy_forward_word },
80 { "copy-region-as-kill", rl_copy_region_to_kill },
726f6388 81 { "delete-char", rl_delete },
b72432fd 82 { "delete-char-or-list", rl_delete_or_show_completions },
726f6388
JA
83 { "delete-horizontal-space", rl_delete_horizontal_space },
84 { "digit-argument", rl_digit_argument },
85 { "do-lowercase-version", rl_do_lowercase_version },
86 { "downcase-word", rl_downcase_word },
87 { "dump-functions", rl_dump_functions },
d166f048 88 { "dump-macros", rl_dump_macros },
ccc6cda3 89 { "dump-variables", rl_dump_variables },
726f6388
JA
90 { "emacs-editing-mode", rl_emacs_editing_mode },
91 { "end-kbd-macro", rl_end_kbd_macro },
92 { "end-of-history", rl_end_of_history },
93 { "end-of-line", rl_end_of_line },
ccc6cda3 94 { "exchange-point-and-mark", rl_exchange_point_and_mark },
b72432fd 95 { "forward-backward-delete-char", rl_rubout_or_delete },
7117c2d2
JA
96 { "forward-byte", rl_forward_byte },
97 { "forward-char", rl_forward_char },
726f6388
JA
98 { "forward-search-history", rl_forward_search_history },
99 { "forward-word", rl_forward_word },
100 { "history-search-backward", rl_history_search_backward },
101 { "history-search-forward", rl_history_search_forward },
276cb932
CR
102 { "history-substring-search-backward", rl_history_substr_search_backward },
103 { "history-substring-search-forward", rl_history_substr_search_forward },
ccc6cda3 104 { "insert-comment", rl_insert_comment },
726f6388
JA
105 { "insert-completions", rl_insert_completions },
106 { "kill-whole-line", rl_kill_full_line },
107 { "kill-line", rl_kill_line },
ccc6cda3 108 { "kill-region", rl_kill_region },
726f6388 109 { "kill-word", rl_kill_word },
cce855bc 110 { "menu-complete", rl_menu_complete },
9dd88db7 111 { "menu-complete-backward", rl_backward_menu_complete },
726f6388
JA
112 { "next-history", rl_get_next_history },
113 { "non-incremental-forward-search-history", rl_noninc_forward_search },
114 { "non-incremental-reverse-search-history", rl_noninc_reverse_search },
115 { "non-incremental-forward-search-history-again", rl_noninc_forward_search_again },
116 { "non-incremental-reverse-search-history-again", rl_noninc_reverse_search_again },
af98a2a6 117 { "old-menu-complete", rl_old_menu_complete },
7117c2d2 118 { "overwrite-mode", rl_overwrite_mode },
8f50a023 119#if defined (_WIN32)
cce855bc
JA
120 { "paste-from-clipboard", rl_paste_from_clipboard },
121#endif
726f6388
JA
122 { "possible-completions", rl_possible_completions },
123 { "previous-history", rl_get_previous_history },
ba4ab055 124 { "print-last-kbd-macro", rl_print_last_kbd_macro },
726f6388
JA
125 { "quoted-insert", rl_quoted_insert },
126 { "re-read-init-file", rl_re_read_init_file },
127 { "redraw-current-line", rl_refresh_line},
128 { "reverse-search-history", rl_reverse_search_history },
129 { "revert-line", rl_revert_line },
130 { "self-insert", rl_insert },
ccc6cda3 131 { "set-mark", rl_set_mark },
691aebcb 132 { "skip-csi-sequence", rl_skip_csi_sequence },
726f6388
JA
133 { "start-kbd-macro", rl_start_kbd_macro },
134 { "tab-insert", rl_tab_insert },
135 { "tilde-expand", rl_tilde_expand },
136 { "transpose-chars", rl_transpose_chars },
137 { "transpose-words", rl_transpose_words },
138 { "tty-status", rl_tty_status },
139 { "undo", rl_undo_command },
140 { "universal-argument", rl_universal_argument },
113d85a4 141 { "unix-filename-rubout", rl_unix_filename_rubout },
726f6388
JA
142 { "unix-line-discard", rl_unix_line_discard },
143 { "unix-word-rubout", rl_unix_word_rubout },
144 { "upcase-word", rl_upcase_word },
145 { "yank", rl_yank },
146 { "yank-last-arg", rl_yank_last_arg },
147 { "yank-nth-arg", rl_yank_nth_arg },
148 { "yank-pop", rl_yank_pop },
149
150#if defined (VI_MODE)
151 { "vi-append-eol", rl_vi_append_eol },
152 { "vi-append-mode", rl_vi_append_mode },
153 { "vi-arg-digit", rl_vi_arg_digit },
ccc6cda3 154 { "vi-back-to-indent", rl_vi_back_to_indent },
6faad625
CR
155 { "vi-backward-bigword", rl_vi_bWord },
156 { "vi-backward-word", rl_vi_bword },
726f6388 157 { "vi-bWord", rl_vi_bWord },
726f6388
JA
158 { "vi-bword", rl_vi_bword },
159 { "vi-change-case", rl_vi_change_case },
160 { "vi-change-char", rl_vi_change_char },
161 { "vi-change-to", rl_vi_change_to },
162 { "vi-char-search", rl_vi_char_search },
163 { "vi-column", rl_vi_column },
726f6388
JA
164 { "vi-complete", rl_vi_complete },
165 { "vi-delete", rl_vi_delete },
166 { "vi-delete-to", rl_vi_delete_to },
167 { "vi-eWord", rl_vi_eWord },
168 { "vi-editing-mode", rl_vi_editing_mode },
6faad625 169 { "vi-end-bigword", rl_vi_eWord },
726f6388
JA
170 { "vi-end-word", rl_vi_end_word },
171 { "vi-eof-maybe", rl_vi_eof_maybe },
172 { "vi-eword", rl_vi_eword },
173 { "vi-fWord", rl_vi_fWord },
ccc6cda3 174 { "vi-fetch-history", rl_vi_fetch_history },
726f6388 175 { "vi-first-print", rl_vi_first_print },
6faad625
CR
176 { "vi-forward-bigword", rl_vi_fWord },
177 { "vi-forward-word", rl_vi_fword },
726f6388 178 { "vi-fword", rl_vi_fword },
ccc6cda3 179 { "vi-goto-mark", rl_vi_goto_mark },
726f6388
JA
180 { "vi-insert-beg", rl_vi_insert_beg },
181 { "vi-insertion-mode", rl_vi_insertion_mode },
182 { "vi-match", rl_vi_match },
183 { "vi-movement-mode", rl_vi_movement_mode },
184 { "vi-next-word", rl_vi_next_word },
185 { "vi-overstrike", rl_vi_overstrike },
186 { "vi-overstrike-delete", rl_vi_overstrike_delete },
187 { "vi-prev-word", rl_vi_prev_word },
188 { "vi-put", rl_vi_put },
189 { "vi-redo", rl_vi_redo },
190 { "vi-replace", rl_vi_replace },
a82a04b3 191 { "vi-rubout", rl_vi_rubout },
726f6388
JA
192 { "vi-search", rl_vi_search },
193 { "vi-search-again", rl_vi_search_again },
ccc6cda3 194 { "vi-set-mark", rl_vi_set_mark },
726f6388
JA
195 { "vi-subst", rl_vi_subst },
196 { "vi-tilde-expand", rl_vi_tilde_expand },
197 { "vi-yank-arg", rl_vi_yank_arg },
198 { "vi-yank-to", rl_vi_yank_to },
199#endif /* VI_MODE */
200
28ef6c31 201 {(char *)NULL, (rl_command_func_t *)NULL }
726f6388
JA
202};
203
ccc6cda3 204int
726f6388 205rl_add_funmap_entry (name, function)
28ef6c31
JA
206 const char *name;
207 rl_command_func_t *function;
726f6388
JA
208{
209 if (funmap_entry + 2 >= funmap_size)
ccc6cda3
JA
210 {
211 funmap_size += 64;
212 funmap = (FUNMAP **)xrealloc (funmap, funmap_size * sizeof (FUNMAP *));
213 }
726f6388
JA
214
215 funmap[funmap_entry] = (FUNMAP *)xmalloc (sizeof (FUNMAP));
216 funmap[funmap_entry]->name = name;
217 funmap[funmap_entry]->function = function;
218
219 funmap[++funmap_entry] = (FUNMAP *)NULL;
220 return funmap_entry;
221}
222
ccc6cda3 223static int funmap_initialized;
726f6388
JA
224
225/* Make the funmap contain all of the default entries. */
226void
227rl_initialize_funmap ()
228{
229 register int i;
230
231 if (funmap_initialized)
232 return;
233
234 for (i = 0; default_funmap[i].name; i++)
235 rl_add_funmap_entry (default_funmap[i].name, default_funmap[i].function);
236
237 funmap_initialized = 1;
238 funmap_program_specific_entry_start = i;
239}
240
241/* Produce a NULL terminated array of known function names. The array
242 is sorted. The array itself is allocated, but not the strings inside.
2dead0c4 243 You should free () the array when you done, but not the pointers. */
28ef6c31 244const char **
726f6388
JA
245rl_funmap_names ()
246{
28ef6c31 247 const char **result;
726f6388
JA
248 int result_size, result_index;
249
726f6388
JA
250 /* Make sure that the function map has been initialized. */
251 rl_initialize_funmap ();
252
28ef6c31 253 for (result_index = result_size = 0, result = (const char **)NULL; funmap[result_index]; result_index++)
726f6388
JA
254 {
255 if (result_index + 2 > result_size)
256 {
ccc6cda3 257 result_size += 20;
28ef6c31 258 result = (const char **)xrealloc (result, result_size * sizeof (char *));
726f6388
JA
259 }
260
261 result[result_index] = funmap[result_index]->name;
262 result[result_index + 1] = (char *)NULL;
263 }
264
bb70624e 265 qsort (result, result_index, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
726f6388
JA
266 return (result);
267}