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)))))