changeset 8431:b4138573c00f

(Faccessible_keymaps): Use PREFIX to set loop starting point; don't even consider maps except those reached via prefix.
author Richard M. Stallman <rms@gnu.org>
date Wed, 03 Aug 1994 07:39:00 +0000
parents 356e5509efda
children ebb72cf97695
files src/keymap.c
diffstat 1 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/keymap.c	Wed Aug 03 07:35:50 1994 +0000
+++ b/src/keymap.c	Wed Aug 03 07:39:00 1994 +0000
@@ -1164,9 +1164,23 @@
   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,