1;;; forms-d2.el --- demo forms-mode -*- no-byte-compile: t -*-
2
3;; Copyright (C) 1991, 1994, 1995, 1996, 1997, 2001, 2002, 2003,
4;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
5
6;; Author: Johan Vromans <jvromans@squirrel.nl>
7;; Created: 1989
8
9;; This file is part of GNU Emacs.
10
11;;; Commentary:
12
13;; This sample forms exploit most of the features of forms mode.
14
15;;; Code:
16
17;; Set the name of the data file.
18(setq forms-file "forms-d2.dat")
19
20;; Use 'forms-enumerate' to set field names and number thereof.
21(setq forms-number-of-fields
22      (forms-enumerate
23       '(arch-newsgroup			; 1
24	 arch-volume			; 2
25	 arch-issue			; and ...
26	 arch-article			; ... so
27	 arch-shortname			; ... ... on
28	 arch-parts
29	 arch-from
30	 arch-longname
31	 arch-keywords
32	 arch-date
33	 arch-remarks)))
34
35;; The following functions are used by this form for layout purposes.
36;;
37(defun arch-tocol (target &optional fill)
38  "Produces a string to skip to column TARGET.  Prepends newline if needed.
39The optional FILL should be a character, used to fill to the column."
40  (if (null fill)
41      (setq fill ?\s))
42  (if (< target (current-column))
43      (concat "\n" (make-string target fill))
44    (make-string (- target (current-column)) fill)))
45;;
46(defun arch-rj (target field &optional fill)
47  "Produces a string to skip to column TARGET minus the width of field FIELD.
48Prepends newline if needed.  The optional FILL should be a character,
49used to fill to the column."
50  (arch-tocol (- target (length (nth field forms-fields))) fill))
51
52;; Record filters.
53;;
54(defun arch-new-record-filter (the-record)
55  "Form a new record with some defaults."
56  (aset the-record arch-from (user-full-name))
57  (aset the-record arch-date (current-time-string))
58  the-record				; return it
59)
60(setq forms-new-record-filter 'arch-new-record-filter)
61
62;; The format list.
63(setq forms-format-list
64     (list
65       "====== Public Domain Software Archive ======\n\n"
66       arch-shortname
67       " - "			arch-longname
68       "\n\n"
69       "Article: "		arch-newsgroup
70       "/"			arch-article
71       " "
72       '(arch-tocol 40)
73       "Issue: "		arch-issue
74       " "
75       '(arch-rj 73 10)
76       "Date: "			arch-date
77       "\n\n"
78       "Submitted by: "		arch-from
79       "\n"
80       '(arch-tocol 79 ?-)
81       "\n"
82       "Keywords: "		arch-keywords
83       "\n\n"
84       "Parts: "		arch-parts
85       "\n\n====== Remarks ======\n\n"
86       arch-remarks
87     ))
88
89;; That's all, folks!
90
91;;; arch-tag: 8e5d5dac-7abf-4722-ab5e-03eb749beaca
92;;; forms-d2.el ends here
93