annotate lisp/forms.el @ 66046:f56e7dee3fe4

(fancy-splash-default-action): Discard mouse click in the spash screen window, as it has no sensible meaning in the next window to be selected. Fixes error reported by Jan D.
author Kim F. Storm <storm@cua.dk>
date Wed, 12 Oct 2005 11:22:57 +0000
parents 96187e7edd1b
children 3bd95f4f2941 2a679c81f552 ee12d75eb214
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
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1991, 1994, 1995, 1996, 1997, 2002, 2003,
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
4 ;; 2004, 2005 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
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
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
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
13 ;; 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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63400
diff changeset
22 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63400
diff changeset
23 ;; Boston, MA 02110-1301, USA.
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
24
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
25 ;;; Commentary:
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
26
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
27 ;; Visit a file using a form.
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 ;; === Naming conventions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
30 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
31 ;; The names of all variables and functions start with 'forms-'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
32 ;; 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
33 ;; should *NOT* be used from the outside.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
34 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
35 ;; 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
36 ;; simultaneously.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
37 ;; 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
38 ;; controls if forms-mode has been enabled in a buffer.
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 ;; === How it works ===
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
41 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
42 ;; 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
43 ;; 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
44 ;; 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
45 ;; field separator (default: TAB).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
46 ;; 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
47 ;; 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
48 ;; time.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
49 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
50 ;; 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
51 ;; buffers.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
52 ;; 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
53 ;; 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
54 ;; present the forms.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
55 ;; 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
56 ;; will be buried, for it is never accessed directly.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
57 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
58 ;; 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
59 ;; Alternatively `forms-find-file-other-window' can be used.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
60 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
61 ;; 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
62 ;; with M-x `forms-mode'.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
63 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
64 ;; Automatic mode switching is supported if you specify
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
65 ;; "-*- forms -*-" in the first line of the control file.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
66 ;;
62459
b89461946700 Replace `eval-current-buffer' by `eval-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents: 54770
diff changeset
67 ;; The control file is visited, evaluated using `eval-buffer',
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
68 ;; and should set at least the following variables:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
69 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
70 ;; forms-file [string]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
71 ;; The name of the data file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
72 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
73 ;; forms-number-of-fields [integer]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
74 ;; The number of fields in each record.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
75 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
76 ;; forms-format-list [list]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
77 ;; Formatting instructions.
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 ;; `forms-format-list' should be a list, each element containing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
80 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
81 ;; - 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
82 ;; "as is".
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
83 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
84 ;; - an integer, denoting a field number.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
85 ;; The contents of this field are inserted at this point.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
86 ;; Fields are numbered starting with number one.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
87 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
88 ;; - a function call, e.g. (insert "text").
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
89 ;; This function call is dynamically evaluated and should return a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
90 ;; 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
91 ;; constructed. The current fields are available to the function
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
92 ;; in the variable `forms-fields', they should *NOT* be modified.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
93 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
94 ;; - 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
95 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
96 ;; Optional variables which may be set in the control file:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
97 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
98 ;; forms-field-sep [string, default TAB]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
99 ;; The field separator used to separate the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
100 ;; fields in the data file. It may be a string.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
101 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
102 ;; forms-read-only [bool, default nil]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
103 ;; Non-nil means that the data file is visited
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
104 ;; read-only (view mode) as opposed to edit mode.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
105 ;; If no write access to the data file is
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
106 ;; possible, view mode is enforced.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
107 ;;
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
108 ;; 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
109 ;; 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
110 ;; 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
111 ;; of fields specified by `forms-number-of-fields'.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
112 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
113 ;; 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
114 ;; 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
115 ;; contain fields that can span multiple lines in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
116 ;; the form.
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
117 ;; This variable denotes the separator string
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
118 ;; 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
119 ;; occurrences of this string are translated
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
120 ;; 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
121 ;; back to the separator string.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
122 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
123 ;; forms-forms-scroll [bool, default nil]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
124 ;; Non-nil means: rebind locally the commands that
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
125 ;; perform `scroll-up' or `scroll-down' to use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
126 ;; `forms-next-field' resp. `forms-prev-field'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
127 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
128 ;; 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
129 ;; 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
130 ;; `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
131 ;; 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
132 ;; `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
133 ;;
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
134 ;; 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
135 ;; 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
136 ;; 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
137 ;; 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
138 ;; 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
139 ;; first record.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
140 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
141 ;; forms-read-file-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
142 ;; 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
143 ;; function that is called after the forms data file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
144 ;; has been read. It can be used to transform
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
145 ;; the contents of the file into a format more suitable
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
146 ;; for forms-mode processing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
147 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
148 ;; forms-write-file-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
149 ;; 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
150 ;; function that is called before the forms data file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
151 ;; 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
152 ;; the effects of `forms-read-file-filter', if any.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
153 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
154 ;; forms-new-record-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
155 ;; 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
156 ;; function that is called when a new
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
157 ;; record is created. It can be used to fill in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
158 ;; the new record with default fields, for example.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
159 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
160 ;; forms-modified-record-filter [symbol, default nil]
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
161 ;; 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
162 ;; function that is called when a record has
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
163 ;; been modified. It is called after the fields
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
164 ;; are parsed. It can be used to register
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
165 ;; modification dates, for example.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
166 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
167 ;; forms-use-text-properties [bool, see text for default]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
168 ;; This variable controls if forms mode should use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
169 ;; text properties to protect the form text from being
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
170 ;; modified (using text-property `read-only').
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
171 ;; Also, the read-write fields are shown using a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
172 ;; distinct face, if possible.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
173 ;; As of emacs 19.29, the `intangible' text property
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
174 ;; 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
175 ;; 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
176 ;; later with text properties.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
177 ;; The default face to show read-write fields is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
178 ;; copied from face `region'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
179 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
180 ;; forms-ro-face [symbol, default 'default]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
181 ;; 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
182 ;; read-only text on the screen. If used, this
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
183 ;; variable should be set to a symbol that is a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
184 ;; valid face.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
185 ;; E.g.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
186 ;; (make-face 'my-face)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
187 ;; (setq forms-ro-face 'my-face)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
188 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
189 ;; forms-rw-face [symbol, default 'region]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
190 ;; This is the face that is used to show
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
191 ;; read-write text on the screen.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
192 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
193 ;; 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
194 ;; for further processing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
195 ;; 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
196 ;; `forms--file-buffer' which normally will not be shown.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
197 ;; 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
198 ;; outside of this package while it is being visited!
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
199 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
200 ;; 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
201 ;; 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
202 ;; using the specs in `forms-format-list'.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
203 ;; 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
204 ;; the records according to `forms-format-list'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
205 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
206 ;; 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
207 ;; 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
208 ;; obtained from `forms-format-list', and the fields which are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
209 ;; 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
210 ;; retain their original values. The newly formed record then
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
211 ;; 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
212 ;; 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
213 ;; the records.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
214 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
215 ;; 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
216 ;; `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
217 ;; `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
218 ;; 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
219 ;; questions anyway.
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 ;; Other functions provided by forms mode are:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
222 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
223 ;; paging (forward, backward) by record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
224 ;; jumping (first, last, random number)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
225 ;; searching
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
226 ;; creating and deleting records
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
227 ;; reverting the form (NOT the file buffer)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
228 ;; switching edit <-> view mode v.v.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
229 ;; jumping from field to field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
230 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
231 ;; 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
232 ;; 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
233 ;; needed.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
234 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
235 ;; 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
236 ;; 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
237 ;; contents of the buffer.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
238 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
239 ;; Edit mode commands:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
240 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
241 ;; TAB forms-next-field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
242 ;; \C-c TAB forms-next-field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
243 ;; \C-c < forms-first-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
244 ;; \C-c > forms-last-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
245 ;; \C-c ? describe-mode
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
246 ;; \C-c \C-k forms-delete-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
247 ;; \C-c \C-q forms-toggle-read-only
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
248 ;; \C-c \C-o forms-insert-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
249 ;; \C-c \C-l forms-jump-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
250 ;; \C-c \C-n forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
251 ;; \C-c \C-p forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
252 ;; \C-c \C-r forms-search-backward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
253 ;; \C-c \C-s forms-search-forward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
254 ;; \C-c \C-x forms-exit
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 ;; Read-only mode commands:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
257 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
258 ;; SPC forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
259 ;; DEL forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
260 ;; ? describe-mode
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
261 ;; \C-q forms-toggle-read-only
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
262 ;; l forms-jump-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
263 ;; n forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
264 ;; p forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
265 ;; r forms-search-backward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
266 ;; s forms-search-forward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
267 ;; x forms-exit
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
268 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
269 ;; 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
270 ;; same command keys as in edit mode.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
271 ;;
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
272 ;; The following bindings are available, independent of the mode:
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
273 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
274 ;; [next] forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
275 ;; [prior] forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
276 ;; [begin] forms-first-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
277 ;; [end] forms-last-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
278 ;; [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
279 ;; [backtab] forms-prev-field
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
280 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
281 ;; 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
282 ;; don't need the C-c prefix for this command.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
283 ;;
24655
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
284 ;; 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
285 ;; the bindings of standard functions `scroll-up', `scroll-down',
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
286 ;; `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
287 ;; forms mode functions next/prev record and first/last
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
288 ;; record.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
289 ;;
51282
933251fe83b1 (forms-mode): Use write-file-functions instead of local-write-file-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 51160
diff changeset
290 ;; `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
291 ;; 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
292 ;; revert a forms to original.
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
293
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
294 ;;; Code:
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
295
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
296 (defgroup forms nil
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
297 "Edit a file as a form to fill in."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
298 :group 'data)
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
299
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
300 ;;; Global variables and constants:
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
301
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
302 (provide 'forms) ;;; official
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
303 (provide 'forms-mode) ;;; for compatibility
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
304
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
305 (defcustom forms-mode-hook nil
35968
6a592962088a (forms-mode-hooks): Fix :type.
Dave Love <fx@gnu.org>
parents: 26436
diff changeset
306 "Hook run upon entering Forms mode."
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
307 :group 'forms
35968
6a592962088a (forms-mode-hooks): Fix :type.
Dave Love <fx@gnu.org>
parents: 26436
diff changeset
308 :type 'hook)
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
309
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
310 ;;; Mandatory variables - must be set by evaluating the control file.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
311
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
312 (defvar forms-file nil
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
313 "Name of the file holding the data.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
314
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
315 (defvar forms-format-list nil
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
316 "List of formatting specifications.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
317
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
318 (defvar forms-number-of-fields nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
319 "Number of fields per record.")
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
320
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
321 ;;; Optional variables with default values.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
322
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
323 (defcustom forms-check-number-of-fields t
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
324 "*If non-nil, warn about records with wrong number of fields."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
325 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
326 :type 'boolean)
12847
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
327
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
328 (defvar forms-field-sep "\t"
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
329 "Field separator character (default TAB).")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
330
19565
f998e80e4804 (forms-read-only): Un-customize, and doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19429
diff changeset
331 (defvar forms-read-only nil
f998e80e4804 (forms-read-only): Un-customize, and doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19429
diff changeset
332 "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
333 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
334
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
335 (defvar forms-multi-line "\C-k" "\
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
336 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
337
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
338 (defcustom forms-forms-scroll nil
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
339 "*Non-nil means replace scroll-up/down commands in Forms mode.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
340 The replacement commands performs forms-next/prev-record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
341 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
342 :type 'boolean)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
343
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
344 (defcustom forms-forms-jump nil
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
345 "*Non-nil means redefine beginning/end-of-buffer in Forms mode.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
346 The replacement commands performs forms-first/last-record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
347 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
348 :type 'boolean)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
349
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
350 (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
351 "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
352 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
353 suitable for forms processing.")
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
354
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
355 (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
356 "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
357 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
358
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
359 (defvar forms-new-record-filter nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
360 "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
361
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
362 (defvar forms-modified-record-filter nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
363 "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
364
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
365 (defvar forms-fields nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
366 "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
367 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
368 The contents may NOT be modified.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
369
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
370 (defcustom forms-use-text-properties t
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
371 "*Non-nil means: use text properties.
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
372 Defaults to t if this Emacs is capable of handling text properties."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
373 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
374 :type 'boolean)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
375
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
376 (defcustom forms-insert-after nil
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
377 "*Non-nil means: inserts of new records go after current record.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
378 Also, initial position is at last record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
379 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
380 :type 'boolean)
14732
6bd77cce44a6 (forms-insert-after): New variable. Non-nil means: inserts of new
Johan Vromans <jvromans@squirrel.nl>
parents: 14421
diff changeset
381
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
382 (defcustom forms-ro-face 'default
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
383 "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
384 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
385 :type 'face)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
386
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
387 (defcustom forms-rw-face 'region
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
388 "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
389 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
390 :type 'face)
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
391
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
392 ;;; Internal variables.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
393
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
394 (defvar forms--file-buffer nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
395 "Buffer which holds the file data")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
396
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
397 (defvar forms--total-records 0
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
398 "Total number of records in the data file.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
399
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
400 (defvar forms--current-record 0
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
401 "Number of the record currently on the screen.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
402
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
403 (defvar forms-mode-map nil
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
404 "Keymap for form buffer.")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
405 (defvar forms-mode-ro-map nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
406 "Keymap for form buffer in view mode.")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
407 (defvar forms-mode-edit-map nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
408 "Keymap for form buffer in edit mode.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
409
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
410 (defvar forms--markers nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
411 "Field markers in the screen.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
412
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
413 (defvar forms--dyntexts nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
414 "Dynamic texts (resulting from function calls) on the screen.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
415
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
416 (defvar forms--the-record-list nil
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
417 "List of strings of the current record, as parsed from the file.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
418
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
419 (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
420 "Last regexp used by forms-search functions.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
421
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
422 (defvar forms--format nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
423 "Formatting routine.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
424
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
425 (defvar forms--parser nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
426 "Forms parser routine.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
427
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
428 (defvar forms--mode-setup nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
429 "To keep track of forms-mode being set-up.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
430 (make-variable-buffer-local 'forms--mode-setup)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
431
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
432 (defvar forms--dynamic-text nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
433 "Array that holds dynamic texts to insert between fields.")
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
434
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
435 (defvar forms--elements nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
436 "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
437
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
438 (defvar forms--ro-face nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
439 "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
440
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
441 (defvar forms--rw-face nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
442 "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
443
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
444 ;;;###autoload
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
445 (defun forms-mode (&optional primary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
446 "Major mode to visit files in a field-structured manner using a form.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
447
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
448 Commands: Equivalent keys in read-only mode:
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
449 TAB forms-next-field TAB
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
450 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
451 C-c < forms-first-record <
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
452 C-c > forms-last-record >
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
453 C-c ? describe-mode ?
4edbca935160 (forms-mode): Doc fix (remove slashes from keybindings).
Stephen Eglen <stephen@gnu.org>
parents: 19586
diff changeset
454 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
455 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
456 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
457 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
458 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
459 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
460 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
461 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
462 C-c C-x forms-exit x
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
463 "
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
464 (interactive)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
465
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
466 ;; 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
467 ;; 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
468 ;; 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
469 ;; 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
470 ;; 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
471 ;; `find-file'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
472 ;; 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
473 ;; 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
474 ;; placed all calls in this function.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
475
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
476 ;; Primary set-up: evaluate buffer and check if the mandatory
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
477 ;; variables have been set.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
478 (if (or primary (not forms--mode-setup))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
479 (progn
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
480 ;;(message "forms: setting up...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
481 (kill-all-local-variables)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
482
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
483 ;; Make mandatory variables.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
484 (make-local-variable 'forms-file)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
485 (make-local-variable 'forms-number-of-fields)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
486 (make-local-variable 'forms-format-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
487
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
488 ;; Make optional variables.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
489 (make-local-variable 'forms-field-sep)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
490 (make-local-variable 'forms-read-only)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
491 (make-local-variable 'forms-multi-line)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
492 (make-local-variable 'forms-forms-scroll)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
493 (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
494 (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
495 (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
496
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
497 ;; Filter functions.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
498 (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
499 (make-local-variable 'forms-write-file-filter)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
500 (make-local-variable 'forms-new-record-filter)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
501 (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
502
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
503 ;; 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
504 (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
505 (setq forms-write-file-filter nil)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
506 (setq forms-new-record-filter nil)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
507 (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
508
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
509 ;; 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
510 ;; read-write fields.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
511 (if (fboundp 'make-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
512 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
513 (make-local-variable 'forms-ro-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
514 (make-local-variable 'forms-rw-face)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
515
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
516 ;; 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
517 ;;(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
518 ;; 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
519 (if (or (eq enable-local-eval t)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
520 (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
521 (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
522 (buffer-name) " to display forms? ")))
62459
b89461946700 Replace `eval-current-buffer' by `eval-buffer'.
Juanma Barranquero <lekktu@gmail.com>
parents: 54770
diff changeset
523 (eval-buffer)
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
524 (error "`enable-local-eval' inhibits buffer evaluation"))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
525
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
526 ;; Check if the mandatory variables make sense.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
527 (or forms-file
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
528 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
529 "`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
530
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
531 ;; 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
532 ;; construct a default format list.
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
533 (or (stringp forms-field-sep)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
534 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
535 "`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
536
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
537 (if forms-number-of-fields
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
538 (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
539 (> forms-number-of-fields 0))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
540 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
541 "`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
542 (or (null forms-format-list)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
543 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
544 "`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
545
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
546 (or forms-format-list
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
547 (forms--intuit-from-file))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
548
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
549 (if forms-multi-line
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
550 (if (and (stringp forms-multi-line)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
551 (eq (length forms-multi-line) 1))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
552 (if (string= forms-multi-line forms-field-sep)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
553 (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
554 "`forms-multi-line' is equal to `forms-field-sep'")))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
555 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
556 "`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
557 (or (fboundp 'set-text-properties)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
558 (setq forms-use-text-properties nil))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
559
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
560 ;; Validate and process forms-format-list.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
561 ;;(message "forms: pre-processing format list...")
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
562 (make-local-variable 'forms--elements)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
563 (forms--process-format-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
564
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
565 ;; Build the formatter and parser.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
566 ;;(message "forms: building formatter...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
567 (make-local-variable 'forms--format)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
568 (make-local-variable 'forms--markers)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
569 (make-local-variable 'forms--dyntexts)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
570 ;;(message "forms: building parser...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
571 (forms--make-format)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
572 (make-local-variable 'forms--parser)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
573 (forms--make-parser)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
574 ;;(message "forms: building parser... done.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
575
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
576 ;; Check if record filters are defined.
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
577 (if (and forms-new-record-filter
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
578 (not (fboundp forms-new-record-filter)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
579 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
580 "`forms-new-record-filter' is not a function")))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
581
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
582 (if (and forms-modified-record-filter
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
583 (not (fboundp forms-modified-record-filter)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
584 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
585 "`forms-modified-record-filter' is not a function")))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
586
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
587 ;; 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
588 (make-local-variable 'forms-fields)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
589
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
590 ;; Dynamic text support.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
591 (make-local-variable 'forms--dynamic-text)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
592
23382
55b2ea28932a Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 22770
diff changeset
593 ;; 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
594 (set-visited-file-name nil)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
595
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
596 ;; Prepare this buffer for further processing.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
597 (setq buffer-read-only nil)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
598 (erase-buffer)
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 ;;(message "forms: setting up... done.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
601 ))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
602
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
603 ;; initialization done
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
604 (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
605
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
606 ;; 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
607 (if (fboundp 'make-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
608 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
609 (make-local-variable 'forms--ro-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
610 (make-local-variable 'forms--rw-face)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
611 (if forms-read-only
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
612 (progn
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-ro-face))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
615 (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
616 (setq forms--rw-face forms-rw-face))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
617
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
618 ;; Make more local variables.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
619 (make-local-variable 'forms--file-buffer)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
620 (make-local-variable 'forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
621 (make-local-variable 'forms--current-record)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
622 (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
623 (make-local-variable 'forms--search-regexp)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
624
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
625 ; 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
626 ;(make-local-variable 'forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
627 ;(make-local-variable 'forms-mode-ro-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
628 ;(make-local-variable 'forms-mode-edit-map)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
629 (if forms-mode-map ; already defined
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
630 nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
631 ;;(message "forms: building keymap...")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
632 (forms--mode-commands)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
633 ;;(message "forms: building keymap... done.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
634 )
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
635
6561
eafeaeff6fa5 (forms-mode): Set major mode before finding forms-file. (This gives
Karl Heuer <kwzh@gnu.org>
parents: 4867
diff changeset
636 ;; 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
637 (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
638 (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
639
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
640 ;; find the data file
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
641 (setq forms--file-buffer (find-file-noselect forms-file))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
642
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
643 ;; Pre-transform.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
644 (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
645 (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
646 (if read-file-filter
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
647 (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
648 (let ((inhibit-read-only t)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
649 (file-modified (buffer-modified-p)))
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
650 (run-hooks 'read-file-filter)
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
651 (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
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 (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
654 (if write-file-filter
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
655 (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
656 (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
657
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
658 ;; count the number of records, and set see if it may be modified
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
659 (let (ro)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
660 (setq forms--total-records
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
661 (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
662 (prog1
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
663 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
664 ;;(message "forms: counting records...")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
665 (bury-buffer (current-buffer))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
666 (setq ro buffer-read-only)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
667 (count-lines (point-min) (point-max)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
668 ;;(message "forms: counting records... done.")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
669 )))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
670 (if ro
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
671 (setq forms-read-only t)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
672
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
673 ;;(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
674
3349947f33e6 (forms--set-minor-mode): Rewrite so that describe-mode
Richard M. Stallman <rms@gnu.org>
parents: 4790
diff changeset
675 ;; 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
676 ;; 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
677 ;; 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
678 (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
679 (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
680
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
681 ;;(message "forms: proceeding setup (keymaps)...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
682 (forms--set-keymaps)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
683 ;;(message "forms: proceeding setup (commands)...")
3827
4089cf0e3f06 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 3697
diff changeset
684 (forms--change-commands)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
685
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
686 ;;(message "forms: proceeding setup (buffer)...")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
687 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
688
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
689 (if (= forms--total-records 0)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
690 ;;(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
691 (progn
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
692 (insert
54770
e8824c4f5f7e Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-196
Miles Bader <miles@gnu.org>
parents: 52401
diff changeset
693 "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
694 (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
695 (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
696 (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
697 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
698 (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
699 "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
700 " to create new records.\n")
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
701 (setq forms--current-record 1)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
702 (setq buffer-read-only t)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
703 (set-buffer-modified-p nil))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
704
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
705 ;; 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
706 (if (< forms--current-record 1)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
707 (setq forms--current-record 1))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
708 (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
709
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
710 (if forms-insert-after
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
711 (forms-last-record)
39ca035fb9f5 (forms-mode): Don't call forms-first-record or
Karl Heuer <kwzh@gnu.org>
parents: 24077
diff changeset
712 (forms-first-record))
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
713 )
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
714
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
715 ;; user customising
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
716 ;;(message "forms: proceeding setup (user hooks)...")
62728
f68140c1b23a (forms-mode): Use run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents: 62459
diff changeset
717 (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
718 ;;(message "forms: setting up... done.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
719
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
720 ;; be helpful
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
721 (forms--help)
7863
c4adb7401604 (forms-mode): Plug security hole by disabling `eval-buffer' unless
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
722 )
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
723
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
724 (defun forms--process-format-list ()
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
725 ;; 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
726 ;; 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
727 ;; concatenated.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
728 ;; Array `forms--elements' is constructed that contains the order
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
729 ;; 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
730 ;; `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
731 ;; 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
732 ;; 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
733 ;; `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
734 ;; any checks.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
735
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
736 ;; Verify that `forms-format-list' is not nil.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
737 (or forms-format-list
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
738 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
739 "`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
740 ;; It must be a list.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
741 (or (listp forms-format-list)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
742 (error (concat "Forms control file error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
743 "`forms-format-list' is not a list")))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
744
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
745 ;; Assume every field is painted once.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
746 ;; `forms--elements' will grow if needed.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
747 (setq forms--elements (make-vector forms-number-of-fields nil))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
748
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
749 (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
750 (prev-item nil)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
751 (field-num 0)) ; highest field number
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
752
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
753 (setq forms-format-list nil) ; gonna rebuild
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
754
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
755 (while the-list
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
756
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
757 (let ((el (car-safe the-list))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
758 (rem (cdr-safe the-list)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
759
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
760 ;; If it is a symbol, eval it first.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
761 (if (and (symbolp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
762 (boundp el))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
763 (setq el (eval el)))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
764
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
765 (cond
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
766
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
767 ;; Try string ...
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
768 ((stringp el)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
769 (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
770 (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
771 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
772 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
773 (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
774 (setq prev-item el)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
775
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
776 ;; Try numeric ...
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
777 ((numberp el)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
778
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
779 ;; Validate range.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
780 (if (or (<= el 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
781 (> el forms-number-of-fields))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
782 (error (concat "Forms format error: "
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
783 "field number %d out of range 1..%d")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
784 el forms-number-of-fields))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
785
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
786 ;; Store forms order.
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
787 (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
788 (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
789 (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
790 (setq field-num (1+ field-num))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
791
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
792 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
793 (setq forms-format-list
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
794 (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
795 (setq prev-item el))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
796
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
797 ;; Try function ...
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
798 ((listp el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
799
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
800 ;; Validate.
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
801 (or (fboundp (car-safe el))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
802 (error (concat "Forms format error: "
18223
186381dc815d (forms-mode, forms--process-format-list)
Richard M. Stallman <rms@gnu.org>
parents: 18215
diff changeset
803 "%S is not a function")
14421
319064f5de2e (forms--process-format-list): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14356
diff changeset
804 (car-safe el)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
805
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
806 ;; Shift.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
807 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
808 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
809 (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
810 (setq prev-item el))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
811
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
812 ;; else
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
813 (t
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
814 (error (concat "Forms format error: "
14421
319064f5de2e (forms--process-format-list): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14356
diff changeset
815 "invalid element %S")
319064f5de2e (forms--process-format-list): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14356
diff changeset
816 el)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
817
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
818 ;; 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
819 (setq the-list rem)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
820
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
821 ;; Append last item.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
822 (if prev-item
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
823 (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
824 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
825 (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
826 ;; 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
827 ;; This prevents parsing problems.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
828 ;; 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
829 (if (numberp prev-item)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
830 (setq forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
831 (append forms-format-list (list "\n") nil))))))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
832
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
833 (forms--debug 'forms-format-list
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
834 'forms--elements))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
835
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
836 ;; Special treatment for read-only segments.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
837 ;;
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
838 ;; 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
839 ;; 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
840 ;; 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
841 ;; 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
842 ;; 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
843 ;; 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
844 ;; 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
845
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
846 (defvar forms--iif-start nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
847 "Record start of modification command.")
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
848 (defvar forms--iif-properties nil
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
849 "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
850
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
851 (defun forms--iif-hook (begin end)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
852 "`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
853
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
854 ;; Note start location. By making it a marker that points one
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
855 ;; 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
856 ;; correctly if text is inserted.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
857 (or forms--iif-start
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
858 (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
859
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
860 ;; Check if there is special treatment required.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
861 (if (or (<= forms--iif-start 2)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
862 (get-text-property (- forms--iif-start 2)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
863 'read-only))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
864 (progn
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
865 ;; Fetch current properties.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
866 (setq forms--iif-properties
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
867 (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
868
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
869 ;; Replace them.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
870 (let ((inhibit-read-only t))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
871 (set-text-properties
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
872 (1- forms--iif-start) forms--iif-start
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
873 (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
874
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
875 ;; Enable `post-command-hook' to restore the properties.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
876 (setq post-command-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
877 (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
878
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
879 ;; No action needed. Clear marker.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
880 (setq forms--iif-start nil)))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
881
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
882 (defun forms--iif-post-command-hook ()
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
883 "`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
884
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
885 ;; Disable `post-command-hook'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
886 (setq post-command-hook
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
887 (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
888
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
889 ;; Restore properties.
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
890 (if forms--iif-start
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
891 (let ((inhibit-read-only t))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
892 (set-text-properties
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
893 (1- forms--iif-start) forms--iif-start
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
894 forms--iif-properties)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
895
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
896 ;; Cleanup.
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
897 (setq forms--iif-start nil))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
898
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
899 (defvar forms--marker)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
900 (defvar forms--dyntext)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
901
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
902 (defun forms--make-format ()
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
903 "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
904
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
905 ;; 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
906 ;; `forms-format-list'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
907 ;; 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
908 ;; which function to mapcar.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
909
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
910 (let ((forms--marker 0)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
911 (forms--dyntext 0))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
912 (setq
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
913 forms--format
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
914 (if forms-use-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
915 `(lambda (arg)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
916 (let ((inhibit-read-only t))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
917 ,@(apply 'append
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
918 (mapcar 'forms--make-format-elt-using-text-properties
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
919 forms-format-list))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
920 ;; Prevent insertion before the first text.
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
921 ,@(if (numberp (car forms-format-list))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
922 nil
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
923 '((add-text-properties (point-min) (1+ (point-min))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
924 '(front-sticky (read-only intangible)))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
925 ;; Prevent insertion after the last text.
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
926 (remove-text-properties (1- (point)) (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
927 '(rear-nonsticky)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
928 (setq forms--iif-start nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
929 `(lambda (arg)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
930 ,@(apply 'append
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
931 (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
932
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
933 ;; 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
934 ;; 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
935 (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
936 (setq forms--dyntexts (make-vector forms--dyntext nil)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
937 (forms--debug 'forms--format))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
938
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
939 (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
940 "Helper routine to generate format function."
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 ;; 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
943 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
944 ;; ;; preamble
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
945 ;; (lambda (arg)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
946 ;; (let ((inhibit-read-only t))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
947 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
948 ;; ;; A string, e.g. "text: ".
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
949 ;; (set-text-properties
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
950 ;; (point)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
951 ;; (progn (insert "text: ") (point))
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
952 ;; (list 'face forms--ro-face
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
953 ;; 'read-only 1
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
954 ;; 'insert-in-front-hooks 'forms--iif-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
955 ;; '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
956 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
957 ;; ;; A field, e.g. 6.
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
958 ;; (let ((here (point)))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
959 ;; (aset forms--markers 0 (point-marker))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
960 ;; (insert (elt arg 5))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
961 ;; (or (= (point) here)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
962 ;; (set-text-properties
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
963 ;; here (point)
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
964 ;; (list 'face forms--rw-face
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
965 ;; 'front-sticky '(face))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
966 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
967 ;; ;; 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
968 ;; (set-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
969 ;; (point)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
970 ;; (progn (insert "\nmore text: ") (point))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
971 ;; (list 'face forms--ro-face
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
972 ;; 'read-only 2
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
973 ;; 'insert-in-front-hooks 'forms--iif-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
974 ;; '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
975 ;;
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
976 ;; ;; 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
977 ;; (set-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
978 ;; (point)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
979 ;; (progn
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
980 ;; (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
981 ;; (point))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
982 ;; (list 'face forms--ro-face
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
983 ;; 'read-only 2
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
984 ;; 'insert-in-front-hooks 'forms--iif-hook
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
985 ;; 'rear-nonsticky '(read-only face insert-in-front-hooks)))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
986 ;;
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
987 ;; ;; Prevent insertion before the first text.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
988 ;; (add-text-properties (point-min) (1+ (point-min))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
989 ;; '(front-sticky (read-only))))))
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
990 ;; ;; Prevent insertion after the last text.
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
991 ;; (remove-text-properties (1- (point)) (point)
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
992 ;; '(rear-nonsticky)))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
993 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
994 ;; ;; wrap up
4723
6a3f5f51897b Change typos in comments.
Richard M. Stallman <rms@gnu.org>
parents: 4121
diff changeset
995 ;; (setq forms--iif-start nil)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
996 ;; ))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
997
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
998 (cond
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
999 ((stringp el)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1000
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1001 `((set-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1002 (point) ; start at point
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1003 (progn ; until after insertion
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1004 (insert ,el)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1005 (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1006 (list 'face forms--ro-face ; read-only appearance
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1007 'read-only ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1008 'intangible ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1009 'insert-in-front-hooks '(forms--iif-hook)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1010 'rear-nonsticky '(face read-only insert-in-front-hooks
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1011 intangible)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1012
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1013 ((numberp el)
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1014 `((let ((here (point)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1015 (aset forms--markers
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1016 ,(prog1 forms--marker
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1017 (setq forms--marker (1+ forms--marker)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1018 (point-marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1019 (insert (elt arg ,(1- el)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1020 (or (= (point) here)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1021 (set-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1022 here (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1023 (list 'face forms--rw-face
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1024 'front-sticky '(face)))))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1025
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1026 ((listp el)
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1027 `((set-text-properties
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1028 (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1029 (progn
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1030 (insert (aset forms--dyntexts
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1031 ,(prog1 forms--dyntext
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1032 (setq forms--dyntext (1+ forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1033 ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1034 (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1035 (list 'face forms--ro-face
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1036 'read-only ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1037 'intangible ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1038 'insert-in-front-hooks '(forms--iif-hook)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1039 'rear-nonsticky '(read-only face insert-in-front-hooks
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1040 intangible)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1041
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1042 ;; end of cond
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1043 ))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1044
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1045 (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
1046 "Helper routine to generate format function."
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1047
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1048 ;; 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
1049 ;; `forms--format' will look like
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1050 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1051 ;; (lambda (arg)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1052 ;; ;; a string, e.g. "text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1053 ;; (insert "text: ")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1054 ;; ;; a field, e.g. 6
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1055 ;; (aset forms--markers 0 (point-marker))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1056 ;; (insert (elt arg 5))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1057 ;; ;; another string, e.g. "\nmore text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1058 ;; (insert "\nmore text: ")
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1059 ;; ;; a function, e.g. (tocol 40)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1060 ;; (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
1061 ;; ... )
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1062
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1063 (cond
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1064 ((stringp el)
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1065 `((insert ,el)))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1066 ((numberp el)
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1067 (prog1
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1068 `((aset forms--markers ,forms--marker (point-marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1069 (insert (elt arg ,(1- el))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1070 (setq forms--marker (1+ forms--marker))))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1071 ((listp el)
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1072 (prog1
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1073 `((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
1074 (setq forms--dyntext (1+ forms--dyntext))))))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1075
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1076 (defvar forms--field)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1077 (defvar forms--recordv)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1078 (defvar forms--seen-text)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1079
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1080 (defun forms--make-parser ()
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1081 "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
1082
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1083 ;; 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
1084 ;; `forms--parser-using-text-properties'.
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1085 ;; 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
1086 ;; `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
1087
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1088 (setq
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1089 forms--parser
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1090 (if forms-use-text-properties
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1091 (function forms--parser-using-text-properties)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1092 (let ((forms--field nil)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1093 (forms--seen-text nil)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1094 (forms--dyntext 0))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1095
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1096 ;; 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
1097 ;; see `forms--make-parser-elt' for details.
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1098 `(lambda nil
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1099 (let (here)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1100 (goto-char (point-min))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1101 ,@(apply 'append
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1102 (mapcar
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1103 'forms--make-parser-elt
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1104 (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
1105
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1106 (forms--debug 'forms--parser))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1107
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1108 (defun forms--parser-using-text-properties ()
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1109 "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
1110
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1111 ;; 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
1112 ;; 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
1113
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1114 (let ((i 0)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1115 here there)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1116 (while (< i (length forms--markers))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1117 (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
1118 (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
1119 (aset forms--recordv (aref forms--elements i) nil)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1120 (if (setq there
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1121 (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
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 there))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1124 (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
1125 (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
1126 (setq i (1+ i)))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1127
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1128 (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
1129 "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
1130
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1131 ;; The parse routine will look like:
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1132 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1133 ;; (lambda nil
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1134 ;; (let (here)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1135 ;; (goto-char (point-min))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1136 ;;
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1137 ;; ;; "text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1138 ;; (if (not (looking-at "text: "))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1139 ;; (error "Parse error: cannot find \"text: \""))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1140 ;; (forward-char 6) ; past "text: "
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1141 ;;
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1142 ;; ;; 6
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1143 ;; ;; "\nmore text: "
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1144 ;; (setq here (point))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1145 ;; (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
1146 ;; (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
1147 ;; (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
1148 ;;
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1149 ;; ;; (tocol 40)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1150 ;; (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
1151 ;; (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
1152 ;; (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
1153 ;; (forward-char (length forms--dyntext))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1154 ;; (setq forms--dynamic-text (cdr-safe forms--dynamic-text)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1155 ;; ...
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1156 ;; ;; 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
1157 ;; (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
1158
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1159 (cond
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1160 ((stringp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1161 (prog1
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1162 (if forms--field
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1163 `((setq here (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1164 (if (not (search-forward ,el nil t nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1165 (error "Parse error: cannot find `%s'" ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1166 (aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1167 (buffer-substring-no-properties here
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1168 (- (point) ,(length el)))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1169 `((if (not (looking-at ,(regexp-quote el)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1170 (error "Parse error: not looking at `%s'" ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1171 (forward-char ,(length el))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1172 (setq forms--seen-text t)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1173 (setq forms--field nil)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1174 ((numberp el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1175 (if forms--field
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1176 (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
1177 forms--field el)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1178 (setq forms--field el)
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1179 nil))
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1180 ((null el)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1181 (if forms--field
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1182 `((aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1183 (buffer-substring-no-properties (point) (point-max))))))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1184 ((listp el)
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1185 (prog1
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1186 (if forms--field
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1187 `((let ((here (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1188 (forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1189 (if (not (search-forward forms--dyntext nil t nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1190 (error "Parse error: cannot find `%s'" forms--dyntext))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1191 (aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1192 (buffer-substring-no-properties here
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1193 (- (point) (length forms--dyntext))))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1194 `((let ((forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1195 (if (not (looking-at (regexp-quote forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1196 (error "Parse error: not looking at `%s'" forms--dyntext))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1197 (forward-char (length forms--dyntext)))))
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1198 (setq forms--dyntext (1+ forms--dyntext))
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1199 (setq forms--seen-text t)
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1200 (setq forms--field nil)))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1201 ))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1202
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1203 (defun forms--intuit-from-file ()
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1204 "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
1205
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1206 ;; 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
1207 (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
1208
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1209 ;; 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
1210 (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
1211 (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
1212
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1213 ;; 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
1214 (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
1215 (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
1216 (the-record))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1217 (setq the-record
51325
6ef863c4a5d8 (forms-mode-hook): Rename from forms-mode-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51282
diff changeset
1218 (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
1219 (let ((inhibit-read-only t))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1220 (run-hooks 'read-file-filter))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1221 (goto-char (point-min))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1222 (forms--get-record)))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1223
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1224 ;; 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
1225 ;; the normal processing.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1226 (kill-buffer forms--file-buffer)
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1227
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1228 ;; 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
1229 (let ((start-pos 0)
8344
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1230 found-pos
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1231 (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
1232 (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
1233 (while (setq found-pos
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1234 (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
1235 (progn
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1236 (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
1237 (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
1238
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1239 ;; Construct default format list.
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1240 (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
1241 (let ((i 0))
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1242 (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
1243 (setq forms-format-list
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1244 (append forms-format-list
e206050c7d51 (forms-read-file-filter): new hook function to
Richard M. Stallman <rms@gnu.org>
parents: 8272
diff changeset
1245 (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
1246
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1247 (defun forms--set-keymaps ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1248 "Set the keymaps used in this mode."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1249
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1250 (use-local-map (if forms-read-only
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1251 forms-mode-ro-map
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1252 forms-mode-edit-map)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1253
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1254 (defun forms--mode-commands ()
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1255 "Fill the Forms mode keymaps."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1256
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1257 ;; `forms-mode-map' is always accessible via \C-c prefix.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1258 (setq forms-mode-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1259 (define-key forms-mode-map "\t" 'forms-next-field)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1260 (define-key forms-mode-map "\C-k" 'forms-delete-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1261 (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
1262 (define-key forms-mode-map "\C-o" 'forms-insert-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1263 (define-key forms-mode-map "\C-l" 'forms-jump-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1264 (define-key forms-mode-map "\C-n" 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1265 (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
1266 (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
1267 (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
1268 (define-key forms-mode-map "\C-x" 'forms-exit)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1269 (define-key forms-mode-map "<" 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1270 (define-key forms-mode-map ">" 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1271 (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
1272
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1273 ;; `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
1274 (setq forms-mode-ro-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1275 (suppress-keymap forms-mode-ro-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1276 (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
1277 (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
1278 (define-key forms-mode-ro-map "l" 'forms-jump-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1279 (define-key forms-mode-ro-map "n" 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1280 (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
1281 (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
1282 (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
1283 (define-key forms-mode-ro-map "x" 'forms-exit)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1284 (define-key forms-mode-ro-map "<" 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1285 (define-key forms-mode-ro-map ">" 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1286 (define-key forms-mode-ro-map "?" 'describe-mode)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1287 (define-key forms-mode-ro-map " " 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1288 (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
1289 (forms--mode-menu-ro forms-mode-ro-map)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1290
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1291 ;; This is the normal, local map.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1292 (setq forms-mode-edit-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1293 (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
1294 (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
1295 (forms--mode-menu-edit forms-mode-edit-map)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1296 )
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1297
10346
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1298 (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
1299 ;;; Menu initialisation
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1300 ; (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
1301 (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
1302 (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
1303 (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
1304 '("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
1305 (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
1306 '("----"))
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-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
1308 '("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
1309 (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
1310 '("Print Data" . forms-print))
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-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
1312 '("Describe Mode" . describe-mode))
10346
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-toggle-ro]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1314 '("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
1315 (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
1316 '("Jump" . forms-jump-record))
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-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
1318 '("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
1319 (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
1320 '("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
1321 (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
1322 '("Delete" . forms-delete-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-insert-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1324 '("Insert" . forms-insert-record))
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-sep2]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1326 '("----"))
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-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
1328 '("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
1329 (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
1330 '("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
1331 (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
1332 '("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
1333 (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
1334 '("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
1335 (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
1336 '("----"))
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-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
1338 '("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
1339 (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
1340 '("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
1341 (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
1342 (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
1343 )
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1344 (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
1345 ;;; Menu initialisation
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1346 ; (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
1347 (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
1348 (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
1349 (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
1350 '("Exit" . forms-exit))
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-sep1]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1352 '("----"))
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-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
1354 '("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
1355 (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
1356 '("Print Data" . forms-print))
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-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
1358 '("Describe Mode" . describe-mode))
10346
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-toggle-ro]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1360 '("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
1361 (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
1362 '("Jump" . forms-jump-record))
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-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
1364 '("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
1365 (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
1366 '("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
1367 (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
1368 '("Delete" . forms-delete-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-insert-record]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1370 '("Insert" . forms-insert-record))
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-sep2]
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1372 '("----"))
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-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
1374 '("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
1375 (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
1376 '("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
1377 (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
1378 '("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
1379 (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
1380 '("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
1381 (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
1382 '("----"))
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-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
1384 '("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
1385 (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
1386 '("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
1387 (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
1388 (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
1389 )
a6018b04fb9d Change forms-search to forms-search-forward, and add
Johan Vromans <jvromans@squirrel.nl>
parents: 8352
diff changeset
1390
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1391 (defun forms--mode-commands1 (map)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1392 "Helper routine to define keys."
51160
f7bc28024050 (forms--mode-commands1): Bind \t, not `tab'.
Richard M. Stallman <rms@gnu.org>
parents: 49588
diff changeset
1393 (define-key map "\t" 'forms-next-field)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1394 (define-key map [S-tab] 'forms-prev-field)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1395 (define-key map [next] 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1396 (define-key map [prior] 'forms-prev-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1397 (define-key map [begin] 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1398 (define-key map [last] 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1399 (define-key map [backtab] 'forms-prev-field)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1400 )
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1401
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1402 ;;; Changed functions
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1403
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1404 (defun forms--change-commands ()
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1405 "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
1406
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1407 ;; scroll-down -> forms-prev-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1408 ;; scroll-up -> forms-next-record
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1409 (if forms-forms-scroll
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1410 (progn
49169
755b96b5f3ca (forms--change-commands): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents: 45337
diff changeset
1411 (local-set-key [remap scroll-up] 'forms-next-record)
755b96b5f3ca (forms--change-commands): Use command remapping instead of
Andreas Schwab <schwab@suse.de>
parents: 45337
diff changeset
1412 (local-set-key [remap scroll-down] '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
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51325
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