summaryrefslogtreecommitdiff
path: root/lisp/net
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2005-08-31 20:28:48 +0000
committerMichael Albinus <michael.albinus@gmx.de>2005-08-31 20:28:48 +0000
commit00cec1673b37483d327cebce8399e3eac0bfacf7 (patch)
tree4daca33c23b8046dcff58ef91703830797d0ef5d /lisp/net
parent52f277bf21981d6cb1d19a7f0d793cfc2a4256db (diff)
downloademacs-00cec1673b37483d327cebce8399e3eac0bfacf7.tar.gz
* net/tramp.el (tramp-handle-make-auto-save-file-name): Deactivate
temporarily advice if active (not needed for Emacs 22, but for backwards compatibility). (tramp-exists-file-name-handler): Rewrite. First implementation was too simple. (tramp-advice-make-auto-save-file-name): Call `tramp-handle-make-auto-save-file-name' (again, just for backwards compatibility).
Diffstat (limited to 'lisp/net')
-rw-r--r--lisp/net/tramp.el38
1 files changed, 28 insertions, 10 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 0595e1b0a56..e721f3fb016 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -3829,12 +3829,19 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
("]" . "_r"))
(buffer-file-name))
tramp-auto-save-directory)
- (buffer-file-name)))
- ;; We set it to nil because `make-auto-save-file-name' shouldn't
- ;; recurse infinitely.
- tramp-auto-save-directory)
- (tramp-run-real-handler
- 'make-auto-save-file-name nil)))
+ (buffer-file-name))))
+ ;; Run plain `make-auto-save-file-name'. There might be an advice when
+ ;; it is not a magic file name operation (since Emacs 22).
+ ;; We must deactivate it temporarily.
+ (if (not (ad-is-active 'make-auto-save-file-name))
+ (tramp-run-real-handler
+ 'make-auto-save-file-name nil)
+ ;; else
+ (ad-deactivate 'make-auto-save-file-name)
+ (prog1
+ (tramp-run-real-handler
+ 'make-auto-save-file-name nil)
+ (ad-activate 'make-auto-save-file-name)))))
;; CCC grok APPEND, LOCKNAME, CONFIRM
@@ -6935,16 +6942,27 @@ as default."
;; Auto saving to a special directory.
-(defun tramp-exists-file-name-handler (operation)
- (let ((file-name-handler-alist (list (cons "/" 'identity))))
- (eq (find-file-name-handler "/" operation) 'identity)))
+(defun tramp-exists-file-name-handler (operation &rest args)
+ (let ((buffer-file-name "/")
+ (fnha file-name-handler-alist)
+ (check-file-name-operation operation)
+ (file-name-handler-alist
+ (list
+ (cons "/"
+ '(lambda (operation &rest args)
+ "Returns OPERATION if it is the one to be checked"
+ (if (equal check-file-name-operation operation)
+ operation
+ (let ((file-name-handler-alist fnha))
+ (apply operation args))))))))
+ (eq (apply operation args) operation)))
(unless (tramp-exists-file-name-handler 'make-auto-save-file-name)
(defadvice make-auto-save-file-name
(around tramp-advice-make-auto-save-file-name () activate)
"Invoke `tramp-handle-make-auto-save-file-name' for tramp files."
(if (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name)))
- (setq ad-return-value (tramp-make-auto-save-file-name))
+ (setq ad-return-value (tramp-handle-make-auto-save-file-name))
ad-do-it)))
;; In Emacs < 22 and XEmacs < 21.5 autosaved remote files have