PREV UP NEXT GNU Emacs Lisp Reference Manual

24.7: Read-Only Buffers

If a buffer is read-only, then you cannot change its contents, although you may change your view of the contents by scrolling and narrowing.

Read-only buffers are used in two kinds of situations:

  • A buffer visiting a write-protected file is normally read-only.

    Here, the purpose is to show the user that editing the buffer with the aim of saving it in the file may be futile or undesirable. The user who wants to change the buffer text despite this can do so after clearing the read-only flag with C-x C-q.

  • Modes such as Dired and Rmail make buffers read-only when altering the contents with the usual editing commands is probably a mistake.

    The special commands of these modes bind buffer-read-only to nil (with let) or bind inhibit-read-only to t around the places where they change the text.



Variable: buffer-read-only
This buffer-local variable specifies whether the buffer is read-only. The buffer is read-only if this variable is non-nil.
Variable: inhibit-read-only
If this variable is non-nil, then read-only buffers and read-only characters may be modified. Read-only characters in a buffer are those that have non-nil read-only properties (either text properties or overlay properties). See Special Properties, for more information about text properties. See Overlays, for more information about overlays and their properties.

If inhibit-read-only is t, all read-only character properties have no effect. If inhibit-read-only is a list, then read-only character properties have no effect if they are members of the list (comparison is done with eq).

Command: toggle-read-only
This command changes whether the current buffer is read-only. It is intended for interactive use; don't use it in programs. At any given point in a program, you should know whether you want the read-only flag on or off; so you can set buffer-read-only explicitly to the proper value, t or nil.
Function: barf-if-buffer-read-only
This function signals a buffer-read-only error if the current buffer is read-only. See Interactive Call, for another way to signal an error if the current buffer is read-only.