1This is Info file ../info/forms, produced by Makeinfo-1.54 from the 2input file forms.texi. 3 4 This file documents Forms mode, a form-editing major mode for GNU 5Emacs. 6 7 Permission is granted to make and distribute verbatim copies of this 8manual provided the copyright notice and this permission notice are 9preserved on all copies. 10 11 12File: forms, Node: Top, Next: Forms Example, Prev: (DIR), Up: (DIR) 13 14Forms Mode 15********** 16 17 Forms mode is an Emacs major mode for working with simple textual 18data bases in a forms-oriented manner. In Forms mode, the information 19in these files is presented in an Emacs window in a user-defined format, 20one record at a time. The user can view records or modify their 21contents. 22 23 Forms mode is not a simple major mode, but requires two files to do 24its job: a control file and a data file. The data file holds the 25actual data to be presented. The control file describes how to present 26it. 27 28* Menu: 29 30* Forms Example:: An example: editing the password data base. 31* Entering and Exiting Forms Mode:: 32 How to visit a file in Forms mode. 33* Forms Commands:: Special commands to use while in Forms mode. 34* Data File Format:: How to format the data file. 35* Control File Format:: How to control forms mode. 36* Format Description:: How to define the forms layout. 37* Modifying Forms Contents:: How to modify. 38* Miscellaneous:: Forms mode messages and other remarks. 39* Error Messages:: List of error messages forms mode can produce. 40* Long Example:: A more complex control file example. 41* Credits:: Thanks everyone. 42* Index:: Index to this manual. 43 44 45File: forms, Node: Forms Example, Next: Entering and Exiting Forms Mode, Prev: Top, Up: Top 46 47Forms Example 48************* 49 50 Let's illustrate Forms mode with an example. Suppose you are 51looking at the `/etc/passwd' file, and the screen looks like this: 52 53 ====== /etc/passwd ====== 54 55 User : root Uid: 0 Gid: 1 56 57 Name : Super User 58 59 Home : / 60 61 Shell: /bin/sh 62 63 As you can see, the familiar fields from the entry for the super user 64are all there, but instead of being colon-separated on one single line, 65they make up a forms. 66 67 The contents of the forms consists of the contents of the fields of 68the record (e.g. `root', `0', `1', `Super User') interspersed with 69normal text (e.g `User : ', `Uid: '). 70 71 If you modify the contents of the fields, Forms mode will analyze 72your changes and update the file appropriately. You cannot modify the 73interspersed explanatory text (unless you go to some trouble about it), 74because that is marked read-only (*note Text Properties: (elisp)Text 75Properties.). 76 77 The Forms mode control file specifies the relationship between the 78format of `/etc/passwd' and what appears on the screen in Forms mode. 79*Note Control File Format::. 80 81 82File: forms, Node: Entering and Exiting Forms Mode, Next: Forms Commands, Prev: Forms Example, Up: Top 83 84Entering and Exiting Forms Mode 85******************************* 86 87`M-x forms-find-file RET CONTROL-FILE RET' 88 Visit a database using Forms mode. Specify the name of the 89 *control file*, not the data file! 90 91`M-x forms-find-file-other-window RET CONTROL-FILE RET' 92 Similar, but displays the file in another window. 93 94 The command `forms-find-file' evaluates the file CONTROL-FILE, and 95also visits it in Forms mode. What you see in its buffer is not the 96contents of this file, but rather a single record of the corresponding 97data file that is visited in its own buffer. So there are two buffers 98involved in Forms mode: the "forms buffer" that is initially used to 99visit the control file and that shows the records being browsed, and 100the "data buffer" that holds the data file being visited. The latter 101buffer is normally not visible. 102 103 Initially, the first record is displayed in the forms buffer. The 104mode line displays the major mode name `Forms', followed by the minor 105mode `View' if the data base is read-only. The number of the current 106record (N) and the total number of records in the file(T) are shown in 107the mode line as `N/T'. For example: 108 109 --%%-Emacs: passwd-demo (Forms View 1/54)----All------- 110 111 If the buffer is not read-only, you may change the buffer to modify 112the fields in the record. When you move to a different record, the 113contents of the buffer are parsed using the specifications in 114`forms-format-list', and the data file is updated. If the record has 115fields that aren't included in the display, they are not changed. 116 117 Entering Forms mode runs the normal hook `forms-mode-hooks' to 118perform user-defined customization. 119 120 To save any modified data, you can use `C-x C-s' (`save-buffer'). 121This does not save the forms buffer (which would be rather useless), 122but instead saves the buffer visiting the data file. 123 124 To terminate Forms mode, you can use `C-x C-s' (`save-buffer') and 125then kill the forms buffer. However, the data buffer will still 126remain. If this is not desired, you have to kill this buffer too. 127 128 129File: forms, Node: Forms Commands, Next: Data File Format, Prev: Entering and Exiting Forms Mode, Up: Top 130 131Forms Commands 132************** 133 134 The commands of Forms mode belong to the `C-c' prefix, with one 135exception: TAB, which moves to the next field. Forms mode uses 136different key maps for normal mode and read-only mode. In read-only 137Forms mode, you can access most of the commands without the `C-c' 138prefix, but you must type ordinary letters instead of control 139characters; for example, type `n' instead of `C-c C-n'. 140 141`C-c C-n' 142 Show the next record (`forms-next-record'). With a prefix 143 argument N, show the Nth next record. 144 145`C-c C-p' 146 Show the previous record (`forms-prev-record'). With a prefix 147 argument N, show the Nth previous record. 148 149`C-c C-l' 150 Jump to a record by number (`forms-jump-record'). Specify the 151 record number with a prefix argument. 152 153`C-c <' 154 Jump to the first record (`forms-first-record'). 155 156`C-c >' 157 Jump to the last record (`forms-last-record'). This command also 158 recalculates the number of records in the data file. 159 160`TAB' 161`C-c TAB' 162 Jump to the next field in the current record (`forms-next-field'). 163 With a numeric argument N, jump forward N fields. If this command 164 would move past the last field, it wraps around to the first field. 165 166`C-c C-q' 167 Toggles read-only mode (`forms-toggle-read-only'). In read-only 168 Forms mode, you cannot edit the fields; most Forms mode commands 169 can be accessed without the prefix `C-c' if you use the normal 170 letter instead (for example, type `n' instead of `C-c C-n'). In 171 edit mode, you can edit the fields and thus change the contents of 172 the data base; you must begin Forms mode commands with `C-c'. 173 Switching to edit mode is allowed only if you have write access to 174 the data file. 175 176`C-c C-o' 177 Create a new record and insert it before the current record 178 (`forms-insert-record'). It starts out with empty (or default) 179 contents for its fields; you can then edit the fields. With a 180 prefix argument, the new record is created *after* the current one. 181 See also `forms-modified-record-filter' in *Note Modifying Forms 182 Contents::. 183 184`C-c C-k' 185 Delete the current record (`forms-delete-record'). You are 186 prompted for confirmation before the record is deleted unless a 187 prefix argument has been provided. 188 189`C-c C-s REGEXP RET' 190 Search for REGEXP in all records following this one 191 (`forms-search'). If found, this record is shown. If you give an 192 empty argument, the previous regexp is used again. 193 194`M-x forms-prev-field' 195 Similar to `forms-next-field' but moves backwards. 196 197 In addition, commands such as `C-x C-s' (`save-buffer') and `M-x 198revert-buffer' are useful in Forms mode just as in other modes. 199 200 The following function key definitions are set up in Forms mode 201(whether read-only or not): 202 203`next' 204 forms-next-record 205 206`prior' 207 forms-prev-record 208 209`begin' 210 forms-first-record 211 212`end' 213 forms-last-record 214 215`S-Tab' 216 forms-prev-field 217 218 219File: forms, Node: Data File Format, Next: Control File Format, Prev: Forms Commands, Up: Top 220 221Data File Format 222**************** 223 224 Files for use with Forms mode are very simple--each "record" 225(usually one line) forms the contents of one form. Each record consists 226of a number of "fields", which are separated by the value of the string 227`forms-field-sep', which is `"\t"' (a tab) by default. 228 229 Fields may contain text which shows up in the forms in multiple 230lines. These lines are separated in the field using a "pseudo-newline" 231character which is defined by the value of the string 232`forms-multi-line'. Its default value is `"\^k"'. If it is set to 233`nil', multiple line fields are prohibited. 234 235 236File: forms, Node: Control File Format, Next: Format Description, Prev: Data File Format, Up: Top 237 238Control File Format 239******************* 240 241 The Forms mode "control file" serves two purposes. First, it names 242the data file to use, and defines its format and properties. Second, 243the Emacs buffer it occupies is used by Forms mode to display the forms. 244 245 The contents of the control file are evaluated as a Lisp program. It 246should set the following Lisp variables to suitable values: 247 248`forms-file' 249 This variable specifies the name of the data file. Example: 250 251 (setq forms-file "my/data-file") 252 253`forms-format-list' 254 This variable describes the way the fields of the record are 255 formatted on the screen. For details, see *Note Format 256 Description::. 257 258`forms-number-of-fields' 259 This variable holds the number of fields in each record of the data 260 file. Example: 261 262 (setq forms-number-of-fields 10) 263 264 If the control file doesn't set all of these variables, Forms mode 265reports an error. 266 267 The control file can optionally set the following additional Forms 268mode variables. Most of them have default values that are good for most 269applications. 270 271`forms-field-sep' 272 This variable may be used to designate the string which separates 273 the fields in the records of the data file. If not set, it 274 defaults to the string `"\t"' (a tab character). Example: 275 276 (setq forms-field-sep "\t") 277 278`forms-read-only' 279 If the value is non-`nil', the data file is treated read-only. 280 (Forms mode also treats the data file as read-only if you don't 281 have access to write it.) Example: 282 283 (set forms-read-only t) 284 285`forms-multi-line' 286 This variable specifies the "pseudo newline" separator that allows 287 multi-line fields. This separator goes between the "lines" within 288 a field--thus, the field doesn't really contain multiple lines, 289 but it appears that way when displayed in Forms mode. If the 290 value is `nil', multi-line text fields are prohibited. The pseudo 291 newline must not be a character contained in `forms-field-sep'. 292 293 The default value is `"\^k"', so the default pseudo newline is the 294 character control-k. Example: 295 296 (setq forms-multi-line "\^k") 297 298`forms-new-record-filter' 299 This variable holds a function to be called whenever a new record 300 is created to supply default values for fields. If it is `nil', 301 no function is called. *Note Modifying Forms Contents::, for 302 details. 303 304`forms-modified-record-filter' 305 This variable holds a function to be called whenever a record is 306 modified, just before updating the Forms data file. If it is 307 `nil', no function is called. *Note Modifying Forms Contents::, 308 for details. 309 310 311File: forms, Node: Format Description, Next: Modifying Forms Contents, Prev: Control File Format, Up: Top 312 313The Format Description 314********************** 315 316 The variable `forms-format-list' specifies the format of the data in 317the data file, and how to convert the data for display in Forms mode. 318Its value must be a list of Forms mode "formatting elements", each of 319which can be a string, a number, a Lisp list, or a Lisp symbol that 320evaluates to one of those. The formatting elements are processed in the 321order they appear in the list. 322 323STRING 324 A string formatting element is inserted in the forms "as is," as 325 text that the user cannot alter. 326 327NUMBER 328 A number element selects a field of the record. The contents of 329 this field are inserted in the display at this point. Field 330 numbers count starting from 1 (one). 331 332LIST 333 A formatting element that is a list specifies a function call. 334 This function is called every time a record is displayed, and its 335 result, which must be a string, is inserted in the display text. 336 The function should do nothing but returning a string. 337 338 The function you call can access the fields of the record as a 339 list in the variable `forms-fields'. 340 341SYMBOL 342 A symbol used as a formatting element should evaluate to a string, 343 number, or list; the value is interpreted as a formatting element, 344 as described above. 345 346 If a record does not contain the number of fields as specified in 347`forms-number-of-fields', a warning message will be printed. Excess 348fields are ignored, missing fields are set to empty. 349 350 The control file which displays `/etc/passwd' file as demonstrated 351in the beginning of this manual might look as follows: 352 353 ;; This demo visits `/etc/passwd'. 354 355 (setq forms-file "/etc/passwd") 356 (setq forms-number-of-fields 7) 357 (setq forms-read-only t) ; to make sure 358 (setq forms-field-sep ":") 359 ;; Don't allow multi-line fields. 360 (setq forms-multi-line nil) 361 362 (setq forms-format-list 363 (list 364 "====== /etc/passwd ======\n\n" 365 "User : " 1 366 " Uid: " 3 367 " Gid: " 4 368 "\n\n" 369 "Name : " 5 370 "\n\n" 371 "Home : " 6 372 "\n\n" 373 "Shell: " 7 374 "\n")) 375 376 When you construct the value of `forms-format-list', you should 377usually either quote the whole value, like this, 378 379 (setq forms-format-list 380 '( 381 "====== " forms-file " ======\n\n" 382 "User : " 1 383 (make-string 20 ?-) 384 ... 385 )) 386 387or quote the elements which are lists, like this: 388 389 (setq forms-format-list 390 (list 391 "====== " forms-file " ======\n\n" 392 "User : " 1 393 '(make-string 20 ?-) 394 ... 395 )) 396 397 Forms mode validates the contents of `forms-format-list' when you 398visit a database. If there are errors, processing is aborted with an 399error message which includes a descriptive text. *Note Error 400Messages::, for a detailed list of error messages. 401 402 403File: forms, Node: Modifying Forms Contents, Next: Miscellaneous, Prev: Format Description, Up: Top 404 405Modifying The Forms Contents 406**************************** 407 408 If `forms-read-only' is `nil', the user can modify the fields and 409records of the database. 410 411 All normal editing commands are available for editing the contents 412of the displayed record. You cannot delete or modify the fixed, 413explanatory text that comes from string formatting elements, but you 414can modify the actual field contents. 415 416 If the variable `forms-modified-record-filter' is non-`nil', it is 417called as a function before the new data is written to the data file. 418The function receives one argument, a vector that contains the contents 419of the fields of the record. 420 421 The function can refer to fields with `aref' and modify them with 422`aset'. The first field has number 1 (one); thus, element 0 of the 423vector is not used. The function should return the same vector it was 424passed; the (possibly modified) contents of the vector determine what is 425actually written in the file. Here is an example: 426 427 (defun my-modified-record-filter (record) 428 ;; Modify second field. 429 (aset record 2 (current-time-string)) 430 ;; Return the field vector. 431 record) 432 433 (setq forms-modified-record-filter 'my-modified-record-filter) 434 435 If the variable `forms-new-record-filter' is non-`nil', its value is 436a function to be called to fill in default values for the fields of a 437new record. The function is passed a vector of empty strings, one for 438each field; it should return the same vector, with the desired field 439values stored in it. Fields are numbered starting from 1 (one). 440Example: 441 442 (defun my-new-record-filter (fields) 443 (aset fields 5 (login-name)) 444 (aset fields 1 (current-time-string)) 445 fields) 446 447 (setq forms-new-record-filter 'my-new-record-filter) 448 449 450File: forms, Node: Miscellaneous, Next: Error Messages, Prev: Modifying Forms Contents, Up: Top 451 452Miscellaneous 453************* 454 455 The global variable `forms-version' holds the version information of 456the Forms mode software. 457 458 It is very convenient to use symbolic names for the fields in a 459record. The function `forms-enumerate' provides an elegant means to 460define a series of variables whose values are consecutive integers. The 461function returns the highest number used, so it can be used to set 462`forms-number-of-fields' also. For example: 463 464 (setq forms-number-of-fields 465 (forms-enumerate 466 '(field1 field2 field3 ...))) 467 468 This sets `field1' to 1, `field2' to 2, and so on. 469 470 Care has been taken to keep the Forms mode variables buffer-local, 471so it is possible to visit multiple files in Forms mode simultaneously, 472even if they have different properties. 473 474 If you have visited the control file in normal fashion with 475`find-file' or a like command, you can switch to Forms mode with the 476command `M-x forms-mode'. If you put `-*- forms -*-' in the first line 477of the control file, then visiting it enables Forms mode automatically. 478But this makes it hard to edit the control file itself, so you'd 479better think twice before using this. 480 481 The default format for the data file, using `"\t"' to separate 482fields and `"\^k"' to separate lines within a field, matches the file 483format of some popular database programss, e.g. FileMaker. So 484`forms-mode' can decrease the need to use proprietary software. 485 486 487File: forms, Node: Error Messages, Next: Long Example, Prev: Miscellaneous, Up: Top 488 489Error Messages 490************** 491 492 This section describes all error messages which can be generated by 493forms mode. Error messages that result from parsing the control file 494all start with the text `Forms control file error'. Messages generated 495while analyzing the definition of `forms-format-list' start with `Forms 496format error'. 497 498`Forms control file error: 'forms-file' has not been set' 499 The variable `forms-file' was not set by the control file. 500 501`Forms control file error: 'forms-number-of-fields' has not been set' 502 The variable `forms-number-of-fields' was not set by the control 503 file. 504 505`Forms control file error: 'forms-number-of-fields' must be a number > 0' 506 The variable `forms-number-of-fields' did not contain a positive 507 number. 508 509`Forms control file error: 'forms-field-sep' is not a string' 510`Forms control file error: 'forms-multi-line' must be nil or a one-character string' 511 The variable `forms-multi-line' was set to something other than 512 `nil' or a single-character string. 513 514`Forms control file error: 'forms-multi-line' is equal to 'forms-field-sep'' 515 The variable `forms-multi-line' may not be equal to 516 `forms-field-sep' for this would make it impossible to distinguish 517 fields and the lines in the fields. 518 519`Forms control file error: 'forms-new-record-filter' is not a function' 520`Forms control file error: 'forms-modified-record-filter' is not a function' 521 The variable has been set to something else than a function. 522 523`Forms control file error: 'forms-format-list' has not been set' 524`Forms control file error: 'forms-format-list' is not a list' 525 The variable `forms-format-list' was not set to a Lisp list by the 526 control file. 527 528`Forms format error: field number XX out of range 1..NN' 529 A field number was supplied in `forms-format-list' with a value of 530 XX, which was not greater than zero and smaller than or equal to 531 the number of fields in the forms, NN. 532 533`Forms format error: not a function FUN' 534 The first element of a list which is an element of 535 `forms-format-list' was not a valid Lisp function. 536 537`Forms format error: invalid element XX' 538 A list element was supplied in `forms-format-list' which was not a 539 string, number or list. 540 541`Warning: this record has XX fields instead of YY' 542 The number of fields in this record in the data file did not match 543 `forms-number-of-fields'. Missing fields will be made empty. 544 545`Multi-line fields in this record - update refused!' 546 The current record contains newline characters, hence can not be 547 written back to the data file, for it would corrupt it. Probably 548 you inserted a newline in a field, while `forms-multi-line' was 549 `nil'. 550 551`Record number XX out of range 1..YY' 552 A jump was made to non-existing record XX. YY denotes the number 553 of records in the file. 554 555`Stuck at record XX' 556 An internal error prevented a specific record from being retrieved. 557 558`No write access to `"'FILE`"'' 559 An attempt was made to enable edit mode on a file that has been 560 write protected. 561 562``"'REGEXP`"' not found' 563 The REGEXP could not be found in the data file, starting at the 564 current record location. 565 566`Warning: number of records changed to NN' 567 Forms mode's idea of the number of records has been adjusted to the 568 number of records actually present in the data file. 569 570`Problem saving buffers?' 571 An error occurred while saving the data file buffer. Most likely, 572 Emacs did ask to confirm deleting the buffer because it had been 573 modified, and you said `no'. 574 575 576File: forms, Node: Long Example, Next: Credits, Prev: Error Messages, Up: Top 577 578Long Example 579************ 580 581 The following example exploits most of the features of Forms mode. 582This example is included in the distribution as file `forms-d2.el'. 583 584 ;; demo2 -- demo forms-mode -*- emacs-lisp -*- 585 586 ;; SCCS Status : demo2 1.1.2 587 ;; Author : Johan Vromans 588 ;; Created On : 1989 589 ;; Last Modified By: Johan Vromans 590 ;; Last Modified On: Mon Jul 1 13:56:31 1991 591 ;; Update Count : 2 592 ;; Status : OK 593 ;; 594 ;; This sample forms exploit most of the features of forms mode. 595 596 ;; Set the name of the data file. 597 (setq forms-file "forms-d2.dat") 598 599 ;; Use `forms-enumerate' to set field names and number thereof. 600 (setq forms-number-of-fields 601 (forms-enumerate 602 '(arch-newsgroup ; 1 603 arch-volume ; 2 604 arch-issue ; and ... 605 arch-article ; ... so 606 arch-shortname ; ... ... on 607 arch-parts 608 arch-from 609 arch-longname 610 arch-keywords 611 arch-date 612 arch-remarks))) 613 614 ;; The following functions are used by this form for layout purposes. 615 ;; 616 (defun arch-tocol (target &optional fill) 617 "Produces a string to skip to column TARGET. 618 Prepends newline if needed. 619 The optional FILL should be a character, used to fill to the column." 620 (if (null fill) 621 (setq fill ? )) 622 (if (< target (current-column)) 623 (concat "\n" (make-string target fill)) 624 (make-string (- target (current-column)) fill))) 625 ;; 626 (defun arch-rj (target field &optional fill) 627 "Produces a string to skip to column TARGET\ 628 minus the width of field FIELD. 629 Prepends newline if needed. 630 The optional FILL should be a character, 631 used to fill to the column." 632 (arch-tocol (- target (length (nth field forms-fields))) fill)) 633 634 ;; Record filters. 635 ;; 636 (defun new-record-filter (the-record) 637 "Form a new record with some defaults." 638 (aset the-record arch-from (user-full-name)) 639 (aset the-record arch-date (current-time-string)) 640 the-record) ; return it 641 (setq forms-new-record-filter 'new-record-filter) 642 643 ;; The format list. 644 (setq forms-format-list 645 (list 646 "====== Public Domain Software Archive ======\n\n" 647 arch-shortname 648 " - " arch-longname 649 "\n\n" 650 "Article: " arch-newsgroup 651 "/" arch-article 652 " " 653 '(arch-tocol 40) 654 "Issue: " arch-issue 655 " " 656 '(arch-rj 73 10) 657 "Date: " arch-date 658 "\n\n" 659 "Submitted by: " arch-from 660 "\n" 661 '(arch-tocol 79 ?-) 662 "\n" 663 "Keywords: " arch-keywords 664 "\n\n" 665 "Parts: " arch-parts 666 "\n\n====== Remarks ======\n\n" 667 arch-remarks 668 )) 669 670 ;; That's all, folks! 671 672 673File: forms, Node: Credits, Next: Index, Prev: Long Example, Up: Top 674 675Credits 676******* 677 678 Forms mode was developed by Johan Vromans while working at Multihouse 679Research in the Netherlands. 680 681 Bug fixes and other useful suggestions were supplied by Richard 682Stallman (`rms@gnu.ai.mit.edu'), Harald Hanche-Olsen 683(`hanche@imf.unit.no'), `cwitty@portia.stanford.edu', Jonathan I. 684Kamens, Per Cederqvist (`ceder@signum.se'), and Ignatios Souvatzis. 685 686 This documentation was slightly inspired by the documentation of 687"rolo mode" by Paul Davis at Schlumberger Cambridge Research 688(`davis%scrsu1%sdr.slb.com@relay.cs.net'). 689 690 None of this would have been possible without GNU Emacs of the Free 691Software Foundation. Thanks, Richard! 692 693 694File: forms, Node: Index, Prev: Credits, Up: Top 695 696Index 697***** 698 699* Menu: 700 701* TAB: Forms Commands. 702* begin: Forms Commands. 703* C-c <: Forms Commands. 704* C-c >: Forms Commands. 705* C-c TAB: Forms Commands. 706* C-c C-k: Forms Commands. 707* C-c C-l: Forms Commands. 708* C-c C-n: Forms Commands. 709* C-c C-o: Forms Commands. 710* C-c C-p: Forms Commands. 711* C-c C-q: Forms Commands. 712* C-c C-s REGEXP RET: Forms Commands. 713* control file: Control File Format. 714* end: Forms Commands. 715* field: Data File Format. 716* forms-delete-record: Forms Commands. 717* forms-enumerate: Miscellaneous. 718* forms-field-sep: Control File Format. 719* forms-field-sep: Data File Format. 720* forms-fields: Format Description. 721* forms-file: Control File Format. 722* forms-find-file: Entering and Exiting Forms Mode. 723* forms-find-file-other-window: Entering and Exiting Forms Mode. 724* forms-first-record: Forms Commands. 725* forms-format-list: Control File Format. 726* forms-format-list: Format Description. 727* forms-insert-record: Forms Commands. 728* forms-jump-record: Forms Commands. 729* forms-last-record: Forms Commands. 730* forms-mode: Miscellaneous. 731* forms-mode-hooks: Entering and Exiting Forms Mode. 732* forms-modified-record-filter: Control File Format. 733* forms-multi-line: Data File Format. 734* forms-multi-line: Control File Format. 735* forms-new-record-filter: Control File Format. 736* forms-next-field: Forms Commands. 737* forms-next-record: Forms Commands. 738* forms-number-of-fields: Control File Format. 739* forms-prev-field: Forms Commands. 740* forms-prev-field: Forms Commands. 741* forms-prev-record: Forms Commands. 742* forms-read-only: Control File Format. 743* forms-search: Forms Commands. 744* forms-toggle-read-only: Forms Commands. 745* forms-version: Miscellaneous. 746* next: Forms Commands. 747* prior: Forms Commands. 748* pseudo-newline: Data File Format. 749* record: Data File Format. 750* S-Tab: Forms Commands. 751 752 753 754Tag Table: 755Node: Top335 756Node: Forms Example1755 757Node: Entering and Exiting Forms Mode2975 758Node: Forms Commands5160 759Node: Data File Format8242 760Node: Control File Format8949 761Node: Format Description11734 762Node: Modifying Forms Contents14867 763Node: Miscellaneous16754 764Node: Error Messages18293 765Node: Long Example21960 766Node: Credits25032 767Node: Index25768 768 769End Tag Table 770