From 7396a36c102c34fce487f2bf4883bf4c91f0fd3d Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Wed, 18 Oct 2000 14:20:53 +0000 Subject: [PATCH] (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. --- src/keymap.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/keymap.c b/src/keymap.c index fbbbcae3998..72d40d09872 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -483,10 +483,23 @@ access_keymap (map, idx, t_ok, noinherit, autoload) /* 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 @@ access_keymap (map, idx, t_ok, noinherit, autoload) 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; -- 2.39.2