1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-06 03:40:56 -08:00

(Fwhere_is_internal): Take just one keymap arg.

(where_is_string): Pass Voverriding_local_map for that arg.
This commit is contained in:
Richard M. Stallman 1994-02-04 23:11:34 +00:00
parent 9a425dcb39
commit f0148b5e8a

View file

@ -1,5 +1,5 @@
/* Manipulation of keymaps
Copyright (C) 1985, 1986, 1987, 1988, 1993 Free Software Foundation, Inc.
Copyright (C) 1985, 86, 87, 88, 93, 94 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@ -1457,36 +1457,58 @@ ascii_sequence_p (seq)
/* where-is - finding a command in a set of keymaps. */
DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
"Return list of keys that invoke DEFINITION in KEYMAP or KEYMAP1.\n\
If KEYMAP is nil, search only KEYMAP1.\n\
If KEYMAP1 is nil, use the current global map.\n\
DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 4, 0,
"Return list of keys that invoke DEFINITION.\n\
If KEYMAP is non-nil, search only KEYMAP and the global keymap.\n\
If KEYMAP is nil, search all the currently active keymaps.\n\
\n\
If optional 4th arg FIRSTONLY is non-nil, return the first key sequence found,\n\
If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,\n\
rather than a list of all possible key sequences.\n\
If FIRSTONLY is t, avoid key sequences which use non-ASCII\n\
keys and therefore may not be usable on ASCII terminals. If FIRSTONLY\n\
is the symbol `non-ascii', return the first binding found, no matter\n\
what its components.\n\
\n\
If optional 5th arg NOINDIRECT is non-nil, don't follow indirections\n\
If optional 4th arg NOINDIRECT is non-nil, don't follow indirections\n\
to other keymaps or slots. This makes it possible to search for an\n\
indirect definition itself.")
(definition, local_keymap, global_keymap, firstonly, noindirect)
Lisp_Object definition, local_keymap, global_keymap;
(definition, keymap, firstonly, noindirect)
Lisp_Object definition, keymap;
Lisp_Object firstonly, noindirect;
{
register Lisp_Object maps;
Lisp_Object found;
int keymap_specified = !NILP (keymap);
if (NILP (global_keymap))
global_keymap = current_global_map;
if (! keymap_specified)
{
#ifdef USE_TEXT_PROPERTIES
keymap = get_local_map (PT, current_buffer);
#else
keymap = current_buffer->keymap;
#endif
}
if (!NILP (local_keymap))
maps = nconc2 (Faccessible_keymaps (get_keymap (local_keymap), Qnil),
Faccessible_keymaps (get_keymap (global_keymap), Qnil));
if (!NILP (keymap))
maps = nconc2 (Faccessible_keymaps (get_keymap (keymap), Qnil),
Faccessible_keymaps (get_keymap (current_global_map),
Qnil));
else
maps = Faccessible_keymaps (get_keymap (global_keymap), Qnil);
maps = Faccessible_keymaps (get_keymap (current_global_map), Qnil);
/* Put the minor mode keymaps on the front. */
if (! keymap_specified)
{
Lisp_Object minors;
minors = Fnreverse (Fcurrent_minor_mode_maps ());
while (!NILP (minors))
{
maps = nconc2 (Faccessible_keymaps (get_keymap (XCONS (minors)->car),
Qnil),
maps);
minors = XCONS (minors)->cdr;
}
}
found = Qnil;
@ -1596,9 +1618,9 @@ indirect definition itself.")
Either nil or number as value from Flookup_key
means undefined. */
if (!NILP (local_keymap))
if (keymap_specified)
{
binding = Flookup_key (local_keymap, sequence, Qnil);
binding = Flookup_key (keymap, sequence, Qnil);
if (!NILP (binding) && XTYPE (binding) != Lisp_Int)
{
if (XTYPE (definition) == Lisp_Cons)
@ -1613,6 +1635,12 @@ indirect definition itself.")
continue;
}
}
else
{
binding = Fkey_binding (sequence, Qnil);
if (!EQ (binding, definition))
continue;
}
/* It is a true unshadowed match. Record it. */
found = Fcons (sequence, found);
@ -1647,8 +1675,7 @@ where_is_string (definition)
{
register Lisp_Object keys, keys1;
keys = Fwhere_is_internal (definition,
current_buffer->keymap, Qnil, Qnil, Qnil);
keys = Fwhere_is_internal (definition, Voverriding_local_map, Qnil, Qnil);
keys1 = Fmapconcat (Qkey_description, keys, build_string (", "));
return keys1;