You can write the contents of a buffer, or part of a buffer, directly
to a file on disk using the
write-region functions. Don’t use these functions to write to
files that are being visited; that could cause confusion in the
mechanisms for visiting.
This function appends the contents of the region delimited by
start and end in the current buffer to the end of file
filename. If that file does not exist, it is created. This
An error is signaled if you cannot write or create filename.
When called from Lisp, this function is completely equivalent to:
(write-region start end filename t)
This function writes the region delimited by start and end in the current buffer into the file specified by filename.
If start is
nil, then the command writes the entire buffer
contents (not just the accessible portion) to the file and
If start is a string, then
write-region writes or appends
that string, rather than text from the buffer. end is ignored in
If append is non-
nil, then the specified text is appended
to the existing file contents (if any). If append is a
write-region seeks to that byte offset from the start
of the file and writes the data from there.
If mustbenew is non-
for confirmation if filename names an existing file. If
mustbenew is the symbol
does not ask for confirmation, but instead it signals an error
file-already-exists if the file already exists. Although
write-region normally follows a symbolic link and creates the
pointed-to file if the symbolic link is dangling, it does not follow
symbolic links if mustbenew is
The test for an existing file, when mustbenew is
a special system feature. At least for files on a local disk, there is
no chance that some other program could create a file of the same name
before Emacs does, without Emacs’s noticing.
If visit is
t, then Emacs establishes an association
between the buffer and the file: the buffer is then visiting that file.
It also sets the last file modification time for the current buffer to
filename’s modtime, and marks the buffer as not modified. This
feature is used by
save-buffer, but you probably should not use
If visit is a string, it specifies the file name to visit. This
way, you can write the data to one file (filename) while recording
the buffer as visiting another file (visit). The argument
visit is used in the echo area message and also for file locking;
visit is stored in
buffer-file-name. This feature is used
file-precious-flag; don’t use it yourself unless you
really know what you’re doing.
The optional argument lockname, if non-
nil, specifies the
file name to use for purposes of locking and unlocking, overriding
filename and visit for that purpose.
write-region converts the data which it writes to
the appropriate file formats specified by
and also calls the functions in the list
See File Format Conversion.
write-region displays the message ‘Wrote
filename’ in the echo area. This message is inhibited if
visit is neither
nil nor a string, or if
Emacs is operating in batch mode (see Batch Mode). This
feature is useful for programs that use files for internal purposes,
files that the user does not need to know about.
If this variable’s value is
write-region uses the
fsync system call after writing a file. Although this slows
Emacs down, it lessens the risk of data loss after power failure. If
the value is
t, Emacs does not use
fsync. The default
nil when Emacs is interactive, and
t when Emacs
runs in batch mode. See Files and Secondary Storage.
with-temp-file macro evaluates the body forms with a
temporary buffer as the current buffer; then, at the end, it writes the
buffer contents into file file. It kills the temporary buffer
when finished, restoring the buffer that was current before the
with-temp-file form. Then it returns the value of the last form
The current buffer is restored even in case of an abnormal exit via
throw or error (see Nonlocal Exits).
with-temp-buffer (see Current Buffer), the temporary buffer used by this macro does not run
(see Killing Buffers), and
(see The Buffer List).