Mercurial > emacs
diff src/keymap.c @ 32615:5f6178a60e6b
(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.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Wed, 18 Oct 2000 14:20:53 +0000 |
parents | bc60bd171784 |
children | 5ce157b2eaa9 |
line wrap: on
line diff
--- 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;