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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13317
diff changeset
1 ;;; forms.el --- Forms mode: edit a file as a form to fill in
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13317
diff changeset
2
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
877d62af45a9 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12847
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
25
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
26 ;; Visit a file using a form.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
27 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
28 ;; === Naming conventions
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
29 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
30 ;; The names of all variables and functions start with 'forms-'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
31 ;; Names which start with 'forms--' are intended for internal use, and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
32 ;; should *NOT* be used from the outside.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
37 ;; controls if forms-mode has been enabled in a buffer.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
38 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
39 ;; === How it works ===
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
40 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
41 ;; Forms mode means visiting a data file which is supposed to consist
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
42 ;; of records each containing a number of fields. The records are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
43 ;; separated by a newline, the fields are separated by a user-defined
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
44 ;; field separator (default: TAB).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
45 ;; When shown, a record is transferred to an Emacs buffer and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
46 ;; presented using a user-defined form. One record is shown at a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
47 ;; time.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
48 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
49 ;; Forms mode is a composite mode. It involves two files, and two
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
50 ;; buffers.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
51 ;; The first file, called the control file, defines the name of the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
52 ;; data file and the forms format. This file buffer will be used to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
53 ;; present the forms.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
54 ;; The second file holds the actual data. The buffer of this file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
55 ;; will be buried, for it is never accessed directly.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
58 ;; Alternatively `forms-find-file-other-window' can be used.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
59 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
66 ;; The control file is visited, evaluated using `eval-current-buffer',
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
67 ;; and should set at least the following variables:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
68 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
69 ;; forms-file [string]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
70 ;; The name of the data file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
71 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
72 ;; forms-number-of-fields [integer]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
73 ;; The number of fields in each record.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
74 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
75 ;; forms-format-list [list]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
76 ;; Formatting instructions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
77 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
78 ;; `forms-format-list' should be a list, each element containing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
79 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
80 ;; - a string, e.g. "hello". The string is inserted in the forms
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
81 ;; "as is".
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
82 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
83 ;; - an integer, denoting a field number.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
84 ;; The contents of this field are inserted at this point.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
85 ;; Fields are numbered starting with number one.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
86 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
87 ;; - a function call, e.g. (insert "text").
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
88 ;; This function call is dynamically evaluated and should return a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
89 ;; string. It should *NOT* have side-effects on the forms being
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
90 ;; constructed. The current fields are available to the function
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
93 ;; - a lisp symbol, that must evaluate to one of the above.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
94 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
95 ;; Optional variables which may be set in the control file:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
96 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
97 ;; forms-field-sep [string, default TAB]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
98 ;; The field separator used to separate the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
99 ;; fields in the data file. It may be a string.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
100 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
101 ;; forms-read-only [bool, default nil]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
102 ;; Non-nil means that the data file is visited
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
103 ;; read-only (view mode) as opposed to edit mode.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
111 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
114 ;; contain fields that can span multiple lines in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
121 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
122 ;; forms-forms-scroll [bool, default nil]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
123 ;; Non-nil means: rebind locally the commands that
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
124 ;; perform `scroll-up' or `scroll-down' to use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
125 ;; `forms-next-field' resp. `forms-prev-field'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
126 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
139 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
142 ;; function that is called after the forms data file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
143 ;; has been read. It can be used to transform
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
144 ;; the contents of the file into a format more suitable
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
145 ;; for forms-mode processing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
146 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
149 ;; function that is called before the forms data file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
150 ;; is written (saved) to disk. It can be used to undo
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
151 ;; the effects of `forms-read-file-filter', if any.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
152 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
155 ;; function that is called when a new
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
156 ;; record is created. It can be used to fill in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
157 ;; the new record with default fields, for example.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
158 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
161 ;; function that is called when a record has
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
162 ;; been modified. It is called after the fields
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
163 ;; are parsed. It can be used to register
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
164 ;; modification dates, for example.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
165 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
166 ;; forms-use-text-properties [bool, see text for default]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
167 ;; This variable controls if forms mode should use
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
168 ;; text properties to protect the form text from being
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
169 ;; modified (using text-property `read-only').
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
170 ;; Also, the read-write fields are shown using a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
171 ;; distinct face, if possible.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
172 ;; As of emacs 19.29, the `intangible' text property
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
176 ;; The default face to show read-write fields is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
177 ;; copied from face `region'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
178 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
179 ;; forms-ro-face [symbol, default 'default]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
182 ;; variable should be set to a symbol that is a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
183 ;; valid face.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
184 ;; E.g.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
185 ;; (make-face 'my-face)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
186 ;; (setq forms-ro-face 'my-face)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
187 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
188 ;; forms-rw-face [symbol, default 'region]
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
189 ;; This is the face that is used to show
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
190 ;; read-write text on the screen.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
191 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
192 ;; After evaluating the control file, its buffer is cleared and used
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
193 ;; for further processing.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
196 ;; Great malfunctioning may be expected if this file/buffer is modified
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
197 ;; outside of this package while it is being visited!
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
198 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
199 ;; Normal operation is to transfer one line (record) from the data file,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
200 ;; split it into fields (into `forms--the-record-list'), and display it
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
203 ;; the records according to `forms-format-list'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
204 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
205 ;; When a form is changed the record is updated as soon as this form
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
206 ;; is left. The contents of the form are parsed using information
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
207 ;; obtained from `forms-format-list', and the fields which are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
208 ;; deduced from the form are modified. Fields not shown on the forms
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
209 ;; retain their original values. The newly formed record then
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
210 ;; replaces the contents of the old record in `forms--file-buffer'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
211 ;; A parse routine `forms--parser' is built upon startup to parse
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
212 ;; the records.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
213 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
214 ;; Two exit functions exist: `forms-exit' and `forms-exit-no-save'.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
217 ;; is executed and the file buffer has been modified, Emacs will ask
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
218 ;; questions anyway.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
219 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
220 ;; Other functions provided by forms mode are:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
221 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
222 ;; paging (forward, backward) by record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
223 ;; jumping (first, last, random number)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
224 ;; searching
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
225 ;; creating and deleting records
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
226 ;; reverting the form (NOT the file buffer)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
227 ;; switching edit <-> view mode v.v.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
228 ;; jumping from field to field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
231 ;; file (using forms-last-record) will adjust forms--total-records if
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
232 ;; needed.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
236 ;; contents of the buffer.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
237 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
238 ;; Edit mode commands:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
239 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
240 ;; TAB forms-next-field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
241 ;; \C-c TAB forms-next-field
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
242 ;; \C-c < forms-first-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
243 ;; \C-c > forms-last-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
244 ;; \C-c ? describe-mode
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
245 ;; \C-c \C-k forms-delete-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
246 ;; \C-c \C-q forms-toggle-read-only
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
247 ;; \C-c \C-o forms-insert-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
248 ;; \C-c \C-l forms-jump-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
249 ;; \C-c \C-n forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
250 ;; \C-c \C-p forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
251 ;; \C-c \C-r forms-search-backward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
252 ;; \C-c \C-s forms-search-forward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
253 ;; \C-c \C-x forms-exit
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
254 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
255 ;; Read-only mode commands:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
256 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
257 ;; SPC forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
258 ;; DEL forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
261 ;; l forms-jump-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
262 ;; n forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
263 ;; p forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
264 ;; r forms-search-backward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
265 ;; s forms-search-forward
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
266 ;; x forms-exit
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
267 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
268 ;; Of course, it is also possible to use the \C-c prefix to obtain the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
273 ;; [next] forms-next-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
274 ;; [prior] forms-prev-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
275 ;; [begin] forms-first-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
276 ;; [end] forms-last-record
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
279 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
280 ;; For convenience, TAB is always bound to `forms-next-field', so you
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
281 ;; don't need the C-c prefix for this command.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
284 ;; the bindings of standard functions `scroll-up', `scroll-down',
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
285 ;; `beginning-of-buffer' and `end-of-buffer' can be locally replaced with
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
286 ;; forms mode functions next/prev record and first/last
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
287 ;; record.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
290 ;; instead of the buffer data, `revert-file-hook' is defined to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13984
diff changeset
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
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
295 (defgroup forms nil
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
296 "Edit a file as a form to fill in."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
297 :group 'data)
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
6a592962088a (forms-mode-hooks): Fix :type.
Dave Love <fx@gnu.org>
parents: 26436
diff changeset
305 "Hook run upon entering Forms mode."
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
306 :group 'forms
35968
6a592962088a (forms-mode-hooks): Fix :type.
Dave Love <fx@gnu.org>
parents: 26436
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
310
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
313
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
316
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
317 (defvar forms-number-of-fields nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
321
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
322 (defcustom forms-check-number-of-fields t
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
323 "*If non-nil, warn about records with wrong number of fields."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
324 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
325 :type 'boolean)
12847
61961ca01260 (forms-check-number-of-fields): New vbl.
Richard M. Stallman <rms@gnu.org>
parents: 12508
diff changeset
326
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
963726a261c3 Further doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19565
diff changeset
332 This is set automatically if the file permissions don't let you write it.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
333
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
334 (defvar forms-multi-line "\C-k" "\
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
335 If not nil: use this character to separate multi-line fields (default C-k).")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
336
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
337 (defcustom forms-forms-scroll nil
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
338 "*Non-nil means replace scroll-up/down commands in Forms mode.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
339 The replacement commands performs forms-next/prev-record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
340 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
341 :type 'boolean)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
342
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
343 (defcustom forms-forms-jump nil
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
344 "*Non-nil means redefine beginning/end-of-buffer in Forms mode.
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
345 The replacement commands performs forms-first/last-record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
346 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
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
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
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
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
369 (defcustom forms-use-text-properties t
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
370 "*Non-nil means: use text properties.
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
371 Defaults to t if this Emacs is capable of handling text properties."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
372 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
373 :type 'boolean)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
374
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
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
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
377 Also, initial position is at last record."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
378 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
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
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
381 (defcustom forms-ro-face 'default
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
382 "The face (a symbol) that is used to display read-only text on the screen."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
383 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
384 :type 'face)
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
385
19429
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
386 (defcustom forms-rw-face 'region
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
387 "The face (a symbol) that is used to display read-write text on the screen."
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
388 :group 'forms
6bbd083cbb6b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18223
diff changeset
389 :type 'face)
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
390
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
391 ;;; Internal variables.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
392
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
393 (defvar forms--file-buffer nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
394 "Buffer which holds the file data")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
395
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
396 (defvar forms--total-records 0
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
397 "Total number of records in the data file.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
398
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
399 (defvar forms--current-record 0
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
400 "Number of the record currently on the screen.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
401
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
402 (defvar forms-mode-map nil
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
403 "Keymap for form buffer.")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
404 (defvar forms-mode-ro-map nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
405 "Keymap for form buffer in view mode.")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
406 (defvar forms-mode-edit-map nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
407 "Keymap for form buffer in edit mode.")
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
408
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
409 (defvar forms--markers nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
410 "Field markers in the screen.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
414
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
415 (defvar forms--the-record-list nil
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
416 "List of strings of the current record, as parsed from the file.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
417
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
420
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
421 (defvar forms--format nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
422 "Formatting routine.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
423
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
424 (defvar forms--parser nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
425 "Forms parser routine.")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
426
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
429 (make-variable-buffer-local 'forms--mode-setup)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
444 (defun forms-mode (&optional primary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
445 "Major mode to visit files in a field-structured manner using a form.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
446
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
447 Commands: Equivalent keys in read-only mode:
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
462 "
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
463 (interactive)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
475 ;; Primary set-up: evaluate buffer and check if the mandatory
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
476 ;; variables have been set.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
477 (if (or primary (not forms--mode-setup))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
480 (kill-all-local-variables)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
483 (make-local-variable 'forms-file)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
484 (make-local-variable 'forms-number-of-fields)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
485 (make-local-variable 'forms-format-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
488 (make-local-variable 'forms-field-sep)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
489 (make-local-variable 'forms-read-only)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
490 (make-local-variable 'forms-multi-line)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
491 (make-local-variable 'forms-forms-scroll)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
499 (make-local-variable 'forms-new-record-filter)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
505 (setq forms-new-record-filter nil)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
514
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
532 (or (stringp forms-field-sep)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
548 (if forms-multi-line
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
549 (if (and (stringp forms-multi-line)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
550 (eq (length forms-multi-line) 1))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
562 (forms--process-format-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
570 (forms--make-format)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
571 (make-local-variable 'forms--parser)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
576 (if (and forms-new-record-filter
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
577 (not (fboundp forms-new-record-filter)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
580
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
581 (if (and forms-modified-record-filter
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
582 (not (fboundp forms-modified-record-filter)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
591
23382
55b2ea28932a Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 22770
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
618 (make-local-variable 'forms--file-buffer)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
619 (make-local-variable 'forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
620 (make-local-variable 'forms--current-record)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
623
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
624 ; The keymaps are global, so multiple forms mode buffers can share them.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
625 ;(make-local-variable 'forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
626 ;(make-local-variable 'forms-mode-ro-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
627 ;(make-local-variable 'forms-mode-edit-map)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
628 (if forms-mode-map ; already defined
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
639 ;; find the data file
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
640 (setq forms--file-buffer (find-file-noselect forms-file))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
657 ;; count the number of records, and set see if it may be modified
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
658 (let (ro)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
669 (if ro
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
670 (setq forms-read-only t)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
686 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
713
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
718
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
719 ;; be helpful
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
736 (or forms-format-list
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
740 (or (listp forms-format-list)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
747
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
754 (while the-list
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
755
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
756 (let ((el (car-safe the-list))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
757 (rem (cdr-safe the-list)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
764 (cond
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
777
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
778 ;; Validate range.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
779 (if (or (<= el 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
780 (> el forms-number-of-fields))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
781 (error (concat "Forms format error: "
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
782 "field number %d out of range 1..%d")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
783 el forms-number-of-fields))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
811 ;; else
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
812 (t
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
900
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
914 `(lambda (arg)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
915 (let ((inhibit-read-only t))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
916 ,@(apply 'append
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
917 (mapcar 'forms--make-format-elt-using-text-properties
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
918 forms-format-list))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
919 ;; Prevent insertion before the first text.
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
920 ,@(if (numberp (car forms-format-list))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
921 nil
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
922 '((add-text-properties (point-min) (1+ (point-min))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
923 '(front-sticky (read-only intangible)))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
924 ;; Prevent insertion after the last text.
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
925 (remove-text-properties (1- (point)) (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
926 '(rear-nonsticky)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
927 (setq forms--iif-start nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
928 `(lambda (arg)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
929 ,@(apply 'append
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1001 (point) ; start at point
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1002 (progn ; until after insertion
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1003 (insert ,el)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1004 (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1005 (list 'face forms--ro-face ; read-only appearance
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1006 'read-only ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1007 'intangible ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1008 'insert-in-front-hooks '(forms--iif-hook)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1009 'rear-nonsticky '(face read-only insert-in-front-hooks
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1013 `((let ((here (point)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1014 (aset forms--markers
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1015 ,(prog1 forms--marker
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1016 (setq forms--marker (1+ forms--marker)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1017 (point-marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1018 (insert (elt arg ,(1- el)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1019 (or (= (point) here)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1020 (set-text-properties
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1021 here (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1022 (list 'face forms--rw-face
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1026 `((set-text-properties
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1027 (point)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1028 (progn
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1029 (insert (aset forms--dyntexts
26436
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1030 ,(prog1 forms--dyntext
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1031 (setq forms--dyntext (1+ forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1032 ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1033 (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1034 (list 'face forms--ro-face
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1035 'read-only ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1036 'intangible ,@(list (1+ forms--marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1037 'insert-in-front-hooks '(forms--iif-hook)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1038 'rear-nonsticky '(read-only face insert-in-front-hooks
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1043
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1067 `((aset forms--markers ,forms--marker (point-marker))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1078
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1097 `(lambda nil
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1098 (let (here)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1099 (goto-char (point-min))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1126
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1162 `((setq here (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1163 (if (not (search-forward ,el nil t nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1164 (error "Parse error: cannot find `%s'" ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1165 (aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1166 (buffer-substring-no-properties here
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1167 (- (point) ,(length el)))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1168 `((if (not (looking-at ,(regexp-quote el)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1169 (error "Parse error: not looking at `%s'" ,el))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1181 `((aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1186 `((let ((here (point))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1187 (forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1188 (if (not (search-forward forms--dyntext nil t nil))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1189 (error "Parse error: cannot find `%s'" forms--dyntext))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1190 (aset forms--recordv ,(1- forms--field)
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1191 (buffer-substring-no-properties here
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1192 (- (point) (length forms--dyntext))))))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1193 `((let ((forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1194 (if (not (looking-at (regexp-quote forms--dyntext)))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
1195 (error "Parse error: not looking at `%s'" forms--dyntext))
8d7a976d7700 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 24794
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1246 (defun forms--set-keymaps ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1247 "Set the keymaps used in this mode."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1251 forms-mode-edit-map)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1252
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1253 (defun forms--mode-commands ()
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1254 "Fill the Forms mode keymaps."
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1255
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1256 ;; `forms-mode-map' is always accessible via \C-c prefix.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1257 (setq forms-mode-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1258 (define-key forms-mode-map "\t" 'forms-next-field)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1259 (define-key forms-mode-map "\C-k" 'forms-delete-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1260 (define-key forms-mode-map "\C-q" 'forms-toggle-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1261 (define-key forms-mode-map "\C-o" 'forms-insert-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1262 (define-key forms-mode-map "\C-l" 'forms-jump-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1263 (define-key forms-mode-map "\C-n" 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1267 (define-key forms-mode-map "\C-x" 'forms-exit)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1268 (define-key forms-mode-map "<" 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1269 (define-key forms-mode-map ">" 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1272 ;; `forms-mode-ro-map' replaces the local map when in read-only mode.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1273 (setq forms-mode-ro-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1274 (suppress-keymap forms-mode-ro-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1275 (define-key forms-mode-ro-map "\C-c" forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1276 (define-key forms-mode-ro-map "q" 'forms-toggle-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1277 (define-key forms-mode-ro-map "l" 'forms-jump-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1278 (define-key forms-mode-ro-map "n" 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1282 (define-key forms-mode-ro-map "x" 'forms-exit)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1283 (define-key forms-mode-ro-map "<" 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1284 (define-key forms-mode-ro-map ">" 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1285 (define-key forms-mode-ro-map "?" 'describe-mode)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1286 (define-key forms-mode-ro-map " " 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1289
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1290 ;; This is the normal, local map.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1291 (setq forms-mode-edit-map (make-keymap))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1292 (define-key forms-mode-edit-map "\C-c" forms-mode-map)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1295 )
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1393 (define-key map [S-tab] 'forms-prev-field)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1394 (define-key map [next] 'forms-next-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1395 (define-key map [prior] 'forms-prev-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1396 (define-key map [begin] 'forms-first-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1397 (define-key map [last] 'forms-last-record)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1398 (define-key map [backtab] 'forms-prev-field)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1399 )
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1400
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1401 ;;; Changed functions
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1402
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1406 ;; scroll-down -> forms-prev-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1407 ;; scroll-up -> forms-next-record
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1408 (if forms-forms-scroll
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1412 ;;
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1413 ;; beginning-of-buffer -> forms-first-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1414 ;; end-of-buffer -> forms-end-record
3828
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
1415 (if forms-forms-jump
c9f18a7140f9 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3827
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1426
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1427 t)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1428
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1432 "\\[forms-next-record]:next"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1433 " \\[forms-prev-record]:prev"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1434 " \\[forms-first-record]:first"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1435 " \\[forms-last-record]:last"
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1436 " \\[describe-mode]:help"))))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1437
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1440 be single-char strings."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1441 (let ((i 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1442 (re (regexp-quote arg))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1443 (k (string-to-char rep)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1444 (while (setq i (string-match re subj i))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1445 (aset subj i k)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1446 (setq i (1+ i)))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1451 (let ((buf (buffer-name forms--file-buffer)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1452 (forms--checkmod)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1453 (if (and save
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1457 (delete-auto-save-file-if-necessary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1458 (kill-buffer (current-buffer)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1462 (delete-auto-save-file-if-necessary)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1463 (kill-buffer (current-buffer)))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1464
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1465 (defun forms--get-record ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1470 (or (bolp)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1471 (beginning-of-line nil))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1472 (let ((here (point)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1473 (prog2
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1476 (goto-char here))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1477
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1482 (let (the-result
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1483 (start-pos 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1484 found-pos
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1485 (field-sep-length (length forms-field-sep)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1486 (if forms-multi-line
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1489 (setq the-record (concat the-record forms-field-sep))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1490 (while (setq found-pos (string-match forms-field-sep the-record start-pos))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1491 (let ((ent (substring the-record start-pos found-pos)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1492 (setq the-result
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1493 (append the-result (list ent)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1494 (setq start-pos (+ field-sep-length found-pos))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1495 (setq forms--the-record-list the-result))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1496
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1501 (erase-buffer)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1504 (if (= (length forms--the-record-list) forms-number-of-fields)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1515 (length forms--the-record-list))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1516 "")))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1520 (funcall forms--format forms--the-record-list)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1521
4121
25d32add267c Rewritten by Vromans to use text properties.
Richard M. Stallman <rms@gnu.org>
parents: 3979
diff changeset
1522 ;; Prepare.
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1523 (goto-char (point-min))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1524 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1525 (setq buffer-read-only forms-read-only)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1529
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1530 (defun forms--parse-form ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1531 "Parse contents of form into list of strings."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1532 ;; The contents of the form are parsed, and a new list of strings
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1536 ;; fields which were not in the form are not modified.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1537 ;; Finally, the vector is transformed into a list for further processing.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1547
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1557
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1589
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1590 (defun forms--checkmod ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1591 "Check if this form has been modified, and call forms--update if so."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1592 (if (buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1593 (let ((here (point)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1594 (forms--update)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1595 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1596 (goto-char here))))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1597
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1608
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1609 ;;;###autoload
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1628 ;;; Navigating commands
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1629
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1630 (defun forms-next-record (arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1631 "Advance to the ARGth following record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1632 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1633 (forms-jump-record (+ forms--current-record (prefix-numeric-value arg)) t))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1634
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1635 (defun forms-prev-record (arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1636 "Advance to the ARGth previous record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1637 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1638 (forms-jump-record (- forms--current-record (prefix-numeric-value arg)) t))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1650 (defun forms-jump-record (arg &optional relative)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1651 "Jump to a random record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1652 (interactive "NRecord number: ")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1655 (if (or (> arg forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1659 (if (not relative)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1680
18215
2df40b8771ac Use `error' where possible to signal errors.
Karl Heuer <kwzh@gnu.org>
parents: 14732
diff changeset
1681 (forms--get-record)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1688
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1689 (defun forms-first-record ()
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1690 "Jump to first record."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1691 (interactive)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1692 (forms-jump-record 1))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1693
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1697 (interactive)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1701 (count-lines (point-min) (point-max)))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1702 (if (= numrec forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1703 nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1704 (setq forms--total-records numrec)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1705 (message "Warning: number of records changed to %d" forms--total-records)))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1706 (forms-jump-record forms--total-records))
3697
994bb6dc9249 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 307
diff changeset
1707
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1708 ;;; Other commands
3941
93a7a7b97030 Add e-mail address and version info.
Richard M. Stallman <rms@gnu.org>
parents: 3828
diff changeset
1709
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1710 (defun forms-toggle-read-only (arg)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1711 "Toggles read-only mode of a forms mode buffer.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1714
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1715 (interactive "P")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1716
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1717 (if (if arg
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1718 ;; Negative arg means switch it off.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1719 (<= (prefix-numeric-value arg) 0)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1720 ;; No arg means toggle.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1721 forms-read-only)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1722
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1723 ;; Enable edit mode, if possible.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1726 buffer-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1727 (progn
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1730 (setq forms-read-only nil))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1731 (if (equal ro forms-read-only)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1732 nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1733 (forms-mode)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1734
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1735 ;; Enable view mode.
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1736 (if forms-read-only
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1737 nil
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1738 (forms--checkmod) ; sync
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1739 (setq forms-read-only t)
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1740 (forms-mode))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1741
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1744 ;; ;; numbers are relative to 1
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1745 ;; (aset the-fields 4 (current-time-string))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1746 ;; (aset the-fields 6 (user-login-name))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1749
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1757
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1758 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1759
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1760 (if forms-read-only
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1761 (error ""))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1769
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1770 (forms--checkmod)
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1771 (if forms-new-record-filter
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1772 ;; As a service to the user, we add a zeroth element so she
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1773 ;; can use the same indices as in the forms definition.
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1774 (let ((the-fields (make-vector (1+ forms-number-of-fields) "")))
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1775 (setq the-fields (funcall forms-new-record-filter the-fields))
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1776 (setq the-list (cdr (append the-fields nil))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1777 (setq the-list (make-list forms-number-of-fields "")))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1778
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1779 (setq the-record
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1780 (mapconcat
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1781 'identity
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1782 the-list
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1783 forms-field-sep))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1787 (open-line 1)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1788 (insert the-record)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1789 (beginning-of-line))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49169
diff changeset
1790
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1791 (setq forms--current-record ln))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1792
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1793 (setq forms--total-records (1+ forms--total-records))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1794 (forms-jump-record forms--current-record))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1795
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1798 (interactive "P")
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1799
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1800 (if forms-read-only
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1801 (error ""))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1802
276
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1803 (forms--checkmod)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1804 (if (or arg
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1805 (y-or-n-p "Really delete this record? "))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1813 (setq forms--total-records (1- forms--total-records))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1814 (if (> forms--current-record forms--total-records)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1815 (setq forms--current-record forms--total-records))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1816 (forms-jump-record forms--current-record)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1817 (message ""))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1823 (if forms--search-regexp
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1824 (concat " ("
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1825 forms--search-regexp
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1826 ")"))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1827 ": "))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1828 (if (equal "" regexp)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1829 (setq regexp forms--search-regexp))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1830 (forms--checkmod)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1851 (setq forms--search-regexp regexp))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1923 "Reverts current form to un-modified."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1924 (interactive "P")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1925 (if (or noconfirm
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1926 (yes-or-no-p "Revert form to unmodified? "))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1927 (progn
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1928 (set-buffer-modified-p nil)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1929 (forms-jump-record forms--current-record))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1930
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1931 (defun forms-next-field (arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1932 "Jump to ARG-th next field."
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1933 (interactive "p")
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1934
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1935 (let ((i 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1936 (here (point))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1940
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1941 (if (zerop arg)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1942 (setq cnt 1)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1943 (setq cnt (+ cnt arg)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1944
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1947 (if (or (null (setq there (aref forms--markers i)))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1948 (<= there here))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1949 nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1950 (if (<= (setq cnt (1- cnt)) 0)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1951 (progn
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1952 (goto-char there)
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1953 (throw 'done t))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1954 (setq i (1+ i))))
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1955 nil
e7eb71cbf478 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1956 (goto-char (aref forms--markers 0)))))
307
7fede845e304 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 276
diff changeset
1957
4790
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1958 (defun forms-prev-field (arg)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1959 "Jump to ARG-th previous field."
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1960 (interactive "p")
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1961
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1962 (let ((i (length forms--markers))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1963 (here (point))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1967
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1968 (if (zerop arg)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1969 (setq cnt 1)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1970 (setq cnt (+ cnt arg)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1971
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1972 (if (catch 'done
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1973 (while (> i 0)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1974 (setq i ( 1- i))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1975 (if (or (null (setq there (aref forms--markers i)))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1976 (>= there here))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1977 nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1978 (if (<= (setq cnt (1- cnt)) 0)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1979 (progn
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1980 (goto-char there)
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1981 (throw 'done t))))))
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
1982 nil
b110036d90b0 Version 2.3.
Richard M. Stallman <rms@gnu.org>
parents: 4723
diff changeset
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
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51325
diff changeset
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