Function: tramp-handle-make-auto-save-file-name

tramp-handle-make-auto-save-file-name is a byte-compiled function defined in tramp.el.gz.

Signature

(tramp-handle-make-auto-save-file-name)

Documentation

Like make-auto-save-file-name for Tramp files.

Returns a file name in tramp-auto-save-directory for autosaving this file, if that variable is non-nil.

Source Code

;; Defined in /usr/src/emacs/lisp/net/tramp.el.gz
(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, if that variable is non-nil."
  (with-parsed-tramp-file-name buffer-file-name nil
    (when (stringp tramp-auto-save-directory)
      (setq tramp-auto-save-directory
	    (expand-file-name tramp-auto-save-directory)))
    ;; Create directory.
    (unless (or (null tramp-auto-save-directory)
		(file-exists-p tramp-auto-save-directory))
      (with-file-modes #o0700
        (make-directory tramp-auto-save-directory t)))

    (let ((system-type
	   (if (and (stringp tramp-auto-save-directory)
		    (tramp-tramp-file-p tramp-auto-save-directory))
	       'not-windows
	     system-type))
	  (auto-save-file-name-transforms
	   (if (null tramp-auto-save-directory)
	       auto-save-file-name-transforms))
	  (filename buffer-file-name)
	  (buffer-file-name
	   (if (null tramp-auto-save-directory)
	       buffer-file-name
	     (expand-file-name
	      (tramp-subst-strs-in-string
	       '(("_" . "|")
		 ("/" . "_a")
		 (":" . "_b")
		 ("|" . "__")
		 ("[" . "_l")
		 ("]" . "_r"))
	       (tramp-compat-file-name-unquote (buffer-file-name)))
	      tramp-auto-save-directory)))
	  result)
      (prog1 ;; Run plain `make-auto-save-file-name'.
	  (setq result (tramp-run-real-handler #'make-auto-save-file-name nil))
	;; Protect against security hole.
	(when (and (not tramp-allow-unsafe-temporary-files)
		   auto-save-default
		   (file-in-directory-p result temporary-file-directory)
		   (= (or (file-attribute-user-id
			   (file-attributes filename 'integer))
			  tramp-unknown-id-integer)
		      tramp-root-id-integer)
		   (not (with-tramp-connection-property
			    (tramp-get-process v) "unsafe-temporary-file"
			  (yes-or-no-p
			   (concat
			    "Autosave file on local temporary directory, "
			    "do you want to continue?")))))
	  (tramp-error v 'file-error "Unsafe autosave file name"))))))