forms: Long Example

 
 10 Long Example
 ***************
 
 The following example exploits most of the features of Forms mode.  This
 example is included in the distribution as file ‘etc/forms/forms-d2.el’.
 
      ;; demo2 -- demo forms-mode     -*- emacs-lisp -*-
 
      ;; This sample forms exploit most of the features of forms mode.
 
      ;; Set the name of the data file.
      (setq forms-file
             (expand-file-name "forms/forms-d2.dat" data-directory))
 
      ;; Use ‘forms-enumerate’ to set field names and number thereof.
      (setq forms-number-of-fields
            (forms-enumerate
             '(arch-newsgroup                 ; 1
               arch-volume                    ; 2
               arch-issue                     ; and ...
               arch-article                   ; ... so
               arch-shortname                 ; ... ... on
               arch-parts
               arch-from
               arch-longname
               arch-keywords
               arch-date
               arch-remarks)))
 
      ;; The following functions are used by this form for layout purposes.
      ;;
      (defun arch-tocol (target &optional fill)
        "Produces a string to skip to column TARGET.
      Prepends newline if needed.
      The optional FILL should be a character, used to fill to the column."
        (if (null fill)
            (setq fill ? ))
        (if (< target (current-column))
            (concat "\n" (make-string target fill))
          (make-string (- target (current-column)) fill)))
      ;;
      (defun arch-rj (target field &optional fill)
        "Produces a string to skip to column TARGET\
       minus the width of field FIELD.
      Prepends newline if needed.
      The optional FILL should be a character,
      used to fill to the column."
        (arch-tocol (- target (length (nth field forms-fields))) fill))
 
      ;; Record filters.
      ;;
      (defun new-record-filter (the-record)
        "Form a new record with some defaults."
        (aset the-record arch-from (user-full-name))
        (aset the-record arch-date (current-time-string))
        the-record)                           ; return it
      (setq forms-new-record-filter 'new-record-filter)
 
      ;; The format list.
      (setq forms-format-list
           (list
             "====== Public Domain Software Archive ======\n\n"
             arch-shortname
             " - "                    arch-longname
             "\n\n"
             "Article: "              arch-newsgroup
             "/"                      arch-article
             " "
             '(arch-tocol 40)
             "Issue: "                arch-issue
             " "
             '(arch-rj 73 10)
             "Date: "                 arch-date
             "\n\n"
             "Submitted by: "         arch-from
             "\n"
             '(arch-tocol 79 ?-)
             "\n"
             "Keywords: "             arch-keywords
             "\n\n"
             "Parts: "                arch-parts
             "\n\n====== Remarks ======\n\n"
             arch-remarks
           ))
 
      ;; That’s all, folks!