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:
parent
9a425dcb39
commit
f0148b5e8a
1 changed files with 46 additions and 19 deletions
65
src/keymap.c
65
src/keymap.c
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue