aboutsummaryrefslogtreecommitdiff
path: root/readline/bind.c
diff options
context:
space:
mode:
Diffstat (limited to 'readline/bind.c')
-rw-r--r--readline/bind.c62
1 files changed, 57 insertions, 5 deletions
diff --git a/readline/bind.c b/readline/bind.c
index 300530a..f446dc8 100644
--- a/readline/bind.c
+++ b/readline/bind.c
@@ -83,6 +83,7 @@ extern int rl_complete_with_tilde_expansion;
extern int rl_completion_query_items;
extern int rl_inhibit_completion;
extern char *_rl_comment_begin;
+extern unsigned char *_rl_isearch_terminators;
extern int rl_explicit_arg;
extern int rl_editing_mode;
@@ -207,13 +208,17 @@ rl_unbind_function_in_map (func, map)
Function *func;
Keymap map;
{
- register int i;
+ register int i, rval;
- for (i = 0; i < KEYMAP_SIZE; i++)
+ for (i = rval = 0; i < KEYMAP_SIZE; i++)
{
if (map[i].type == ISFUNC && map[i].function == func)
- map[i].function = (Function *)NULL;
+ {
+ map[i].function = (Function *)NULL;
+ rval = 1;
+ }
}
+ return rval;
}
int
@@ -222,7 +227,6 @@ rl_unbind_command_in_map (command, map)
Keymap map;
{
Function *func;
- register int i;
func = rl_named_function (command);
if (func == 0)
@@ -663,7 +667,11 @@ _rl_read_file (filename, sizep)
i = read (file, buffer, file_size);
close (file);
+#if 0
if (i < file_size)
+#else
+ if (i < 0)
+#endif
{
free (buffer);
return ((char *)NULL);
@@ -727,6 +735,8 @@ _rl_read_init_file (filename, include_level)
openname = tilde_expand (filename);
buffer = _rl_read_file (openname, &file_size);
+ free (openname);
+
if (buffer == 0)
return (errno);
@@ -1338,7 +1348,34 @@ rl_variable_bind (name, value)
else
_rl_bell_preference = AUDIBLE_BELL;
}
+ else if (_rl_stricmp (name, "isearch-terminators") == 0)
+ {
+ /* Isolate the value and translate it into a character string. */
+ int beg, end;
+ char *v;
+ v = savestring (value);
+ FREE (_rl_isearch_terminators);
+ if (v[0] == '"' || v[0] == '\'')
+ {
+ int delim = v[0];
+ for (beg = end = 1; v[end] && v[end] != delim; end++)
+ ;
+ }
+ else
+ {
+ for (beg = end = 0; whitespace (v[end]) == 0; end++)
+ ;
+ }
+
+ v[end] = '\0';
+ /* The value starts at v + beg. Translate it into a character string. */
+ _rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1);
+ rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end);
+ _rl_isearch_terminators[end] = '\0';
+ free (v);
+ }
+
/* For the time being, unknown variable names are simply ignored. */
return 0;
}
@@ -1492,7 +1529,7 @@ _rl_get_keyname (key)
int key;
{
char *keyname;
- int i, c, v;
+ int i, c;
keyname = (char *)xmalloc (8);
@@ -1897,6 +1934,21 @@ rl_variable_dumper (print_readably)
fprintf (rl_outstream, "set keymap %s\n", kname ? kname : "none");
else
fprintf (rl_outstream, "keymap is set to `%s'\n", kname ? kname : "none");
+
+ /* isearch-terminators */
+ if (_rl_isearch_terminators)
+ {
+ char *disp;
+
+ disp = _rl_untranslate_macro_value (_rl_isearch_terminators);
+
+ if (print_readably)
+ fprintf (rl_outstream, "set isearch-terminators \"%s\"\n", disp);
+ else
+ fprintf (rl_outstream, "isearch-terminators is set to \"%s\"\n", disp);
+
+ free (disp);
+ }
}
/* Print all of the current variables and their values to