Commit 7396a36c authored by Gerd Moellmann's avatar Gerd Moellmann

(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.
parent 4e217e50
...@@ -483,10 +483,23 @@ access_keymap (map, idx, t_ok, noinherit, autoload) ...@@ -483,10 +483,23 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
/* Handle the special meta -> esc mapping. */ /* Handle the special meta -> esc mapping. */
if (INTEGERP (idx) && XUINT (idx) & meta_modifier) if (INTEGERP (idx) && XUINT (idx) & meta_modifier)
{ {
map = get_keymap_1 (access_keymap Lisp_Object meta_map;
(map, meta_prefix_char, t_ok, noinherit, autoload),
0, autoload); /* See if there is a meta-map. If there's none, there is
XSETINT (idx, XFASTINT (idx) & ~meta_modifier); 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) ...@@ -495,7 +508,9 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
t_binding = Qnil; t_binding = Qnil;
for (tail = XCDR (map); 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)) tail = XCDR (tail))
{ {
Lisp_Object binding; Lisp_Object binding;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment