[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/keymap.c,v
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] Changes to emacs/src/keymap.c,v |
Date: |
Fri, 04 Apr 2008 17:31:22 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Stefan Monnier <monnier> 08/04/04 17:31:21
Index: src/keymap.c
===================================================================
RCS file: /sources/emacs/emacs/src/keymap.c,v
retrieving revision 1.370
retrieving revision 1.371
diff -u -b -r1.370 -r1.371
--- src/keymap.c 25 Mar 2008 20:12:54 -0000 1.370
+++ src/keymap.c 4 Apr 2008 17:31:17 -0000 1.371
@@ -731,6 +731,26 @@
UNGCPRO;
}
+Lisp_Object Qkeymap_canonicalize;
+
+/* Same as map_keymap, but does it right, properly eliminating duplicate
+ bindings due to inheritance. */
+void
+map_keymap_canonical (map, fun, args, data)
+ map_keymap_function_t fun;
+ Lisp_Object map, args;
+ void *data;
+{
+ struct gcpro gcpro1;
+ GCPRO1 (args);
+ /* map_keymap_canonical may be used from redisplay (e.g. when building menus)
+ so be careful to ignore errors and to inhibit redisplay. */
+ map = safe_call1 (Qkeymap_canonicalize, map);
+ /* No need to use `map_keymap' here because canonical map has no parent. */
+ map_keymap_internal (map, fun, args, data);
+ UNGCPRO;
+}
+
DEFUN ("map-keymap-internal", Fmap_keymap_internal, Smap_keymap_internal, 2,
2, 0,
doc: /* Call FUNCTION once for each event binding in KEYMAP.
FUNCTION is called with two arguments: the event that is bound, and
@@ -3407,14 +3427,16 @@
kludge = Fmake_vector (make_number (1), Qnil);
definition = Qnil;
+ GCPRO3 (prefix, definition, kludge);
+
+ map = call1 (Qkeymap_canonicalize, map);
+
for (tail = map; CONSP (tail); tail = XCDR (tail))
length_needed++;
vect = ((struct describe_map_elt *)
alloca (sizeof (struct describe_map_elt) * length_needed));
- GCPRO3 (prefix, definition, kludge);
-
for (tail = map; CONSP (tail); tail = XCDR (tail))
{
QUIT;
@@ -3850,6 +3872,9 @@
apropos_predicate = Qnil;
apropos_accumulate = Qnil;
+ Qkeymap_canonicalize = intern ("keymap-canonicalize");
+ staticpro (&Qkeymap_canonicalize);
+
/* Now we are ready to set up this property, so we can
create char tables. */
Fput (Qkeymap, Qchar_table_extra_slots, make_number (0));
- [Emacs-diffs] Changes to emacs/src/keymap.c,v,
Stefan Monnier <=