summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2015-05-27 15:47:16 +0200
committerMichael Albinus <michael.albinus@gmx.de>2015-05-27 15:47:16 +0200
commit3953c4be2816537be95520605d45b866dc731f4b (patch)
tree74e7e83d77ac3759bc380afcb34d6cb5a2b3247a
parente70d8747a8ad4a9200b5f92f4c0ca332562bcafb (diff)
Improve tramp-handle-make-auto-save-file-name
* tramp.el (tramp-auto-save-directory): Add :tags. (tramp-handle-make-auto-save-file-name): Let native `make-auto-save-file-name' use `auto-save-file-name-transforms', if `tramp-auto-save-directory' is not set.
-rw-r--r--lisp/net/tramp.el57
1 files changed, 27 insertions, 30 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 22adbd9b47..0b95fcc146 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -147,9 +147,11 @@ policy for local files."
(defcustom tramp-auto-save-directory nil
"Put auto-save files in this directory, if set.
-The idea is to use a local directory so that auto-saving is faster."
+The idea is to use a local directory so that auto-saving is faster.
+This setting has precedence over `auto-save-file-name-transforms'."
:group 'tramp
- :type '(choice (const nil) string))
+ :type '(choice (const :tag "Use default" nil)
+ (directory :tag "Auto save directory name")))
(defcustom tramp-encoding-shell
(if (memq system-type '(windows-nt))
@@ -4006,35 +4008,28 @@ Return the local name of the temporary file."
(defun tramp-handle-make-auto-save-file-name ()
"Like `make-auto-save-file-name' for Tramp files.
-Returns a file name in `tramp-auto-save-directory' for autosaving this file."
- (let ((tramp-auto-save-directory tramp-auto-save-directory)
+Returns a file name in `tramp-auto-save-directory' for autosaving
+this file, if that variable is non-nil."
+ ;; Create directory.
+ (unless (or (null tramp-auto-save-directory)
+ (file-exists-p tramp-auto-save-directory))
+ (make-directory tramp-auto-save-directory t))
+
+ (let ((auto-save-file-name-transforms
+ (if (null tramp-auto-save-directory) auto-save-file-name-transforms))
(buffer-file-name
- (tramp-subst-strs-in-string
- '(("_" . "|")
- ("/" . "_a")
- (":" . "_b")
- ("|" . "__")
- ("[" . "_l")
- ("]" . "_r"))
- (buffer-file-name))))
- ;; File name must be unique. This is ensured with Emacs 22 (see
- ;; UNIQUIFY element of `auto-save-file-name-transforms'); but for
- ;; all other cases we must do it ourselves.
- (when (boundp 'auto-save-file-name-transforms)
- (mapc
- (lambda (x)
- (when (and (string-match (car x) buffer-file-name)
- (not (car (cddr x))))
- (setq tramp-auto-save-directory
- (or tramp-auto-save-directory
- (tramp-compat-temporary-file-directory)))))
- (symbol-value 'auto-save-file-name-transforms)))
- ;; Create directory.
- (when tramp-auto-save-directory
- (setq buffer-file-name
- (expand-file-name buffer-file-name tramp-auto-save-directory))
- (unless (file-exists-p tramp-auto-save-directory)
- (make-directory tramp-auto-save-directory t)))
+ (if (null tramp-auto-save-directory)
+ buffer-file-name
+ (expand-file-name
+ (tramp-subst-strs-in-string
+ '(("_" . "|")
+ ("/" . "_a")
+ (":" . "_b")
+ ("|" . "__")
+ ("[" . "_l")
+ ("]" . "_r"))
+ (buffer-file-name))
+ tramp-auto-save-directory))))
;; 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.
@@ -4045,6 +4040,8 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
(prog1
(tramp-run-real-handler 'make-auto-save-file-name nil)
(ad-activate 'make-auto-save-file-name)))))
+ (tramp-run-real-handler 'make-auto-save-file-name nil)
+ (ad-activate 'make-auto-save-file-name)))))
(unless (tramp-exists-file-name-handler 'make-auto-save-file-name)
(defadvice make-auto-save-file-name