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 Syntax of Regular Expressions). 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"))