emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] scratch/auctex-lexbind 7f10390 09/10: Prefer lexical closures ove


From: Stefan Monnier
Subject: [elpa] scratch/auctex-lexbind 7f10390 09/10: Prefer lexical closures over hand-built lambda forms
Date: Mon, 22 Mar 2021 22:58:15 -0400 (EDT)

branch: scratch/auctex-lexbind
commit 7f10390369ccb82ac19247e5f1eb2c93d6c763a1
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Prefer lexical closures over hand-built lambda forms
    
    now that we have lexical-binding, we can use closures, which have the
    advantage over `(lambda ...) of allowing the byte-compiler to compile
    the code, and also makes it possible to Edebug it.
    
    * preview.el (preview-gs-close, preview-gs-flag-error)
    (preview-scale-from-face, preview-gs-flag-error)
    (preview-scale-from-face, preview-disabled-string)
    (preview-buffer-restore, preview-place-preview)
    (preview-reinstate-preview, preview-cache-preamble)
    (preview-generate-preview, preview-report-bug):
    * toolbar-x.el (toolbarx-emacs-mount-popup-menu):
    * tex.el (TeX-mode-specific-command-menu): Replace `(lambda...) with 
closures.
---
 preview.el   | 133 ++++++++++++++++++++++++++++++-----------------------------
 tex.el       |   4 +-
 toolbar-x.el |  26 ++++++------
 3 files changed, 83 insertions(+), 80 deletions(-)

diff --git a/preview.el b/preview.el
index 3288388..778b739 100644
--- a/preview.el
+++ b/preview.el
@@ -1030,13 +1030,11 @@ The usual PROCESS and COMMAND arguments for
                         (file-error nil)))
                     (preview-gs-restart))
                 (setq TeX-sentinel-function
-                      `(lambda (process command)
-                         (,(if preview-parsed-pdfoutput
-                               #'preview-pdf2dsc-sentinel
-                             #'preview-gs-dvips-sentinel)
-                          process
-                          command
-                          t))))
+                      (let ((fun (if preview-parsed-pdfoutput
+                                     #'preview-pdf2dsc-sentinel
+                                   #'preview-gs-dvips-sentinel)))
+                        (lambda (process command)
+                          (funcall fun process command t)))))
             (TeX-synchronous-sentinel "Preview-DviPS" (cdr preview-gs-file)
                                       process))
     ;; pathological case: no previews although we sure thought so.
@@ -1320,9 +1318,8 @@ Try \\[ps-run-start] \\[ps-run-buffer] and \
                           (file-relative-name
                            (car (nth 1 filenames)))))
          (ps-open
-          `(lambda() (interactive "@")
-             (preview-mouse-open-error
-              ,(concat
+          (let ((str
+                 (concat
                 (mapconcat #'shell-quote-argument
                             (append (list
                                      preview-gs-command
@@ -1332,7 +1329,8 @@ Try \\[ps-run-start] \\[ps-run-buffer] and \
                  "\nGS>"
                  preview-gs-init-string
                  (aref (overlay-get ov 'queued) 1)
-                 err))))
+                 err)))
+            (lambda () (interactive "@") (preview-mouse-open-error str))))
          (str
           (preview-make-clickable
            nil
@@ -1340,20 +1338,20 @@ Try \\[ps-run-start] \\[ps-run-buffer] and \
            "%s views error message
 %s more options"
            ps-open
-           `(lambda() (interactive)
-              (popup-menu
-               '("PostScript error"
-                 ["View error" ,ps-open]
-                 ["View source"
-                  (lambda () (interactive "@")
-                    ,(if preview-ps-file
-                         `(preview-mouse-open-eps
-                           ,(if (consp (car file))
-                                (nth 1 (car file))
-                              (car file))
-                           ,(nth 0 (aref preview-gs-dsc
-                                         (aref (overlay-get ov 'queued) 2))))
-                       `(preview-mouse-open-eps ,file)))]))))))
+           (let ((args
+                  (if preview-ps-file
+                      (list
+                       (if (consp (car file)) (nth 1 (car file)) (car file))
+                       (nth 0 (aref preview-gs-dsc
+                                    (aref (overlay-get ov 'queued) 2))))
+                    (list file))))
+             (lambda () (interactive)
+               (popup-menu
+                `("PostScript error"
+                  ["View error" ,ps-open]
+                  ["View source" ,(lambda () (interactive "@")
+                                    (apply #'preview-mouse-open-eps
+                                           args))])))))))
     (overlay-put ov 'strings (cons str str))
     (preview-toggle ov)))
 
@@ -1535,10 +1533,10 @@ had let your document be parsed by AucTeX."
 This calculates the scale of EPS images from a document assumed
 to have a default font size given by function `preview-document-pt'
 so that they match the reference face in height."
-  `(lambda nil
-     (/ ,(/ (preview-inherited-face-attribute 'preview-reference-face :height
-                                              'default) 10.0)
-        (preview-document-pt))))
+  (let ((d (/ (preview-inherited-face-attribute 'preview-reference-face :height
+                                                'default)
+              10.0)))
+    (lambda () (/ d (preview-document-pt)))))
 
 (defvar preview-min-spec)
 
@@ -2179,7 +2177,7 @@ active (`transient-mark-mode'), it is run through 
`preview-region'."
            "\
 %s regenerates preview
 %s more options"
-           `(lambda() (interactive) (preview-regenerate ,ov)))
+           (lambda () (interactive) (preview-regenerate ov)))
 ;; icon on separate line only for stuff starting on its own line
           (with-current-buffer (overlay-buffer ov)
             (save-excursion
@@ -2370,10 +2368,12 @@ Remove them if they have expired."
 This delay is so that minor modes changing buffer positions
 \(like `x-symbol-mode' does) will not wreak havoc.
 BUFFER-MISC is the appropriate data to be used."
-  (add-hook 'desktop-delay-hook `(lambda ()
-                                   (with-current-buffer ,(current-buffer)
-                                     (preview-buffer-restore-internal
-                                      ',buffer-misc)))))
+  (add-hook 'desktop-delay-hook
+            (let ((buf (current-buffer)))
+              (lambda ()
+                (with-current-buffer buf
+                  (preview-buffer-restore-internal
+                   buffer-misc))))))
 
 (defun desktop-buffer-preview (file-name _buffer-name misc)
   "Hook function for restoring persistent previews into a buffer."
@@ -2574,10 +2574,10 @@ to the close hook."
     (overlay-put ov 'preview-map
                  (preview-make-clickable
                   nil nil nil
-                  `(lambda(event) (interactive "e")
-                     (preview-toggle ,ov 'toggle event))
-                  `(lambda(event) (interactive "e")
-                     (preview-context-menu ,ov event))))
+                  (lambda (event) (interactive "e")
+                    (preview-toggle ov 'toggle event))
+                  (lambda (event) (interactive "e")
+                    (preview-context-menu ov event))))
     (overlay-put ov 'timestamp tempdir)
     (when (cdr counters)
       (overlay-put ov 'preview-counters counters)
@@ -2662,10 +2662,10 @@ if any."
       (overlay-put ov 'preview-map
                    (preview-make-clickable
                     nil nil nil
-                    `(lambda(event) (interactive "e")
-                       (preview-toggle ,ov 'toggle event))
-                    `(lambda(event) (interactive "e")
-                       (preview-context-menu ,ov event))))
+                    (lambda (event) (interactive "e")
+                      (preview-toggle ov 'toggle event))
+                    (lambda (event) (interactive "e")
+                      (preview-context-menu ov event))))
       (when counters
         (overlay-put
          ov 'preview-counters
@@ -3987,19 +3987,19 @@ If FORMAT-CONS is non-nil, a previous format may get 
reused."
       (prog1 (preview-generate-preview master command)
         (add-hook 'kill-emacs-hook #'preview-cleanout-tempfiles t)
         (setq TeX-sentinel-function
-              `(lambda (process string)
-                 (condition-case err
-                     (progn
-                       (if (and (eq (process-status process) 'exit)
-                                (zerop (process-exit-status process)))
-                           (preview-watch-preamble
-                            ',master-file
-                            ',command
-                            ',format-cons)
-                         (preview-format-kill ',format-cons))
-                       (delete-file ',dump-file))
-                   (error (preview-log-error err "Dumping" process)))
-                 (preview-reraise-error process)))))))
+              (lambda (process _status)
+                (condition-case err
+                    (progn
+                      (if (and (eq (process-status process) 'exit)
+                               (zerop (process-exit-status process)))
+                          (preview-watch-preamble
+                           master-file
+                           command
+                           format-cons)
+                        (preview-format-kill format-cons))
+                      (delete-file ',dump-file))
+                  (error (preview-log-error err "Dumping" process)))
+                (preview-reraise-error process)))))))
 
 (defun preview-cache-preamble-off (&optional old-format)
   "Clear the pregenerated format file.
@@ -4135,16 +4135,18 @@ It returns the started process."
       (let* (TeX-current-process-region-p)
         (setq process (preview-cache-preamble dumped-cons))
         (if process
+            ;; FIXME: Use `add-function'.
             (setq TeX-sentinel-function
-                  `(lambda (process string)
-                     (funcall ,TeX-sentinel-function process string)
-                     (TeX-inline-preview-internal
-                      ,command ,file
-                      ',pr-file ,commandbuff
-                      ',dumped-cons
-                      ',master
-                      ',geometry
-                      (buffer-string)))))))
+                  (let ((prev-fun TeX-sentinel-function))
+                    (lambda (process string)
+                      (funcall prev-fun process string)
+                      (TeX-inline-preview-internal
+                       command file
+                       pr-file commandbuff
+                       dumped-cons
+                       master
+                       geometry
+                       (buffer-string))))))))
     (or process
         (TeX-inline-preview-internal command file
                                      pr-file commandbuff
@@ -4263,7 +4265,8 @@ If not a regular release, the date of the last change.")
             preview-undump-replacements
             preview-auto-cache-preamble
             preview-TeX-style-dir)
-          `(lambda () (preview-dump-state ,(current-buffer)))
+          (let ((buf (current-buffer)))
+            (lambda () (preview-dump-state buf)))
           (lambda ()
             (insert (format "\nOutput from running `%s -h':\n"
                             preview-gs-command))
diff --git a/tex.el b/tex.el
index f4d8363..1acced8 100644
--- a/tex.el
+++ b/tex.el
@@ -5011,8 +5011,8 @@ Brace insertion is only done if point is in a math 
construct and
 (defun TeX-mode-specific-command-menu (mode)
   "Return a Command menu specific to the major MODE."
   (list TeX-command-menu-name
-        :filter `(lambda (&rest ignored)
-                   (TeX-mode-specific-command-menu-entries ',mode))
+        :filter (lambda (&rest _ignored)
+                  (TeX-mode-specific-command-menu-entries mode))
         "Bug."))
 
 (defun TeX-mode-specific-command-menu-entries (mode)
diff --git a/toolbar-x.el b/toolbar-x.el
index 4e87d41..a1e15a3 100644
--- a/toolbar-x.el
+++ b/toolbar-x.el
@@ -299,18 +299,18 @@ inside Emacs. See documentation of that function for 
more."
         (setq used-symbols (cons key used-symbols)))
       (define-key-after keymap (vector key)
         `(menu-item ,i
-                    ,(append
-                      `(lambda nil (interactive)
-                         ,(if (eq real-type 'radio)
-                              `(setq ,var ,count)
-                            `(if (memq ,count ,var)
-                                 (setq ,var (delete ,count ,var))
-                               (setq ,var (sort (cons ,count ,var) #'<))))
-                         (toolbarx-refresh))
-                      (when (eq real-save 'always)
-                        `((customize-save-variable
-                           (quote ,var) ,var)))
-                      `(,var))
+                    ,(let ((count count))
+                       (lambda () (interactive)
+                         (set var
+                              (if (eq real-type 'radio)
+                                  count
+                                (if (memq count (symbol-value var))
+                                    (delete count (symbol-value var))
+                                  (sort (cons count (symbol-value var)) #'<))))
+                         (toolbarx-refresh)
+                         (when (eq real-save 'always)
+                           (customize-save-variable var (symbol-value var)))
+                         (symbol-value var)))
                     :button ,(if (eq real-type 'radio)
                                  `(:radio eq ,var ,count)
                                `(:toggle memq ,count ,var))))
@@ -329,7 +329,7 @@ inside Emacs. See documentation of that function for more."
                     (lambda nil (interactive)
                       (customize-save-variable (quote ,var) ,var)))))
     ;; returns a `lambda'-expression
-    `(lambda nil (interactive) (popup-menu (quote ,keymap)))))
+    (lambda () (interactive) (popup-menu keymap))))
 
 (defun toolbarx-mount-popup-menu (strings var type &optional title save)
   "Return a command that show a popup menu.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]