summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/keymap.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/keymap.c b/src/keymap.c
index 1b673384806..c209a690226 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -426,7 +426,23 @@ fix_submap_inheritance (map, event, submap)
parent_entry = Qnil;
if (! EQ (parent_entry, submap))
- Fset_keymap_parent (submap, parent_entry);
+ {
+ Lisp_Object submap_parent;
+ submap_parent = submap;
+ while (1)
+ {
+ Lisp_Object tem;
+ tem = Fkeymap_parent (submap_parent);
+ if (EQ (tem, parent_entry))
+ return;
+ if (CONSP (tem)
+ && EQ (XCONS (tem)->car, Qkeymap))
+ submap_parent = tem;
+ else
+ break;
+ }
+ Fset_keymap_parent (submap_parent, parent_entry);
+ }
}
/* Look up IDX in MAP. IDX may be any sort of event.