mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-02-08 20:58:58 +00:00
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.
This commit is contained in:
parent
f65536015b
commit
2301f13a67
@ -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 ()
|
||||
|
Loading…
x
Reference in New Issue
Block a user