diff lisp/net/tramp.el @ 65304:379e08762d65

* 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).
author Michael Albinus <michael.albinus@gmx.de>
date Wed, 31 Aug 2005 20:28:48 +0000
parents 6b6c169429e3
children 71de05246686 a3716f7538f2
line wrap: on
line diff
--- a/lisp/net/tramp.el	Wed Aug 31 19:56:30 2005 +0000
+++ b/lisp/net/tramp.el	Wed Aug 31 20:28:48 2005 +0000
@@ -3829,12 +3829,19 @@
 		 ("]" . "_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 @@
 
 ;; 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