summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-11-10 05:02:38 +0000
committerRichard M. Stallman <rms@gnu.org>1996-11-10 05:02:38 +0000
commit6d0e5e3052572903a7c9b96fc6997d58453fd07e (patch)
treef9b62abe45db9946e689aa588e3045b08941d629
parent3a43a86ebfdfb4e842b36934f3bbb7b10e415d95 (diff)
downloademacs-6d0e5e3052572903a7c9b96fc6997d58453fd07e.tar.gz
(define-key-after): If AFTER is t, always put new binding at the end.
-rw-r--r--lisp/subr.el15
1 files changed, 11 insertions, 4 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index 0634ce21be7..22056046416 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -181,10 +181,16 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP."
"Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
This is like `define-key' except that the binding for KEY is placed
just after the binding for the event AFTER, instead of at the beginning
-of the map.
-The order matters when the keymap is used as a menu.
+of the map. Note that AFTER must be an event type (like KEY), NOT a command
+\(like DEFINITION).
+
+If AFTER is t, the new binding goes at the end of the keymap.
+
KEY must contain just one event type--that is to say, it must be
-a string or vector of length 1."
+a string or vector of length 1.
+
+The order of bindings in a keymap matters when it is used as a menu."
+
(or (keymapp keymap)
(signal 'wrong-type-argument (list 'keymapp keymap)))
(if (> (length key) 1)
@@ -198,7 +204,8 @@ a string or vector of length 1."
;; When we reach AFTER's binding, insert the new binding after.
;; If we reach an inherited keymap, insert just before that.
;; If we reach the end of this keymap, insert at the end.
- (if (or (eq (car-safe (car tail)) after)
+ (if (or (and (eq (car-safe (car tail)) after)
+ (not (eq after t)))
(eq (car (cdr tail)) 'keymap)
(null (cdr tail)))
(progn