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