forms: Modifying Forms Contents

 
 7 Modifying The Forms Contents
 ******************************
 
 If ‘forms-read-only’ is ‘nil’, the user can modify the fields and
 records of the database.
 
    All normal editing commands are available for editing the contents of
 the displayed record.  You cannot delete or modify the fixed,
 explanatory text that comes from string formatting elements, but you can
 modify the actual field contents.
 
    If the variable ‘forms-modified-record-filter’ is non-‘nil’, it is
 called as a function before the new data is written to the data file.
 The function receives one argument, a vector that contains the contents
 of the fields of the record.
 
    The function can refer to fields with ‘aref’ and modify them with
 ‘aset’.  The first field has number 1 (one); thus, element 0 of the
 vector is not used.  The function should return the same vector it was
 passed; the (possibly modified) contents of the vector determine what is
 actually written in the file.  Here is an example:
 
      (defun my-modified-record-filter (record)
        ;; Modify second field.
        (aset record 2 (current-time-string))
        ;; Return the field vector.
        record)
 
      (setq forms-modified-record-filter 'my-modified-record-filter)
 
    If the variable ‘forms-new-record-filter’ is non-‘nil’, its value is
 a function to be called to fill in default values for the fields of a
 new record.  The function is passed a vector of empty strings, one for
 each field; it should return the same vector, with the desired field
 values stored in it.  Fields are numbered starting from 1 (one).
 Example:
 
      (defun my-new-record-filter (fields)
        (aset fields 5 (login-name))
        (aset fields 1 (current-time-string))
        fields)
 
      (setq forms-new-record-filter 'my-new-record-filter)