18.7 File Name Aliases
Symbolic links and hard links both make it possible for several file names to refer to the same file. Hard links are alternate names that refer directly to the file; all the names are equally valid, and no one of them is preferred. By contrast, a symbolic link is a kind of defined alias: when foo
is a symbolic link to bar
, you can use either name to refer to the file, but bar
is the real name, while foo
is just an alias. More complex cases occur when symbolic links point to directories.
Normally, if you visit a file which Emacs is already visiting under a different name, Emacs displays a message in the echo area and uses the existing buffer visiting that file. This can happen on systems that support hard or symbolic links, or if you use a long file name on a system that truncates long file names, or on a case-insensitive file system. You can suppress the message by setting the variable find-file-suppress-same-file-warnings
to a non-nil
value. You can disable this feature entirely by setting the variable find-file-existing-other-name
to nil
: then if you visit the same file under two different names, you get a separate buffer for each file name.
If the variable find-file-visit-truename
is non-nil
, then the file name recorded for a buffer is the fileβs truename (made by replacing all symbolic links with their target names), rather than the name you specify. Setting find-file-visit-truename
also implies the effect of find-file-existing-other-name
.
Sometimes, a directory is ordinarily accessed through a symbolic link, and you may want Emacs to preferentially show its linked name. To do this, customize directory-abbrev-alist
. Each element in this list should have the form (from . to)
, which means to replace from
with to
whenever from
appears in a directory name. The from
string is a regular expression (see Regexps). It is matched against directory names anchored at the first character, and should start with β\`
β (to support directory names with embedded newlines, which would defeat β^
β). The to
string should be an ordinary absolute directory name pointing to the same directory. Do not use β~
β to stand for a home directory in the to
string; Emacs performs these substitutions separately. Hereβs an example, from a system on which /home/fsf
is normally accessed through a symbolic link named /fsf
:
(("\\`/home/fsf" . "/fsf"))