elisp: Read Only Buffers

 
 26.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 inform 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 would probably be 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 themselves 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’.
      However, characters that have the ‘inhibit-read-only’ text property
      can still be modified.  Seeinhibit-read-only Special
      Properties.
 
  -- Variable: inhibit-read-only
      If this variable is non-‘nil’, then read-only buffers and,
      depending on the actual value, some or all read-only characters may
      be modified.  Read-only characters in a buffer are those that have
      a non-‘nil’ ‘read-only’ text property.  SeeSpecial Properties,
      for more information about text 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: read-only-mode &optional arg
      This is the mode command for Read Only minor mode, a buffer-local
      minor mode.  When the mode is enabled, ‘buffer-read-only’ is
      non-‘nil’ in the buffer; when disabled, ‘buffer-read-only’ is ‘nil’
      in the buffer.  The calling convention is the same as for other
      minor mode commands (SeeMinor Mode Conventions).
 
      This minor mode mainly serves as a wrapper for ‘buffer-read-only’;
      unlike most minor modes, there is no separate ‘read-only-mode’
      variable.  Even when Read Only mode is disabled, characters with
      non-‘nil’ ‘read-only’ text properties remain read-only.  To
      temporarily ignore all read-only states, bind ‘inhibit-read-only’,
      as described above.
 
      When enabling Read Only mode, this mode command also enables View
      mode if the option ‘view-read-only’ is non-‘nil’.  See
      Miscellaneous Buffer Operations (emacs)Misc Buffer.  When
      disabling Read Only mode, it disables View mode if View mode was
      enabled.
 
  -- Function: barf-if-buffer-read-only &optional position
      This function signals a ‘buffer-read-only’ error if the current
      buffer is read-only.  If the text at POSITION (which defaults to
      point) has the ‘inhibit-read-only’ text property set, the error
      will not be raised.
 
      SeeUsing Interactive, for another way to signal an error if
      the current buffer is read-only.