From: Richard M. Stallman Date: Wed, 3 Aug 1994 07:39:00 +0000 (+0000) Subject: (Faccessible_keymaps): Use PREFIX to set loop starting X-Git-Tag: emacs-19.34~7422 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=44a4a59b6055ecfe398a0232a84731b227394b1d;p=emacs.git (Faccessible_keymaps): Use PREFIX to set loop starting point; don't even consider maps except those reached via prefix. --- diff --git a/src/keymap.c b/src/keymap.c index 3ae7d7e3608..dea8f883f6f 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -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,