]> git.eshelyaron.com Git - emacs.git/commitdiff
(edmacro-fix-menu-commands):
authorRichard M. Stallman <rms@gnu.org>
Fri, 21 Jun 2002 09:53:01 +0000 (09:53 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 21 Jun 2002 09:53:01 +0000 (09:53 +0000)
Discard `help-echo' events.  Handle (menu-bar) events.
Simplify by converting key sequence to a list and then back to vector.

lisp/edmacro.el

index 8a3201567c1bd1fd0748724aa328149b4d0c84bc..e01e5960ff54010782322eb7ca1940e4ebbd076f 100644 (file)
@@ -609,23 +609,30 @@ If START or END is negative, it counts from the end."
                 (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))
 \f
 ;;; Parsing a human-readable keyboard macro.