]> git.eshelyaron.com Git - emacs.git/commitdiff
(Faccessible_keymaps): Use PREFIX to set loop starting
authorRichard M. Stallman <rms@gnu.org>
Wed, 3 Aug 1994 07:39:00 +0000 (07:39 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 3 Aug 1994 07:39:00 +0000 (07:39 +0000)
point; don't even consider maps except those reached via prefix.

src/keymap.c

index 3ae7d7e3608d5e2dd8c11856b6aeaf16456266c7..dea8f883f6f5384eeff7b974d159e47087ec7410 100644 (file)
@@ -1164,9 +1164,23 @@ then the value includes only maps for prefixes that start with PREFIX.")
   if (!NILP (prefix))
     prefixlen = XINT (Flength (prefix));
 
-  maps = Fcons (Fcons (Fmake_vector (make_number (0), Qnil),
-                      get_keymap (startmap)),
-               Qnil);
+  if (!NILP (prefix))
+    {
+      /* If a prefix was specified, start with the keymap (if any) for
+        that prefix, so we don't waste time considering other prefixes.  */
+      Lisp_Object tem;
+      tem = Flookup_key (startmap, prefix, Qt);
+      /* If PREFIX is reasonable, Flookup_key should give a keymap or nil.
+        For any other value it is ok to get an error here.  */
+      if (!NILP (tem))
+       maps = Fcons (Fcons (prefix, get_keymap (tem)), Qnil);
+      else
+       return Qnil;
+    }
+  else
+    maps = Fcons (Fcons (Fmake_vector (make_number (0), Qnil),
+                        get_keymap (startmap)),
+                 Qnil);
 
   /* For each map in the list maps,
      look at any other maps it points to,