This section describes the functions normally used to visit files. For historical reasons, these functions have names starting with ‘find-’ rather than ‘visit-’. See Buffer File Name, for functions and variables that access the visited file name of a buffer or that find an existing buffer by its visited file name.
In a Lisp program, if you want to look at the contents of a file but
not alter it, the fastest way is to use insert-file-contents
in a
temporary buffer. Visiting the file is not necessary and takes longer.
See Reading from Files.
This command selects a buffer visiting the file filename, using an existing buffer if there is one, and otherwise creating a new buffer and reading the file into it. It also returns that buffer.
Aside from some technical details, the body of the find-file
function is basically equivalent to:
(switch-to-buffer (find-file-noselect filename nil nil wildcards))
(See switch-to-buffer
in Switching to a Buffer in a Window.)
If wildcards is non-nil
, which is always true in an
interactive call, then find-file
expands wildcard characters in
filename and visits all the matching files.
When find-file
is called interactively, it prompts for
filename in the minibuffer.
This command visits filename, like find-file
does, but it
does not perform any format conversions (see File Format Conversion),
character code conversions (see Coding Systems), or end-of-line
conversions (see End of line conversion).
The buffer visiting the file is made unibyte, and its major mode is
Fundamental mode, regardless of the file name. File local variable
specifications in the file (see File Local Variables) are
ignored, and automatic decompression and adding a newline at the end
of the file due to require-final-newline
(see require-final-newline) are also disabled.
Note that if Emacs already has a buffer visiting the same file
non-literally, it will not visit the same file literally, but instead
just switch to the existing buffer. If you want to be sure of
accessing a file’s contents literally, you should create a temporary
buffer and then read the file contents into it using
insert-file-contents-literally
(see Reading from Files).
This function is the guts of all the file-visiting functions. It returns a buffer visiting the file filename. You may make the buffer current or display it in a window if you wish, but this function does not do so.
The function returns an existing buffer if there is one; otherwise it
creates a new buffer and reads the file into it. When
find-file-noselect
uses an existing buffer, it first verifies
that the file has not changed since it was last visited or saved in
that buffer. If the file has changed, this function asks the user
whether to reread the changed file. If the user says ‘yes’, any
edits previously made in the buffer are lost.
Reading the file involves decoding the file’s contents (see Coding Systems), including end-of-line conversion, and format conversion
(see File Format Conversion). If wildcards is non-nil
,
then find-file-noselect
expands wildcard characters in
filename and visits all the matching files.
This function displays warning or advisory messages in various peculiar
cases, unless the optional argument nowarn is non-nil
. For
example, if it needs to create a buffer, and there is no file named
filename, it displays the message ‘(New file)’ in the echo
area, and leaves the buffer empty.
The find-file-noselect
function normally calls
after-find-file
after reading the file (see Subroutines of Visiting). That function sets the buffer major mode, parses local
variables, warns the user if there exists an auto-save file more recent
than the file just visited, and finishes by running the functions in
find-file-hook
.
If the optional argument rawfile is non-nil
, then
after-find-file
is not called, and the
find-file-not-found-functions
are not run in case of failure.
What’s more, a non-nil
rawfile value suppresses coding
system conversion and format conversion.
The find-file-noselect
function usually returns the buffer that
is visiting the file filename. But, if wildcards are actually
used and expanded, it returns a list of buffers that are visiting the
various files.
(find-file-noselect "/etc/fstab") ⇒ #<buffer fstab>
This command selects a buffer visiting the file filename, but does so in a window other than the selected window. It may use another existing window or split a window; see Switching to a Buffer in a Window.
When this command is called interactively, it prompts for filename.
This command selects a buffer visiting the file filename, like
find-file
, but it marks the buffer as read-only. See Read-Only Buffers, for related functions and variables.
When this command is called interactively, it prompts for filename.
If this variable is non-nil
, then the various find-file
commands check for wildcard characters and visit all the files that
match them (when invoked interactively or when their wildcards
argument is non-nil
). If this option is nil
, then
the find-file
commands ignore their wildcards argument
and never treat wildcard characters specially.
The value of this variable is a list of functions to be called after a file is visited. The file’s local-variables specification (if any) will have been processed before the hooks are run. The buffer visiting the file is current when the hook functions are run.
This variable is a normal hook. See Hooks.
The value of this variable is a list of functions to be called when
find-file
or find-file-noselect
is passed a nonexistent
file name. find-file-noselect
calls these functions as soon as
it detects a nonexistent file. It calls them in the order of the list,
until one of them returns non-nil
. buffer-file-name
is
already set up.
This is not a normal hook because the values of the functions are used, and in many cases only some of the functions are called.
This buffer-local variable, if set to a non-nil
value, makes
save-buffer
behave as if the buffer were visiting its file
literally, i.e., without conversions of any kind. The command
find-file-literally
sets this variable’s local value, but other
equivalent functions and commands can do that as well, e.g., to avoid
automatic addition of a newline at the end of the file. This variable
is permanent local, so it is unaffected by changes of major modes.