Next: Credits, Previous: Error Messages, Up: Top [Contents][Index]

## 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!

Next: Credits, Previous: Error Messages, Up: Top [Contents][Index]