summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--isearch.c6
-rw-r--r--patchlevel2
-rw-r--r--readline.c19
3 files changed, 22 insertions, 5 deletions
diff --git a/isearch.c b/isearch.c
index c2d4d23..227b692 100644
--- a/isearch.c
+++ b/isearch.c
@@ -428,7 +428,11 @@ add_character:
{
f = cxt->keymap[c].function;
if (f == rl_do_lowercase_version)
- f = cxt->keymap[_rl_to_lower (c)].function;
+ {
+ f = cxt->keymap[_rl_to_lower (c)].function;
+ if (f == rl_do_lowercase_version)
+ f = rl_insert;
+ }
}
if (f == rl_reverse_search_history)
diff --git a/patchlevel b/patchlevel
index f01eabb..0938386 100644
--- a/patchlevel
+++ b/patchlevel
@@ -1,3 +1,3 @@
# Do not edit -- exists only for use by patch
-11
+12
diff --git a/readline.c b/readline.c
index 9d42a8d..d649af5 100644
--- a/readline.c
+++ b/readline.c
@@ -899,8 +899,17 @@ _rl_dispatch_subseq (register int key, Keymap map, int got_subseq)
{
/* Special case rl_do_lowercase_version (). */
if (func == rl_do_lowercase_version)
- /* Should we do anything special if key == ANYOTHERKEY? */
- return (_rl_dispatch (_rl_to_lower ((unsigned char)key), map));
+ {
+ /* Should we do anything special if key == ANYOTHERKEY? */
+ newkey = _rl_to_lower ((unsigned char)key);
+ if (newkey != key)
+ return (_rl_dispatch (newkey, map));
+ else
+ {
+ rl_ding (); /* gentle failure */
+ return 0;
+ }
+ }
rl_executing_keymap = map;
rl_executing_key = key;
@@ -1109,7 +1118,11 @@ _rl_subseq_result (int r, Keymap map, int key, int got_subseq)
type = m[ANYOTHERKEY].type;
func = m[ANYOTHERKEY].function;
if (type == ISFUNC && func == rl_do_lowercase_version)
- r = _rl_dispatch (_rl_to_lower ((unsigned char)key), map);
+ {
+ int newkey = _rl_to_lower ((unsigned char)key);
+ /* check that there is actually a lowercase version to avoid infinite recursion */
+ r = (newkey != key) ? _rl_dispatch (newkey, map) : 1;
+ }
else if (type == ISFUNC)
{
/* If we shadowed a function, whatever it is, we somehow need a