[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 ()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 2301f13a67: with-connection-local-variables: Avoid code duplication,
Stefan Monnier <=