summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/lucid.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp/lucid.el')
-rw-r--r--lisp/emacs-lisp/lucid.el17
1 files changed, 17 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/lucid.el b/lisp/emacs-lisp/lucid.el
index 36600f540b6..6412b0bc8f4 100644
--- a/lisp/emacs-lisp/lucid.el
+++ b/lisp/emacs-lisp/lucid.el
@@ -44,3 +44,20 @@
(if (eq (nth 2 plist) prop)
(setcdr (cdr plist) (nthcdr 4 plist)))
(setq plist (cdr (cdr plist))))))
+
+(defun map-keymap (function keymap)
+ "Call FUNCTION for every binding in KEYMAP.
+This includes bindings inherited from a parent keymap.
+FUNCTION receives two arguments each time it is called:
+the character (more generally, the event type) that is bound,
+and the binding it has."
+ (while (consp keymap)
+ (if (consp (car keymap))
+ (funcall function (car (car keymap)) (cdr (car keymap)))
+ (if (vectorp (car keymap))
+ (let ((i (length (car keymap)))
+ (vector (car keymap)))
+ (while (>= i 0)
+ (funcall function i (aref vector i))
+ (setq i (1- i))))))
+ (setq keymap (cdr keymap))))