Function: tramp-handle-abbreviate-file-name

tramp-handle-abbreviate-file-name is a byte-compiled function defined in tramp.el.gz.

Signature

(tramp-handle-abbreviate-file-name FILENAME)

Documentation

Like abbreviate-file-name for Tramp files.

Source Code

;; Defined in /usr/src/emacs/lisp/net/tramp.el.gz
;; `directory-abbrev-apply' and `directory-abbrev-make-regexp' exists
;; since Emacs 29.1.  Since this handler isn't called for older
;; Emacs, it is save to invoke them via `tramp-compat-funcall'.
(defun tramp-handle-abbreviate-file-name (filename)
  "Like `abbreviate-file-name' for Tramp files."
  (let* ((case-fold-search (file-name-case-insensitive-p filename))
	 (vec (tramp-dissect-file-name filename))
	 (tramp-tolerate-tilde t)
         (home-dir
          (if (let ((non-essential t)) (tramp-connectable-p vec))
              ;; If a connection has already been established, get the
              ;; home directory.
	      (tramp-get-home-directory vec)
            ;; Otherwise, just use the cached value.
            (tramp-get-connection-property vec "~"))))
    (when home-dir
      (setq home-dir
	    (tramp-compat-funcall
	     'directory-abbrev-apply
	     (tramp-make-tramp-file-name vec home-dir))))
    ;; If any elt of `directory-abbrev-alist' matches this name,
    ;; abbreviate accordingly.
    (setq filename (tramp-compat-funcall 'directory-abbrev-apply filename))
    ;; Abbreviate home directory.
    (if (and home-dir
             (string-match
	      (tramp-compat-funcall 'directory-abbrev-make-regexp home-dir)
              filename))
        (tramp-make-tramp-file-name
	 vec (concat "~" (substring filename (match-beginning 1))))
      (tramp-make-tramp-file-name (tramp-dissect-file-name filename)))))