# HG changeset patch # User Gerd Moellmann # Date 971878853 0 # Node ID 5f6178a60e6bed51ca52d00b7314ff65c437f0e2 # Parent f7e2af2956f4730432cdada9758c3f11dc51d02d (access_keymap): If IDX has a meta prefix, and there's no map for meta_prefix_char, don't try to use it as a keymap. Instead, if T_OK is non-zero, look up a default binding, if any, otherwise, if T_OK is zero, return nil. diff -r f7e2af2956f4 -r 5f6178a60e6b src/keymap.c --- a/src/keymap.c Wed Oct 18 14:09:54 2000 +0000 +++ b/src/keymap.c Wed Oct 18 14:20:53 2000 +0000 @@ -483,10 +483,23 @@ /* Handle the special meta -> esc mapping. */ if (INTEGERP (idx) && XUINT (idx) & meta_modifier) { - map = get_keymap_1 (access_keymap - (map, meta_prefix_char, t_ok, noinherit, autoload), - 0, autoload); - XSETINT (idx, XFASTINT (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)) + { + map = get_keymap_1 (meta_map, 0, autoload); + idx = make_number (XUINT (idx) & ~meta_modifier); + } + else if (t_ok) + /* Set IDX to t, so that we only find a default binding. */ + idx = Qt; + else + /* We know there is no binding. */ + return Qnil; } { @@ -495,7 +508,9 @@ t_binding = Qnil; for (tail = XCDR (map); - CONSP (tail) || (tail = get_keymap_1(tail, 0, autoload), CONSP (tail)); + (CONSP (tail) + || (tail = get_keymap_1 (tail, 0, autoload), + CONSP (tail))); tail = XCDR (tail)) { Lisp_Object binding;