annotate lisp/forms.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents de5ba6f3514c
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13317
diff changeset
1 ;;; forms.el --- Forms mode: edit a file as a form to fill in
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13317
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
3 ;; Copyright (C) 1991, 1994, 1995, 1996, 1997, 2001, 2002, 2003,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
4 ;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
5
13317
877d62af45a9 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12847
diff changeset
6 ;; Author: Johan Vromans <jvromans@squirrel.nl>
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
7
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
8 ;; This file is part of GNU Emacs.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
9
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94359
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94359
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94359
diff changeset
13 ;; (at your option) any later version.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
14
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
18 ;; GNU General Public License for more details.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
19
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
20 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94359
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
22
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
23 ;;; Commentary:
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
24
94359
9f981901ae0c Comment.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
25 ;; Visit a file using a form. See forms-d2.el for examples.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
26 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
27 ;; === Naming conventions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
28 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
29 ;; The names of all variables and functions start with 'forms-'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
30 ;; Names which start with 'forms--' are intended for internal use, and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
31 ;; should *NOT* be used from the outside.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
32 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
33 ;; All variables are buffer-local, to enable multiple forms visits
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
34 ;; simultaneously.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
35 ;; Variable `forms--mode-setup' is local to *ALL* buffers, for it
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
36 ;; controls if forms-mode has been enabled in a buffer.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
37 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
38 ;; === How it works ===
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
39 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
40 ;; Forms mode means visiting a data file which is supposed to consist
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
41 ;; of records each containing a number of fields. The records are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
42 ;; separated by a newline, the fields are separated by a user-defined
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
43 ;; field separator (default: TAB).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
44 ;; When shown, a record is transferred to an Emacs buffer and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
45 ;; presented using a user-defined form. One record is shown at a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
46 ;; time.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
47 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
48 ;; Forms mode is a composite mode. It involves two files, and two
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
49 ;; buffers.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
50 ;; The first file, called the control file, defines the name of the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
51 ;; data file and the forms format. This file buffer will be used to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
52 ;; present the forms.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
53 ;; The second file holds the actual data. The buffer of this file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
54 ;; will be buried, for it is never accessed directly.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
55 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
56 ;; Forms mode is invoked using M-x `forms-find-file' control-file.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
57 ;; Alternatively `forms-find-file-other-window' can be used.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
58 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
59 ;; You may also visit the control file, and switch to forms mode by hand
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
60 ;; with M-x `forms-mode'.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
61 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
62 ;; Automatic mode switching is supported if you specify
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
63 ;; "-*- forms -*-" in the first line of the control file.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
64 ;;
62459
b89461946700 Replace `eval-current-buffer' by `eval-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents: 54770
diff changeset
65 ;; The control file is visited, evaluated using `eval-buffer',
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
66 ;; and should set at least the following variables:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
67 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
68 ;; forms-file [string]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
69 ;; The name of the data file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
70 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
71 ;; forms-number-of-fields [integer]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
72 ;; The number of fields in each record.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
73 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
74 ;; forms-format-list [list]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
75 ;; Formatting instructions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
76 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
77 ;; `forms-format-list' should be a list, each element containing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
78 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
79 ;; - a string, e.g. "hello". The string is inserted in the forms
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
80 ;; "as is".
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
81 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
82 ;; - an integer, denoting a field number.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
83 ;; The contents of this field are inserted at this point.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
84 ;; Fields are numbered starting with number one.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
85 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
86 ;; - a function call, e.g. (insert "text").
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
87 ;; This function call is dynamically evaluated and should return a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
88 ;; string. It should *NOT* have side-effects on the forms being
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
89 ;; constructed. The current fields are available to the function
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
90 ;; in the variable `forms-fields', they should *NOT* be modified.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
91 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
92 ;; - a lisp symbol, that must evaluate to one of the above.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
93 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
94 ;; Optional variables which may be set in the control file:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
95 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
96 ;; forms-field-sep [string, default TAB]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
97 ;; The field separator used to separate the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
98 ;; fields in the data file. It may be a string.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
99 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
100 ;; forms-read-only [bool, default nil]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
101 ;; Non-nil means that the data file is visited
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
102 ;; read-only (view mode) as opposed to edit mode.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
103 ;; If no write access to the data file is
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
104 ;; possible, view mode is enforced.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
105 ;;
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
106 ;; forms-check-number-of-fields [bool, default t]
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
107 ;; If non-nil, a warning will be issued whenever
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
108 ;; a record is found that does not have the number
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
109 ;; of fields specified by `forms-number-of-fields'.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
110 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
111 ;; forms-multi-line [string, default "^K"]
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
112 ;; If non-null, the records of the data file may
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
113 ;; contain fields that can span multiple lines in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
114 ;; the form.
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
115 ;; This variable denotes the separator string
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
116 ;; to be used for this purpose. Upon display, all
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
117 ;; occurrences of this string are translated
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
118 ;; to newlines. Upon storage they are translated
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
119 ;; back to the separator string.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
120 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
121 ;; forms-forms-scroll [bool, default nil]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
122 ;; Non-nil means: rebind locally the commands that
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
123 ;; perform `scroll-up' or `scroll-down' to use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
124 ;; `forms-next-field' resp. `forms-prev-field'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
125 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
126 ;; forms-forms-jump [bool, default nil]
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
127 ;; Non-nil means: rebind locally the commands
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
128 ;; `beginning-of-buffer' and `end-of-buffer' to
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
129 ;; perform, respectively, `forms-first-record' and
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
130 ;; `forms-last-record' instead.
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
131 ;;
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
132 ;; forms-insert-after [bool, default nil]
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
133 ;; Non-nil means: insertions of new records go after
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
134 ;; current record, also initial position is at the
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
135 ;; last record. The default is to insert before the
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
136 ;; current record and the initial position is at the
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
137 ;; first record.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
138 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
139 ;; forms-read-file-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
140 ;; If not nil: this should be the name of a
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
141 ;; function that is called after the forms data file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
142 ;; has been read. It can be used to transform
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
143 ;; the contents of the file into a format more suitable
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
144 ;; for forms-mode processing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
145 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
146 ;; forms-write-file-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
147 ;; If not nil: this should be the name of a
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
148 ;; function that is called before the forms data file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
149 ;; is written (saved) to disk. It can be used to undo
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
150 ;; the effects of `forms-read-file-filter', if any.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
151 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
152 ;; forms-new-record-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
153 ;; If not nil: this should be the name of a
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
154 ;; function that is called when a new
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
155 ;; record is created. It can be used to fill in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
156 ;; the new record with default fields, for example.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
157 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
158 ;; forms-modified-record-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
159 ;; If not nil: this should be the name of a
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
160 ;; function that is called when a record has
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
161 ;; been modified. It is called after the fields
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
162 ;; are parsed. It can be used to register
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
163 ;; modification dates, for example.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
164 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
165 ;; forms-use-text-properties [bool, see text for default]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
166 ;; This variable controls if forms mode should use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
167 ;; text properties to protect the form text from being
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
168 ;; modified (using text-property `read-only').
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
169 ;; Also, the read-write fields are shown using a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
170 ;; distinct face, if possible.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
171 ;; As of emacs 19.29, the `intangible' text property
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
172 ;; is used to prevent moving into read-only fields.
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
173 ;; This variable defaults to t if running Emacs 19 or
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
174 ;; later with text properties.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
175 ;; The default face to show read-write fields is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
176 ;; copied from face `region'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
177 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
178 ;; forms-ro-face [symbol, default 'default]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
179 ;; This is the face that is used to show
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
180 ;; read-only text on the screen. If used, this
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
181 ;; variable should be set to a symbol that is a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
182 ;; valid face.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
183 ;; E.g.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
184 ;; (make-face 'my-face)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
185 ;; (setq forms-ro-face 'my-face)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
186 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
187 ;; forms-rw-face [symbol, default 'region]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
188 ;; This is the face that is used to show
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
189 ;; read-write text on the screen.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
190 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
191 ;; After evaluating the control file, its buffer is cleared and used
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
192 ;; for further processing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
193 ;; The data file (as designated by `forms-file') is visited in a buffer
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
194 ;; `forms--file-buffer' which normally will not be shown.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
195 ;; Great malfunctioning may be expected if this file/buffer is modified
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
196 ;; outside of this package while it is being visited!
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
197 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
198 ;; Normal operation is to transfer one line (record) from the data file,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
199 ;; split it into fields (into `forms--the-record-list'), and display it
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
200 ;; using the specs in `forms-format-list'.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
201 ;; A format routine `forms--format' is built upon startup to format
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
202 ;; the records according to `forms-format-list'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
203 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
204 ;; When a form is changed the record is updated as soon as this form
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
205 ;; is left. The contents of the form are parsed using information
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
206 ;; obtained from `forms-format-list', and the fields which are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
207 ;; deduced from the form are modified. Fields not shown on the forms
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
208 ;; retain their original values. The newly formed record then
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
209 ;; replaces the contents of the old record in `forms--file-buffer'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
210 ;; A parse routine `forms--parser' is built upon startup to parse
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
211 ;; the records.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
212 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
213 ;; Two exit functions exist: `forms-exit' and `forms-exit-no-save'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
214 ;; `forms-exit' saves the data to the file, if modified.
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
215 ;; `forms-exit-no-save' does not. However, if `forms-exit-no-save'
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
216 ;; is executed and the file buffer has been modified, Emacs will ask
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
217 ;; questions anyway.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
218 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
219 ;; Other functions provided by forms mode are:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
220 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
221 ;; paging (forward, backward) by record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
222 ;; jumping (first, last, random number)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
223 ;; searching
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
224 ;; creating and deleting records
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
225 ;; reverting the form (NOT the file buffer)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
226 ;; switching edit <-> view mode v.v.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
227 ;; jumping from field to field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
228 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
229 ;; As a documented side-effect: jumping to the last record in the
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
230 ;; file (using forms-last-record) will adjust forms--total-records if
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
231 ;; needed.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
232 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
233 ;; The forms buffer can be in one of two modes: edit mode or view
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
234 ;; mode. View mode is a read-only mode, whereby you cannot modify the
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
235 ;; contents of the buffer.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
236 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
237 ;; Edit mode commands:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
238 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
239 ;; TAB forms-next-field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
240 ;; \C-c TAB forms-next-field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
241 ;; \C-c < forms-first-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
242 ;; \C-c > forms-last-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
243 ;; \C-c ? describe-mode
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
244 ;; \C-c \C-k forms-delete-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
245 ;; \C-c \C-q forms-toggle-read-only
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
246 ;; \C-c \C-o forms-insert-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
247 ;; \C-c \C-l forms-jump-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
248 ;; \C-c \C-n forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
249 ;; \C-c \C-p forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
250 ;; \C-c \C-r forms-search-backward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
251 ;; \C-c \C-s forms-search-forward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
252 ;; \C-c \C-x forms-exit
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
253 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
254 ;; Read-only mode commands:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
255 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
256 ;; SPC forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
257 ;; DEL forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
258 ;; ? describe-mode
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
259 ;; \C-q forms-toggle-read-only
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
260 ;; l forms-jump-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
261 ;; n forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
262 ;; p forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
263 ;; r forms-search-backward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
264 ;; s forms-search-forward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
265 ;; x forms-exit
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
266 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
267 ;; Of course, it is also possible to use the \C-c prefix to obtain the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
268 ;; same command keys as in edit mode.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
269 ;;
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
270 ;; The following bindings are available, independent of the mode:
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
271 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
272 ;; [next] forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
273 ;; [prior] forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
274 ;; [begin] forms-first-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
275 ;; [end] forms-last-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
276 ;; [S-TAB] forms-prev-field
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
277 ;; [backtab] forms-prev-field
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
278 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
279 ;; For convenience, TAB is always bound to `forms-next-field', so you
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
280 ;; don't need the C-c prefix for this command.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
281 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
282 ;; As mentioned above (see `forms-forms-scroll' and `forms-forms-jump'),
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
283 ;; the bindings of standard functions `scroll-up', `scroll-down',
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
284 ;; `beginning-of-buffer' and `end-of-buffer' can be locally replaced with
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
285 ;; forms mode functions next/prev record and first/last
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
286 ;; record.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
287 ;;
51282
933251fe83b1 (forms-mode): Use write-file-functions instead of local-write-file-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 51160
diff changeset
288 ;; `write-file-functions' is defined to save the actual data file
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
289 ;; instead of the buffer data, `revert-file-hook' is defined to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
290 ;; revert a forms to original.
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
291
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
292 ;;; Code:
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
293
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
294 (defgroup forms nil
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
295 "Edit a file as a form to fill in."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
296 :group 'data)
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
297
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
298 ;;; Global variables and constants:
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
299
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
300 (provide 'forms) ;;; official
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
301 (provide 'forms-mode) ;;; for compatibility
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
302
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
303 (defcustom forms-mode-hook nil
35968
6a592962088a (forms-mode-hooks): Fix :type.
Dave Love <fx@gnu.org>
parents: 26436
diff changeset
304 "Hook run upon entering Forms mode."
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
305 :group 'forms
35968
6a592962088a (forms-mode-hooks): Fix :type.
Dave Love <fx@gnu.org>
parents: 26436
diff changeset
306 :type 'hook)
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
307
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
308 ;;; Mandatory variables - must be set by evaluating the control file.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
309
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
310 (defvar forms-file nil
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
311 "Name of the file holding the data.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
312
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
313 (defvar forms-format-list nil
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
314 "List of formatting specifications.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
315
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
316 (defvar forms-number-of-fields nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
317 "Number of fields per record.")
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
318
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
319 ;;; Optional variables with default values.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
320
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
321 (defcustom forms-check-number-of-fields t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
322 "If non-nil, warn about records with wrong number of fields."
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
323 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
324 :type 'boolean)
12847
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
325
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
326 (defvar forms-field-sep "\t"
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
327 "Field separator character (default TAB).")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
328
19565
f998e80e4804 (forms-read-only): Un-customize, and doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19429
diff changeset
329 (defvar forms-read-only nil
f998e80e4804 (forms-read-only): Un-customize, and doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19429
diff changeset
330 "Non-nil means: visit the file in view (read-only) mode.
19586
963726a261c3 Further doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19565
diff changeset
331 This is set automatically if the file permissions don't let you write it.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
332
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
333 (defvar forms-multi-line "\C-k" "\
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
334 If not nil: use this character to separate multi-line fields (default C-k).")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
335
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
336 (defcustom forms-forms-scroll nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
337 "Non-nil means replace scroll-up/down commands in Forms mode.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
338 The replacement commands performs forms-next/prev-record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
339 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
340 :type 'boolean)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
341
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
342 (defcustom forms-forms-jump nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
343 "Non-nil means redefine beginning/end-of-buffer in Forms mode.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
344 The replacement commands performs forms-first/last-record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
345 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
346 :type 'boolean)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
347
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
348 (defvar forms-read-file-filter nil
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
349 "The name of a function that is called after reading the data file.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
350 This can be used to change the contents of the file to something more
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
351 suitable for forms processing.")
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
352
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
353 (defvar forms-write-file-filter nil
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
354 "The name of a function that is called before writing the data file.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
355 This can be used to undo the effects of `form-read-file-hook'.")
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
356
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
357 (defvar forms-new-record-filter nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
358 "The name of a function that is called when a new record is created.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
359
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
360 (defvar forms-modified-record-filter nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
361 "The name of a function that is called when a record has been modified.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
362
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
363 (defvar forms-fields nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
364 "List with fields of the current forms. First field has number 1.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
365 This variable is for use by the filter routines only.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
366 The contents may NOT be modified.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
367
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
368 (defcustom forms-use-text-properties t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
369 "Non-nil means: use text properties.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
370 Defaults to t if this Emacs is capable of handling text properties."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
371 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
372 :type 'boolean)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
373
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
374 (defcustom forms-insert-after nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
375 "Non-nil means: inserts of new records go after current record.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
376 Also, initial position is at last record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
377 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
378 :type 'boolean)
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
379
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
380 (defcustom forms-ro-face 'default
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
381 "The face (a symbol) that is used to display read-only text on the screen."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
382 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
383 :type 'face)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
384
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
385 (defcustom forms-rw-face 'region
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
386 "The face (a symbol) that is used to display read-write text on the screen."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
387 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
388 :type 'face)
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
389
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
390 ;;; Internal variables.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
391
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
392 (defvar forms--file-buffer nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
393 "Buffer which holds the file data")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
394
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
395 (defvar forms--total-records 0
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
396 "Total number of records in the data file.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
397
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
398 (defvar forms--current-record 0
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
399 "Number of the record currently on the screen.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
400
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
401 (defvar forms-mode-map nil
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
402 "Keymap for form buffer.")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
403 (defvar forms-mode-ro-map nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
404 "Keymap for form buffer in view mode.")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
405 (defvar forms-mode-edit-map nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
406 "Keymap for form buffer in edit mode.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
407
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
408 (defvar forms--markers nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
409 "Field markers in the screen.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
410
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
411 (defvar forms--dyntexts nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
412 "Dynamic texts (resulting from function calls) on the screen.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
413
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
414 (defvar forms--the-record-list nil
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
415 "List of strings of the current record, as parsed from the file.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
416
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
417 (defvar forms--search-regexp nil
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
418 "Last regexp used by forms-search functions.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
419
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
420 (defvar forms--format nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
421 "Formatting routine.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
422
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
423 (defvar forms--parser nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
424 "Forms parser routine.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
425
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
426 (defvar forms--mode-setup nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
427 "To keep track of forms-mode being set-up.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
428 (make-variable-buffer-local 'forms--mode-setup)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
429
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
430 (defvar forms--dynamic-text nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
431 "Array that holds dynamic texts to insert between fields.")
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
432
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
433 (defvar forms--elements nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
434 "Array with the order in which the fields are displayed.")
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
435
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
436 (defvar forms--ro-face nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
437 "Face used to represent read-only data on the screen.")
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
438
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
439 (defvar forms--rw-face nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
440 "Face used to represent read-write data on the screen.")
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
441
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
442 ;;;###autoload
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
443 (defun forms-mode (&optional primary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
444 "Major mode to visit files in a field-structured manner using a form.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
445
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
446 Commands: Equivalent keys in read-only mode:
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
447 TAB forms-next-field TAB
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
448 C-c TAB forms-next-field
22770
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
449 C-c < forms-first-record <
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
450 C-c > forms-last-record >
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
451 C-c ? describe-mode ?
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
452 C-c C-k forms-delete-record
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
453 C-c C-q forms-toggle-read-only q
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
454 C-c C-o forms-insert-record
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
455 C-c C-l forms-jump-record l
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
456 C-c C-n forms-next-record n
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
457 C-c C-p forms-prev-record p
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
458 C-c C-r forms-search-reverse r
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
459 C-c C-s forms-search-forward s
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
460 C-c C-x forms-exit x
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
461 "
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
462 (interactive)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
463
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
464 ;; This is not a simple major mode, as usual. Therefore, forms-mode
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
465 ;; takes an optional argument `primary' which is used for the
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
466 ;; initial set-up. Normal use would leave `primary' to nil.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
467 ;; A global buffer-local variable `forms--mode-setup' has the same
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
468 ;; effect but makes it possible to auto-invoke forms-mode using
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
469 ;; `find-file'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
470 ;; Note: although it seems logical to have `make-local-variable'
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
471 ;; executed where the variable is first needed, I have deliberately
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
472 ;; placed all calls in this function.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
473
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
474 ;; Primary set-up: evaluate buffer and check if the mandatory
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
475 ;; variables have been set.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
476 (if (or primary (not forms--mode-setup))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
477 (progn
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
478 ;;(message "forms: setting up...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
479 (kill-all-local-variables)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
480
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
481 ;; Make mandatory variables.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
482 (make-local-variable 'forms-file)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
483 (make-local-variable 'forms-number-of-fields)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
484 (make-local-variable 'forms-format-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
485
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
486 ;; Make optional variables.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
487 (make-local-variable 'forms-field-sep)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
488 (make-local-variable 'forms-read-only)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
489 (make-local-variable 'forms-multi-line)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
490 (make-local-variable 'forms-forms-scroll)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
491 (make-local-variable 'forms-forms-jump)
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
492 (make-local-variable 'forms-insert-after)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
493 (make-local-variable 'forms-use-text-properties)
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
494
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
495 ;; Filter functions.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
496 (make-local-variable 'forms-read-file-filter)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
497 (make-local-variable 'forms-write-file-filter)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
498 (make-local-variable 'forms-new-record-filter)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
499 (make-local-variable 'forms-modified-record-filter)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
500
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
501 ;; Make sure no filters exist.
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
502 (setq forms-read-file-filter nil)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
503 (setq forms-write-file-filter nil)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
504 (setq forms-new-record-filter nil)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
505 (setq forms-modified-record-filter nil)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
506
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
507 ;; If running Emacs 19 under X, setup faces to show read-only and
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
508 ;; read-write fields.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
509 (if (fboundp 'make-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
510 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
511 (make-local-variable 'forms-ro-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
512 (make-local-variable 'forms-rw-face)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
513
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
514 ;; eval the buffer, should set variables
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
515 ;;(message "forms: processing control file...")
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
516 ;; If enable-local-eval is not set to t the user is asked first.
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
517 (if (or (eq enable-local-eval t)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
518 (yes-or-no-p
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
519 (concat "Evaluate lisp code in buffer "
65689
96187e7edd1b 2005-09-25 Romain Francoise <romain@orebokech.com>
Romain Francoise <romain@orebokech.com>
parents: 64762
diff changeset
520 (buffer-name) " to display forms? ")))
62459
b89461946700 Replace `eval-current-buffer' by `eval-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents: 54770
diff changeset
521 (eval-buffer)
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
522 (error "`enable-local-eval' inhibits buffer evaluation"))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
523
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
524 ;; Check if the mandatory variables make sense.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
525 (or forms-file
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
526 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
527 "`forms-file' has not been set")))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
528
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
529 ;; Check forms-field-sep first, since it can be needed to
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
530 ;; construct a default format list.
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
531 (or (stringp forms-field-sep)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
532 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
533 "`forms-field-sep' is not a string")))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
534
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
535 (if forms-number-of-fields
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
536 (or (and (numberp forms-number-of-fields)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
537 (> forms-number-of-fields 0))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
538 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
539 "`forms-number-of-fields' must be a number > 0")))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
540 (or (null forms-format-list)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
541 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
542 "`forms-number-of-fields' has not been set"))))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
543
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
544 (or forms-format-list
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
545 (forms--intuit-from-file))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
546
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
547 (if forms-multi-line
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
548 (if (and (stringp forms-multi-line)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
549 (eq (length forms-multi-line) 1))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
550 (if (string= forms-multi-line forms-field-sep)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
551 (error (concat "Forms control file error: "
63400
00398c07d65c (forms--intuit-from-file): Fix reference to `forms-number-of-fields' in error message.
Juanma Barranquero <lekktu@gmail.com>
parents: 62728
diff changeset
552 "`forms-multi-line' is equal to `forms-field-sep'")))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
553 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
554 "`forms-multi-line' must be nil or a one-character string"))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
555 (or (fboundp 'set-text-properties)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
556 (setq forms-use-text-properties nil))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
557
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
558 ;; Validate and process forms-format-list.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
559 ;;(message "forms: pre-processing format list...")
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
560 (make-local-variable 'forms--elements)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
561 (forms--process-format-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
562
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
563 ;; Build the formatter and parser.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
564 ;;(message "forms: building formatter...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
565 (make-local-variable 'forms--format)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
566 (make-local-variable 'forms--markers)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
567 (make-local-variable 'forms--dyntexts)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
568 ;;(message "forms: building parser...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
569 (forms--make-format)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
570 (make-local-variable 'forms--parser)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
571 (forms--make-parser)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
572 ;;(message "forms: building parser... done.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
573
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
574 ;; Check if record filters are defined.
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
575 (if (and forms-new-record-filter
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
576 (not (fboundp forms-new-record-filter)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
577 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
578 "`forms-new-record-filter' is not a function")))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
579
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
580 (if (and forms-modified-record-filter
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
581 (not (fboundp forms-modified-record-filter)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
582 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
583 "`forms-modified-record-filter' is not a function")))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
584
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
585 ;; The filters acces the contents of the forms using `forms-fields'.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
586 (make-local-variable 'forms-fields)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
587
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
588 ;; Dynamic text support.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
589 (make-local-variable 'forms--dynamic-text)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
590
23382
55b2ea28932a Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 22770
diff changeset
591 ;; Prevent accidental overwrite of the control file and auto-save.
7381
9e7dd6d12e1f (forms-mode): Set visited file name to nil to prevent overwrite and autosave.
Karl Heuer <kwzh@gnu.org>
parents: 6561
diff changeset
592 (set-visited-file-name nil)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
593
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
594 ;; Prepare this buffer for further processing.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
595 (setq buffer-read-only nil)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
596 (erase-buffer)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
597
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
598 ;;(message "forms: setting up... done.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
599 ))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
600
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
601 ;; initialization done
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
602 (setq forms--mode-setup t)
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
603
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
604 ;; Copy desired faces to the actual variables used by the forms formatter.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
605 (if (fboundp 'make-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
606 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
607 (make-local-variable 'forms--ro-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
608 (make-local-variable 'forms--rw-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
609 (if forms-read-only
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
610 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
611 (setq forms--ro-face forms-ro-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
612 (setq forms--rw-face forms-ro-face))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
613 (setq forms--ro-face forms-ro-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
614 (setq forms--rw-face forms-rw-face))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
615
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
616 ;; Make more local variables.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
617 (make-local-variable 'forms--file-buffer)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
618 (make-local-variable 'forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
619 (make-local-variable 'forms--current-record)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
620 (make-local-variable 'forms--the-record-list)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
621 (make-local-variable 'forms--search-regexp)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
622
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
623 ; The keymaps are global, so multiple forms mode buffers can share them.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
624 ;(make-local-variable 'forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
625 ;(make-local-variable 'forms-mode-ro-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
626 ;(make-local-variable 'forms-mode-edit-map)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
627 (if forms-mode-map ; already defined
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
628 nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
629 ;;(message "forms: building keymap...")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
630 (forms--mode-commands)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
631 ;;(message "forms: building keymap... done.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
632 )
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
633
6561
eafeaeff6fa5 (forms-mode): Set major mode before finding forms-file. (This gives
Karl Heuer <kwzh@gnu.org>
parents: 4867
diff changeset
634 ;; set the major mode indicator
eafeaeff6fa5 (forms-mode): Set major mode before finding forms-file. (This gives
Karl Heuer <kwzh@gnu.org>
parents: 4867
diff changeset
635 (setq major-mode 'forms-mode)
eafeaeff6fa5 (forms-mode): Set major mode before finding forms-file. (This gives
Karl Heuer <kwzh@gnu.org>
parents: 4867
diff changeset
636 (setq mode-name "Forms")
eafeaeff6fa5 (forms-mode): Set major mode before finding forms-file. (This gives
Karl Heuer <kwzh@gnu.org>
parents: 4867
diff changeset
637
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
638 ;; find the data file
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
639 (setq forms--file-buffer (find-file-noselect forms-file))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
640
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
641 ;; Pre-transform.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
642 (let ((read-file-filter forms-read-file-filter)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
643 (write-file-filter forms-write-file-filter))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
644 (if read-file-filter
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
645 (with-current-buffer forms--file-buffer
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
646 (let ((inhibit-read-only t)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
647 (file-modified (buffer-modified-p)))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
648 (run-hooks 'read-file-filter)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
649 (if (not file-modified) (set-buffer-modified-p nil)))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
650 (if write-file-filter
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
651 (add-hook 'write-file-functions write-file-filter nil t)))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
652 (if write-file-filter
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
653 (with-current-buffer forms--file-buffer
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
654 (add-hook 'write-file-functions write-file-filter nil t)))))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
655
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
656 ;; count the number of records, and set see if it may be modified
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
657 (let (ro)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
658 (setq forms--total-records
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
659 (with-current-buffer forms--file-buffer
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
660 (prog1
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
661 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
662 ;;(message "forms: counting records...")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
663 (bury-buffer (current-buffer))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
664 (setq ro buffer-read-only)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
665 (count-lines (point-min) (point-max)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
666 ;;(message "forms: counting records... done.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
667 )))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
668 (if ro
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
669 (setq forms-read-only t)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
670
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
671 ;;(message "forms: proceeding setup...")
4867
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
672
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
673 ;; Since we aren't really implementing a minor mode, we hack the modeline
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
674 ;; directly to get the text " View " into forms-read-only form buffers. For
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
675 ;; that reason, this variable must be buffer only.
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
676 (make-local-variable 'minor-mode-alist)
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
677 (setq minor-mode-alist (list (list 'forms-read-only " View")))
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
678
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
679 ;;(message "forms: proceeding setup (keymaps)...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
680 (forms--set-keymaps)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
681 ;;(message "forms: proceeding setup (commands)...")
3827
4089cf0e3f06 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 3697
diff changeset
682 (forms--change-commands)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
683
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
684 ;;(message "forms: proceeding setup (buffer)...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
685 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
686
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
687 (if (= forms--total-records 0)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
688 ;;(message "forms: proceeding setup (new file)...")
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
689 (progn
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
690 (insert
54770
e8824c4f5f7e Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-196
Miles Bader <miles@gnu.org>
parents: 52401
diff changeset
691 "GNU Emacs Forms Mode\n\n"
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
692 (if (file-exists-p forms-file)
14356
0c88041fc50a (forms-mode, forms-toggle-read-only): Fix message text.
Karl Heuer <kwzh@gnu.org>
parents: 14315
diff changeset
693 (concat "No records available in file `" forms-file "'\n\n")
0c88041fc50a (forms-mode, forms-toggle-read-only): Fix message text.
Karl Heuer <kwzh@gnu.org>
parents: 14315
diff changeset
694 (format "Creating new file `%s'\nwith %d field%s per record\n\n"
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
695 forms-file forms-number-of-fields
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
696 (if (= 1 forms-number-of-fields) "" "s")))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
697 "Use " (substitute-command-keys "\\[forms-insert-record]")
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
698 " to create new records.\n")
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
699 (setq forms--current-record 1)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
700 (setq buffer-read-only t)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
701 (set-buffer-modified-p nil))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
702
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
703 ;; setup the first (or current) record to show
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
704 (if (< forms--current-record 1)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
705 (setq forms--current-record 1))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
706 (forms-jump-record forms--current-record)
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
707
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
708 (if forms-insert-after
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
709 (forms-last-record)
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
710 (forms-first-record))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
711 )
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
712
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
713 ;; user customising
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
714 ;;(message "forms: proceeding setup (user hooks)...")
62728
f68140c1b23a (forms-mode): Use run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents: 62459
diff changeset
715 (run-mode-hooks 'forms-mode-hook 'forms-mode-hooks)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
716 ;;(message "forms: setting up... done.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
717
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
718 ;; be helpful
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
719 (forms--help)
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
720 )
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
721
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
722 (defun forms--process-format-list ()
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
723 ;; Validate `forms-format-list' and set some global variables.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
724 ;; Symbols in the list are evaluated, and consecutive strings are
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
725 ;; concatenated.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
726 ;; Array `forms--elements' is constructed that contains the order
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
727 ;; of the fields on the display. This array is used by
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
728 ;; `forms--parser-using-text-properties' to extract the fields data
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
729 ;; from the form on the screen.
13984
c045b6e55d08 (forms-toggle-read-only, forms-enumerate): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13569
diff changeset
730 ;; Upon completion, `forms-format-list' is guaranteed correct, so
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
731 ;; `forms--make-format' and `forms--make-parser' do not need to perform
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
732 ;; any checks.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
733
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
734 ;; Verify that `forms-format-list' is not nil.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
735 (or forms-format-list
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
736 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
737 "`forms-format-list' has not been set")))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
738 ;; It must be a list.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
739 (or (listp forms-format-list)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
740 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
741 "`forms-format-list' is not a list")))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
742
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
743 ;; Assume every field is painted once.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
744 ;; `forms--elements' will grow if needed.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
745 (setq forms--elements (make-vector forms-number-of-fields nil))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
746
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
747 (let ((the-list forms-format-list) ; the list of format elements
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
748 (prev-item nil)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
749 (field-num 0)) ; highest field number
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
750
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
751 (setq forms-format-list nil) ; gonna rebuild
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
752
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
753 (while the-list
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
754
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
755 (let ((el (car-safe the-list))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
756 (rem (cdr-safe the-list)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
757
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
758 ;; If it is a symbol, eval it first.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
759 (if (and (symbolp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
760 (boundp el))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
761 (setq el (eval el)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
762
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
763 (cond
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
764
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
765 ;; Try string ...
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
766 ((stringp el)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
767 (if (stringp prev-item) ; try to concatenate strings
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
768 (setq prev-item (concat prev-item el))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
769 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
770 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
771 (append forms-format-list (list prev-item) nil)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
772 (setq prev-item el)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
773
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
774 ;; Try numeric ...
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
775 ((numberp el)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
776
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
777 ;; Validate range.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
778 (if (or (<= el 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
779 (> el forms-number-of-fields))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
780 (error (concat "Forms format error: "
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
781 "field number %d out of range 1..%d")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
782 el forms-number-of-fields))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
783
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
784 ;; Store forms order.
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
785 (if (>= field-num (length forms--elements))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
786 (setq forms--elements (vconcat forms--elements (1- el)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
787 (aset forms--elements field-num (1- el)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
788 (setq field-num (1+ field-num))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
789
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
790 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
791 (setq forms-format-list
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
792 (append forms-format-list (list prev-item) nil)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
793 (setq prev-item el))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
794
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
795 ;; Try function ...
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
796 ((listp el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
797
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
798 ;; Validate.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
799 (or (fboundp (car-safe el))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
800 (error (concat "Forms format error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
801 "%S is not a function")
14421
319064f5de2e (forms--process-format-list): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14356
diff changeset
802 (car-safe el)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
803
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
804 ;; Shift.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
805 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
806 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
807 (append forms-format-list (list prev-item) nil)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
808 (setq prev-item el))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
809
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
810 ;; else
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
811 (t
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
812 (error (concat "Forms format error: "
14421
319064f5de2e (forms--process-format-list): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14356
diff changeset
813 "invalid element %S")
319064f5de2e (forms--process-format-list): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14356
diff changeset
814 el)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
815
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
816 ;; Advance to next element of the list.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
817 (setq the-list rem)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
818
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
819 ;; Append last item.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
820 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
821 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
822 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
823 (append forms-format-list (list prev-item) nil))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
824 ;; Append a newline if the last item is a field.
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
825 ;; This prevents parsing problems.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
826 ;; Also it makes it possible to insert an empty last field.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
827 (if (numberp prev-item)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
828 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
829 (append forms-format-list (list "\n") nil))))))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
830
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
831 (forms--debug 'forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
832 'forms--elements))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
833
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
834 ;; Special treatment for read-only segments.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
835 ;;
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
836 ;; If text is inserted between two read-only segments, there seems to
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
837 ;; be no way to give the newly inserted text the RW face.
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
838 ;; To solve this, read-only segments get the `insert-in-front-hooks'
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
839 ;; property set with a function that temporarily switches the
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
840 ;; properties of the first character of the segment to the RW face, so
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
841 ;; the new text gets the right face. The `post-command-hook' is
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
842 ;; used to restore the original properties.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
843
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
844 (defvar forms--iif-start nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
845 "Record start of modification command.")
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
846 (defvar forms--iif-properties nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
847 "Original properties of the character being overridden.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
848
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
849 (defun forms--iif-hook (begin end)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
850 "`insert-in-front-hooks' function for read-only segments."
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
851
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
852 ;; Note start location. By making it a marker that points one
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
853 ;; character beyond the actual location, it is guaranteed to move
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
854 ;; correctly if text is inserted.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
855 (or forms--iif-start
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
856 (setq forms--iif-start (copy-marker (1+ (point)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
857
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
858 ;; Check if there is special treatment required.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
859 (if (or (<= forms--iif-start 2)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
860 (get-text-property (- forms--iif-start 2)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
861 'read-only))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
862 (progn
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
863 ;; Fetch current properties.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
864 (setq forms--iif-properties
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
865 (text-properties-at (1- forms--iif-start)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
866
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
867 ;; Replace them.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
868 (let ((inhibit-read-only t))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
869 (set-text-properties
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
870 (1- forms--iif-start) forms--iif-start
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
871 (list 'face forms--rw-face 'front-sticky '(face))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
872
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
873 ;; Enable `post-command-hook' to restore the properties.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
874 (setq post-command-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
875 (append (list 'forms--iif-post-command-hook) post-command-hook)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
876
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
877 ;; No action needed. Clear marker.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
878 (setq forms--iif-start nil)))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
879
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
880 (defun forms--iif-post-command-hook ()
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
881 "`post-command-hook' function for read-only segments."
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
882
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
883 ;; Disable `post-command-hook'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
884 (setq post-command-hook
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
885 (delq 'forms--iif-hook-post-command-hook post-command-hook))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
886
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
887 ;; Restore properties.
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
888 (if forms--iif-start
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
889 (let ((inhibit-read-only t))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
890 (set-text-properties
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
891 (1- forms--iif-start) forms--iif-start
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
892 forms--iif-properties)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
893
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
894 ;; Cleanup.
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
895 (setq forms--iif-start nil))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
896
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
897 (defvar forms--marker)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
898 (defvar forms--dyntext)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
899
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
900 (defun forms--make-format ()
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
901 "Generate `forms--format' using the information in `forms-format-list'."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
902
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
903 ;; The real work is done using a mapcar of `forms--make-format-elt' on
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
904 ;; `forms-format-list'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
905 ;; This function sets up the necessary environment, and decides
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
906 ;; which function to mapcar.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
907
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
908 (let ((forms--marker 0)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
909 (forms--dyntext 0))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
910 (setq
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
911 forms--format
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
912 (if forms-use-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
913 `(lambda (arg)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
914 (let ((inhibit-read-only t))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
915 ,@(apply 'append
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
916 (mapcar 'forms--make-format-elt-using-text-properties
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
917 forms-format-list))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
918 ;; Prevent insertion before the first text.
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
919 ,@(if (numberp (car forms-format-list))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
920 nil
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
921 '((add-text-properties (point-min) (1+ (point-min))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
922 '(front-sticky (read-only intangible)))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
923 ;; Prevent insertion after the last text.
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
924 (remove-text-properties (1- (point)) (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
925 '(rear-nonsticky)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
926 (setq forms--iif-start nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
927 `(lambda (arg)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
928 ,@(apply 'append
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
929 (mapcar 'forms--make-format-elt forms-format-list)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
930
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
931 ;; We have tallied the number of markers and dynamic texts,
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
932 ;; so we can allocate the arrays now.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
933 (setq forms--markers (make-vector forms--marker nil))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
934 (setq forms--dyntexts (make-vector forms--dyntext nil)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
935 (forms--debug 'forms--format))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
936
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
937 (defun forms--make-format-elt-using-text-properties (el)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
938 "Helper routine to generate format function."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
939
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
940 ;; The format routine `forms--format' will look like
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
941 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
942 ;; ;; preamble
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
943 ;; (lambda (arg)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
944 ;; (let ((inhibit-read-only t))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
945 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
946 ;; ;; A string, e.g. "text: ".
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
947 ;; (set-text-properties
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
948 ;; (point)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
949 ;; (progn (insert "text: ") (point))
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
950 ;; (list 'face forms--ro-face
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
951 ;; 'read-only 1
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
952 ;; 'insert-in-front-hooks 'forms--iif-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
953 ;; 'rear-nonsticky '(read-only face insert-in-front-hooks)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
954 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
955 ;; ;; A field, e.g. 6.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
956 ;; (let ((here (point)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
957 ;; (aset forms--markers 0 (point-marker))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
958 ;; (insert (elt arg 5))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
959 ;; (or (= (point) here)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
960 ;; (set-text-properties
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
961 ;; here (point)
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
962 ;; (list 'face forms--rw-face
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
963 ;; 'front-sticky '(face))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
964 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
965 ;; ;; Another string, e.g. "\nmore text: ".
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
966 ;; (set-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
967 ;; (point)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
968 ;; (progn (insert "\nmore text: ") (point))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
969 ;; (list 'face forms--ro-face
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
970 ;; 'read-only 2
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
971 ;; 'insert-in-front-hooks 'forms--iif-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
972 ;; 'rear-nonsticky '(read-only face insert-in-front-hooks)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
973 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
974 ;; ;; A function, e.g. (tocol 40).
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
975 ;; (set-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
976 ;; (point)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
977 ;; (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
978 ;; (insert (aset forms--dyntexts 0 (tocol 40)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
979 ;; (point))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
980 ;; (list 'face forms--ro-face
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
981 ;; 'read-only 2
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
982 ;; 'insert-in-front-hooks 'forms--iif-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
983 ;; 'rear-nonsticky '(read-only face insert-in-front-hooks)))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
984 ;;
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
985 ;; ;; Prevent insertion before the first text.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
986 ;; (add-text-properties (point-min) (1+ (point-min))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
987 ;; '(front-sticky (read-only))))))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
988 ;; ;; Prevent insertion after the last text.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
989 ;; (remove-text-properties (1- (point)) (point)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
990 ;; '(rear-nonsticky)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
991 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
992 ;; ;; wrap up
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
993 ;; (setq forms--iif-start nil)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
994 ;; ))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
995
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
996 (cond
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
997 ((stringp el)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
998
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
999 `((set-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1000 (point) ; start at point
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1001 (progn ; until after insertion
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1002 (insert ,el)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1003 (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1004 (list 'face forms--ro-face ; read-only appearance
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1005 'read-only ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1006 'intangible ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1007 'insert-in-front-hooks '(forms--iif-hook)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1008 'rear-nonsticky '(face read-only insert-in-front-hooks
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1009 intangible)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1010
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1011 ((numberp el)
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1012 `((let ((here (point)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1013 (aset forms--markers
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1014 ,(prog1 forms--marker
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1015 (setq forms--marker (1+ forms--marker)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1016 (point-marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1017 (insert (elt arg ,(1- el)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1018 (or (= (point) here)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1019 (set-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1020 here (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1021 (list 'face forms--rw-face
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1022 'front-sticky '(face)))))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1023
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1024 ((listp el)
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1025 `((set-text-properties
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1026 (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1027 (progn
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1028 (insert (aset forms--dyntexts
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1029 ,(prog1 forms--dyntext
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1030 (setq forms--dyntext (1+ forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1031 ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1032 (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1033 (list 'face forms--ro-face
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1034 'read-only ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1035 'intangible ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1036 'insert-in-front-hooks '(forms--iif-hook)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1037 'rear-nonsticky '(read-only face insert-in-front-hooks
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1038 intangible)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1039
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1040 ;; end of cond
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1041 ))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1042
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1043 (defun forms--make-format-elt (el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1044 "Helper routine to generate format function."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1045
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1046 ;; If we're not using text properties, the format routine
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1047 ;; `forms--format' will look like
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1048 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1049 ;; (lambda (arg)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1050 ;; ;; a string, e.g. "text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1051 ;; (insert "text: ")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1052 ;; ;; a field, e.g. 6
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1053 ;; (aset forms--markers 0 (point-marker))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1054 ;; (insert (elt arg 5))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1055 ;; ;; another string, e.g. "\nmore text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1056 ;; (insert "\nmore text: ")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1057 ;; ;; a function, e.g. (tocol 40)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1058 ;; (insert (aset forms--dyntexts 0 (tocol 40)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1059 ;; ... )
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1060
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1061 (cond
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1062 ((stringp el)
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1063 `((insert ,el)))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1064 ((numberp el)
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1065 (prog1
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1066 `((aset forms--markers ,forms--marker (point-marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1067 (insert (elt arg ,(1- el))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1068 (setq forms--marker (1+ forms--marker))))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1069 ((listp el)
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1070 (prog1
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1071 `((insert (aset forms--dyntexts ,forms--dyntext ,el)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1072 (setq forms--dyntext (1+ forms--dyntext))))))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1073
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1074 (defvar forms--field)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1075 (defvar forms--recordv)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1076 (defvar forms--seen-text)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1077
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1078 (defun forms--make-parser ()
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1079 "Generate `forms--parser' from the information in `forms-format-list'."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1080
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1081 ;; If we can use text properties, we simply set it to
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1082 ;; `forms--parser-using-text-properties'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1083 ;; Otherwise, the function is constructed using a mapcar of
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1084 ;; `forms--make-parser-elt on `forms-format-list'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1085
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1086 (setq
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1087 forms--parser
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1088 (if forms-use-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1089 (function forms--parser-using-text-properties)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1090 (let ((forms--field nil)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1091 (forms--seen-text nil)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1092 (forms--dyntext 0))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1093
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1094 ;; Note: we add a nil element to the list passed to `mapcar',
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1095 ;; see `forms--make-parser-elt' for details.
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1096 `(lambda nil
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1097 (let (here)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1098 (goto-char (point-min))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1099 ,@(apply 'append
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1100 (mapcar
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1101 'forms--make-parser-elt
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1102 (append forms-format-list (list nil)))))))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1103
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1104 (forms--debug 'forms--parser))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1105
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1106 (defun forms--parser-using-text-properties ()
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1107 "Extract field info from forms when using text properties."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1108
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1109 ;; Using text properties, we can simply jump to the markers, and
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1110 ;; extract the information up to the following read-only segment.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1111
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1112 (let ((i 0)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1113 here there)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1114 (while (< i (length forms--markers))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1115 (goto-char (setq here (aref forms--markers i)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1116 (if (get-text-property here 'read-only)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1117 (aset forms--recordv (aref forms--elements i) nil)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1118 (if (setq there
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1119 (next-single-property-change here 'read-only))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1120 (aset forms--recordv (aref forms--elements i)
13569
438ebe3b6f8d Use `buffer-substring-no-properties' instead of `buffer-substring' to
Johan Vromans <jvromans@squirrel.nl>
parents: 13337
diff changeset
1121 (buffer-substring-no-properties here there))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1122 (aset forms--recordv (aref forms--elements i)
13569
438ebe3b6f8d Use `buffer-substring-no-properties' instead of `buffer-substring' to
Johan Vromans <jvromans@squirrel.nl>
parents: 13337
diff changeset
1123 (buffer-substring-no-properties here (point-max)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1124 (setq i (1+ i)))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1125
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1126 (defun forms--make-parser-elt (el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1127 "Helper routine to generate forms parser function."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1128
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1129 ;; The parse routine will look like:
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1130 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1131 ;; (lambda nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1132 ;; (let (here)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1133 ;; (goto-char (point-min))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1134 ;;
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1135 ;; ;; "text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1136 ;; (if (not (looking-at "text: "))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1137 ;; (error "Parse error: cannot find \"text: \""))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1138 ;; (forward-char 6) ; past "text: "
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1139 ;;
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1140 ;; ;; 6
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1141 ;; ;; "\nmore text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1142 ;; (setq here (point))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1143 ;; (if (not (search-forward "\nmore text: " nil t nil))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1144 ;; (error "Parse error: cannot find \"\\nmore text: \""))
13569
438ebe3b6f8d Use `buffer-substring-no-properties' instead of `buffer-substring' to
Johan Vromans <jvromans@squirrel.nl>
parents: 13337
diff changeset
1145 ;; (aset forms--recordv 5 (buffer-substring-no-properties here (- (point) 12)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1146 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1147 ;; ;; (tocol 40)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1148 ;; (let ((forms--dyntext (car-safe forms--dynamic-text)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1149 ;; (if (not (looking-at (regexp-quote forms--dyntext)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1150 ;; (error "Parse error: not looking at \"%s\"" forms--dyntext))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1151 ;; (forward-char (length forms--dyntext))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1152 ;; (setq forms--dynamic-text (cdr-safe forms--dynamic-text)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1153 ;; ...
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1154 ;; ;; final flush (due to terminator sentinel, see below)
13569
438ebe3b6f8d Use `buffer-substring-no-properties' instead of `buffer-substring' to
Johan Vromans <jvromans@squirrel.nl>
parents: 13337
diff changeset
1155 ;; (aset forms--recordv 7 (buffer-substring-no-properties (point) (point-max)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1156
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1157 (cond
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1158 ((stringp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1159 (prog1
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1160 (if forms--field
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1161 `((setq here (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1162 (if (not (search-forward ,el nil t nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1163 (error "Parse error: cannot find `%s'" ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1164 (aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1165 (buffer-substring-no-properties here
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1166 (- (point) ,(length el)))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1167 `((if (not (looking-at ,(regexp-quote el)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1168 (error "Parse error: not looking at `%s'" ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1169 (forward-char ,(length el))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1170 (setq forms--seen-text t)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1171 (setq forms--field nil)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1172 ((numberp el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1173 (if forms--field
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1174 (error "Cannot parse adjacent fields %d and %d"
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1175 forms--field el)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1176 (setq forms--field el)
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1177 nil))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1178 ((null el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1179 (if forms--field
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1180 `((aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1181 (buffer-substring-no-properties (point) (point-max))))))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1182 ((listp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1183 (prog1
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1184 (if forms--field
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1185 `((let ((here (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1186 (forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1187 (if (not (search-forward forms--dyntext nil t nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1188 (error "Parse error: cannot find `%s'" forms--dyntext))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1189 (aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1190 (buffer-substring-no-properties here
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1191 (- (point) (length forms--dyntext))))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1192 `((let ((forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1193 (if (not (looking-at (regexp-quote forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1194 (error "Parse error: not looking at `%s'" forms--dyntext))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1195 (forward-char (length forms--dyntext)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1196 (setq forms--dyntext (1+ forms--dyntext))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1197 (setq forms--seen-text t)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1198 (setq forms--field nil)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1199 ))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1200
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1201 (defun forms--intuit-from-file ()
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1202 "Get number of fields and a default form using the data file."
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1203
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1204 ;; If `forms-number-of-fields' is not set, get it from the data file.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1205 (if (null forms-number-of-fields)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1206
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1207 ;; Need a file to do this.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1208 (if (not (file-exists-p forms-file))
63400
00398c07d65c (forms--intuit-from-file): Fix reference to `forms-number-of-fields' in error message.
Juanma Barranquero <lekktu@gmail.com>
parents: 62728
diff changeset
1209 (error "Need existing file or explicit `forms-number-of-fields'")
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1210
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1211 ;; Visit the file and extract the first record.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1212 (setq forms--file-buffer (find-file-noselect forms-file))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1213 (let ((read-file-filter forms-read-file-filter)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1214 (the-record))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1215 (setq the-record
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1216 (with-current-buffer forms--file-buffer
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1217 (let ((inhibit-read-only t))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1218 (run-hooks 'read-file-filter))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1219 (goto-char (point-min))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1220 (forms--get-record)))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1221
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1222 ;; This may be overkill, but try to avoid interference with
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1223 ;; the normal processing.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1224 (kill-buffer forms--file-buffer)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1225
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1226 ;; Count the number of fields in `the-record'.
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1227 (let ((start-pos 0)
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1228 found-pos
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1229 (field-sep-length (length forms-field-sep)))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1230 (setq forms-number-of-fields 1)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1231 (while (setq found-pos
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1232 (string-match forms-field-sep the-record start-pos))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1233 (progn
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1234 (setq forms-number-of-fields (1+ forms-number-of-fields))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1235 (setq start-pos (+ field-sep-length found-pos))))))))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1236
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1237 ;; Construct default format list.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1238 (setq forms-format-list (list "Forms file \"" forms-file "\".\n\n"))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1239 (let ((i 0))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1240 (while (<= (setq i (1+ i)) forms-number-of-fields)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1241 (setq forms-format-list
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1242 (append forms-format-list
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1243 (list (format "%4d: " i) i "\n"))))))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1244
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1245 (defun forms--set-keymaps ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1246 "Set the keymaps used in this mode."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1247
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1248 (use-local-map (if forms-read-only
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1249 forms-mode-ro-map
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1250 forms-mode-edit-map)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1251
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1252 (defun forms--mode-commands ()
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1253 "Fill the Forms mode keymaps."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1254
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1255 ;; `forms-mode-map' is always accessible via \C-c prefix.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1256 (setq forms-mode-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1257 (define-key forms-mode-map "\t" 'forms-next-field)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1258 (define-key forms-mode-map "\C-k" 'forms-delete-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1259 (define-key forms-mode-map "\C-q" 'forms-toggle-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1260 (define-key forms-mode-map "\C-o" 'forms-insert-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1261 (define-key forms-mode-map "\C-l" 'forms-jump-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1262 (define-key forms-mode-map "\C-n" 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1263 (define-key forms-mode-map "\C-p" 'forms-prev-record)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1264 (define-key forms-mode-map "\C-r" 'forms-search-backward)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1265 (define-key forms-mode-map "\C-s" 'forms-search-forward)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1266 (define-key forms-mode-map "\C-x" 'forms-exit)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1267 (define-key forms-mode-map "<" 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1268 (define-key forms-mode-map ">" 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1269 (define-key forms-mode-map "\C-?" 'forms-prev-record)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1270
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1271 ;; `forms-mode-ro-map' replaces the local map when in read-only mode.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1272 (setq forms-mode-ro-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1273 (suppress-keymap forms-mode-ro-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1274 (define-key forms-mode-ro-map "\C-c" forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1275 (define-key forms-mode-ro-map "q" 'forms-toggle-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1276 (define-key forms-mode-ro-map "l" 'forms-jump-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1277 (define-key forms-mode-ro-map "n" 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1278 (define-key forms-mode-ro-map "p" 'forms-prev-record)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1279 (define-key forms-mode-ro-map "r" 'forms-search-backward)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1280 (define-key forms-mode-ro-map "s" 'forms-search-forward)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1281 (define-key forms-mode-ro-map "x" 'forms-exit)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1282 (define-key forms-mode-ro-map "<" 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1283 (define-key forms-mode-ro-map ">" 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1284 (define-key forms-mode-ro-map "?" 'describe-mode)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1285 (define-key forms-mode-ro-map " " 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1286 (forms--mode-commands1 forms-mode-ro-map)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1287 (forms--mode-menu-ro forms-mode-ro-map)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1288
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1289 ;; This is the normal, local map.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1290 (setq forms-mode-edit-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1291 (define-key forms-mode-edit-map "\C-c" forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1292 (forms--mode-commands1 forms-mode-edit-map)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1293 (forms--mode-menu-edit forms-mode-edit-map)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1294 )
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1295
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1296 (defun forms--mode-menu-ro (map)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1297 ;;; Menu initialisation
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1298 ; (define-key map [menu-bar] (make-sparse-keymap))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1299 (define-key map [menu-bar forms]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1300 (cons "Forms" (make-sparse-keymap "Forms")))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1301 (define-key map [menu-bar forms menu-forms-exit]
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1302 '("Exit Forms Mode" . forms-exit))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1303 (define-key map [menu-bar forms menu-forms-sep1]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1304 '("----"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1305 (define-key map [menu-bar forms menu-forms-save]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1306 '("Save Data" . forms-save-buffer))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1307 (define-key map [menu-bar forms menu-forms-print]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1308 '("Print Data" . forms-print))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1309 (define-key map [menu-bar forms menu-forms-describe]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1310 '("Describe Mode" . describe-mode))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1311 (define-key map [menu-bar forms menu-forms-toggle-ro]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1312 '("Toggle View/Edit" . forms-toggle-read-only))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1313 (define-key map [menu-bar forms menu-forms-jump-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1314 '("Jump" . forms-jump-record))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1315 (define-key map [menu-bar forms menu-forms-search-backward]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1316 '("Search Backward" . forms-search-backward))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1317 (define-key map [menu-bar forms menu-forms-search-forward]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1318 '("Search Forward" . forms-search-forward))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1319 (define-key map [menu-bar forms menu-forms-delete-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1320 '("Delete" . forms-delete-record))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1321 (define-key map [menu-bar forms menu-forms-insert-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1322 '("Insert" . forms-insert-record))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1323 (define-key map [menu-bar forms menu-forms-sep2]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1324 '("----"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1325 (define-key map [menu-bar forms menu-forms-last-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1326 '("Last Record" . forms-last-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1327 (define-key map [menu-bar forms menu-forms-first-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1328 '("First Record" . forms-first-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1329 (define-key map [menu-bar forms menu-forms-prev-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1330 '("Previous Record" . forms-prev-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1331 (define-key map [menu-bar forms menu-forms-next-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1332 '("Next Record" . forms-next-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1333 (define-key map [menu-bar forms menu-forms-sep3]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1334 '("----"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1335 (define-key map [menu-bar forms menu-forms-prev-field]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1336 '("Previous Field" . forms-prev-field))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1337 (define-key map [menu-bar forms menu-forms-next-field]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1338 '("Next Field" . forms-next-field))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1339 (put 'forms-insert-record 'menu-enable '(not forms-read-only))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1340 (put 'forms-delete-record 'menu-enable '(not forms-read-only))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1341 )
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1342 (defun forms--mode-menu-edit (map)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1343 ;;; Menu initialisation
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1344 ; (define-key map [menu-bar] (make-sparse-keymap))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1345 (define-key map [menu-bar forms]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1346 (cons "Forms" (make-sparse-keymap "Forms")))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1347 (define-key map [menu-bar forms menu-forms-edit--exit]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1348 '("Exit" . forms-exit))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1349 (define-key map [menu-bar forms menu-forms-edit-sep1]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1350 '("----"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1351 (define-key map [menu-bar forms menu-forms-edit-save]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1352 '("Save Data" . forms-save-buffer))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1353 (define-key map [menu-bar forms menu-forms-edit-print]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1354 '("Print Data" . forms-print))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1355 (define-key map [menu-bar forms menu-forms-edit-describe]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1356 '("Describe Mode" . describe-mode))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1357 (define-key map [menu-bar forms menu-forms-edit-toggle-ro]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1358 '("Toggle View/Edit" . forms-toggle-read-only))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1359 (define-key map [menu-bar forms menu-forms-edit-jump-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1360 '("Jump" . forms-jump-record))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1361 (define-key map [menu-bar forms menu-forms-edit-search-backward]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1362 '("Search Backward" . forms-search-backward))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1363 (define-key map [menu-bar forms menu-forms-edit-search-forward]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1364 '("Search Forward" . forms-search-forward))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1365 (define-key map [menu-bar forms menu-forms-edit-delete-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1366 '("Delete" . forms-delete-record))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1367 (define-key map [menu-bar forms menu-forms-edit-insert-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1368 '("Insert" . forms-insert-record))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1369 (define-key map [menu-bar forms menu-forms-edit-sep2]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1370 '("----"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1371 (define-key map [menu-bar forms menu-forms-edit-last-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1372 '("Last Record" . forms-last-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1373 (define-key map [menu-bar forms menu-forms-edit-first-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1374 '("First Record" . forms-first-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1375 (define-key map [menu-bar forms menu-forms-edit-prev-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1376 '("Previous Record" . forms-prev-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1377 (define-key map [menu-bar forms menu-forms-edit-next-record]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1378 '("Next Record" . forms-next-record))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1379 (define-key map [menu-bar forms menu-forms-edit-sep3]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1380 '("----"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1381 (define-key map [menu-bar forms menu-forms-edit-prev-field]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1382 '("Previous Field" . forms-prev-field))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1383 (define-key map [menu-bar forms menu-forms-edit-next-field]
12031
a59559009d7e (forms--mode-menu-ro, forms--mode-menu-edit): Fix capitalization in menu bar.
Karl Heuer <kwzh@gnu.org>
parents: 11645
diff changeset
1384 '("Next Field" . forms-next-field))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1385 (put 'forms-insert-record 'menu-enable '(not forms-read-only))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1386 (put 'forms-delete-record 'menu-enable '(not forms-read-only))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1387 )
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1388
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1389 (defun forms--mode-commands1 (map)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1390 "Helper routine to define keys."
51160
f7bc28024050 (forms--mode-commands1): Bind \t, not `tab'.
Richard M. Stallman <rms@gnu.org>
parents: 49588
diff changeset
1391 (define-key map "\t" 'forms-next-field)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1392 (define-key map [S-tab] 'forms-prev-field)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1393 (define-key map [next] 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1394 (define-key map [prior] 'forms-prev-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1395 (define-key map [begin] 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1396 (define-key map [last] 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1397 (define-key map [backtab] 'forms-prev-field)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1398 )
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1399
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1400 ;;; Changed functions
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1401
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1402 (defun forms--change-commands ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1403 "Localize some commands for Forms mode."
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1404
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1405 ;; scroll-down -> forms-prev-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1406 ;; scroll-up -> forms-next-record
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1407 (if forms-forms-scroll
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1408 (progn
49169
755b96b5f3ca (forms--change-commands): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents: 45337
diff changeset
1409 (local-set-key [remap scroll-up] 'forms-next-record)
107853
de5ba6f3514c Bind `C-v' to `scroll-up-command' and `M-v' to `scroll-down-command'.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1410 (local-set-key [remap scroll-down] 'forms-prev-record)
de5ba6f3514c Bind `C-v' to `scroll-up-command' and `M-v' to `scroll-down-command'.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1411 (local-set-key [remap scroll-up-command] 'forms-next-record)
de5ba6f3514c Bind `C-v' to `scroll-up-command' and `M-v' to `scroll-down-command'.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1412 (local-set-key [remap scroll-down-command] 'forms-prev-record)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1413 ;;
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1414 ;; beginning-of-buffer -> forms-first-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1415 ;; end-of-buffer -> forms-end-record
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1416 (if forms-forms-jump
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1417 (progn
49169
755b96b5f3ca (forms--change-commands): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents: 45337
diff changeset
1418 (local-set-key [remap beginning-of-buffer] 'forms-first-record)
755b96b5f3ca (forms--change-commands): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents: 45337
diff changeset
1419 (local-set-key [remap end-of-buffer] 'forms-last-record)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1420 ;;
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1421 ;; Save buffer
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1422 (local-set-key "\C-x\C-s" 'forms-save-buffer)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1423 ;;
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1424 ;; We have our own revert function - use it.
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1425 (make-local-variable 'revert-buffer-function)
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1426 (setq revert-buffer-function 'forms--revert-buffer)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1427
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1428 t)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1429
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1430 (defun forms--help ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1431 "Initial help for Forms mode."
14315
ab041898078d (forms--help, forms-search-forward, forms-search-backward): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
1432 (message "%s" (substitute-command-keys (concat
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1433 "\\[forms-next-record]:next"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1434 " \\[forms-prev-record]:prev"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1435 " \\[forms-first-record]:first"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1436 " \\[forms-last-record]:last"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1437 " \\[describe-mode]:help"))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1438
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1439 (defun forms--trans (subj arg rep)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1440 "Translate in SUBJ all chars ARG into char REP. ARG and REP should
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1441 be single-char strings."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1442 (let ((i 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1443 (re (regexp-quote arg))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1444 (k (string-to-char rep)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1445 (while (setq i (string-match re subj i))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1446 (aset subj i k)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1447 (setq i (1+ i)))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1448
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1449 (defun forms--exit (&optional save)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1450 "Internal exit from forms mode function."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1451
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1452 (let ((buf (buffer-name forms--file-buffer)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1453 (forms--checkmod)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1454 (if (and save
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1455 (buffer-modified-p forms--file-buffer))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1456 (forms-save-buffer))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1457 (with-current-buffer forms--file-buffer
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1458 (delete-auto-save-file-if-necessary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1459 (kill-buffer (current-buffer)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1460 (if (get-buffer buf) ; not killed???
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1461 (if save
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1462 (error "Problem saving buffer %s" (buffer-name buf)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1463 (delete-auto-save-file-if-necessary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1464 (kill-buffer (current-buffer)))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1465
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1466 (defun forms--get-record ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1467 "Fetch the current record from the file buffer."
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1468
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1469 ;; This function is executed in the context of the `forms--file-buffer'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1470
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1471 (or (bolp)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1472 (beginning-of-line nil))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1473 (let ((here (point)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1474 (prog2
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1475 (end-of-line)
13569
438ebe3b6f8d Use `buffer-substring-no-properties' instead of `buffer-substring' to
Johan Vromans <jvromans@squirrel.nl>
parents: 13337
diff changeset
1476 (buffer-substring-no-properties here (point))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1477 (goto-char here))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1478
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1479 (defun forms--show-record (the-record)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1480 "Format THE-RECORD and display it in the current buffer."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1481
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1482 ;; Split the-record.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1483 (let (the-result
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1484 (start-pos 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1485 found-pos
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1486 (field-sep-length (length forms-field-sep)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1487 (if forms-multi-line
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1488 (forms--trans the-record forms-multi-line "\n"))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1489 ;; Add an extra separator (makes splitting easy).
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1490 (setq the-record (concat the-record forms-field-sep))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1491 (while (setq found-pos (string-match forms-field-sep the-record start-pos))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1492 (let ((ent (substring the-record start-pos found-pos)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1493 (setq the-result
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1494 (append the-result (list ent)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1495 (setq start-pos (+ field-sep-length found-pos))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1496 (setq forms--the-record-list the-result))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1497
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1498 (setq buffer-read-only nil)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1499 (if forms-use-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1500 (let ((inhibit-read-only t))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1501 (set-text-properties (point-min) (point-max) nil)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1502 (erase-buffer)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1503
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1504 ;; Verify the number of fields, extend forms--the-record-list if needed.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1505 (if (= (length forms--the-record-list) forms-number-of-fields)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1506 nil
12847
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
1507 (if (null forms-check-number-of-fields)
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
1508 nil
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
1509 (message "Warning: this record has %d fields instead of %d"
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
1510 (length forms--the-record-list) forms-number-of-fields))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1511 (if (< (length forms--the-record-list) forms-number-of-fields)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1512 (setq forms--the-record-list
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1513 (append forms--the-record-list
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1514 (make-list
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1515 (- forms-number-of-fields
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1516 (length forms--the-record-list))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1517 "")))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1518
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1519 ;; Call the formatter function.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1520 (setq forms-fields (append (list nil) forms--the-record-list nil))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1521 (funcall forms--format forms--the-record-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1522
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1523 ;; Prepare.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1524 (goto-char (point-min))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1525 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1526 (setq buffer-read-only forms-read-only)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1527 (setq mode-line-process
24077
b5abeb8ab500 (forms--show-record): Convert integers to string
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
1528 (concat " " (int-to-string forms--current-record)
b5abeb8ab500 (forms--show-record): Convert integers to string
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
1529 "/" (int-to-string forms--total-records))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1530
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1531 (defun forms--parse-form ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1532 "Parse contents of form into list of strings."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1533 ;; The contents of the form are parsed, and a new list of strings
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1534 ;; is constructed.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1535 ;; A vector with the strings from the original record is
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1536 ;; constructed, which is updated with the new contents. Therefore
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1537 ;; fields which were not in the form are not modified.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1538 ;; Finally, the vector is transformed into a list for further processing.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1539
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1540 (let (forms--recordv)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1541
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1542 ;; Build the vector.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1543 (setq forms--recordv (vconcat forms--the-record-list))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1544
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1545 ;; Parse the form and update the vector.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1546 (let ((forms--dynamic-text forms--dynamic-text))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1547 (funcall forms--parser))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1548
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1549 (if forms-modified-record-filter
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1550 ;; As a service to the user, we add a zeroth element so she
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1551 ;; can use the same indices as in the forms definition.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1552 (let ((the-fields (vconcat [nil] forms--recordv)))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1553 (setq the-fields (funcall forms-modified-record-filter the-fields))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1554 (cdr (append the-fields nil)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1555
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1556 ;; Transform to a list and return.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1557 (append forms--recordv nil))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1558
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1559 (defun forms--update ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1560 "Update current record with contents of form.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1561 As a side effect: sets `forms--the-record-list'."
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1562
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1563 (if forms-read-only
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1564 (error "Buffer is read-only"))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1565
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1566 (let (the-record)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1567 ;; Build new record.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1568 (setq forms--the-record-list (forms--parse-form))
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1569 (setq the-record
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1570 (mapconcat 'identity forms--the-record-list forms-field-sep))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1571
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1572 (if (string-match (regexp-quote forms-field-sep)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1573 (mapconcat 'identity forms--the-record-list ""))
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1574 (error "Field separator occurs in record - update refused"))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1575
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1576 ;; Handle multi-line fields, if allowed.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1577 (if forms-multi-line
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1578 (forms--trans the-record "\n" forms-multi-line))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1579
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1580 ;; A final sanity check before updating.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1581 (if (string-match "\n" the-record)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1582 (error "Multi-line fields in this record - update refused"))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1583
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1584 (with-current-buffer forms--file-buffer
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1585 ;; Use delete-region instead of kill-region, to avoid
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1586 ;; adding junk to the kill-ring.
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1587 (delete-region (line-beginning-position) (line-end-position))
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1588 (insert the-record)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1589 (beginning-of-line))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1590
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1591 (defun forms--checkmod ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1592 "Check if this form has been modified, and call forms--update if so."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1593 (if (buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1594 (let ((here (point)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1595 (forms--update)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1596 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1597 (goto-char here))))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1598
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1599 ;;; Start and exit
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1600
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1601 ;;;###autoload
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1602 (defun forms-find-file (fn)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1603 "Visit a file in Forms mode."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1604 (interactive "fForms file: ")
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1605 (let ((enable-local-eval t)
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1606 (enable-local-variables t))
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1607 (find-file-read-only fn)
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1608 (or forms--mode-setup (forms-mode t))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1609
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1610 ;;;###autoload
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1611 (defun forms-find-file-other-window (fn)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1612 "Visit a file in Forms mode in other window."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1613 (interactive "fFbrowse file in other window: ")
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1614 (let ((enable-local-eval t)
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1615 (enable-local-variables t))
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1616 (find-file-other-window fn)
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1617 (or forms--mode-setup (forms-mode t))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1618
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1619 (defun forms-exit ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1620 "Normal exit from Forms mode. Modified buffers are saved."
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1621 (interactive)
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1622 (forms--exit t))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1623
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1624 (defun forms-exit-no-save ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1625 "Exit from Forms mode without saving buffers."
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1626 (interactive)
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1627 (forms--exit nil))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1628
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1629 ;;; Navigating commands
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1630
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1631 (defun forms-next-record (arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1632 "Advance to the ARGth following record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1633 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1634 (forms-jump-record (+ forms--current-record (prefix-numeric-value arg)) t))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1635
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1636 (defun forms-prev-record (arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1637 "Advance to the ARGth previous record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1638 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1639 (forms-jump-record (- forms--current-record (prefix-numeric-value arg)) t))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1640
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1641 (defun forms--goto-record (rn &optional current)
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1642 "Goto record number RN.
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1643 If CURRENT is provided, it specifies the current record and can be used
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1644 to speed up access to RN. Returns the number of records missing, if any."
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1645 (if current
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1646 (forward-line (- rn current))
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1647 ;; goto-line does not do what we want when the buffer is narrowed.
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1648 (goto-char (point-min))
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1649 (forward-line (1- rn))))
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1650
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1651 (defun forms-jump-record (arg &optional relative)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1652 "Jump to a random record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1653 (interactive "NRecord number: ")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1654
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1655 ;; Verify that the record number is within range.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1656 (if (or (> arg forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1657 (<= arg 0))
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1658 (error
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1659 ;; Don't give the message if just paging.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1660 (if (not relative)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1661 (message "Record number %d out of range 1..%d"
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1662 arg forms--total-records)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1663 "")))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1664
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1665 ;; Flush.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1666 (forms--checkmod)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1667
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1668 ;; Calculate displacement.
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1669 (let ((cur forms--current-record))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1670
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1671 ;; `forms--show-record' needs it now.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1672 (setq forms--current-record arg)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1673
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1674 ;; Get the record and show it.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1675 (forms--show-record
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1676 (with-current-buffer forms--file-buffer
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1677 (beginning-of-line)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1678
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1679 ;; Move, and adjust the amount if needed (shouldn't happen).
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1680 (setq cur (- arg (forms--goto-record arg (if relative cur))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1681
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1682 (forms--get-record)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1683
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1684 ;; This shouldn't happen.
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1685 (if (/= forms--current-record cur)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1686 (progn
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1687 (setq forms--current-record cur)
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1688 (error "Stuck at record %d" cur)))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1689
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1690 (defun forms-first-record ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1691 "Jump to first record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1692 (interactive)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1693 (forms-jump-record 1))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1694
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1695 (defun forms-last-record ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1696 "Jump to last record.
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1697 As a side effect: re-calculates the number of records in the data file."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1698 (interactive)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1699 (let
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1700 ((numrec
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1701 (with-current-buffer forms--file-buffer
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1702 (count-lines (point-min) (point-max)))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1703 (if (= numrec forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1704 nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1705 (setq forms--total-records numrec)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1706 (message "Warning: number of records changed to %d" forms--total-records)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1707 (forms-jump-record forms--total-records))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1708
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1709 ;;; Other commands
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1710
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1711 (defun forms-toggle-read-only (arg)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1712 "Toggles read-only mode of a forms mode buffer.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1713 With an argument, enables read-only mode if the argument is positive.
13984
c045b6e55d08 (forms-toggle-read-only, forms-enumerate): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13569
diff changeset
1714 Otherwise enables edit mode if the visited file is writable."
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1715
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1716 (interactive "P")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1717
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1718 (if (if arg
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1719 ;; Negative arg means switch it off.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1720 (<= (prefix-numeric-value arg) 0)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1721 ;; No arg means toggle.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1722 forms-read-only)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1723
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1724 ;; Enable edit mode, if possible.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1725 (let ((ro forms-read-only))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1726 (if (with-current-buffer forms--file-buffer
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1727 buffer-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1728 (progn
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1729 (setq forms-read-only t)
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1730 (message "No write access to `%s'" forms-file))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1731 (setq forms-read-only nil))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1732 (if (equal ro forms-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1733 nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1734 (forms-mode)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1735
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1736 ;; Enable view mode.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1737 (if forms-read-only
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1738 nil
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1739 (forms--checkmod) ; sync
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1740 (setq forms-read-only t)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1741 (forms-mode))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1742
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1743 ;; Sample:
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1744 ;; (defun my-new-record-filter (the-fields)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1745 ;; ;; numbers are relative to 1
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1746 ;; (aset the-fields 4 (current-time-string))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1747 ;; (aset the-fields 6 (user-login-name))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1748 ;; the-list)
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1749 ;; (setq forms-new-record-filter 'my-new-record-filter)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1750
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1751 (defun forms-insert-record (arg)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1752 "Create a new record before the current one.
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1753 With ARG: store the record after the current one.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1754 If `forms-new-record-filter' contains the name of a function,
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1755 it is called to fill (some of) the fields with default values.
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1756 If `forms-insert-after is non-nil, the default behavior is to insert
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1757 after the current record."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1758
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1759 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1760
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1761 (if forms-read-only
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1762 (error ""))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1763
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1764 (let (ln the-list the-record)
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1765
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1766 (if (or (and arg forms-insert-after)
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1767 (and (not arg) (not forms-insert-after)))
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1768 (setq ln forms--current-record)
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
1769 (setq ln (1+ forms--current-record)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1770
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1771 (forms--checkmod)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1772 (if forms-new-record-filter
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1773 ;; As a service to the user, we add a zeroth element so she
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1774 ;; can use the same indices as in the forms definition.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1775 (let ((the-fields (make-vector (1+ forms-number-of-fields) "")))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1776 (setq the-fields (funcall forms-new-record-filter the-fields))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1777 (setq the-list (cdr (append the-fields nil))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1778 (setq the-list (make-list forms-number-of-fields "")))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1779
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1780 (setq the-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1781 (mapconcat
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1782 'identity
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1783 the-list
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1784 forms-field-sep))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1785
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1786 (with-current-buffer forms--file-buffer
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1787 (forms--goto-record ln)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1788 (open-line 1)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1789 (insert the-record)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1790 (beginning-of-line))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1791
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1792 (setq forms--current-record ln))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1793
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1794 (setq forms--total-records (1+ forms--total-records))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1795 (forms-jump-record forms--current-record))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1796
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1797 (defun forms-delete-record (arg)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1798 "Deletes a record. With a prefix argument: don't ask."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1799 (interactive "P")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1800
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1801 (if forms-read-only
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1802 (error ""))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1803
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1804 (forms--checkmod)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1805 (if (or arg
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1806 (y-or-n-p "Really delete this record? "))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1807 (let ((ln forms--current-record))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1808 (with-current-buffer forms--file-buffer
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1809 (forms--goto-record ln)
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
1810 ;; Use delete-region instead of kill-region, to avoid
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
1811 ;; adding junk to the kill-ring.
8272
8d790a29a13a (forms-delete-record): Handle deletion of last line
Richard M. Stallman <rms@gnu.org>
parents: 7863
diff changeset
1812 (delete-region (progn (beginning-of-line) (point))
8d790a29a13a (forms-delete-record): Handle deletion of last line
Richard M. Stallman <rms@gnu.org>
parents: 7863
diff changeset
1813 (progn (beginning-of-line 2) (point))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1814 (setq forms--total-records (1- forms--total-records))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1815 (if (> forms--current-record forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1816 (setq forms--current-record forms--total-records))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1817 (forms-jump-record forms--current-record)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1818 (message ""))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1819
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1820 (defun forms-search-forward (regexp)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1821 "Search forward for record containing REGEXP."
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1822 (interactive
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1823 (list (read-string (concat "Search forward for"
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1824 (if forms--search-regexp
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1825 (concat " ("
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1826 forms--search-regexp
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1827 ")"))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1828 ": "))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1829 (if (equal "" regexp)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1830 (setq regexp forms--search-regexp))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1831 (forms--checkmod)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1832
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1833 (let (the-line the-record here)
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1834 (with-current-buffer forms--file-buffer
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1835 (end-of-line)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1836 (setq here (point))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1837 (if (or (re-search-forward regexp nil t)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1838 (and (> here (point-min))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1839 (progn
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1840 (goto-char (point-min))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1841 (re-search-forward regexp here t))))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1842 (progn
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1843 (setq the-record (forms--get-record))
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1844 (setq the-line (1+ (count-lines (point-min) (point))))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1845 (if (< (point) here)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1846 (message "Wrapped")))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1847 (goto-char here)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1848 (error "Search failed: %s" regexp)))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1849 (setq forms--current-record the-line)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1850 (forms--show-record the-record))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1851 (re-search-forward regexp nil t)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1852 (setq forms--search-regexp regexp))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1853
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1854 (defun forms-search-backward (regexp)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1855 "Search backward for record containing REGEXP."
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1856 (interactive
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1857 (list (read-string (concat "Search backward for"
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1858 (if forms--search-regexp
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1859 (concat " ("
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1860 forms--search-regexp
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1861 ")"))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1862 ": "))))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1863 (if (equal "" regexp)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1864 (setq regexp forms--search-regexp))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1865 (forms--checkmod)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1866
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1867 (let (the-line the-record here)
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1868 (with-current-buffer forms--file-buffer
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1869 (beginning-of-line)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1870 (setq here (point))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1871 (if (or (re-search-backward regexp nil t)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1872 (and (< (point) (point-max))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1873 (progn
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1874 (goto-char (point-max))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1875 (re-search-backward regexp here t))))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1876 (progn
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1877 (setq the-record (forms--get-record))
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1878 (setq the-line (1+ (count-lines (point-min) (point))))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1879 (if (> (point) here)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1880 (message "Wrapped")))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1881 (goto-char here)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1882 (error "Search failed: %s" regexp)))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1883 (setq forms--current-record the-line)
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1884 (forms--show-record the-record))
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
1885 (re-search-forward regexp nil t)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1886 (setq forms--search-regexp regexp))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1887
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1888 (defun forms-save-buffer (&optional args)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1889 "Forms mode replacement for save-buffer.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1890 It saves the data buffer instead of the forms buffer.
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1891 Calls `forms-write-file-filter' before, and `forms-read-file-filter'
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1892 after writing out the data."
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1893 (interactive "p")
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1894 (forms--checkmod)
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1895 (let ((write-file-filter forms-write-file-filter)
24794
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1896 (read-file-filter forms-read-file-filter)
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1897 (cur forms--current-record))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1898 (with-current-buffer forms--file-buffer
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1899 (let ((inhibit-read-only t))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1900 ;; Write file hooks are run via write-file-functions.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1901 ;; (if write-file-filter
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1902 ;; (save-excursion
24794
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1903 ;; (run-hooks 'write-file-filter)))
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1904
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1905 ;; If they have a write-file-filter, force the buffer to be
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1906 ;; saved even if it doesn't seem to be changed. First, they
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1907 ;; might have changed the write-file-filter; and second, if
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1908 ;; save-buffer does nothing, write-file-filter won't get run,
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1909 ;; and then read-file-filter will be mightily confused.
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1910 (or (null write-file-filter)
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1911 (set-buffer-modified-p t))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1912 (save-buffer args)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1913 (if read-file-filter
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1914 (save-excursion
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1915 (run-hooks 'read-file-filter)))
24794
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1916 (set-buffer-modified-p nil)))
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1917 ;; Make sure we end up with the same record number as we started.
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1918 ;; Since read-file-filter may perform arbitrary transformations on
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1919 ;; the data buffer contents, save-excursion is not enough.
ce4f0f55e174 forms-save-buffer): Call set-buffer-modified-p to
Eli Zaretskii <eliz@gnu.org>
parents: 24655
diff changeset
1920 (forms-jump-record cur))
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1921 t)
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1922
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
1923 (defun forms--revert-buffer (&optional arg noconfirm)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1924 "Reverts current form to un-modified."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1925 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1926 (if (or noconfirm
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1927 (yes-or-no-p "Revert form to unmodified? "))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1928 (progn
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1929 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1930 (forms-jump-record forms--current-record))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1931
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1932 (defun forms-next-field (arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1933 "Jump to ARG-th next field."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1934 (interactive "p")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1935
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1936 (let ((i 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1937 (here (point))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1938 there
11557
63406705a7e2 (forms--make-format-elt-using-text-properties)
Richard M. Stallman <rms@gnu.org>
parents: 10348
diff changeset
1939 (cnt 0)
63406705a7e2 (forms--make-format-elt-using-text-properties)
Richard M. Stallman <rms@gnu.org>
parents: 10348
diff changeset
1940 (inhibit-point-motion-hooks t))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1941
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1942 (if (zerop arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1943 (setq cnt 1)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1944 (setq cnt (+ cnt arg)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1945
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1946 (if (catch 'done
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1947 (while (< i (length forms--markers))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1948 (if (or (null (setq there (aref forms--markers i)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1949 (<= there here))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1950 nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1951 (if (<= (setq cnt (1- cnt)) 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1952 (progn
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1953 (goto-char there)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1954 (throw 'done t))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1955 (setq i (1+ i))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1956 nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1957 (goto-char (aref forms--markers 0)))))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1958
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1959 (defun forms-prev-field (arg)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1960 "Jump to ARG-th previous field."
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1961 (interactive "p")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1962
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1963 (let ((i (length forms--markers))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1964 (here (point))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1965 there
11557
63406705a7e2 (forms--make-format-elt-using-text-properties)
Richard M. Stallman <rms@gnu.org>
parents: 10348
diff changeset
1966 (cnt 0)
63406705a7e2 (forms--make-format-elt-using-text-properties)
Richard M. Stallman <rms@gnu.org>
parents: 10348
diff changeset
1967 (inhibit-point-motion-hooks t))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1968
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1969 (if (zerop arg)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1970 (setq cnt 1)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1971 (setq cnt (+ cnt arg)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1972
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1973 (if (catch 'done
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1974 (while (> i 0)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1975 (setq i ( 1- i))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1976 (if (or (null (setq there (aref forms--markers i)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1977 (>= there here))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1978 nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1979 (if (<= (setq cnt (1- cnt)) 0)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1980 (progn
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1981 (goto-char there)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1982 (throw 'done t))))))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1983 nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1984 (goto-char (aref forms--markers (1- (length forms--markers)))))))
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1985
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1986 (defun forms-print ()
63400
00398c07d65c (forms--intuit-from-file): Fix reference to `forms-number-of-fields' in error message.
Juanma Barranquero <lekktu@gmail.com>
parents: 62728
diff changeset
1987 "Send the records to the printer with `print-buffer', one record per page."
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1988 (interactive)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1989 (let ((inhibit-read-only t)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1990 (save-record forms--current-record)
24077
b5abeb8ab500 (forms--show-record): Convert integers to string
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
1991 (total-nb-records forms--total-records)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1992 (nb-record 1)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1993 (record nil))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1994 (while (<= nb-record forms--total-records)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1995 (forms-jump-record nb-record)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1996 (setq record (buffer-string))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1997 (with-current-buffer (get-buffer-create "*forms-print*")
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1998 (goto-char (buffer-end 1))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1999 (insert record)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2000 (setq buffer-read-only nil)
24077
b5abeb8ab500 (forms--show-record): Convert integers to string
Richard M. Stallman <rms@gnu.org>
parents: 23382
diff changeset
2001 (if (< nb-record total-nb-records)
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2002 (insert "\n \n")))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2003 (setq nb-record (1+ nb-record)))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
2004 (with-current-buffer "*forms-print*"
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2005 (print-buffer)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2006 (set-buffer-modified-p nil)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2007 (kill-buffer (current-buffer)))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2008 (forms-jump-record save-record)))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
2009
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2010 ;;;
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2011 ;;; Special service
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2012 ;;;
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2013 (defun forms-enumerate (the-fields)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
2014 "Take a quoted list of symbols, and set their values to sequential numbers.
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
2015 The first symbol gets number 1, the second 2 and so on.
13984
c045b6e55d08 (forms-toggle-read-only, forms-enumerate): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13569
diff changeset
2016 It returns the highest number.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2017
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2018 Usage: (setq forms-number-of-fields
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2019 (forms-enumerate
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2020 '(field1 field2 field2 ...)))"
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2021
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2022 (let ((the-index 0))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2023 (while the-fields
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2024 (setq the-index (1+ the-index))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2025 (let ((el (car-safe the-fields)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2026 (setq the-fields (cdr-safe the-fields))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2027 (set el the-index)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2028 the-index))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
2029
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2030 ;;; Debugging
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
2031
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2032 (defvar forms--debug nil
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2033 "*Enables forms-mode debugging if not nil.")
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2034
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2035 (defun forms--debug (&rest args)
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
2036 "Internal debugging routine."
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2037 (if forms--debug
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2038 (let ((ret nil))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2039 (while args
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2040 (let ((el (car-safe args)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2041 (setq args (cdr-safe args))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2042 (if (stringp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2043 (setq ret (concat ret el))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2044 (setq ret (concat ret (prin1-to-string el) " = "))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2045 (if (boundp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2046 (let ((vel (eval el)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2047 (setq ret (concat ret (prin1-to-string vel) "\n")))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2048 (setq ret (concat ret "<unbound>" "\n")))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2049 (if (fboundp el)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
2050 (setq ret (concat ret (prin1-to-string (symbol-function el))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2051 "\n"))))))
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
2052 (with-current-buffer (get-buffer-create "*forms-mode debug*")
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
2053 (if (zerop (buffer-size))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
2054 (emacs-lisp-mode))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2055 (goto-char (point-max))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2056 (insert ret)))))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
2057
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
2058 ;; arch-tag: 4a6695c7-d47a-4a21-809b-5cec7f8ec7a1
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 35968
diff changeset
2059 ;;; forms.el ends here