# HG changeset patch # User Richard M. Stallman # Date 893793787 0 # Node ID c62197b13ece89906ce70b93e62faf62a433880b # Parent d17bf0e8a1700b92558b109f5fd549ab22bf9b2f (easy-menu-define-key): Fixed bug with BEFORE argument. Now it works also if you repeat an identical call to easy-menu-define-key. diff -r d17bf0e8a170 -r c62197b13ece lisp/emacs-lisp/easymenu.el --- a/lisp/emacs-lisp/easymenu.el Tue Apr 28 18:13:00 1998 +0000 +++ b/lisp/emacs-lisp/easymenu.el Tue Apr 28 20:03:07 1998 +0000 @@ -274,7 +274,7 @@ ;; put binding before BEFORE in MENU, otherwise if binding is already ;; present in MENU, just change it, otherwise put it last in MENU. (let ((inserted (null item)) ; Fake already inserted. - done) + tail done) (while (not done) (cond ((or (setq done (or (null (cdr menu)) (keymapp (cdr menu)))) @@ -286,20 +286,20 @@ (unless inserted ; Don't insert more than once. (setcdr menu (cons (cons key item) (cdr menu))) (setq inserted t) - (setq menu (cdr menu)))) + (setq menu (cdr menu))) + (setq menu (cdr menu))) ((and key (equal (car-safe (cadr menu)) key)) - (if (and (or inserted ; Already inserted or - before) ; wanted elsewhere and - (or (not (setq done ; not the last in this keymap. - (or (null (cddr menu)) - (keymapp (cddr menu))))) - inserted)) - ;; The contorted logic above, guarantees `done' has been computed. + (if (or inserted ; Already inserted or + (and before ; wanted elsewhere and + (setq tail (cddr menu)) ; not last item and not + (not (keymapp tail)) + (not (equal (car-safe (car tail)) before)))) ; in position (setcdr menu (cddr menu)) ; Remove item. (setcdr (cadr menu) item) ; Change item. - (setq inserted t)))) - (setq menu (cdr menu))))) - + (setq inserted t) + (setq menu (cdr menu)))) + (t (setq menu (cdr menu))))))) + (defun easy-menu-always-true (x) ;; Return true if X never evaluates to nil. (if (consp x) (and (eq (car x) 'quote) (cadr x))