emacs-diffs
[Top][All Lists]
Advanced

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

master 2301f13a67: with-connection-local-variables: Avoid code duplicati


From: Stefan Monnier
Subject: master 2301f13a67: with-connection-local-variables: Avoid code duplication
Date: Sat, 28 May 2022 12:02:19 -0400 (EDT)

branch: master
commit 2301f13a677aa4ea05bfa2372bdc66c458c0ff38
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    with-connection-local-variables: Avoid code duplication
    
    Move the bulk of the code of `with-connection-local-variables` into
    a separate function, which both avoids duplicating that code but also
    avoids duplicating the code passed as the body of
    a `with-connection-local-variables`.  Also makes it easier to
    debug the code, or change the implementation of
    `with-connection-local-variables` without having to recompile all
    the users.
    
    * lisp/files-x.el (with-connection-local-variables-1): New function,
    extracted from `with-connection-local-variables`.
    (with-connection-local-variables): Use it.
---
 lisp/files-x.el | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/lisp/files-x.el b/lisp/files-x.el
index 0ae9fb076e..4db6fbd22c 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -740,22 +740,28 @@ If APPLICATION is nil, 
`connection-local-default-application' is used."
   "Apply connection-local variables according to `default-directory'.
 Execute BODY, and unwind connection-local variables."
   (declare (debug t))
-  `(if (file-remote-p default-directory)
-       (let ((enable-connection-local-variables t)
-             (old-buffer-local-variables (buffer-local-variables))
-            connection-local-variables-alist)
-        (hack-connection-local-variables-apply
-         (connection-local-criteria-for-default-directory))
-        (unwind-protect
-             (progn ,@body)
-          ;; Cleanup.
-          (dolist (variable connection-local-variables-alist)
-            (let ((elt (assq (car variable) old-buffer-local-variables)))
-              (if elt
-                  (set (make-local-variable (car elt)) (cdr elt))
-                (kill-local-variable (car variable)))))))
-     ;; No connection-local variables to apply.
-     ,@body))
+  `(with-connection-local-variables-1 (lambda () ,@body)))
+
+;;;###autoload
+(defun with-connection-local-variables-1 (body-fun)
+  "Apply connection-local variables according to `default-directory'.
+Call BODY-FUN with no args, and then unwind connection-local variables."
+  (if (file-remote-p default-directory)
+      (let ((enable-connection-local-variables t)
+            (old-buffer-local-variables (buffer-local-variables))
+           connection-local-variables-alist)
+       (hack-connection-local-variables-apply
+        (connection-local-criteria-for-default-directory))
+       (unwind-protect
+            (funcall body-fun)
+         ;; Cleanup.
+         (dolist (variable connection-local-variables-alist)
+           (let ((elt (assq (car variable) old-buffer-local-variables)))
+             (if elt
+                 (set (make-local-variable (car elt)) (cdr elt))
+               (kill-local-variable (car variable)))))))
+    ;; No connection-local variables to apply.
+    (funcall body-fun)))
 
 ;;;###autoload
 (defun path-separator ()



reply via email to

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