summaryrefslogtreecommitdiff
path: root/src/keymap.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2005-02-18 00:41:50 +0000
committerMiles Bader <miles@gnu.org>2005-02-18 00:41:50 +0000
commit8d46efcc0f2045a1e5a2739c55ba6a88fbf4bcfc (patch)
treebc968a02587d51199537bb335d5494e756e35fdf /src/keymap.c
parent8589dc17f80450f5773a2d449fa6d94c9bb04fe3 (diff)
parent9b516537a9899900647d4eae5ec8778e6837ad3c (diff)
downloademacs-8d46efcc0f2045a1e5a2739c55ba6a88fbf4bcfc.tar.gz
emacs-8d46efcc0f2045a1e5a2739c55ba6a88fbf4bcfc.tar.bz2
emacs-8d46efcc0f2045a1e5a2739c55ba6a88fbf4bcfc.zip
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-15
Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-95 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-96 Move Gnus images into etc/images * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-97 - miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-105 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-14 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-15 Update from CVS: lisp/imap.el (imap-log): Doc fix. * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-16 Merge from emacs--cvs-trunk--0
Diffstat (limited to 'src/keymap.c')
-rw-r--r--src/keymap.c77
1 files changed, 58 insertions, 19 deletions
diff --git a/src/keymap.c b/src/keymap.c
index 2977b4dec09..3aaecf1a5d7 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -121,10 +121,11 @@ static void describe_command P_ ((Lisp_Object, Lisp_Object));
static void describe_translation P_ ((Lisp_Object, Lisp_Object));
static void describe_map P_ ((Lisp_Object, Lisp_Object,
void (*) P_ ((Lisp_Object, Lisp_Object)),
- int, Lisp_Object, Lisp_Object*, int));
+ int, Lisp_Object, Lisp_Object*, int, int));
static void describe_vector P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
void (*) (Lisp_Object, Lisp_Object), int,
- Lisp_Object, Lisp_Object, int *, int, int));
+ Lisp_Object, Lisp_Object, int *,
+ int, int, int));
static void silly_event_symbol_error P_ ((Lisp_Object));
/* Keymap object support - constructors and predicates. */
@@ -2853,7 +2854,7 @@ You type Translation\n\
if (!NILP (Vkey_translation_map))
describe_map_tree (Vkey_translation_map, 0, Qnil, prefix,
- "Key translations", nomenu, 1, 0);
+ "Key translations", nomenu, 1, 0, 0);
/* Print the (major mode) local map. */
@@ -2866,7 +2867,7 @@ You type Translation\n\
if (!NILP (start1))
{
describe_map_tree (start1, 1, shadow, prefix,
- "\f\nOverriding Bindings", nomenu, 0, 0);
+ "\f\nOverriding Bindings", nomenu, 0, 0, 0);
shadow = Fcons (start1, shadow);
}
else
@@ -2887,7 +2888,8 @@ You type Translation\n\
if (!NILP (start1))
{
describe_map_tree (start1, 1, shadow, prefix,
- "\f\n`keymap' Property Bindings", nomenu, 0, 0);
+ "\f\n`keymap' Property Bindings", nomenu,
+ 0, 0, 0);
shadow = Fcons (start1, shadow);
}
@@ -2915,7 +2917,8 @@ You type Translation\n\
p += sizeof (" Minor Mode Bindings") - 1;
*p = 0;
- describe_map_tree (maps[i], 1, shadow, prefix, title, nomenu, 0, 0);
+ describe_map_tree (maps[i], 1, shadow, prefix,
+ title, nomenu, 0, 0, 0);
shadow = Fcons (maps[i], shadow);
}
@@ -2925,23 +2928,23 @@ You type Translation\n\
{
if (EQ (start1, XBUFFER (buffer)->keymap))
describe_map_tree (start1, 1, shadow, prefix,
- "\f\nMajor Mode Bindings", nomenu, 0, 0);
+ "\f\nMajor Mode Bindings", nomenu, 0, 0, 0);
else
describe_map_tree (start1, 1, shadow, prefix,
"\f\n`local-map' Property Bindings",
- nomenu, 0, 0);
+ nomenu, 0, 0, 0);
shadow = Fcons (start1, shadow);
}
}
describe_map_tree (current_global_map, 1, shadow, prefix,
- "\f\nGlobal Bindings", nomenu, 0, 1);
+ "\f\nGlobal Bindings", nomenu, 0, 1, 0);
/* Print the function-key-map translations under this prefix. */
if (!NILP (Vfunction_key_map))
describe_map_tree (Vfunction_key_map, 0, Qnil, prefix,
- "\f\nFunction key map translations", nomenu, 1, 0);
+ "\f\nFunction key map translations", nomenu, 1, 0, 0);
UNGCPRO;
return Qnil;
@@ -2962,17 +2965,21 @@ You type Translation\n\
so print strings and vectors differently.
If ALWAYS_TITLE is nonzero, print the title even if there are no maps
- to look through. */
+ to look through.
+
+ If MENTION_SHADOW is nonzero, then when something is shadowed by SHADOW,
+ don't omit it; instead, mention it but say it is shadowed. */
void
describe_map_tree (startmap, partial, shadow, prefix, title, nomenu, transl,
- always_title)
+ always_title, mention_shadow)
Lisp_Object startmap, shadow, prefix;
int partial;
char *title;
int nomenu;
int transl;
int always_title;
+ int mention_shadow;
{
Lisp_Object maps, orig_maps, seen, sub_shadows;
struct gcpro gcpro1, gcpro2, gcpro3;
@@ -3074,7 +3081,7 @@ key binding\n\
describe_map (Fcdr (elt), prefix,
transl ? describe_translation : describe_command,
- partial, sub_shadows, &seen, nomenu);
+ partial, sub_shadows, &seen, nomenu, mention_shadow);
skip: ;
}
@@ -3154,7 +3161,8 @@ describe_translation (definition, args)
PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */
static void
-describe_map (map, prefix, elt_describer, partial, shadow, seen, nomenu)
+describe_map (map, prefix, elt_describer, partial, shadow,
+ seen, nomenu, mention_shadow)
register Lisp_Object map;
Lisp_Object prefix;
void (*elt_describer) P_ ((Lisp_Object, Lisp_Object));
@@ -3162,6 +3170,7 @@ describe_map (map, prefix, elt_describer, partial, shadow, seen, nomenu)
Lisp_Object shadow;
Lisp_Object *seen;
int nomenu;
+ int mention_shadow;
{
Lisp_Object tail, definition, event;
Lisp_Object tem;
@@ -3191,9 +3200,10 @@ describe_map (map, prefix, elt_describer, partial, shadow, seen, nomenu)
|| CHAR_TABLE_P (XCAR (tail)))
describe_vector (XCAR (tail),
prefix, Qnil, elt_describer, partial, shadow, map,
- (int *)0, 0, 1);
+ (int *)0, 0, 1, mention_shadow);
else if (CONSP (XCAR (tail)))
{
+ int this_shadowed = 0;
event = XCAR (XCAR (tail));
/* Ignore bindings whose "prefix" are not really valid events.
@@ -3222,7 +3232,13 @@ describe_map (map, prefix, elt_describer, partial, shadow, seen, nomenu)
if (!NILP (shadow))
{
tem = shadow_lookup (shadow, kludge, Qt);
- if (!NILP (tem)) continue;
+ if (!NILP (tem))
+ {
+ if (mention_shadow)
+ this_shadowed = 1;
+ else
+ continue;
+ }
}
tem = Flookup_key (map, kludge, Qt);
@@ -3242,6 +3258,13 @@ describe_map (map, prefix, elt_describer, partial, shadow, seen, nomenu)
elt_describer will take care of spacing out far enough
for alignment purposes. */
(*elt_describer) (definition, Qnil);
+
+ if (this_shadowed)
+ {
+ SET_PT (PT - 1);
+ insert_string (" (binding currently shadowed)");
+ SET_PT (PT + 1);
+ }
}
else if (EQ (XCAR (tail), Qkeymap))
{
@@ -3280,7 +3303,7 @@ DESCRIBER is the output function used; nil means use `princ'. */)
specbind (Qstandard_output, Fcurrent_buffer ());
CHECK_VECTOR_OR_CHAR_TABLE (vector);
describe_vector (vector, Qnil, describer, describe_vector_princ, 0,
- Qnil, Qnil, (int *)0, 0, 0);
+ Qnil, Qnil, (int *)0, 0, 0, 0);
return unbind_to (count, Qnil);
}
@@ -3323,7 +3346,8 @@ DESCRIBER is the output function used; nil means use `princ'. */)
static void
describe_vector (vector, prefix, args, elt_describer,
partial, shadow, entire_map,
- indices, char_table_depth, keymap_p)
+ indices, char_table_depth, keymap_p,
+ mention_shadow)
register Lisp_Object vector;
Lisp_Object prefix, args;
void (*elt_describer) P_ ((Lisp_Object, Lisp_Object));
@@ -3333,6 +3357,7 @@ describe_vector (vector, prefix, args, elt_describer,
int *indices;
int char_table_depth;
int keymap_p;
+ int mention_shadow;
{
Lisp_Object definition;
Lisp_Object tem2;
@@ -3377,6 +3402,7 @@ describe_vector (vector, prefix, args, elt_describer,
for (i = from; i < to; i++)
{
+ int this_shadowed = 0;
int range_beg, range_end;
Lisp_Object val;
@@ -3412,7 +3438,13 @@ describe_vector (vector, prefix, args, elt_describer,
tem = shadow_lookup (shadow, kludge, Qt);
- if (!NILP (tem)) continue;
+ if (!NILP (tem))
+ {
+ if (mention_shadow)
+ this_shadowed = 1;
+ else
+ continue;
+ }
}
/* Ignore this definition if it is shadowed by an earlier
@@ -3477,6 +3509,13 @@ describe_vector (vector, prefix, args, elt_describer,
elt_describer will take care of spacing out far enough
for alignment purposes. */
(*elt_describer) (definition, args);
+
+ if (this_shadowed)
+ {
+ SET_PT (PT - 1);
+ insert_string (" (binding currently shadowed)");
+ SET_PT (PT + 1);
+ }
}
if (CHAR_TABLE_P (vector) && ! NILP (XCHAR_TABLE (vector)->defalt))