annotate man/forms.texi @ 76022:e892213b9815

(w32_set_scroll_bar_thumb): Don't resize scroll-bar handle while dragging, except when we get close to eob. Fix position and size calculations so we don't scroll backwards just by clicking on the handle.
author Kim F. Storm <storm@cua.dk>
date Mon, 19 Feb 2007 14:45:39 +0000
parents 3d45362f1d38
children 88224dc74061 95d0cdf160ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1 \input texinfo @c -*-texinfo-*-
Dave Love <fx@gnu.org>
parents:
diff changeset
2 @c documentation for forms-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
3 @c Written by Johan Vromans, and edited by Richard Stallman
Dave Love <fx@gnu.org>
parents:
diff changeset
4
Dave Love <fx@gnu.org>
parents:
diff changeset
5 @comment %**start of header (This is for running Texinfo on a region.)
Dave Love <fx@gnu.org>
parents:
diff changeset
6 @setfilename ../info/forms
Dave Love <fx@gnu.org>
parents:
diff changeset
7 @settitle Forms Mode User's Manual
Dave Love <fx@gnu.org>
parents:
diff changeset
8 @syncodeindex vr cp
Dave Love <fx@gnu.org>
parents:
diff changeset
9 @syncodeindex fn cp
Dave Love <fx@gnu.org>
parents:
diff changeset
10 @syncodeindex ky cp
Dave Love <fx@gnu.org>
parents:
diff changeset
11 @iftex
Dave Love <fx@gnu.org>
parents:
diff changeset
12 @finalout
Dave Love <fx@gnu.org>
parents:
diff changeset
13 @setchapternewpage odd
Dave Love <fx@gnu.org>
parents:
diff changeset
14 @end iftex
Dave Love <fx@gnu.org>
parents:
diff changeset
15 @c @smallbook
Dave Love <fx@gnu.org>
parents:
diff changeset
16 @comment %**end of header (This is for running Texinfo on a region.)
Dave Love <fx@gnu.org>
parents:
diff changeset
17
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
18 @copying
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
19 This file documents Forms mode, a form-editing major mode for GNU Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
20
69681
11b616eddda4 @copyright{}, no indentation in @copying{}
Karl Berry <karl@gnu.org>
parents: 68639
diff changeset
21 Copyright @copyright{} 1989, 1997, 2001, 2002, 2003, 2004,
75348
3d45362f1d38 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 72101
diff changeset
22 2005, 2006, 2007 Free Software Foundation, Inc.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
23
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
24 @quotation
37404
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
25 Permission is granted to copy, distribute and/or modify this document
65555
69b3598a61c5 Update all manuals to specify GFDL version 1.2.
Romain Francoise <romain@orebokech.com>
parents: 64890
diff changeset
26 under the terms of the GNU Free Documentation License, Version 1.2 or
37404
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
27 any later version published by the Free Software Foundation; with no
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
28 Invariant Sections, with the Front-Cover texts being ``A GNU
72101
c7e4f78b81a6 Move periods and commas inside quotes.
Richard M. Stallman <rms@gnu.org>
parents: 69681
diff changeset
29 Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the
37404
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
30 license is included in the section entitled ``GNU Free Documentation
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
31 License'' in the Emacs manual.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
32
37404
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
33 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
34 this GNU Manual, like GNU software. Copies published by the Free
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
35 Software Foundation raise funds for GNU development.''
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
36
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
37 This document is part of a collection distributed under the GNU Free
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
38 Documentation License. If you want to distribute this document
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
39 separately from the collection, you can do so by adding a copy of the
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
40 license to the document, as described in section 6 of the license.
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
41 @end quotation
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
42 @end copying
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
43
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
44 @dircategory Emacs
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
45 @direntry
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
46 * Forms: (forms). Emacs package for editing data bases
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
47 by filling in forms.
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
48 @end direntry
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
49
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
50 @titlepage
Dave Love <fx@gnu.org>
parents:
diff changeset
51 @sp 6
Dave Love <fx@gnu.org>
parents:
diff changeset
52 @center @titlefont{Forms Mode User's Manual}
Dave Love <fx@gnu.org>
parents:
diff changeset
53 @sp 4
Dave Love <fx@gnu.org>
parents:
diff changeset
54 @center Forms-Mode version 2
Dave Love <fx@gnu.org>
parents:
diff changeset
55 @sp 1
Dave Love <fx@gnu.org>
parents:
diff changeset
56 @center for GNU Emacs 20.1
Dave Love <fx@gnu.org>
parents:
diff changeset
57 @sp 1
Dave Love <fx@gnu.org>
parents:
diff changeset
58 @center June 1997
Dave Love <fx@gnu.org>
parents:
diff changeset
59 @sp 5
Dave Love <fx@gnu.org>
parents:
diff changeset
60 @center Johan Vromans
Dave Love <fx@gnu.org>
parents:
diff changeset
61 @center @i{jvromans@@squirrel.nl}
Dave Love <fx@gnu.org>
parents:
diff changeset
62 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
63 @vskip 0pt plus 1filll
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
64 @insertcopying
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
65 @end titlepage
37404
730f77edf073 Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents: 30009
diff changeset
66
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
67 @ifnottex
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
68 @node Top
Dave Love <fx@gnu.org>
parents:
diff changeset
69 @top Forms Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
70
Dave Love <fx@gnu.org>
parents:
diff changeset
71 Forms mode is an Emacs major mode for working with simple textual data
Dave Love <fx@gnu.org>
parents:
diff changeset
72 bases in a forms-oriented manner. In Forms mode, the information in
Dave Love <fx@gnu.org>
parents:
diff changeset
73 these files is presented in an Emacs window in a user-defined format,
Dave Love <fx@gnu.org>
parents:
diff changeset
74 one record at a time. The user can view records or modify their
Dave Love <fx@gnu.org>
parents:
diff changeset
75 contents.
Dave Love <fx@gnu.org>
parents:
diff changeset
76
Dave Love <fx@gnu.org>
parents:
diff changeset
77 Forms mode is not a simple major mode, but requires two files to do its
Dave Love <fx@gnu.org>
parents:
diff changeset
78 job: a control file and a data file. The data file holds the
Dave Love <fx@gnu.org>
parents:
diff changeset
79 actual data to be presented. The control file describes
Dave Love <fx@gnu.org>
parents:
diff changeset
80 how to present it.
Dave Love <fx@gnu.org>
parents:
diff changeset
81
Dave Love <fx@gnu.org>
parents:
diff changeset
82 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
83 * Forms Example:: An example: editing the password data base.
Dave Love <fx@gnu.org>
parents:
diff changeset
84 * Entering and Exiting Forms Mode::
Dave Love <fx@gnu.org>
parents:
diff changeset
85 How to visit a file in Forms mode.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
86 * Forms Commands:: Special commands to use while in Forms mode.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
87 * Data File Format:: How to format the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
88 * Control File Format:: How to control forms mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
89 * Format Description:: How to define the forms layout.
Dave Love <fx@gnu.org>
parents:
diff changeset
90 * Modifying Forms Contents:: How to modify.
Dave Love <fx@gnu.org>
parents:
diff changeset
91 * Miscellaneous:: Forms mode messages and other remarks.
Dave Love <fx@gnu.org>
parents:
diff changeset
92 * Error Messages:: List of error messages forms mode can produce.
Dave Love <fx@gnu.org>
parents:
diff changeset
93 * Long Example:: A more complex control file example.
Dave Love <fx@gnu.org>
parents:
diff changeset
94 * Credits:: Thanks everyone.
Dave Love <fx@gnu.org>
parents:
diff changeset
95 * Index:: Index to this manual.
Dave Love <fx@gnu.org>
parents:
diff changeset
96 @end menu
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
97 @end ifnottex
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
98
Dave Love <fx@gnu.org>
parents:
diff changeset
99 @node Forms Example
Dave Love <fx@gnu.org>
parents:
diff changeset
100 @chapter Forms Example
Dave Love <fx@gnu.org>
parents:
diff changeset
101
Dave Love <fx@gnu.org>
parents:
diff changeset
102 Let's illustrate Forms mode with an example. Suppose you are looking at
Dave Love <fx@gnu.org>
parents:
diff changeset
103 the @file{/etc/passwd} file, and the screen looks like this:
Dave Love <fx@gnu.org>
parents:
diff changeset
104
Dave Love <fx@gnu.org>
parents:
diff changeset
105 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
106 ====== /etc/passwd ======
Dave Love <fx@gnu.org>
parents:
diff changeset
107
Dave Love <fx@gnu.org>
parents:
diff changeset
108 User : root Uid: 0 Gid: 1
Dave Love <fx@gnu.org>
parents:
diff changeset
109
Dave Love <fx@gnu.org>
parents:
diff changeset
110 Name : Super User
Dave Love <fx@gnu.org>
parents:
diff changeset
111
Dave Love <fx@gnu.org>
parents:
diff changeset
112 Home : /
Dave Love <fx@gnu.org>
parents:
diff changeset
113
Dave Love <fx@gnu.org>
parents:
diff changeset
114 Shell: /bin/sh
Dave Love <fx@gnu.org>
parents:
diff changeset
115 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
116
Dave Love <fx@gnu.org>
parents:
diff changeset
117 As you can see, the familiar fields from the entry for the super user
Dave Love <fx@gnu.org>
parents:
diff changeset
118 are all there, but instead of being colon-separated on one single line,
Dave Love <fx@gnu.org>
parents:
diff changeset
119 they make up a forms.
Dave Love <fx@gnu.org>
parents:
diff changeset
120
Dave Love <fx@gnu.org>
parents:
diff changeset
121 The contents of the forms consist of the contents of the fields of the
Dave Love <fx@gnu.org>
parents:
diff changeset
122 record (e.g. @samp{root}, @samp{0}, @samp{1}, @samp{Super User})
Dave Love <fx@gnu.org>
parents:
diff changeset
123 interspersed with normal text (e.g @samp{User : }, @samp{Uid: }).
Dave Love <fx@gnu.org>
parents:
diff changeset
124
Dave Love <fx@gnu.org>
parents:
diff changeset
125 If you modify the contents of the fields, Forms mode will analyze your
Dave Love <fx@gnu.org>
parents:
diff changeset
126 changes and update the file appropriately. You cannot modify the
Dave Love <fx@gnu.org>
parents:
diff changeset
127 interspersed explanatory text (unless you go to some trouble about it),
Dave Love <fx@gnu.org>
parents:
diff changeset
128 because that is marked read-only (@pxref{Text Properties,,, elisp, The
Dave Love <fx@gnu.org>
parents:
diff changeset
129 Emacs Lisp Reference Manual}).
Dave Love <fx@gnu.org>
parents:
diff changeset
130
Dave Love <fx@gnu.org>
parents:
diff changeset
131 The Forms mode control file specifies the relationship between the
Dave Love <fx@gnu.org>
parents:
diff changeset
132 format of @file{/etc/passwd} and what appears on the screen in Forms
Dave Love <fx@gnu.org>
parents:
diff changeset
133 mode. @xref{Control File Format}.
Dave Love <fx@gnu.org>
parents:
diff changeset
134
Dave Love <fx@gnu.org>
parents:
diff changeset
135 @node Entering and Exiting Forms Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
136 @chapter Entering and Exiting Forms Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
137
Dave Love <fx@gnu.org>
parents:
diff changeset
138 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
139 @findex forms-find-file
Dave Love <fx@gnu.org>
parents:
diff changeset
140 @item M-x forms-find-file @key{RET} @var{control-file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
141 Visit a database using Forms mode. Specify the name of the
Dave Love <fx@gnu.org>
parents:
diff changeset
142 @strong{control file}, not the data file!
Dave Love <fx@gnu.org>
parents:
diff changeset
143
Dave Love <fx@gnu.org>
parents:
diff changeset
144 @findex forms-find-file-other-window
Dave Love <fx@gnu.org>
parents:
diff changeset
145 @item M-x forms-find-file-other-window @key{RET} @var{control-file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
146 Similar, but displays the file in another window.
Dave Love <fx@gnu.org>
parents:
diff changeset
147 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
148
Dave Love <fx@gnu.org>
parents:
diff changeset
149 The command @code{forms-find-file} evaluates the file
Dave Love <fx@gnu.org>
parents:
diff changeset
150 @var{control-file}, and also visits it in Forms mode. What you see in
Dave Love <fx@gnu.org>
parents:
diff changeset
151 its buffer is not the contents of this file, but rather a single record
Dave Love <fx@gnu.org>
parents:
diff changeset
152 of the corresponding data file that is visited in its own buffer. So
Dave Love <fx@gnu.org>
parents:
diff changeset
153 there are two buffers involved in Forms mode: the @dfn{forms buffer}
Dave Love <fx@gnu.org>
parents:
diff changeset
154 that is initially used to visit the control file and that shows the
Dave Love <fx@gnu.org>
parents:
diff changeset
155 records being browsed, and the @dfn{data buffer} that holds the data
Dave Love <fx@gnu.org>
parents:
diff changeset
156 file being visited. The latter buffer is normally not visible.
Dave Love <fx@gnu.org>
parents:
diff changeset
157
Dave Love <fx@gnu.org>
parents:
diff changeset
158 Initially, the first record is displayed in the forms buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
159 The mode line displays the major mode name @samp{Forms}, followed by the
Dave Love <fx@gnu.org>
parents:
diff changeset
160 minor mode @samp{View} if the data base is read-only. The number of the
Dave Love <fx@gnu.org>
parents:
diff changeset
161 current record (@var{n}) and the total number of records in the
Dave Love <fx@gnu.org>
parents:
diff changeset
162 file(@var{t}) are shown in the mode line as @samp{@var{n}/@var{t}}. For
Dave Love <fx@gnu.org>
parents:
diff changeset
163 example:
Dave Love <fx@gnu.org>
parents:
diff changeset
164
Dave Love <fx@gnu.org>
parents:
diff changeset
165 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
166 --%%-Emacs: passwd-demo (Forms View 1/54)----All-------
Dave Love <fx@gnu.org>
parents:
diff changeset
167 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
168
Dave Love <fx@gnu.org>
parents:
diff changeset
169 If the buffer is not read-only, you may change the buffer to modify the
Dave Love <fx@gnu.org>
parents:
diff changeset
170 fields in the record. When you move to a different record, the contents
Dave Love <fx@gnu.org>
parents:
diff changeset
171 of the buffer are parsed using the specifications in
Dave Love <fx@gnu.org>
parents:
diff changeset
172 @code{forms-format-list}, and the data file is updated. If the record
Dave Love <fx@gnu.org>
parents:
diff changeset
173 has fields that aren't included in the display, they are not changed.
Dave Love <fx@gnu.org>
parents:
diff changeset
174
Dave Love <fx@gnu.org>
parents:
diff changeset
175 @vindex forms-mode-hooks
Dave Love <fx@gnu.org>
parents:
diff changeset
176 Entering Forms mode runs the normal hook @code{forms-mode-hooks} to
Dave Love <fx@gnu.org>
parents:
diff changeset
177 perform user-defined customization.
Dave Love <fx@gnu.org>
parents:
diff changeset
178
Dave Love <fx@gnu.org>
parents:
diff changeset
179 To save any modified data, you can use @kbd{C-x C-s}
Dave Love <fx@gnu.org>
parents:
diff changeset
180 (@code{forms-save-buffer}). This does not save the forms buffer (which would
Dave Love <fx@gnu.org>
parents:
diff changeset
181 be rather useless), but instead saves the buffer visiting the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
182
Dave Love <fx@gnu.org>
parents:
diff changeset
183 To terminate Forms mode, you can use @kbd{C-x C-s} (@code{forms-save-buffer})
Dave Love <fx@gnu.org>
parents:
diff changeset
184 and then kill the forms buffer. However, the data buffer will still
Dave Love <fx@gnu.org>
parents:
diff changeset
185 remain. If this is not desired, you have to kill this buffer too.
Dave Love <fx@gnu.org>
parents:
diff changeset
186
Dave Love <fx@gnu.org>
parents:
diff changeset
187 @node Forms Commands
Dave Love <fx@gnu.org>
parents:
diff changeset
188 @chapter Forms Commands
Dave Love <fx@gnu.org>
parents:
diff changeset
189
Dave Love <fx@gnu.org>
parents:
diff changeset
190 The commands of Forms mode belong to the @kbd{C-c} prefix, with one
Dave Love <fx@gnu.org>
parents:
diff changeset
191 exception: @key{TAB}, which moves to the next field. Forms mode uses
Dave Love <fx@gnu.org>
parents:
diff changeset
192 different key maps for normal mode and read-only mode. In read-only
Dave Love <fx@gnu.org>
parents:
diff changeset
193 Forms mode, you can access most of the commands without the @kbd{C-c}
Dave Love <fx@gnu.org>
parents:
diff changeset
194 prefix, but you must type ordinary letters instead of control
Dave Love <fx@gnu.org>
parents:
diff changeset
195 characters; for example, type @kbd{n} instead of @kbd{C-c C-n}.
Dave Love <fx@gnu.org>
parents:
diff changeset
196
Dave Love <fx@gnu.org>
parents:
diff changeset
197 If your Emacs has been built with X-toolkit support, Forms mode will
Dave Love <fx@gnu.org>
parents:
diff changeset
198 provide its own menu with a number of Forms mode commands.
Dave Love <fx@gnu.org>
parents:
diff changeset
199
Dave Love <fx@gnu.org>
parents:
diff changeset
200 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
201 @findex forms-next-record
Dave Love <fx@gnu.org>
parents:
diff changeset
202 @kindex C-c C-n
Dave Love <fx@gnu.org>
parents:
diff changeset
203 @item C-c C-n
Dave Love <fx@gnu.org>
parents:
diff changeset
204 Show the next record (@code{forms-next-record}). With a numeric
Dave Love <fx@gnu.org>
parents:
diff changeset
205 argument @var{n}, show the @var{n}th next record.
Dave Love <fx@gnu.org>
parents:
diff changeset
206
Dave Love <fx@gnu.org>
parents:
diff changeset
207 @findex forms-prev-record
Dave Love <fx@gnu.org>
parents:
diff changeset
208 @kindex C-c C-p
Dave Love <fx@gnu.org>
parents:
diff changeset
209 @item C-c C-p
Dave Love <fx@gnu.org>
parents:
diff changeset
210 Show the previous record (@code{forms-prev-record}). With a numeric
Dave Love <fx@gnu.org>
parents:
diff changeset
211 argument @var{n}, show the @var{n}th previous record.
Dave Love <fx@gnu.org>
parents:
diff changeset
212
Dave Love <fx@gnu.org>
parents:
diff changeset
213 @findex forms-jump-record
Dave Love <fx@gnu.org>
parents:
diff changeset
214 @kindex C-c C-l
Dave Love <fx@gnu.org>
parents:
diff changeset
215 @item C-c C-l
Dave Love <fx@gnu.org>
parents:
diff changeset
216 Jump to a record by number (@code{forms-jump-record}). Specify
Dave Love <fx@gnu.org>
parents:
diff changeset
217 the record number with a numeric argument.
Dave Love <fx@gnu.org>
parents:
diff changeset
218
Dave Love <fx@gnu.org>
parents:
diff changeset
219 @findex forms-first-record
Dave Love <fx@gnu.org>
parents:
diff changeset
220 @kindex C-c <
Dave Love <fx@gnu.org>
parents:
diff changeset
221 @item C-c <
Dave Love <fx@gnu.org>
parents:
diff changeset
222 Jump to the first record (@code{forms-first-record}).
Dave Love <fx@gnu.org>
parents:
diff changeset
223
Dave Love <fx@gnu.org>
parents:
diff changeset
224 @findex forms-last-record
Dave Love <fx@gnu.org>
parents:
diff changeset
225 @kindex C-c >
Dave Love <fx@gnu.org>
parents:
diff changeset
226 @item C-c >
Dave Love <fx@gnu.org>
parents:
diff changeset
227 Jump to the last record (@code{forms-last-record}). This command also
Dave Love <fx@gnu.org>
parents:
diff changeset
228 recalculates the number of records in the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
229
Dave Love <fx@gnu.org>
parents:
diff changeset
230 @findex forms-next-field
Dave Love <fx@gnu.org>
parents:
diff changeset
231 @kindex TAB
Dave Love <fx@gnu.org>
parents:
diff changeset
232 @item @key{TAB}
Dave Love <fx@gnu.org>
parents:
diff changeset
233 @kindex C-c TAB
Dave Love <fx@gnu.org>
parents:
diff changeset
234 @itemx C-c @key{TAB}
Dave Love <fx@gnu.org>
parents:
diff changeset
235 Jump to the next field in the current record (@code{forms-next-field}).
Dave Love <fx@gnu.org>
parents:
diff changeset
236 With a numeric argument @var{n}, jump forward @var{n} fields. If this command
Dave Love <fx@gnu.org>
parents:
diff changeset
237 would move past the last field, it wraps around to the first field.
Dave Love <fx@gnu.org>
parents:
diff changeset
238
Dave Love <fx@gnu.org>
parents:
diff changeset
239 @findex forms-toggle-read-only
Dave Love <fx@gnu.org>
parents:
diff changeset
240 @kindex C-c C-q
Dave Love <fx@gnu.org>
parents:
diff changeset
241 @item C-c C-q
Dave Love <fx@gnu.org>
parents:
diff changeset
242 Toggles read-only mode (@code{forms-toggle-read-only}). In read-only
Dave Love <fx@gnu.org>
parents:
diff changeset
243 Forms mode, you cannot edit the fields; most Forms mode commands can be
Dave Love <fx@gnu.org>
parents:
diff changeset
244 accessed without the prefix @kbd{C-c} if you use the normal letter
Dave Love <fx@gnu.org>
parents:
diff changeset
245 instead (for example, type @kbd{n} instead of @kbd{C-c C-n}). In edit
Dave Love <fx@gnu.org>
parents:
diff changeset
246 mode, you can edit the fields and thus change the contents of the data
Dave Love <fx@gnu.org>
parents:
diff changeset
247 base; you must begin Forms mode commands with @code{C-c}. Switching
Dave Love <fx@gnu.org>
parents:
diff changeset
248 to edit mode is allowed only if you have write access to the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
249
Dave Love <fx@gnu.org>
parents:
diff changeset
250 @findex forms-insert-record
Dave Love <fx@gnu.org>
parents:
diff changeset
251 @kindex C-c C-o
Dave Love <fx@gnu.org>
parents:
diff changeset
252 @item C-c C-o
Dave Love <fx@gnu.org>
parents:
diff changeset
253 Create a new record and insert it before the current record
Dave Love <fx@gnu.org>
parents:
diff changeset
254 (@code{forms-insert-record}). It starts out with empty (or default)
Dave Love <fx@gnu.org>
parents:
diff changeset
255 contents for its fields; you can then edit the fields. With a numeric
Dave Love <fx@gnu.org>
parents:
diff changeset
256 argument, the new record is created @emph{after} the current one.
Dave Love <fx@gnu.org>
parents:
diff changeset
257 See also @code{forms-modified-record-filter} in @ref{Modifying Forms
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
258 Contents}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
259
Dave Love <fx@gnu.org>
parents:
diff changeset
260 @findex forms-delete-record
Dave Love <fx@gnu.org>
parents:
diff changeset
261 @kindex C-c C-k
Dave Love <fx@gnu.org>
parents:
diff changeset
262 @item C-c C-k
Dave Love <fx@gnu.org>
parents:
diff changeset
263 Delete the current record (@code{forms-delete-record}). You are
Dave Love <fx@gnu.org>
parents:
diff changeset
264 prompted for confirmation before the record is deleted unless a numeric
Dave Love <fx@gnu.org>
parents:
diff changeset
265 argument has been provided.
Dave Love <fx@gnu.org>
parents:
diff changeset
266
Dave Love <fx@gnu.org>
parents:
diff changeset
267 @findex forms-search-forward
Dave Love <fx@gnu.org>
parents:
diff changeset
268 @kindex C-c C-s @var{regexp} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
269 @item C-c C-s @var{regexp} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
270 Search forward for @var{regexp} in all records following this one
Dave Love <fx@gnu.org>
parents:
diff changeset
271 (@code{forms-search-forward}). If found, this record is shown.
Dave Love <fx@gnu.org>
parents:
diff changeset
272 If you give an empty argument, the previous regexp is used again.
Dave Love <fx@gnu.org>
parents:
diff changeset
273
Dave Love <fx@gnu.org>
parents:
diff changeset
274 @findex forms-search-backward
Dave Love <fx@gnu.org>
parents:
diff changeset
275 @kindex C-c C-r @var{regexp} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
276 @item C-c C-r @var{regexp} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
277 Search backward for @var{regexp} in all records following this one
Dave Love <fx@gnu.org>
parents:
diff changeset
278 (@code{forms-search-backward}). If found, this record is shown.
Dave Love <fx@gnu.org>
parents:
diff changeset
279 If you give an empty argument, the previous regexp is used again.
Dave Love <fx@gnu.org>
parents:
diff changeset
280
Dave Love <fx@gnu.org>
parents:
diff changeset
281 @ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
282 @findex forms-exit
Dave Love <fx@gnu.org>
parents:
diff changeset
283 @kindex C-c C-x
Dave Love <fx@gnu.org>
parents:
diff changeset
284 @item C-c C-x
Dave Love <fx@gnu.org>
parents:
diff changeset
285 Terminate Forms mode processing (@code{forms-exit}). The data file is
Dave Love <fx@gnu.org>
parents:
diff changeset
286 saved if it has been modified.
Dave Love <fx@gnu.org>
parents:
diff changeset
287
Dave Love <fx@gnu.org>
parents:
diff changeset
288 @findex forms-exit-no-save
Dave Love <fx@gnu.org>
parents:
diff changeset
289 @item M-x forms-exit-no-save
Dave Love <fx@gnu.org>
parents:
diff changeset
290 Terminates forms mode processing without saving modified data first.
Dave Love <fx@gnu.org>
parents:
diff changeset
291 @end ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
292
Dave Love <fx@gnu.org>
parents:
diff changeset
293 @findex forms-prev-field
Dave Love <fx@gnu.org>
parents:
diff changeset
294 @item M-x forms-prev-field
Dave Love <fx@gnu.org>
parents:
diff changeset
295 Similar to @code{forms-next-field} but moves backwards.
Dave Love <fx@gnu.org>
parents:
diff changeset
296
Dave Love <fx@gnu.org>
parents:
diff changeset
297 @findex forms-save-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
298 @item M-x forms-save-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
299 @kindex C-x C-s
Dave Love <fx@gnu.org>
parents:
diff changeset
300 @itemx C-x C-s
Dave Love <fx@gnu.org>
parents:
diff changeset
301 Forms mode replacement for @code{save-buffer}. When executed in the
Dave Love <fx@gnu.org>
parents:
diff changeset
302 forms buffer it will save the contents of the (modified) data buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
303 instead. In Forms mode this function will be bound to @kbd{C-x C-s}.
Dave Love <fx@gnu.org>
parents:
diff changeset
304
Dave Love <fx@gnu.org>
parents:
diff changeset
305 @findex forms-print
Dave Love <fx@gnu.org>
parents:
diff changeset
306 @item M-x forms-print
Dave Love <fx@gnu.org>
parents:
diff changeset
307 This command can be used to make a formatted print
Dave Love <fx@gnu.org>
parents:
diff changeset
308 of the contents of the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
309
Dave Love <fx@gnu.org>
parents:
diff changeset
310 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
311
Dave Love <fx@gnu.org>
parents:
diff changeset
312 In addition the command @kbd{M-x revert-buffer} is useful in Forms mode
Dave Love <fx@gnu.org>
parents:
diff changeset
313 just as in other modes.
Dave Love <fx@gnu.org>
parents:
diff changeset
314
Dave Love <fx@gnu.org>
parents:
diff changeset
315 @ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
316 @vindex forms-forms-scroll
Dave Love <fx@gnu.org>
parents:
diff changeset
317 @findex scroll-up
Dave Love <fx@gnu.org>
parents:
diff changeset
318 @findex scroll-down
Dave Love <fx@gnu.org>
parents:
diff changeset
319 If the variable @code{forms-forms-scrolls} is set to a value other
Dave Love <fx@gnu.org>
parents:
diff changeset
320 than @code{nil} (which it is, by default), the Emacs functions
Dave Love <fx@gnu.org>
parents:
diff changeset
321 @code{scroll-up} and @code{scroll-down} will perform a
Dave Love <fx@gnu.org>
parents:
diff changeset
322 @code{forms-next-record} and @code{forms-prev-record} when in forms
46918
82d113655734 Minor spelling and grammar corrections.
Paul Eggert <eggert@twinsun.com>
parents: 37404
diff changeset
323 mode. So you can use your favorite page commands to page through the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
324 data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
325
Dave Love <fx@gnu.org>
parents:
diff changeset
326 @vindex forms-forms-jump
Dave Love <fx@gnu.org>
parents:
diff changeset
327 @findex beginning-of-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
328 @findex end-of-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
329 Likewise, if the variable @code{forms-forms-jump} is not @code{nil}
Dave Love <fx@gnu.org>
parents:
diff changeset
330 (which it is, by default), Emacs functions @code{beginning-of-buffer}
Dave Love <fx@gnu.org>
parents:
diff changeset
331 and @code{end-of-buffer} will perform @code{forms-first-record} and
Dave Love <fx@gnu.org>
parents:
diff changeset
332 @code{forms-last-record} when in forms mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
333 @end ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
334
Dave Love <fx@gnu.org>
parents:
diff changeset
335 The following function key definitions are set up in Forms mode
Dave Love <fx@gnu.org>
parents:
diff changeset
336 (whether read-only or not):
Dave Love <fx@gnu.org>
parents:
diff changeset
337
Dave Love <fx@gnu.org>
parents:
diff changeset
338 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
339 @kindex next
Dave Love <fx@gnu.org>
parents:
diff changeset
340 @item next
Dave Love <fx@gnu.org>
parents:
diff changeset
341 forms-next-record
Dave Love <fx@gnu.org>
parents:
diff changeset
342
Dave Love <fx@gnu.org>
parents:
diff changeset
343 @kindex prior
Dave Love <fx@gnu.org>
parents:
diff changeset
344 @item prior
Dave Love <fx@gnu.org>
parents:
diff changeset
345 forms-prev-record
Dave Love <fx@gnu.org>
parents:
diff changeset
346
Dave Love <fx@gnu.org>
parents:
diff changeset
347 @kindex begin
Dave Love <fx@gnu.org>
parents:
diff changeset
348 @item begin
Dave Love <fx@gnu.org>
parents:
diff changeset
349 forms-first-record
Dave Love <fx@gnu.org>
parents:
diff changeset
350
Dave Love <fx@gnu.org>
parents:
diff changeset
351 @kindex end
Dave Love <fx@gnu.org>
parents:
diff changeset
352 @item end
Dave Love <fx@gnu.org>
parents:
diff changeset
353 forms-last-record
Dave Love <fx@gnu.org>
parents:
diff changeset
354
Dave Love <fx@gnu.org>
parents:
diff changeset
355 @kindex S-Tab
Dave Love <fx@gnu.org>
parents:
diff changeset
356 @findex forms-prev-field
Dave Love <fx@gnu.org>
parents:
diff changeset
357 @item S-Tab
Dave Love <fx@gnu.org>
parents:
diff changeset
358 forms-prev-field
Dave Love <fx@gnu.org>
parents:
diff changeset
359 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
360
Dave Love <fx@gnu.org>
parents:
diff changeset
361 @node Data File Format
Dave Love <fx@gnu.org>
parents:
diff changeset
362 @chapter Data File Format
Dave Love <fx@gnu.org>
parents:
diff changeset
363
Dave Love <fx@gnu.org>
parents:
diff changeset
364 @cindex record
Dave Love <fx@gnu.org>
parents:
diff changeset
365 @cindex field
Dave Love <fx@gnu.org>
parents:
diff changeset
366 @vindex forms-field-sep
Dave Love <fx@gnu.org>
parents:
diff changeset
367 Files for use with Forms mode are very simple---each @dfn{record}
Dave Love <fx@gnu.org>
parents:
diff changeset
368 (usually one line) forms the contents of one form. Each record consists
Dave Love <fx@gnu.org>
parents:
diff changeset
369 of a number of @dfn{fields}, which are separated by the value of the
Dave Love <fx@gnu.org>
parents:
diff changeset
370 string @code{forms-field-sep}, which is @code{"\t"} (a Tab) by default.
Dave Love <fx@gnu.org>
parents:
diff changeset
371
Dave Love <fx@gnu.org>
parents:
diff changeset
372 @vindex forms-read-file-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
373 @vindex forms-write-file-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
374 If the format of the data file is not suitable enough you can define the
Dave Love <fx@gnu.org>
parents:
diff changeset
375 filter functions @code{forms-read-file-filter} and
Dave Love <fx@gnu.org>
parents:
diff changeset
376 @code{forms-write-file-filter}. @code{forms-read-file-filter} is called
Dave Love <fx@gnu.org>
parents:
diff changeset
377 when the data file is read from disk into the data buffer. It operates
Dave Love <fx@gnu.org>
parents:
diff changeset
378 on the data buffer, ignoring read-only protections. When the data file
Dave Love <fx@gnu.org>
parents:
diff changeset
379 is saved to disk @code{forms-write-file-filter} is called to cancel the
Dave Love <fx@gnu.org>
parents:
diff changeset
380 effects of @code{forms-read-file-filter}. After being saved,
Dave Love <fx@gnu.org>
parents:
diff changeset
381 @code{forms-read-file-filter} is called again to prepare the data buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
382 for further processing.
Dave Love <fx@gnu.org>
parents:
diff changeset
383
Dave Love <fx@gnu.org>
parents:
diff changeset
384 @cindex pseudo-newline
Dave Love <fx@gnu.org>
parents:
diff changeset
385 @vindex forms-multi-line
Dave Love <fx@gnu.org>
parents:
diff changeset
386 Fields may contain text which shows up in the forms in multiple lines.
Dave Love <fx@gnu.org>
parents:
diff changeset
387 These lines are separated in the field using a ``pseudo-newline''
Dave Love <fx@gnu.org>
parents:
diff changeset
388 character which is defined by the value of the string
Dave Love <fx@gnu.org>
parents:
diff changeset
389 @code{forms-multi-line}. Its default value is @code{"\^k"} (a Control-K
Dave Love <fx@gnu.org>
parents:
diff changeset
390 character). If it is
Dave Love <fx@gnu.org>
parents:
diff changeset
391 set to @code{nil}, multiple line fields are prohibited.
Dave Love <fx@gnu.org>
parents:
diff changeset
392
Dave Love <fx@gnu.org>
parents:
diff changeset
393 If the data file does not exist, it is automatically created.
Dave Love <fx@gnu.org>
parents:
diff changeset
394
Dave Love <fx@gnu.org>
parents:
diff changeset
395 @node Control File Format
Dave Love <fx@gnu.org>
parents:
diff changeset
396 @chapter Control File Format
Dave Love <fx@gnu.org>
parents:
diff changeset
397
Dave Love <fx@gnu.org>
parents:
diff changeset
398 @cindex control file
Dave Love <fx@gnu.org>
parents:
diff changeset
399 The Forms mode @dfn{control file} serves two purposes. First, it names
Dave Love <fx@gnu.org>
parents:
diff changeset
400 the data file to use, and defines its format and properties. Second,
Dave Love <fx@gnu.org>
parents:
diff changeset
401 the Emacs buffer it occupies is used by Forms mode to display the forms.
Dave Love <fx@gnu.org>
parents:
diff changeset
402
Dave Love <fx@gnu.org>
parents:
diff changeset
403 The contents of the control file are evaluated as a Lisp program. It
Dave Love <fx@gnu.org>
parents:
diff changeset
404 should set the following Lisp variables to suitable values:
Dave Love <fx@gnu.org>
parents:
diff changeset
405
Dave Love <fx@gnu.org>
parents:
diff changeset
406 @table @code
Dave Love <fx@gnu.org>
parents:
diff changeset
407 @vindex forms-file
Dave Love <fx@gnu.org>
parents:
diff changeset
408 @item forms-file
Dave Love <fx@gnu.org>
parents:
diff changeset
409 This variable specifies the name of the data file. Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
410
Dave Love <fx@gnu.org>
parents:
diff changeset
411 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
412 (setq forms-file "my/data-file")
Dave Love <fx@gnu.org>
parents:
diff changeset
413 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
414
Dave Love <fx@gnu.org>
parents:
diff changeset
415 If the control file doesn't set @code{forms-file}, Forms mode
Dave Love <fx@gnu.org>
parents:
diff changeset
416 reports an error.
Dave Love <fx@gnu.org>
parents:
diff changeset
417
Dave Love <fx@gnu.org>
parents:
diff changeset
418 @vindex forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
419 @item forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
420 This variable describes the way the fields of the record are formatted on
Dave Love <fx@gnu.org>
parents:
diff changeset
421 the screen. For details, see @ref{Format Description}.
Dave Love <fx@gnu.org>
parents:
diff changeset
422
Dave Love <fx@gnu.org>
parents:
diff changeset
423 @vindex forms-number-of-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
424 @item forms-number-of-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
425 This variable holds the number of fields in each record of the data
Dave Love <fx@gnu.org>
parents:
diff changeset
426 file. Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
427
Dave Love <fx@gnu.org>
parents:
diff changeset
428 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
429 (setq forms-number-of-fields 10)
Dave Love <fx@gnu.org>
parents:
diff changeset
430 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
431 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
432
Dave Love <fx@gnu.org>
parents:
diff changeset
433 If the control file does not set @code{forms-format-list} a default
Dave Love <fx@gnu.org>
parents:
diff changeset
434 format is used. In this situation, Forms mode will deduce the number of
Dave Love <fx@gnu.org>
parents:
diff changeset
435 fields from the data file providing this file exists and
Dave Love <fx@gnu.org>
parents:
diff changeset
436 @code{forms-number-of-records} has not been set in the control file.
Dave Love <fx@gnu.org>
parents:
diff changeset
437
Dave Love <fx@gnu.org>
parents:
diff changeset
438 The control file can optionally set the following additional Forms mode
Dave Love <fx@gnu.org>
parents:
diff changeset
439 variables. Most of them have default values that are good for most
Dave Love <fx@gnu.org>
parents:
diff changeset
440 applications.
Dave Love <fx@gnu.org>
parents:
diff changeset
441
Dave Love <fx@gnu.org>
parents:
diff changeset
442 @table @code
Dave Love <fx@gnu.org>
parents:
diff changeset
443 @vindex forms-field-sep
Dave Love <fx@gnu.org>
parents:
diff changeset
444 @item forms-field-sep
Dave Love <fx@gnu.org>
parents:
diff changeset
445 This variable may be used to designate the string which separates the
Dave Love <fx@gnu.org>
parents:
diff changeset
446 fields in the records of the data file. If not set, it defaults to the
Dave Love <fx@gnu.org>
parents:
diff changeset
447 string @code{"\t"} (a Tab character). Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
448
Dave Love <fx@gnu.org>
parents:
diff changeset
449 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
450 (setq forms-field-sep "\t")
Dave Love <fx@gnu.org>
parents:
diff changeset
451 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
452
Dave Love <fx@gnu.org>
parents:
diff changeset
453 @vindex forms-read-only
Dave Love <fx@gnu.org>
parents:
diff changeset
454 @item forms-read-only
Dave Love <fx@gnu.org>
parents:
diff changeset
455 If the value is non-@code{nil}, the data file is treated read-only. (Forms
Dave Love <fx@gnu.org>
parents:
diff changeset
456 mode also treats the data file as read-only if you don't have access to
Dave Love <fx@gnu.org>
parents:
diff changeset
457 write it.) Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
458
Dave Love <fx@gnu.org>
parents:
diff changeset
459 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
460 (set forms-read-only t)
Dave Love <fx@gnu.org>
parents:
diff changeset
461 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
462
Dave Love <fx@gnu.org>
parents:
diff changeset
463 @vindex forms-multi-line
Dave Love <fx@gnu.org>
parents:
diff changeset
464 @item forms-multi-line
Dave Love <fx@gnu.org>
parents:
diff changeset
465 This variable specifies the @dfn{pseudo newline} separator that allows
Dave Love <fx@gnu.org>
parents:
diff changeset
466 multi-line fields. This separator goes between the ``lines'' within a
Dave Love <fx@gnu.org>
parents:
diff changeset
467 field---thus, the field doesn't really contain multiple lines, but it
Dave Love <fx@gnu.org>
parents:
diff changeset
468 appears that way when displayed in Forms mode. If the value is
Dave Love <fx@gnu.org>
parents:
diff changeset
469 @code{nil}, multi-line text fields are prohibited. The pseudo newline
Dave Love <fx@gnu.org>
parents:
diff changeset
470 must not be a character contained in @code{forms-field-sep}.
Dave Love <fx@gnu.org>
parents:
diff changeset
471
Dave Love <fx@gnu.org>
parents:
diff changeset
472 The default value is @code{"\^k"}, the character Control-K. Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
473
Dave Love <fx@gnu.org>
parents:
diff changeset
474 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
475 (setq forms-multi-line "\^k")
Dave Love <fx@gnu.org>
parents:
diff changeset
476 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
477
Dave Love <fx@gnu.org>
parents:
diff changeset
478 @ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
479 @vindex forms-forms-scroll
Dave Love <fx@gnu.org>
parents:
diff changeset
480 @item forms-forms-scroll
Dave Love <fx@gnu.org>
parents:
diff changeset
481 @xref{Forms Mode Commands}, for details.
Dave Love <fx@gnu.org>
parents:
diff changeset
482
Dave Love <fx@gnu.org>
parents:
diff changeset
483 @vindex forms-forms-jump
Dave Love <fx@gnu.org>
parents:
diff changeset
484 @item forms-forms-jump
Dave Love <fx@gnu.org>
parents:
diff changeset
485 @xref{Forms Mode Commands}, for details.
Dave Love <fx@gnu.org>
parents:
diff changeset
486 @end ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
487
Dave Love <fx@gnu.org>
parents:
diff changeset
488 @findex forms-read-file-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
489 @item forms-read-file-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
490 This variable holds the name of a function to be called after the data
Dave Love <fx@gnu.org>
parents:
diff changeset
491 file has been read in. This can be used to transform the contents of the
Dave Love <fx@gnu.org>
parents:
diff changeset
492 data file into a format more suitable for forms processing.
Dave Love <fx@gnu.org>
parents:
diff changeset
493 If it is @code{nil}, no function is called. For example, to maintain a
Dave Love <fx@gnu.org>
parents:
diff changeset
494 gzipped database:
Dave Love <fx@gnu.org>
parents:
diff changeset
495
Dave Love <fx@gnu.org>
parents:
diff changeset
496 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
497 (defun gzip-read-file-filter ()
Dave Love <fx@gnu.org>
parents:
diff changeset
498 (shell-command-on-region (point-min) (point-max)
Dave Love <fx@gnu.org>
parents:
diff changeset
499 "gzip -d" t t))
Dave Love <fx@gnu.org>
parents:
diff changeset
500 (setq forms-read-file-filter 'gzip-read-file-filter)
Dave Love <fx@gnu.org>
parents:
diff changeset
501 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
502
Dave Love <fx@gnu.org>
parents:
diff changeset
503 @findex forms-write-file-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
504 @item forms-write-file-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
505 This variable holds the name of a function to be called before writing
Dave Love <fx@gnu.org>
parents:
diff changeset
506 out the contents of the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
507 This can be used to undo the effects of @code{forms-read-file-filter}.
Dave Love <fx@gnu.org>
parents:
diff changeset
508 If it is @code{nil}, no function is called. Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
509
Dave Love <fx@gnu.org>
parents:
diff changeset
510 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
511 (defun gzip-write-file-filter ()
Dave Love <fx@gnu.org>
parents:
diff changeset
512 (make-variable-buffer-local 'require-final-newline)
Dave Love <fx@gnu.org>
parents:
diff changeset
513 (setq require-final-newline nil)
Dave Love <fx@gnu.org>
parents:
diff changeset
514 (shell-command-on-region (point-min) (point-max)
Dave Love <fx@gnu.org>
parents:
diff changeset
515 "gzip" t t))
Dave Love <fx@gnu.org>
parents:
diff changeset
516 (setq forms-write-file-filter 'gzip-write-file-filter)
Dave Love <fx@gnu.org>
parents:
diff changeset
517 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
518
Dave Love <fx@gnu.org>
parents:
diff changeset
519 @findex forms-new-record-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
520 @item forms-new-record-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
521 This variable holds a function to be called whenever a new record is created
Dave Love <fx@gnu.org>
parents:
diff changeset
522 to supply default values for fields. If it is @code{nil}, no function is
Dave Love <fx@gnu.org>
parents:
diff changeset
523 called.
Dave Love <fx@gnu.org>
parents:
diff changeset
524 @xref{Modifying Forms Contents}, for details.
Dave Love <fx@gnu.org>
parents:
diff changeset
525
Dave Love <fx@gnu.org>
parents:
diff changeset
526 @findex forms-modified-record-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
527 @item forms-modified-record-filter
Dave Love <fx@gnu.org>
parents:
diff changeset
528 This variable holds a function to be called whenever a record is
Dave Love <fx@gnu.org>
parents:
diff changeset
529 modified, just before updating the Forms data file. If it is
Dave Love <fx@gnu.org>
parents:
diff changeset
530 @code{nil}, no function is called.
Dave Love <fx@gnu.org>
parents:
diff changeset
531 @xref{Modifying Forms Contents}, for details.
Dave Love <fx@gnu.org>
parents:
diff changeset
532
Dave Love <fx@gnu.org>
parents:
diff changeset
533 @findex forms-insert-after
Dave Love <fx@gnu.org>
parents:
diff changeset
534 @item forms-insert-after
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
535 If this variable is not @code{nil}, new records are created @emph{after} the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
536 current record. Also, upon visiting a file, the initial position will be
Dave Love <fx@gnu.org>
parents:
diff changeset
537 at the last record instead of the first one.
Dave Love <fx@gnu.org>
parents:
diff changeset
538
Dave Love <fx@gnu.org>
parents:
diff changeset
539 @findex forms-check-number-of-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
540 @item forms-check-number-of-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
541 Normally each record is checked to contain the correct number of fields.
Dave Love <fx@gnu.org>
parents:
diff changeset
542 Under certain circumstances, this can be undesirable.
Dave Love <fx@gnu.org>
parents:
diff changeset
543 If this variable is set to @code{nil}, these checks will be bypassed.
Dave Love <fx@gnu.org>
parents:
diff changeset
544 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
545
Dave Love <fx@gnu.org>
parents:
diff changeset
546 @node Format Description
Dave Love <fx@gnu.org>
parents:
diff changeset
547 @chapter The Format Description
Dave Love <fx@gnu.org>
parents:
diff changeset
548
Dave Love <fx@gnu.org>
parents:
diff changeset
549 @vindex forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
550 The variable @code{forms-format-list} specifies the format of the data
Dave Love <fx@gnu.org>
parents:
diff changeset
551 in the data file, and how to convert the data for display in Forms mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
552 Its value must be a list of Forms mode @dfn{formatting elements}, each
Dave Love <fx@gnu.org>
parents:
diff changeset
553 of which can be a string, a number, a Lisp list, or a Lisp symbol that
Dave Love <fx@gnu.org>
parents:
diff changeset
554 evaluates to one of those. The formatting elements are processed in the
Dave Love <fx@gnu.org>
parents:
diff changeset
555 order they appear in the list.
Dave Love <fx@gnu.org>
parents:
diff changeset
556
Dave Love <fx@gnu.org>
parents:
diff changeset
557 @table @var
Dave Love <fx@gnu.org>
parents:
diff changeset
558 @item string
Dave Love <fx@gnu.org>
parents:
diff changeset
559 A string formatting element is inserted in the forms ``as is,'' as text
Dave Love <fx@gnu.org>
parents:
diff changeset
560 that the user cannot alter.
Dave Love <fx@gnu.org>
parents:
diff changeset
561
Dave Love <fx@gnu.org>
parents:
diff changeset
562 @item number
Dave Love <fx@gnu.org>
parents:
diff changeset
563 A number element selects a field of the record. The contents of this
Dave Love <fx@gnu.org>
parents:
diff changeset
564 field are inserted in the display at this point. Field numbers count
Dave Love <fx@gnu.org>
parents:
diff changeset
565 starting from 1 (one).
Dave Love <fx@gnu.org>
parents:
diff changeset
566
Dave Love <fx@gnu.org>
parents:
diff changeset
567 @item list
Dave Love <fx@gnu.org>
parents:
diff changeset
568 A formatting element that is a list specifies a function call. This
Dave Love <fx@gnu.org>
parents:
diff changeset
569 function is called every time a record is displayed, and its result,
Dave Love <fx@gnu.org>
parents:
diff changeset
570 which must be a string, is inserted in the display text. The function
Dave Love <fx@gnu.org>
parents:
diff changeset
571 should do nothing but returning a string.
Dave Love <fx@gnu.org>
parents:
diff changeset
572
Dave Love <fx@gnu.org>
parents:
diff changeset
573 @vindex forms-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
574 The function you call can access the fields of the record as a list in
Dave Love <fx@gnu.org>
parents:
diff changeset
575 the variable
Dave Love <fx@gnu.org>
parents:
diff changeset
576 @code{forms-fields}.
Dave Love <fx@gnu.org>
parents:
diff changeset
577
Dave Love <fx@gnu.org>
parents:
diff changeset
578 @item symbol
Dave Love <fx@gnu.org>
parents:
diff changeset
579 A symbol used as a formatting element should evaluate to a string, number,
Dave Love <fx@gnu.org>
parents:
diff changeset
580 or list; the value is interpreted as a formatting element, as described
Dave Love <fx@gnu.org>
parents:
diff changeset
581 above.
Dave Love <fx@gnu.org>
parents:
diff changeset
582 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
583
Dave Love <fx@gnu.org>
parents:
diff changeset
584 If a record does not contain the number of fields as specified in
Dave Love <fx@gnu.org>
parents:
diff changeset
585 @code{forms-number-of-fields}, a warning message will be printed. Excess
Dave Love <fx@gnu.org>
parents:
diff changeset
586 fields are ignored, missing fields are set to empty.
Dave Love <fx@gnu.org>
parents:
diff changeset
587
Dave Love <fx@gnu.org>
parents:
diff changeset
588 The control file which displays @file{/etc/passwd} file as demonstrated
Dave Love <fx@gnu.org>
parents:
diff changeset
589 in the beginning of this manual might look as follows:
Dave Love <fx@gnu.org>
parents:
diff changeset
590
Dave Love <fx@gnu.org>
parents:
diff changeset
591 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
592 ;; @r{This demo visits @file{/etc/passwd}.}
Dave Love <fx@gnu.org>
parents:
diff changeset
593
Dave Love <fx@gnu.org>
parents:
diff changeset
594 (setq forms-file "/etc/passwd")
Dave Love <fx@gnu.org>
parents:
diff changeset
595 (setq forms-number-of-fields 7)
Dave Love <fx@gnu.org>
parents:
diff changeset
596 (setq forms-read-only t) ; @r{to make sure}
Dave Love <fx@gnu.org>
parents:
diff changeset
597 (setq forms-field-sep ":")
Dave Love <fx@gnu.org>
parents:
diff changeset
598 ;; @r{Don't allow multi-line fields.}
Dave Love <fx@gnu.org>
parents:
diff changeset
599 (setq forms-multi-line nil)
Dave Love <fx@gnu.org>
parents:
diff changeset
600
Dave Love <fx@gnu.org>
parents:
diff changeset
601 (setq forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
602 (list
Dave Love <fx@gnu.org>
parents:
diff changeset
603 "====== /etc/passwd ======\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
604 "User : " 1
Dave Love <fx@gnu.org>
parents:
diff changeset
605 " Uid: " 3
Dave Love <fx@gnu.org>
parents:
diff changeset
606 " Gid: " 4
Dave Love <fx@gnu.org>
parents:
diff changeset
607 "\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
608 "Name : " 5
Dave Love <fx@gnu.org>
parents:
diff changeset
609 "\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
610 "Home : " 6
Dave Love <fx@gnu.org>
parents:
diff changeset
611 "\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
612 "Shell: " 7
Dave Love <fx@gnu.org>
parents:
diff changeset
613 "\n"))
Dave Love <fx@gnu.org>
parents:
diff changeset
614 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
615
Dave Love <fx@gnu.org>
parents:
diff changeset
616 When you construct the value of @code{forms-format-list}, you should
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
617 usually either quote the whole value, like this,
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
618
Dave Love <fx@gnu.org>
parents:
diff changeset
619 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
620 (setq forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
621 '(
Dave Love <fx@gnu.org>
parents:
diff changeset
622 "====== " forms-file " ======\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
623 "User : " 1
Dave Love <fx@gnu.org>
parents:
diff changeset
624 (make-string 20 ?-)
Dave Love <fx@gnu.org>
parents:
diff changeset
625 @dots{}
Dave Love <fx@gnu.org>
parents:
diff changeset
626 ))
Dave Love <fx@gnu.org>
parents:
diff changeset
627 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
628
Dave Love <fx@gnu.org>
parents:
diff changeset
629 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
630 or quote the elements which are lists, like this:
Dave Love <fx@gnu.org>
parents:
diff changeset
631
Dave Love <fx@gnu.org>
parents:
diff changeset
632 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
633 (setq forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
634 (list
Dave Love <fx@gnu.org>
parents:
diff changeset
635 "====== " forms-file " ======\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
636 "User : " 1
Dave Love <fx@gnu.org>
parents:
diff changeset
637 '(make-string 20 ?-)
Dave Love <fx@gnu.org>
parents:
diff changeset
638 @dots{}
Dave Love <fx@gnu.org>
parents:
diff changeset
639 ))
Dave Love <fx@gnu.org>
parents:
diff changeset
640 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
641
Dave Love <fx@gnu.org>
parents:
diff changeset
642 Forms mode validates the contents of @code{forms-format-list} when you
Dave Love <fx@gnu.org>
parents:
diff changeset
643 visit a database. If there are errors, processing is aborted with an
Dave Love <fx@gnu.org>
parents:
diff changeset
644 error message which includes a descriptive text. @xref{Error Messages},
Dave Love <fx@gnu.org>
parents:
diff changeset
645 for a detailed list of error messages.
Dave Love <fx@gnu.org>
parents:
diff changeset
646
Dave Love <fx@gnu.org>
parents:
diff changeset
647 If no @code{forms-format-list} is specified, Forms mode will supply a
Dave Love <fx@gnu.org>
parents:
diff changeset
648 default format list. This list contains the name of the file being
Dave Love <fx@gnu.org>
parents:
diff changeset
649 visited, and a simple label for each field indicating the field number.
Dave Love <fx@gnu.org>
parents:
diff changeset
650
Dave Love <fx@gnu.org>
parents:
diff changeset
651 @node Modifying Forms Contents
Dave Love <fx@gnu.org>
parents:
diff changeset
652 @chapter Modifying The Forms Contents
Dave Love <fx@gnu.org>
parents:
diff changeset
653
Dave Love <fx@gnu.org>
parents:
diff changeset
654 If @code{forms-read-only} is @code{nil}, the user can modify the fields
Dave Love <fx@gnu.org>
parents:
diff changeset
655 and records of the database.
Dave Love <fx@gnu.org>
parents:
diff changeset
656
Dave Love <fx@gnu.org>
parents:
diff changeset
657 All normal editing commands are available for editing the contents of the
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
658 displayed record. You cannot delete or modify the fixed, explanatory
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
659 text that comes from string formatting elements, but you can modify the
Dave Love <fx@gnu.org>
parents:
diff changeset
660 actual field contents.
Dave Love <fx@gnu.org>
parents:
diff changeset
661
Dave Love <fx@gnu.org>
parents:
diff changeset
662 @ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
663 @c This is for the Emacs 18 version only.
Dave Love <fx@gnu.org>
parents:
diff changeset
664 If the contents of the forms cannot be recognized properly, this is
Dave Love <fx@gnu.org>
parents:
diff changeset
665 signaled using a descriptive text. @xref{Error Messages}, for more info.
Dave Love <fx@gnu.org>
parents:
diff changeset
666 The cursor will indicate the last part of the forms which was
Dave Love <fx@gnu.org>
parents:
diff changeset
667 successfully parsed. It's important to avoid entering field contents
Dave Love <fx@gnu.org>
parents:
diff changeset
668 that would cause confusion with the field-separating fixed text.
Dave Love <fx@gnu.org>
parents:
diff changeset
669 @end ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
670
Dave Love <fx@gnu.org>
parents:
diff changeset
671 If the variable @code{forms-modified-record-filter} is non-@code{nil},
Dave Love <fx@gnu.org>
parents:
diff changeset
672 it is called as a function before the new data is written to the data
Dave Love <fx@gnu.org>
parents:
diff changeset
673 file. The function receives one argument, a vector that contains the
Dave Love <fx@gnu.org>
parents:
diff changeset
674 contents of the fields of the record.
Dave Love <fx@gnu.org>
parents:
diff changeset
675
Dave Love <fx@gnu.org>
parents:
diff changeset
676 The function can refer to fields with @code{aref} and modify them with
Dave Love <fx@gnu.org>
parents:
diff changeset
677 @code{aset}. The first field has number 1 (one); thus, element 0 of the
Dave Love <fx@gnu.org>
parents:
diff changeset
678 vector is not used. The function should return the same vector it was
Dave Love <fx@gnu.org>
parents:
diff changeset
679 passed; the (possibly modified) contents of the vector determine what is
Dave Love <fx@gnu.org>
parents:
diff changeset
680 actually written in the file. Here is an example:
Dave Love <fx@gnu.org>
parents:
diff changeset
681
Dave Love <fx@gnu.org>
parents:
diff changeset
682 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
683 (defun my-modified-record-filter (record)
Dave Love <fx@gnu.org>
parents:
diff changeset
684 ;; @r{Modify second field.}
Dave Love <fx@gnu.org>
parents:
diff changeset
685 (aset record 2 (current-time-string))
Dave Love <fx@gnu.org>
parents:
diff changeset
686 ;; @r{Return the field vector.}
Dave Love <fx@gnu.org>
parents:
diff changeset
687 record)
Dave Love <fx@gnu.org>
parents:
diff changeset
688
Dave Love <fx@gnu.org>
parents:
diff changeset
689 (setq forms-modified-record-filter 'my-modified-record-filter)
Dave Love <fx@gnu.org>
parents:
diff changeset
690 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
691
Dave Love <fx@gnu.org>
parents:
diff changeset
692 If the variable @code{forms-new-record-filter} is non-@code{nil}, its
Dave Love <fx@gnu.org>
parents:
diff changeset
693 value is a function to be called to fill in default values for the
Dave Love <fx@gnu.org>
parents:
diff changeset
694 fields of a new record. The function is passed a vector of empty
Dave Love <fx@gnu.org>
parents:
diff changeset
695 strings, one for each field; it should return the same vector, with
Dave Love <fx@gnu.org>
parents:
diff changeset
696 the desired field values stored in it. Fields are numbered starting
Dave Love <fx@gnu.org>
parents:
diff changeset
697 from 1 (one). Example:
Dave Love <fx@gnu.org>
parents:
diff changeset
698
Dave Love <fx@gnu.org>
parents:
diff changeset
699 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
700 (defun my-new-record-filter (fields)
Dave Love <fx@gnu.org>
parents:
diff changeset
701 (aset fields 5 (login-name))
Dave Love <fx@gnu.org>
parents:
diff changeset
702 (aset fields 1 (current-time-string))
Dave Love <fx@gnu.org>
parents:
diff changeset
703 fields)
Dave Love <fx@gnu.org>
parents:
diff changeset
704
Dave Love <fx@gnu.org>
parents:
diff changeset
705 (setq forms-new-record-filter 'my-new-record-filter)
Dave Love <fx@gnu.org>
parents:
diff changeset
706 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
707
Dave Love <fx@gnu.org>
parents:
diff changeset
708 @node Miscellaneous
Dave Love <fx@gnu.org>
parents:
diff changeset
709 @chapter Miscellaneous
Dave Love <fx@gnu.org>
parents:
diff changeset
710
Dave Love <fx@gnu.org>
parents:
diff changeset
711 @vindex forms-version
Dave Love <fx@gnu.org>
parents:
diff changeset
712 The global variable @code{forms-version} holds the version information
Dave Love <fx@gnu.org>
parents:
diff changeset
713 of the Forms mode software.
Dave Love <fx@gnu.org>
parents:
diff changeset
714
Dave Love <fx@gnu.org>
parents:
diff changeset
715 @findex forms-enumerate
Dave Love <fx@gnu.org>
parents:
diff changeset
716 It is very convenient to use symbolic names for the fields in a record.
Dave Love <fx@gnu.org>
parents:
diff changeset
717 The function @code{forms-enumerate} provides an elegant means to define
Dave Love <fx@gnu.org>
parents:
diff changeset
718 a series of variables whose values are consecutive integers. The
Dave Love <fx@gnu.org>
parents:
diff changeset
719 function returns the highest number used, so it can be used to set
Dave Love <fx@gnu.org>
parents:
diff changeset
720 @code{forms-number-of-fields} also. For example:
Dave Love <fx@gnu.org>
parents:
diff changeset
721
Dave Love <fx@gnu.org>
parents:
diff changeset
722 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
723 (setq forms-number-of-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
724 (forms-enumerate
Dave Love <fx@gnu.org>
parents:
diff changeset
725 '(field1 field2 field3 @dots{})))
Dave Love <fx@gnu.org>
parents:
diff changeset
726 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
727
Dave Love <fx@gnu.org>
parents:
diff changeset
728 This sets @code{field1} to 1, @code{field2} to 2, and so on.
Dave Love <fx@gnu.org>
parents:
diff changeset
729
Dave Love <fx@gnu.org>
parents:
diff changeset
730 Care has been taken to keep the Forms mode variables buffer-local, so it
Dave Love <fx@gnu.org>
parents:
diff changeset
731 is possible to visit multiple files in Forms mode simultaneously, even
Dave Love <fx@gnu.org>
parents:
diff changeset
732 if they have different properties.
Dave Love <fx@gnu.org>
parents:
diff changeset
733
Dave Love <fx@gnu.org>
parents:
diff changeset
734 @findex forms-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
735 If you have visited the control file in normal fashion with
Dave Love <fx@gnu.org>
parents:
diff changeset
736 @code{find-file} or a like command, you can switch to Forms mode with
Dave Love <fx@gnu.org>
parents:
diff changeset
737 the command @code{M-x forms-mode}. If you put @samp{-*- forms -*-} in
Dave Love <fx@gnu.org>
parents:
diff changeset
738 the first line of the control file, then visiting it enables Forms mode
Dave Love <fx@gnu.org>
parents:
diff changeset
739 automatically. But this makes it hard to edit the control file itself,
Dave Love <fx@gnu.org>
parents:
diff changeset
740 so you'd better think twice before using this.
Dave Love <fx@gnu.org>
parents:
diff changeset
741
Dave Love <fx@gnu.org>
parents:
diff changeset
742 The default format for the data file, using @code{"\t"} to separate
Dave Love <fx@gnu.org>
parents:
diff changeset
743 fields and @code{"\^k"} to separate lines within a field, matches the
Dave Love <fx@gnu.org>
parents:
diff changeset
744 file format of some popular database programs, e.g. FileMaker. So
Dave Love <fx@gnu.org>
parents:
diff changeset
745 @code{forms-mode} can decrease the need to use proprietary software.
Dave Love <fx@gnu.org>
parents:
diff changeset
746
Dave Love <fx@gnu.org>
parents:
diff changeset
747 @node Error Messages
Dave Love <fx@gnu.org>
parents:
diff changeset
748 @chapter Error Messages
Dave Love <fx@gnu.org>
parents:
diff changeset
749
Dave Love <fx@gnu.org>
parents:
diff changeset
750 This section describes all error messages which can be generated by
Dave Love <fx@gnu.org>
parents:
diff changeset
751 forms mode. Error messages that result from parsing the control file
Dave Love <fx@gnu.org>
parents:
diff changeset
752 all start with the text @samp{Forms control file error}. Messages
Dave Love <fx@gnu.org>
parents:
diff changeset
753 generated while analyzing the definition of @code{forms-format-list}
Dave Love <fx@gnu.org>
parents:
diff changeset
754 start with @samp{Forms format error}.
Dave Love <fx@gnu.org>
parents:
diff changeset
755
Dave Love <fx@gnu.org>
parents:
diff changeset
756 @table @code
Dave Love <fx@gnu.org>
parents:
diff changeset
757 @item Forms control file error: `forms-file' has not been set
Dave Love <fx@gnu.org>
parents:
diff changeset
758 The variable @code{forms-file} was not set by the control file.
Dave Love <fx@gnu.org>
parents:
diff changeset
759
Dave Love <fx@gnu.org>
parents:
diff changeset
760 @item Forms control file error: `forms-number-of-fields' has not been set
Dave Love <fx@gnu.org>
parents:
diff changeset
761 The variable @code{forms-number-of-fields} was not set by the control
Dave Love <fx@gnu.org>
parents:
diff changeset
762 file.
Dave Love <fx@gnu.org>
parents:
diff changeset
763
Dave Love <fx@gnu.org>
parents:
diff changeset
764 @item Forms control file error: `forms-number-of-fields' must be a number > 0
Dave Love <fx@gnu.org>
parents:
diff changeset
765 The variable @code{forms-number-of-fields} did not contain a positive
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
766 number.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
767
Dave Love <fx@gnu.org>
parents:
diff changeset
768 @item Forms control file error: `forms-field-sep' is not a string
Dave Love <fx@gnu.org>
parents:
diff changeset
769 @itemx Forms control file error: `forms-multi-line' must be nil or a one-character string
Dave Love <fx@gnu.org>
parents:
diff changeset
770 The variable @code{forms-multi-line} was set to something other than
Dave Love <fx@gnu.org>
parents:
diff changeset
771 @code{nil} or a single-character string.
Dave Love <fx@gnu.org>
parents:
diff changeset
772
Dave Love <fx@gnu.org>
parents:
diff changeset
773 @item Forms control file error: `forms-multi-line' is equal to 'forms-field-sep'
Dave Love <fx@gnu.org>
parents:
diff changeset
774 The variable @code{forms-multi-line} may not be equal to
Dave Love <fx@gnu.org>
parents:
diff changeset
775 @code{forms-field-sep} for this would make it impossible to distinguish
Dave Love <fx@gnu.org>
parents:
diff changeset
776 fields and the lines in the fields.
Dave Love <fx@gnu.org>
parents:
diff changeset
777
Dave Love <fx@gnu.org>
parents:
diff changeset
778 @item Forms control file error: `forms-new-record-filter' is not a function
Dave Love <fx@gnu.org>
parents:
diff changeset
779 @itemx Forms control file error: `forms-modified-record-filter' is not a function
Dave Love <fx@gnu.org>
parents:
diff changeset
780 The variable has been set to something else than a function.
Dave Love <fx@gnu.org>
parents:
diff changeset
781
Dave Love <fx@gnu.org>
parents:
diff changeset
782 @item Forms control file error: `forms-format-list' is not a list
Dave Love <fx@gnu.org>
parents:
diff changeset
783 The variable @code{forms-format-list} was not set to a Lisp list
Dave Love <fx@gnu.org>
parents:
diff changeset
784 by the control file.
Dave Love <fx@gnu.org>
parents:
diff changeset
785
Dave Love <fx@gnu.org>
parents:
diff changeset
786 @item Forms format error: field number @var{xx} out of range 1..@var{nn}
Dave Love <fx@gnu.org>
parents:
diff changeset
787 A field number was supplied in @code{forms-format-list} with a value of
Dave Love <fx@gnu.org>
parents:
diff changeset
788 @var{xx}, which was not greater than zero and smaller than or equal to
Dave Love <fx@gnu.org>
parents:
diff changeset
789 the number of fields in the forms, @var{nn}.
Dave Love <fx@gnu.org>
parents:
diff changeset
790
Dave Love <fx@gnu.org>
parents:
diff changeset
791 @item Forms format error: @var{fun} is not a function
Dave Love <fx@gnu.org>
parents:
diff changeset
792 The first element of a list which is an element of
Dave Love <fx@gnu.org>
parents:
diff changeset
793 @code{forms-format-list} was not a valid Lisp function.
Dave Love <fx@gnu.org>
parents:
diff changeset
794
Dave Love <fx@gnu.org>
parents:
diff changeset
795 @item Forms format error: invalid element @var{xx}
Dave Love <fx@gnu.org>
parents:
diff changeset
796 A list element was supplied in @code{forms-format-list} which was not a
Dave Love <fx@gnu.org>
parents:
diff changeset
797 string, number or list.
Dave Love <fx@gnu.org>
parents:
diff changeset
798
Dave Love <fx@gnu.org>
parents:
diff changeset
799 @ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
800 @c This applies to Emacs 18 only.
Dave Love <fx@gnu.org>
parents:
diff changeset
801 @c Error messages generated while a modified form is being analyzed.
Dave Love <fx@gnu.org>
parents:
diff changeset
802
Dave Love <fx@gnu.org>
parents:
diff changeset
803 @item Parse error: not looking at `...'
Dave Love <fx@gnu.org>
parents:
diff changeset
804 When re-parsing the contents of a forms, the text shown could not
Dave Love <fx@gnu.org>
parents:
diff changeset
805 be found.
Dave Love <fx@gnu.org>
parents:
diff changeset
806
Dave Love <fx@gnu.org>
parents:
diff changeset
807 @item Parse error: cannot find `...'
Dave Love <fx@gnu.org>
parents:
diff changeset
808 When re-parsing the contents of a forms, the text shown, which
Dave Love <fx@gnu.org>
parents:
diff changeset
809 separates two fields, could not be found.
Dave Love <fx@gnu.org>
parents:
diff changeset
810
Dave Love <fx@gnu.org>
parents:
diff changeset
811 @item Parse error: cannot parse adjacent fields @var{xx} and @var{yy}
Dave Love <fx@gnu.org>
parents:
diff changeset
812 Fields @var{xx} and @var{yy} were not separated by text, so could not be
Dave Love <fx@gnu.org>
parents:
diff changeset
813 parsed again.
Dave Love <fx@gnu.org>
parents:
diff changeset
814 @end ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
815
Dave Love <fx@gnu.org>
parents:
diff changeset
816 @item Warning: this record has @var{xx} fields instead of @var{yy}
Dave Love <fx@gnu.org>
parents:
diff changeset
817 The number of fields in this record in the data file did not match
Dave Love <fx@gnu.org>
parents:
diff changeset
818 @code{forms-number-of-fields}. Missing fields will be made empty.
Dave Love <fx@gnu.org>
parents:
diff changeset
819
Dave Love <fx@gnu.org>
parents:
diff changeset
820 @item Multi-line fields in this record - update refused!
Dave Love <fx@gnu.org>
parents:
diff changeset
821 The current record contains newline characters, hence can not be written
Dave Love <fx@gnu.org>
parents:
diff changeset
822 back to the data file, for it would corrupt it. Probably you inserted a
Dave Love <fx@gnu.org>
parents:
diff changeset
823 newline in a field, while @code{forms-multi-line} was @code{nil}.
Dave Love <fx@gnu.org>
parents:
diff changeset
824
Dave Love <fx@gnu.org>
parents:
diff changeset
825 @item Field separator occurs in record - update refused!
Dave Love <fx@gnu.org>
parents:
diff changeset
826 The current record contains the field separator string inside one of the
Dave Love <fx@gnu.org>
parents:
diff changeset
827 fields. It can not be written back to the data file, for it would
Dave Love <fx@gnu.org>
parents:
diff changeset
828 corrupt it. Probably you inserted the field separator string in a field.
Dave Love <fx@gnu.org>
parents:
diff changeset
829
Dave Love <fx@gnu.org>
parents:
diff changeset
830 @item Record number @var{xx} out of range 1..@var{yy}
Dave Love <fx@gnu.org>
parents:
diff changeset
831 A jump was made to non-existing record @var{xx}. @var{yy} denotes the
Dave Love <fx@gnu.org>
parents:
diff changeset
832 number of records in the file.
Dave Love <fx@gnu.org>
parents:
diff changeset
833
Dave Love <fx@gnu.org>
parents:
diff changeset
834 @item Stuck at record @var{xx}
Dave Love <fx@gnu.org>
parents:
diff changeset
835 An internal error prevented a specific record from being retrieved.
Dave Love <fx@gnu.org>
parents:
diff changeset
836
Dave Love <fx@gnu.org>
parents:
diff changeset
837 @item No write access to @code{"}@var{file}@code{"}
Dave Love <fx@gnu.org>
parents:
diff changeset
838 An attempt was made to enable edit mode on a file that has been write
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
839 protected.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
840
Dave Love <fx@gnu.org>
parents:
diff changeset
841 @item Search failed: @var{regexp}
Dave Love <fx@gnu.org>
parents:
diff changeset
842 The @var{regexp} could not be found in the data file. Forward searching
Dave Love <fx@gnu.org>
parents:
diff changeset
843 is done from the current location until the end of the file, then
Dave Love <fx@gnu.org>
parents:
diff changeset
844 retrying from the beginning of the file until the current location.
Dave Love <fx@gnu.org>
parents:
diff changeset
845 Backward searching is done from the current location until the beginning
Dave Love <fx@gnu.org>
parents:
diff changeset
846 of the file, then retrying from the end of the file until the current
Dave Love <fx@gnu.org>
parents:
diff changeset
847 location.
Dave Love <fx@gnu.org>
parents:
diff changeset
848
Dave Love <fx@gnu.org>
parents:
diff changeset
849 @item Wrapped
Dave Love <fx@gnu.org>
parents:
diff changeset
850 A search completed successfully after wrapping around.
Dave Love <fx@gnu.org>
parents:
diff changeset
851
Dave Love <fx@gnu.org>
parents:
diff changeset
852 @item Warning: number of records changed to @var{nn}
Dave Love <fx@gnu.org>
parents:
diff changeset
853 Forms mode's idea of the number of records has been adjusted to the
Dave Love <fx@gnu.org>
parents:
diff changeset
854 number of records actually present in the data file.
Dave Love <fx@gnu.org>
parents:
diff changeset
855
Dave Love <fx@gnu.org>
parents:
diff changeset
856 @item Problem saving buffers?
Dave Love <fx@gnu.org>
parents:
diff changeset
857 An error occurred while saving the data file buffer. Most likely, Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
858 did ask to confirm deleting the buffer because it had been modified, and
Dave Love <fx@gnu.org>
parents:
diff changeset
859 you said `no'.
Dave Love <fx@gnu.org>
parents:
diff changeset
860 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
861
Dave Love <fx@gnu.org>
parents:
diff changeset
862 @node Long Example
Dave Love <fx@gnu.org>
parents:
diff changeset
863 @chapter Long Example
Dave Love <fx@gnu.org>
parents:
diff changeset
864
Dave Love <fx@gnu.org>
parents:
diff changeset
865 The following example exploits most of the features of Forms mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
866 This example is included in the distribution as file @file{forms-d2.el}.
Dave Love <fx@gnu.org>
parents:
diff changeset
867
Dave Love <fx@gnu.org>
parents:
diff changeset
868 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
869 ;; demo2 -- demo forms-mode -*- emacs-lisp -*-
Dave Love <fx@gnu.org>
parents:
diff changeset
870
Dave Love <fx@gnu.org>
parents:
diff changeset
871 ;; @r{This sample forms exploit most of the features of forms mode.}
Dave Love <fx@gnu.org>
parents:
diff changeset
872
Dave Love <fx@gnu.org>
parents:
diff changeset
873 ;; @r{Set the name of the data file.}
Dave Love <fx@gnu.org>
parents:
diff changeset
874 (setq forms-file "forms-d2.dat")
Dave Love <fx@gnu.org>
parents:
diff changeset
875
Dave Love <fx@gnu.org>
parents:
diff changeset
876 ;; @r{Use @code{forms-enumerate} to set field names and number thereof.}
Dave Love <fx@gnu.org>
parents:
diff changeset
877 (setq forms-number-of-fields
Dave Love <fx@gnu.org>
parents:
diff changeset
878 (forms-enumerate
Dave Love <fx@gnu.org>
parents:
diff changeset
879 '(arch-newsgroup ; 1
Dave Love <fx@gnu.org>
parents:
diff changeset
880 arch-volume ; 2
Dave Love <fx@gnu.org>
parents:
diff changeset
881 arch-issue ; and ...
Dave Love <fx@gnu.org>
parents:
diff changeset
882 arch-article ; ... so
Dave Love <fx@gnu.org>
parents:
diff changeset
883 arch-shortname ; ... ... on
Dave Love <fx@gnu.org>
parents:
diff changeset
884 arch-parts
Dave Love <fx@gnu.org>
parents:
diff changeset
885 arch-from
Dave Love <fx@gnu.org>
parents:
diff changeset
886 arch-longname
Dave Love <fx@gnu.org>
parents:
diff changeset
887 arch-keywords
Dave Love <fx@gnu.org>
parents:
diff changeset
888 arch-date
Dave Love <fx@gnu.org>
parents:
diff changeset
889 arch-remarks)))
Dave Love <fx@gnu.org>
parents:
diff changeset
890
Dave Love <fx@gnu.org>
parents:
diff changeset
891 ;; @r{The following functions are used by this form for layout purposes.}
Dave Love <fx@gnu.org>
parents:
diff changeset
892 ;;
Dave Love <fx@gnu.org>
parents:
diff changeset
893 (defun arch-tocol (target &optional fill)
Dave Love <fx@gnu.org>
parents:
diff changeset
894 "Produces a string to skip to column TARGET.
Dave Love <fx@gnu.org>
parents:
diff changeset
895 Prepends newline if needed.
Dave Love <fx@gnu.org>
parents:
diff changeset
896 The optional FILL should be a character, used to fill to the column."
Dave Love <fx@gnu.org>
parents:
diff changeset
897 (if (null fill)
Dave Love <fx@gnu.org>
parents:
diff changeset
898 (setq fill ? ))
Dave Love <fx@gnu.org>
parents:
diff changeset
899 (if (< target (current-column))
Dave Love <fx@gnu.org>
parents:
diff changeset
900 (concat "\n" (make-string target fill))
Dave Love <fx@gnu.org>
parents:
diff changeset
901 (make-string (- target (current-column)) fill)))
Dave Love <fx@gnu.org>
parents:
diff changeset
902 ;;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
903 (defun arch-rj (target field &optional fill)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
904 "Produces a string to skip to column TARGET\
Dave Love <fx@gnu.org>
parents:
diff changeset
905 minus the width of field FIELD.
Dave Love <fx@gnu.org>
parents:
diff changeset
906 Prepends newline if needed.
Dave Love <fx@gnu.org>
parents:
diff changeset
907 The optional FILL should be a character,
Dave Love <fx@gnu.org>
parents:
diff changeset
908 used to fill to the column."
Dave Love <fx@gnu.org>
parents:
diff changeset
909 (arch-tocol (- target (length (nth field forms-fields))) fill))
Dave Love <fx@gnu.org>
parents:
diff changeset
910
Dave Love <fx@gnu.org>
parents:
diff changeset
911 ;; @r{Record filters.}
Dave Love <fx@gnu.org>
parents:
diff changeset
912 ;;
Dave Love <fx@gnu.org>
parents:
diff changeset
913 (defun new-record-filter (the-record)
Dave Love <fx@gnu.org>
parents:
diff changeset
914 "Form a new record with some defaults."
Dave Love <fx@gnu.org>
parents:
diff changeset
915 (aset the-record arch-from (user-full-name))
Dave Love <fx@gnu.org>
parents:
diff changeset
916 (aset the-record arch-date (current-time-string))
Dave Love <fx@gnu.org>
parents:
diff changeset
917 the-record) ; return it
Dave Love <fx@gnu.org>
parents:
diff changeset
918 (setq forms-new-record-filter 'new-record-filter)
Dave Love <fx@gnu.org>
parents:
diff changeset
919
Dave Love <fx@gnu.org>
parents:
diff changeset
920 ;; @r{The format list.}
Dave Love <fx@gnu.org>
parents:
diff changeset
921 (setq forms-format-list
Dave Love <fx@gnu.org>
parents:
diff changeset
922 (list
Dave Love <fx@gnu.org>
parents:
diff changeset
923 "====== Public Domain Software Archive ======\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
924 arch-shortname
Dave Love <fx@gnu.org>
parents:
diff changeset
925 " - " arch-longname
Dave Love <fx@gnu.org>
parents:
diff changeset
926 "\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
927 "Article: " arch-newsgroup
Dave Love <fx@gnu.org>
parents:
diff changeset
928 "/" arch-article
Dave Love <fx@gnu.org>
parents:
diff changeset
929 " "
Dave Love <fx@gnu.org>
parents:
diff changeset
930 '(arch-tocol 40)
Dave Love <fx@gnu.org>
parents:
diff changeset
931 "Issue: " arch-issue
Dave Love <fx@gnu.org>
parents:
diff changeset
932 " "
Dave Love <fx@gnu.org>
parents:
diff changeset
933 '(arch-rj 73 10)
Dave Love <fx@gnu.org>
parents:
diff changeset
934 "Date: " arch-date
Dave Love <fx@gnu.org>
parents:
diff changeset
935 "\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
936 "Submitted by: " arch-from
Dave Love <fx@gnu.org>
parents:
diff changeset
937 "\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
938 '(arch-tocol 79 ?-)
Dave Love <fx@gnu.org>
parents:
diff changeset
939 "\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
940 "Keywords: " arch-keywords
Dave Love <fx@gnu.org>
parents:
diff changeset
941 "\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
942 "Parts: " arch-parts
Dave Love <fx@gnu.org>
parents:
diff changeset
943 "\n\n====== Remarks ======\n\n"
Dave Love <fx@gnu.org>
parents:
diff changeset
944 arch-remarks
Dave Love <fx@gnu.org>
parents:
diff changeset
945 ))
Dave Love <fx@gnu.org>
parents:
diff changeset
946
Dave Love <fx@gnu.org>
parents:
diff changeset
947 ;; @r{That's all, folks!}
Dave Love <fx@gnu.org>
parents:
diff changeset
948 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
949
Dave Love <fx@gnu.org>
parents:
diff changeset
950 @node Credits
Dave Love <fx@gnu.org>
parents:
diff changeset
951 @chapter Credits
Dave Love <fx@gnu.org>
parents:
diff changeset
952
Dave Love <fx@gnu.org>
parents:
diff changeset
953 Bug fixes and other useful suggestions were supplied by
Dave Love <fx@gnu.org>
parents:
diff changeset
954 Harald Hanche-Olsen (@code{hanche@@imf.unit.no}),
Dave Love <fx@gnu.org>
parents:
diff changeset
955 @code{cwitty@@portia.stanford.edu},
Dave Love <fx@gnu.org>
parents:
diff changeset
956 Jonathan I. Kamens,
Dave Love <fx@gnu.org>
parents:
diff changeset
957 Per Cederqvist (@code{ceder@@signum.se}),
Dave Love <fx@gnu.org>
parents:
diff changeset
958 Michael Lipka (@code{lipka@@lip.hanse.de}),
Dave Love <fx@gnu.org>
parents:
diff changeset
959 Andy Piper (@code{ajp@@eng.cam.ac.uk}),
Dave Love <fx@gnu.org>
parents:
diff changeset
960 Frederic Pierresteguy (@code{F.Pierresteguy@@frcl.bull.fr}),
Dave Love <fx@gnu.org>
parents:
diff changeset
961 Ignatios Souvatzis
Dave Love <fx@gnu.org>
parents:
diff changeset
962 and Richard Stallman (@code{rms@@gnu.org}).
Dave Love <fx@gnu.org>
parents:
diff changeset
963
Dave Love <fx@gnu.org>
parents:
diff changeset
964 This documentation was slightly inspired by the documentation of ``rolo
Dave Love <fx@gnu.org>
parents:
diff changeset
965 mode'' by Paul Davis at Schlumberger Cambridge Research
Dave Love <fx@gnu.org>
parents:
diff changeset
966 (@code{davis%scrsu1%sdr.slb.com@@relay.cs.net}).
Dave Love <fx@gnu.org>
parents:
diff changeset
967
Dave Love <fx@gnu.org>
parents:
diff changeset
968 None of this would have been possible without GNU Emacs of the Free
Dave Love <fx@gnu.org>
parents:
diff changeset
969 Software Foundation. Thanks, Richard!
Dave Love <fx@gnu.org>
parents:
diff changeset
970
Dave Love <fx@gnu.org>
parents:
diff changeset
971 @node Index
Dave Love <fx@gnu.org>
parents:
diff changeset
972 @unnumbered Index
Dave Love <fx@gnu.org>
parents:
diff changeset
973 @printindex cp
Dave Love <fx@gnu.org>
parents:
diff changeset
974
Dave Love <fx@gnu.org>
parents:
diff changeset
975 @contents
Dave Love <fx@gnu.org>
parents:
diff changeset
976 @bye
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
977
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
978 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
979 arch-tag: 2ac9810b-aa49-4ea6-8030-d7f1ecd467ed
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
980 @end ignore