elisp: Buffer Modification

 
 26.5 Buffer Modification
 ========================
 
 Emacs keeps a flag called the “modified flag” for each buffer, to record
 whether you have changed the text of the buffer.  This flag is set to
 ‘t’ whenever you alter the contents of the buffer, and cleared to ‘nil’
 when you save it.  Thus, the flag shows whether there are unsaved
 changes.  The flag value is normally shown in the mode line (SeeMode
 Line Variables), and controls saving (SeeSaving Buffers) and
 auto-saving (SeeAuto-Saving).
 
    Some Lisp programs set the flag explicitly.  For example, the
 function ‘set-visited-file-name’ sets the flag to ‘t’, because the text
 does not match the newly-visited file, even if it is unchanged from the
 file formerly visited.
 
    The functions that modify the contents of buffers are described in
 SeeText.
 
  -- Function: buffer-modified-p &optional buffer
      This function returns ‘t’ if the buffer BUFFER has been modified
      since it was last read in from a file or saved, or ‘nil’ otherwise.
      If BUFFER is not supplied, the current buffer is tested.
 
  -- Function: set-buffer-modified-p flag
      This function marks the current buffer as modified if FLAG is
      non-‘nil’, or as unmodified if the flag is ‘nil’.
 
      Another effect of calling this function is to cause unconditional
      redisplay of the mode line for the current buffer.  In fact, the
      function ‘force-mode-line-update’ works by doing this:
 
           (set-buffer-modified-p (buffer-modified-p))
 
  -- Function: restore-buffer-modified-p flag
      Like ‘set-buffer-modified-p’, but does not force redisplay of mode
      lines.
 
  -- Command: not-modified &optional arg
      This command marks the current buffer as unmodified, and not
      needing to be saved.  If ARG is non-‘nil’, it marks the buffer as
      modified, so that it will be saved at the next suitable occasion.
      Interactively, ARG is the prefix argument.
 
      Don’t use this function in programs, since it prints a message in
      the echo area; use ‘set-buffer-modified-p’ (above) instead.
 
  -- Function: buffer-modified-tick &optional buffer
      This function returns BUFFER’s modification-count.  This is a
      counter that increments every time the buffer is modified.  If
      BUFFER is ‘nil’ (or omitted), the current buffer is used.  The
      counter can wrap around occasionally.
 
  -- Function: buffer-chars-modified-tick &optional buffer
      This function returns BUFFER’s character-change modification-count.
      Changes to text properties leave this counter unchanged; however,
      each time text is inserted or removed from the buffer, the counter
      is reset to the value that would be returned by
      ‘buffer-modified-tick’.  By comparing the values returned by two
      ‘buffer-chars-modified-tick’ calls, you can tell whether a
      character change occurred in that buffer in between the calls.  If
      BUFFER is ‘nil’ (or omitted), the current buffer is used.