changeset 45939:6ccb89338ab1

(edmacro-fix-menu-commands): Discard `help-echo' events. Handle (menu-bar) events. Simplify by converting key sequence to a list and then back to vector.
author Richard M. Stallman <rms@gnu.org>
date Fri, 21 Jun 2002 09:53:01 +0000
parents 0616b57a6e43
children 738d95b72204
files lisp/edmacro.el
diffstat 1 files changed, 19 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/edmacro.el	Fri Jun 21 09:29:28 2002 +0000
+++ b/lisp/edmacro.el	Fri Jun 21 09:53:01 2002 +0000
@@ -609,23 +609,30 @@
 		 (setq i (1+ i) start (1+ start)))
 	       res))))))
 
-(defun edmacro-fix-menu-commands (macro)
-  (when (vectorp macro)
-    (let ((i 0) ev)
-      (while (< i (length macro))
-	(when (consp (setq ev (aref macro i)))
-	  (cond ((equal (cadadr ev) '(menu-bar))
-		 (setq macro (vconcat (edmacro-subseq macro 0 i)
-				      (vector 'menu-bar (car ev))
-				      (edmacro-subseq macro (1+ i))))
-		 (incf i))
+(defun edmacro-fix-menu-commands (macro &optional noerror)
+  (if (vectorp macro)
+      (let (result)
+	;; Make a list of the elements.
+	(setq macro (append macro nil))
+	(dolist (ev macro)
+	  (cond ((atom ev)
+		 (push ev result))
+		((eq (car ev) 'help-echo))
+		((equal ev '(menu-bar))
+		 (push 'menu-bar result))
+		((equal (cadadr ev) '(menu-bar))
+		 (push (vector 'menu-bar (car ev)) result))
 		;; It would be nice to do pop-up menus, too, but not enough
 		;; info is recorded in macros to make this possible.
+		(noerror
+		 ;; Just ignore mouse events.
+		 nil)
 		(t
 		 (error "Macros with mouse clicks are not %s"
 			"supported by this command"))))
-	(incf i))))
-  macro)
+	;; Reverse them again and make them back into a vector.
+	(vconcat (nreverse result)))
+    macro))
 
 ;;; Parsing a human-readable keyboard macro.