diff options
author | Gerd Moellmann <gerd@gnu.org> | 2000-10-18 14:20:53 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 2000-10-18 14:20:53 +0000 |
commit | 7396a36c102c34fce487f2bf4883bf4c91f0fd3d (patch) | |
tree | e7bfad34310a5feeeaa343891f575aa2cafd3e03 | |
parent | 4e217e5069de0bfe49900b79f696f3feec9da6b9 (diff) | |
download | emacs-7396a36c102c34fce487f2bf4883bf4c91f0fd3d.tar.gz |
(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.
-rw-r--r-- | src/keymap.c | 25 |
1 files 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; |