forms: Control File Format

 
 5 Control File Format
 *********************
 
 The Forms mode “control file” serves two purposes.  First, it names the
 data file to use, and defines its format and properties.  Second, the
 Emacs buffer it occupies is used by Forms mode to display the forms.
 
    The contents of the control file are evaluated as a Lisp program.  It
 should set the following Lisp variables to suitable values:
 
 ‘forms-file’
      This variable specifies the name of the data file.  Example:
 
           (setq forms-file "my/data-file")
 
      If the control file doesn’t set ‘forms-file’, Forms mode reports an
      error.
 
 ‘forms-format-list’
      This variable describes the way the fields of the record are
      formatted on the screen.  For details, see SeeFormat
      Description.
 
 ‘forms-number-of-fields’
      This variable holds the number of fields in each record of the data
      file.  Example:
 
           (setq forms-number-of-fields 10)
 
    If the control file does not set ‘forms-format-list’ a default format
 is used.  In this situation, Forms mode will deduce the number of fields
 from the data file providing this file exists and
 ‘forms-number-of-records’ has not been set in the control file.
 
    The control file can optionally set the following additional Forms
 mode variables.  Most of them have default values that are good for most
 applications.
 
 ‘forms-field-sep’
      This variable may be used to designate the string which separates
      the fields in the records of the data file.  If not set, it
      defaults to the string ‘"\t"’ (a Tab character).  Example:
 
           (setq forms-field-sep "\t")
 
 ‘forms-read-only’
      If the value is non-‘nil’, the data file is treated read-only.
      (Forms mode also treats the data file as read-only if you don’t
      have access to write it.)  Example:
 
           (set forms-read-only t)
 
 ‘forms-multi-line’
      This variable specifies the “pseudo newline” separator that allows
      multi-line fields.  This separator goes between the “lines” within
      a field—thus, the field doesn’t really contain multiple lines, but
      it appears that way when displayed in Forms mode.  If the value is
      ‘nil’, multi-line text fields are prohibited.  The pseudo newline
      must not be a character contained in ‘forms-field-sep’.
 
      The default value is ‘"\^k"’, the character Control-K.  Example:
 
           (setq forms-multi-line "\^k")
 
 ‘forms-read-file-filter’
      This variable holds the name of a function to be called after the
      data file has been read in.  This can be used to transform the
      contents of the data file into a format more suitable for forms
      processing.  If it is ‘nil’, no function is called.  For example,
      to maintain a gzipped database:
 
           (defun gzip-read-file-filter ()
             (shell-command-on-region (point-min) (point-max)
                                      "gzip -d" t t))
           (setq forms-read-file-filter 'gzip-read-file-filter)
 
 ‘forms-write-file-filter’
      This variable holds the name of a function to be called before
      writing out the contents of the data file.  This can be used to
      undo the effects of ‘forms-read-file-filter’.  If it is ‘nil’, no
      function is called.  Example:
 
           (defun gzip-write-file-filter ()
             (make-variable-buffer-local 'require-final-newline)
             (setq require-final-newline nil)
             (shell-command-on-region (point-min) (point-max)
                                      "gzip" t t))
           (setq forms-write-file-filter 'gzip-write-file-filter)
 
 ‘forms-new-record-filter’
      This variable holds a function to be called whenever a new record
      is created to supply default values for fields.  If it is ‘nil’, no
      function is called.  SeeModifying Forms Contents, for details.
 
 ‘forms-modified-record-filter’
      This variable holds a function to be called whenever a record is
      modified, just before updating the Forms data file.  If it is
      ‘nil’, no function is called.  SeeModifying Forms Contents,
      for details.
 
 ‘forms-insert-after’
      If this variable is not ‘nil’, new records are created _after_ the
      current record.  Also, upon visiting a file, the initial position
      will be at the last record instead of the first one.
 
 ‘forms-check-number-of-fields’
      Normally each record is checked to contain the correct number of
      fields.  Under certain circumstances, this can be undesirable.  If
      this variable is set to ‘nil’, these checks will be bypassed.