summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2000-10-18 14:20:53 +0000
committerGerd Moellmann <gerd@gnu.org>2000-10-18 14:20:53 +0000
commit7396a36c102c34fce487f2bf4883bf4c91f0fd3d (patch)
treee7bfad34310a5feeeaa343891f575aa2cafd3e03
parent4e217e5069de0bfe49900b79f696f3feec9da6b9 (diff)
downloademacs-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.c25
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;