# HG changeset patch # User Stefan Monnier # Date 972190128 0 # Node ID 5ce157b2eaa9fa42cfd5ab3e431b3224c9bf2747 # Parent 0b777485ae556b27cd67df35893bbc49a849ae4c (fix_submap_inheritance): Don't do anything if parent_entry is nil: since we go to the end of submap anyway, we'd end up setting nil to nil. (access_keymap): Don't use KEYMAPP on meta_map since KEYMAPP doesn't obey autoload. diff -r 0b777485ae55 -r 5ce157b2eaa9 src/keymap.c --- a/src/keymap.c Sun Oct 22 04:21:36 2000 +0000 +++ b/src/keymap.c Sun Oct 22 04:48:48 2000 +0000 @@ -419,9 +419,9 @@ parent_entry = Qnil; /* If MAP's parent has something other than a keymap, - our own submap shadows it completely, so use nil as SUBMAP's parent. */ + our own submap shadows it completely. */ if (! KEYMAPP (parent_entry)) - parent_entry = Qnil; + return; if (! EQ (parent_entry, submap)) { @@ -430,12 +430,16 @@ while (1) { Lisp_Object tem; + tem = Fkeymap_parent (submap_parent); - if (keymap_memberp (tem, parent_entry)) - /* Fset_keymap_parent could create a cycle. */ - return; - if (KEYMAPP (tem)) - submap_parent = tem; + + if (KEYMAPP (tem)) + { + if (keymap_memberp (tem, parent_entry)) + /* Fset_keymap_parent could create a cycle. */ + return; + submap_parent = tem; + } else break; } @@ -483,15 +487,15 @@ /* Handle the special meta -> esc mapping. */ if (INTEGERP (idx) && XUINT (idx) & meta_modifier) { - Lisp_Object meta_map; - /* See if there is a meta-map. If there's none, there is no binding for IDX, unless a default binding exists in MAP. */ - meta_map = access_keymap (map, meta_prefix_char, t_ok, noinherit, - autoload); - if (KEYMAPP (meta_map)) + Lisp_Object meta_map = + get_keymap_1 (access_keymap + (map, meta_prefix_char, t_ok, noinherit, autoload), + 0, autoload); + if (!NILP (meta_map)) { - map = get_keymap_1 (meta_map, 0, autoload); + map = meta_map; idx = make_number (XUINT (idx) & ~meta_modifier); } else if (t_ok)