From: Stefan Monnier Date: Sat, 27 Sep 2014 15:52:28 +0000 (-0400) Subject: * lisp/subr.el (track-mouse): New macro. X-Git-Tag: emacs-25.0.90~2635^2~679^2~206 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=19e0f0af6d27179baf76b5ebc67588dfc4b70588;p=emacs.git * lisp/subr.el (track-mouse): New macro. * lisp/emacs-lisp/cconv.el (cconv-convert, cconv-analyse-form): Remove track-mouse case. * lisp/emacs-lisp/bytecomp.el (byte-compile-track-mouse): Remove. * src/keyboard.c (track-mouse): Rename to internal--track-mouse. Make it into a function and change arg to be a function. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a1a453abd7d..f5a188b2417 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-09-27 Stefan Monnier + + * subr.el (track-mouse): New macro. + * emacs-lisp/cconv.el (cconv-convert, cconv-analyse-form): + Remove track-mouse case. + * emacs-lisp/bytecomp.el (byte-compile-track-mouse): Remove. + 2014-09-27 Leo Liu * progmodes/elisp-mode.el (elisp--eldoc-last-data): Use defvar. diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index d21b39fd268..0e96ba93f44 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -4072,7 +4072,6 @@ binding slots have been popped." (byte-defop-compiler-1 save-restriction) ;; (byte-defop-compiler-1 save-window-excursion) ;Obsolete: now a macro. ;; (byte-defop-compiler-1 with-output-to-temp-buffer) ;Obsolete: now a macro. -(byte-defop-compiler-1 track-mouse) (defvar byte-compile--use-old-handlers t "If nil, use new byte codes introduced in Emacs-24.4.") @@ -4107,12 +4106,6 @@ binding slots have been popped." (byte-compile-form-do-effect (car (cdr form))) (byte-compile-out 'byte-unbind 1)) -(defun byte-compile-track-mouse (form) - (byte-compile-form - (pcase form - (`(,_ :fun-body ,f) `(eval (list 'track-mouse (list 'funcall ,f)))) - (_ `(eval '(track-mouse ,@(byte-compile-top-level-body (cdr form)))))))) - (defun byte-compile-condition-case (form) (if byte-compile--use-old-handlers (byte-compile-condition-case--old form) diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el index 40f1531e0f7..98eef11a658 100644 --- a/lisp/emacs-lisp/cconv.el +++ b/lisp/emacs-lisp/cconv.el @@ -462,10 +462,6 @@ places where they originally did not directly appear." `(,head ,(cconv-convert form env extend) :fun-body ,(cconv--convert-function () body env form))) - (`(track-mouse . ,body) - `(track-mouse - :fun-body ,(cconv--convert-function () body env form))) - (`(setq . ,forms) ; setq special form (let ((prognlist ())) (while forms @@ -701,11 +697,6 @@ and updates the data stored in ENV." (cconv-analyse-form form env) (cconv--analyse-function () body env form)) - ;; FIXME: The lack of bytecode for track-mouse forces us to wrap the body. - ;; `track-mouse' really should be made into a macro. - (`(track-mouse . ,body) - (cconv--analyse-function () body env form)) - (`(defvar ,var) (push var byte-compile-bound-variables)) (`(,(or `defconst `defvar) ,var ,value . ,_) (push var byte-compile-bound-variables) diff --git a/lisp/subr.el b/lisp/subr.el index 56b46b4fbf1..2bbc01d4533 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2945,6 +2945,14 @@ Similar to `call-process-shell-command', but calls `process-file'." ;;;; Lisp macros to do various things temporarily. +(defmacro track-mouse (&rest body) + "Evaluate BODY with mouse movement events enabled. +Within a `track-mouse' form, mouse motion generates input events that + you can read with `read-event'. +Normally, mouse motion is ignored." + (declare (debug t) (indent 0)) + `(internal--track-mouse (lambda () ,@body))) + (defmacro with-current-buffer (buffer-or-name &rest body) "Execute the forms in BODY with BUFFER-OR-NAME temporarily current. BUFFER-OR-NAME must be a buffer or the name of an existing buffer. diff --git a/src/ChangeLog b/src/ChangeLog index 3afd5ee6e20..53353ffc096 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2014-09-27 Stefan Monnier + * keyboard.c (track-mouse): Rename to internal--track-mouse. + Make it into a function and change arg to be a function. + * lisp.mk (lisp): Add elisp-mode.elc. 2014-09-26 Paul Eggert diff --git a/src/keyboard.c b/src/keyboard.c index e242a886f05..fcba475e5ee 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1287,13 +1287,9 @@ tracking_off (Lisp_Object old_value) } } -DEFUN ("track-mouse", Ftrack_mouse, Strack_mouse, 0, UNEVALLED, 0, - doc: /* Evaluate BODY with mouse movement events enabled. -Within a `track-mouse' form, mouse motion generates input events that -you can read with `read-event'. -Normally, mouse motion is ignored. -usage: (track-mouse BODY...) */) - (Lisp_Object args) +DEFUN ("internal--track-mouse", Ftrack_mouse, Strack_mouse, 1, 1, 0, + doc: /* Call BODYFUN with mouse movement events enabled. */) + (Lisp_Object bodyfun) { ptrdiff_t count = SPECPDL_INDEX (); Lisp_Object val; @@ -1302,7 +1298,7 @@ usage: (track-mouse BODY...) */) do_mouse_tracking = Qt; - val = Fprogn (args); + val = call0 (bodyfun); return unbind_to (count, val); }