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:
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.
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.
This buffer-local variable specifies whether the buffer is read-only. The buffer is read-only if this variable is non-
nil.
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-nilread-onlyproperties (either text properties or extent properties). See Extent Properties, for more information about text properties and extent properties.If
inhibit-read-onlyist, allread-onlycharacter properties have no effect. Ifinhibit-read-onlyis a list, thenread-onlycharacter properties have no effect if they are members of the list (comparison is done witheq).
This command changes whether the current buffer is read-only. Interactively, if a prefix arg arg is supplied, set the current buffer read only if and only if arg is positive.
This command is intended for interactive use only; 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-onlyexplicitly to the proper value,tornil.
This function signals a
buffer-read-onlyerror if buffer is read-only. buffer defaults to the current buffer. See Interactive Call, for another way to signal an error if the current buffer is read-only.If optional argument start is non-
nil, all extents in the buffer which overlap that part of the buffer are checked to ensure none has aread-onlyproperty. (Extents that lie completely within the range, however, are not checked.) end defaults to the value of start.If start and end are equal, the range checked is [start, end] (i.e. closed on both ends); otherwise, the range checked is (start, end) \(open on both ends), except that extents that lie completely within [start, end] are not checked. See
extent-in-region-pfor a fuller discussion.