Mercurial > emacs
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.