diff options
| author | Johan Vromans | 1995-01-05 11:54:18 +0000 |
|---|---|---|
| committer | Johan Vromans | 1995-01-05 11:54:18 +0000 |
| commit | ac7e3dbebec661c46b90386d7562bc463e2cb16a (patch) | |
| tree | 1888d61a2da00179539a555f04ee789633267ec5 | |
| parent | f9b4aacf1bc578575e80eda5e687ab472f0fc211 (diff) | |
| download | emacs-ac7e3dbebec661c46b90386d7562bc463e2cb16a.tar.gz emacs-ac7e3dbebec661c46b90386d7562bc463e2cb16a.zip | |
Change forms-search to forms-search-forward, and add
forms-search-backward.
(forms--mode-menu-ro, forms--mode-menu-edit): New
functions to create a pulldown menu in the menubar.
(forms--mode-commands): Call them for the edit and view mode.
(forms-print): New function.
| -rw-r--r-- | lisp/forms.el | 193 |
1 files changed, 176 insertions, 17 deletions
diff --git a/lisp/forms.el b/lisp/forms.el index 2011d35c56a..c8276c7f68c 100644 --- a/lisp/forms.el +++ b/lisp/forms.el | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | ;;; forms.el -- Forms mode: edit a file as a form to fill in. | 1 | ;;; forms.el -- Forms mode: edit a file as a form to fill in. |
| 2 | ;;; Copyright (C) 1991, 1993 Free Software Foundation, Inc. | 2 | ;;; Copyright (C) 1991, 1994 Free Software Foundation, Inc. |
| 3 | 3 | ||
| 4 | ;; Author: Johan Vromans <jv@nl.net> | 4 | ;; Author: Johan Vromans <jv@nl.net> |
| 5 | ;; Version: $Revision: 2.9 $ | 5 | ;; Version: $Revision: 2.13 $ |
| 6 | 6 | ||
| 7 | ;; This file is part of GNU Emacs. | 7 | ;; This file is part of GNU Emacs. |
| 8 | 8 | ||
| @@ -232,7 +232,8 @@ | |||
| 232 | ;;; \C-c \C-l forms-jump-record | 232 | ;;; \C-c \C-l forms-jump-record |
| 233 | ;;; \C-c \C-n forms-next-record | 233 | ;;; \C-c \C-n forms-next-record |
| 234 | ;;; \C-c \C-p forms-prev-record | 234 | ;;; \C-c \C-p forms-prev-record |
| 235 | ;;; \C-c \C-s forms-search | 235 | ;;; \C-c \C-r forms-search-backward |
| 236 | ;;; \C-c \C-s forms-search-forward | ||
| 236 | ;;; \C-c \C-x forms-exit | 237 | ;;; \C-c \C-x forms-exit |
| 237 | ;;; | 238 | ;;; |
| 238 | ;;; Read-only mode commands: | 239 | ;;; Read-only mode commands: |
| @@ -244,7 +245,8 @@ | |||
| 244 | ;;; l forms-jump-record | 245 | ;;; l forms-jump-record |
| 245 | ;;; n forms-next-record | 246 | ;;; n forms-next-record |
| 246 | ;;; p forms-prev-record | 247 | ;;; p forms-prev-record |
| 247 | ;;; s forms-search | 248 | ;;; r forms-search-backward |
| 249 | ;;; s forms-search-forward | ||
| 248 | ;;; x forms-exit | 250 | ;;; x forms-exit |
| 249 | ;;; | 251 | ;;; |
| 250 | ;;; Of course, it is also possible to use the \C-c prefix to obtain the | 252 | ;;; Of course, it is also possible to use the \C-c prefix to obtain the |
| @@ -279,10 +281,10 @@ | |||
| 279 | (provide 'forms) ;;; official | 281 | (provide 'forms) ;;; official |
| 280 | (provide 'forms-mode) ;;; for compatibility | 282 | (provide 'forms-mode) ;;; for compatibility |
| 281 | 283 | ||
| 282 | (defconst forms-version (substring "$Revision: 2.9 $" 11 -2) | 284 | (defconst forms-version (substring "$Revision: 2.13 $" 11 -2) |
| 283 | "The version number of forms-mode (as string). The complete RCS id is: | 285 | "The version number of forms-mode (as string). The complete RCS id is: |
| 284 | 286 | ||
| 285 | $Id: forms.el,v 2.9 1994/07/26 19:47:39 rms Exp rms $") | 287 | $Id: forms.el,v 2.13 1994/10/15 10:59:17 jv Exp $") |
| 286 | 288 | ||
| 287 | (defvar forms-mode-hooks nil | 289 | (defvar forms-mode-hooks nil |
| 288 | "Hook functions to be run upon entering Forms mode.") | 290 | "Hook functions to be run upon entering Forms mode.") |
| @@ -376,7 +378,7 @@ Defaults to t if this emacs is capable of handling text properties.") | |||
| 376 | "List of strings of the current record, as parsed from the file.") | 378 | "List of strings of the current record, as parsed from the file.") |
| 377 | 379 | ||
| 378 | (defvar forms--search-regexp nil | 380 | (defvar forms--search-regexp nil |
| 379 | "Last regexp used by forms-search.") | 381 | "Last regexp used by forms-search functions.") |
| 380 | 382 | ||
| 381 | (defvar forms--format nil | 383 | (defvar forms--format nil |
| 382 | "Formatting routine.") | 384 | "Formatting routine.") |
| @@ -416,7 +418,8 @@ Commands: Equivalent keys in read-only mode: | |||
| 416 | \\C-c \\C-l forms-jump-record l | 418 | \\C-c \\C-l forms-jump-record l |
| 417 | \\C-c \\C-n forms-next-record n | 419 | \\C-c \\C-n forms-next-record n |
| 418 | \\C-c \\C-p forms-prev-record p | 420 | \\C-c \\C-p forms-prev-record p |
| 419 | \\C-c \\C-s forms-search s | 421 | \\C-c \\C-r forms-search-reverse r |
| 422 | \\C-c \\C-s forms-search-forward s | ||
| 420 | \\C-c \\C-x forms-exit x | 423 | \\C-c \\C-x forms-exit x |
| 421 | " | 424 | " |
| 422 | (interactive) | 425 | (interactive) |
| @@ -603,9 +606,10 @@ Commands: Equivalent keys in read-only mode: | |||
| 603 | (if read-file-filter | 606 | (if read-file-filter |
| 604 | (save-excursion | 607 | (save-excursion |
| 605 | (set-buffer forms--file-buffer) | 608 | (set-buffer forms--file-buffer) |
| 606 | (let ((inhibit-read-only t)) | 609 | (let ((inhibit-read-only t) |
| 607 | (run-hooks 'read-file-filter)) | 610 | (file-modified (buffer-modified-p))) |
| 608 | (set-buffer-modified-p nil) | 611 | (run-hooks 'read-file-filter) |
| 612 | (if (not file-modified) (set-buffer-modified-p nil))) | ||
| 609 | (if write-file-filter | 613 | (if write-file-filter |
| 610 | (progn | 614 | (progn |
| 611 | (make-variable-buffer-local 'local-write-file-hooks) | 615 | (make-variable-buffer-local 'local-write-file-hooks) |
| @@ -1220,7 +1224,8 @@ Commands: Equivalent keys in read-only mode: | |||
| 1220 | (define-key forms-mode-map "\C-l" 'forms-jump-record) | 1224 | (define-key forms-mode-map "\C-l" 'forms-jump-record) |
| 1221 | (define-key forms-mode-map "\C-n" 'forms-next-record) | 1225 | (define-key forms-mode-map "\C-n" 'forms-next-record) |
| 1222 | (define-key forms-mode-map "\C-p" 'forms-prev-record) | 1226 | (define-key forms-mode-map "\C-p" 'forms-prev-record) |
| 1223 | (define-key forms-mode-map "\C-s" 'forms-search) | 1227 | (define-key forms-mode-map "\C-r" 'forms-search-backward) |
| 1228 | (define-key forms-mode-map "\C-s" 'forms-search-forward) | ||
| 1224 | (define-key forms-mode-map "\C-x" 'forms-exit) | 1229 | (define-key forms-mode-map "\C-x" 'forms-exit) |
| 1225 | (define-key forms-mode-map "<" 'forms-first-record) | 1230 | (define-key forms-mode-map "<" 'forms-first-record) |
| 1226 | (define-key forms-mode-map ">" 'forms-last-record) | 1231 | (define-key forms-mode-map ">" 'forms-last-record) |
| @@ -1236,22 +1241,118 @@ Commands: Equivalent keys in read-only mode: | |||
| 1236 | (define-key forms-mode-ro-map "l" 'forms-jump-record) | 1241 | (define-key forms-mode-ro-map "l" 'forms-jump-record) |
| 1237 | (define-key forms-mode-ro-map "n" 'forms-next-record) | 1242 | (define-key forms-mode-ro-map "n" 'forms-next-record) |
| 1238 | (define-key forms-mode-ro-map "p" 'forms-prev-record) | 1243 | (define-key forms-mode-ro-map "p" 'forms-prev-record) |
| 1239 | (define-key forms-mode-ro-map "s" 'forms-search) | 1244 | (define-key forms-mode-ro-map "r" 'forms-search-backward) |
| 1245 | (define-key forms-mode-ro-map "s" 'forms-search-forward) | ||
| 1240 | (define-key forms-mode-ro-map "x" 'forms-exit) | 1246 | (define-key forms-mode-ro-map "x" 'forms-exit) |
| 1241 | (define-key forms-mode-ro-map "<" 'forms-first-record) | 1247 | (define-key forms-mode-ro-map "<" 'forms-first-record) |
| 1242 | (define-key forms-mode-ro-map ">" 'forms-last-record) | 1248 | (define-key forms-mode-ro-map ">" 'forms-last-record) |
| 1243 | (define-key forms-mode-ro-map "?" 'describe-mode) | 1249 | (define-key forms-mode-ro-map "?" 'describe-mode) |
| 1244 | (define-key forms-mode-ro-map " " 'forms-next-record) | 1250 | (define-key forms-mode-ro-map " " 'forms-next-record) |
| 1245 | (forms--mode-commands1 forms-mode-ro-map) | 1251 | (forms--mode-commands1 forms-mode-ro-map) |
| 1252 | (forms--mode-menu-ro forms-mode-ro-map) | ||
| 1246 | 1253 | ||
| 1247 | ;; This is the normal, local map. | 1254 | ;; This is the normal, local map. |
| 1248 | (setq forms-mode-edit-map (make-keymap)) | 1255 | (setq forms-mode-edit-map (make-keymap)) |
| 1249 | (define-key forms-mode-edit-map "\t" 'forms-next-field) | 1256 | (define-key forms-mode-edit-map "\t" 'forms-next-field) |
| 1250 | (define-key forms-mode-edit-map "\C-c" forms-mode-map) | 1257 | (define-key forms-mode-edit-map "\C-c" forms-mode-map) |
| 1251 | (forms--mode-commands1 forms-mode-edit-map) | 1258 | (forms--mode-commands1 forms-mode-edit-map) |
| 1259 | (forms--mode-menu-edit forms-mode-edit-map) | ||
| 1252 | ) | 1260 | ) |
| 1253 | 1261 | ||
| 1254 | (defun forms--mode-commands1 (map) | 1262 | (defun forms--mode-menu-ro (map) |
| 1263 | ;;; Menu initialisation | ||
| 1264 | ; (define-key map [menu-bar] (make-sparse-keymap)) | ||
| 1265 | (define-key map [menu-bar forms] | ||
| 1266 | (cons "Forms" (make-sparse-keymap "Forms"))) | ||
| 1267 | (define-key map [menu-bar forms menu-forms-exit] | ||
| 1268 | '("Exit" . forms-exit)) | ||
| 1269 | (define-key map [menu-bar forms menu-forms-sep1] | ||
| 1270 | '("----")) | ||
| 1271 | (define-key map [menu-bar forms menu-forms-save] | ||
| 1272 | '("Save data" . forms-save-buffer)) | ||
| 1273 | (define-key map [menu-bar forms menu-forms-print] | ||
| 1274 | '("Print data" . forms-print)) | ||
| 1275 | (define-key map [menu-bar forms menu-forms-describe] | ||
| 1276 | '("Describe mode" . describe-mode)) | ||
| 1277 | (define-key map [menu-bar forms menu-forms-toggle-ro] | ||
| 1278 | '("Toggle View/Edit" . forms-toggle-read-only)) | ||
| 1279 | (define-key map [menu-bar forms menu-forms-jump-record] | ||
| 1280 | '("Jump" . forms-jump-record)) | ||
| 1281 | (define-key map [menu-bar forms menu-forms-search-backward] | ||
| 1282 | '("Search backward" . forms-search-backward)) | ||
| 1283 | (define-key map [menu-bar forms menu-forms-search-forward] | ||
| 1284 | '("Search forward" . forms-search-forward)) | ||
| 1285 | (define-key map [menu-bar forms menu-forms-delete-record] | ||
| 1286 | '("Delete" . forms-delete-record)) | ||
| 1287 | (define-key map [menu-bar forms menu-forms-insert-record] | ||
| 1288 | '("Insert" . forms-insert-record)) | ||
| 1289 | (define-key map [menu-bar forms menu-forms-sep2] | ||
| 1290 | '("----")) | ||
| 1291 | (define-key map [menu-bar forms menu-forms-last-record] | ||
| 1292 | '("Last record" . forms-last-record)) | ||
| 1293 | (define-key map [menu-bar forms menu-forms-first-record] | ||
| 1294 | '("First record" . forms-first-record)) | ||
| 1295 | (define-key map [menu-bar forms menu-forms-prev-record] | ||
| 1296 | '("Previous record" . forms-prev-record)) | ||
| 1297 | (define-key map [menu-bar forms menu-forms-next-record] | ||
| 1298 | '("Next record" . forms-next-record)) | ||
| 1299 | (define-key map [menu-bar forms menu-forms-sep3] | ||
| 1300 | '("----")) | ||
| 1301 | (define-key map [menu-bar forms menu-forms-prev-field] | ||
| 1302 | '("Previous field" . forms-prev-field)) | ||
| 1303 | (define-key map [menu-bar forms menu-forms-next-field] | ||
| 1304 | '("Next field" . forms-next-field)) | ||
| 1305 | (put 'forms-insert-record 'menu-enable '(not forms-read-only)) | ||
| 1306 | (put 'forms-delete-record 'menu-enable '(not forms-read-only)) | ||
| 1307 | ) | ||
| 1308 | (defun forms--mode-menu-edit (map) | ||
| 1309 | ;;; Menu initialisation | ||
| 1310 | ; (define-key map [menu-bar] (make-sparse-keymap)) | ||
| 1311 | (define-key map [menu-bar forms] | ||
| 1312 | (cons "Forms" (make-sparse-keymap "Forms"))) | ||
| 1313 | (define-key map [menu-bar forms menu-forms-edit--exit] | ||
| 1314 | '("Exit" . forms-exit)) | ||
| 1315 | (define-key map [menu-bar forms menu-forms-edit-sep1] | ||
| 1316 | '("----")) | ||
| 1317 | (define-key map [menu-bar forms menu-forms-edit-save] | ||
| 1318 | '("Save data" . forms-save-buffer)) | ||
| 1319 | (define-key map [menu-bar forms menu-forms-edit-print] | ||
| 1320 | '("Print data" . forms-print)) | ||
| 1321 | (define-key map [menu-bar forms menu-forms-edit-describe] | ||
| 1322 | '("Describe mode" . describe-mode)) | ||
| 1323 | (define-key map [menu-bar forms menu-forms-edit-toggle-ro] | ||
| 1324 | '("Toggle View/Edit" . forms-toggle-read-only)) | ||
| 1325 | (define-key map [menu-bar forms menu-forms-edit-jump-record] | ||
| 1326 | '("Jump" . forms-jump-record)) | ||
| 1327 | (define-key map [menu-bar forms menu-forms-edit-search-backward] | ||
| 1328 | '("Search backward" . forms-search-backward)) | ||
| 1329 | (define-key map [menu-bar forms menu-forms-edit-search-forward] | ||
| 1330 | '("Search forward" . forms-search-forward)) | ||
| 1331 | (define-key map [menu-bar forms menu-forms-edit-delete-record] | ||
| 1332 | '("Delete" . forms-delete-record)) | ||
| 1333 | (define-key map [menu-bar forms menu-forms-edit-insert-record] | ||
| 1334 | '("Insert" . forms-insert-record)) | ||
| 1335 | (define-key map [menu-bar forms menu-forms-edit-sep2] | ||
| 1336 | '("----")) | ||
| 1337 | (define-key map [menu-bar forms menu-forms-edit-last-record] | ||
| 1338 | '("Last record" . forms-last-record)) | ||
| 1339 | (define-key map [menu-bar forms menu-forms-edit-first-record] | ||
| 1340 | '("First record" . forms-first-record)) | ||
| 1341 | (define-key map [menu-bar forms menu-forms-edit-prev-record] | ||
| 1342 | '("Previous record" . forms-prev-record)) | ||
| 1343 | (define-key map [menu-bar forms menu-forms-edit-next-record] | ||
| 1344 | '("Next record" . forms-next-record)) | ||
| 1345 | (define-key map [menu-bar forms menu-forms-edit-sep3] | ||
| 1346 | '("----")) | ||
| 1347 | (define-key map [menu-bar forms menu-forms-edit-prev-field] | ||
| 1348 | '("Previous field" . forms-prev-field)) | ||
| 1349 | (define-key map [menu-bar forms menu-forms-edit-next-field] | ||
| 1350 | '("Next field" . forms-next-field)) | ||
| 1351 | (put 'forms-insert-record 'menu-enable '(not forms-read-only)) | ||
| 1352 | (put 'forms-delete-record 'menu-enable '(not forms-read-only)) | ||
| 1353 | ) | ||
| 1354 | |||
| 1355 | (defun forms--mode-commands1 (map) | ||
| 1255 | "Helper routine to define keys." | 1356 | "Helper routine to define keys." |
| 1256 | (define-key map [TAB] 'forms-next-field) | 1357 | (define-key map [TAB] 'forms-next-field) |
| 1257 | (define-key map [S-tab] 'forms-prev-field) | 1358 | (define-key map [S-tab] 'forms-prev-field) |
| @@ -1694,10 +1795,10 @@ it is called to fill (some of) the fields with default values." | |||
| 1694 | (forms-jump-record forms--current-record))) | 1795 | (forms-jump-record forms--current-record))) |
| 1695 | (message "")) | 1796 | (message "")) |
| 1696 | 1797 | ||
| 1697 | (defun forms-search (regexp) | 1798 | (defun forms-search-forward (regexp) |
| 1698 | "Search REGEXP in file buffer." | 1799 | "Search forward for record containing REGEXP." |
| 1699 | (interactive | 1800 | (interactive |
| 1700 | (list (read-string (concat "Search for" | 1801 | (list (read-string (concat "Search forward for" |
| 1701 | (if forms--search-regexp | 1802 | (if forms--search-regexp |
| 1702 | (concat " (" | 1803 | (concat " (" |
| 1703 | forms--search-regexp | 1804 | forms--search-regexp |
| @@ -1726,6 +1827,38 @@ it is called to fill (some of) the fields with default values." | |||
| 1726 | (re-search-forward regexp nil t)))) | 1827 | (re-search-forward regexp nil t)))) |
| 1727 | (setq forms--search-regexp regexp)) | 1828 | (setq forms--search-regexp regexp)) |
| 1728 | 1829 | ||
| 1830 | (defun forms-search-backward (regexp) | ||
| 1831 | "Search backward for record containing REGEXP." | ||
| 1832 | (interactive | ||
| 1833 | (list (read-string (concat "Search backward for" | ||
| 1834 | (if forms--search-regexp | ||
| 1835 | (concat " (" | ||
| 1836 | forms--search-regexp | ||
| 1837 | ")")) | ||
| 1838 | ": ")))) | ||
| 1839 | (if (equal "" regexp) | ||
| 1840 | (setq regexp forms--search-regexp)) | ||
| 1841 | (forms--checkmod) | ||
| 1842 | |||
| 1843 | (let (the-line the-record here | ||
| 1844 | (fld-sep forms-field-sep)) | ||
| 1845 | (if (save-excursion | ||
| 1846 | (set-buffer forms--file-buffer) | ||
| 1847 | (setq here (point)) | ||
| 1848 | (beginning-of-line) | ||
| 1849 | (if (null (re-search-backward regexp nil t)) | ||
| 1850 | (progn | ||
| 1851 | (goto-char here) | ||
| 1852 | (message (concat "\"" regexp "\" not found.")) | ||
| 1853 | nil) | ||
| 1854 | (setq the-record (forms--get-record)) | ||
| 1855 | (setq the-line (1+ (count-lines (point-min) (point)))))) | ||
| 1856 | (progn | ||
| 1857 | (setq forms--current-record the-line) | ||
| 1858 | (forms--show-record the-record) | ||
| 1859 | (re-search-forward regexp nil t)))) | ||
| 1860 | (setq forms--search-regexp regexp)) | ||
| 1861 | |||
| 1729 | (defun forms-save-buffer (&optional args) | 1862 | (defun forms-save-buffer (&optional args) |
| 1730 | "Forms mode replacement for save-buffer. | 1863 | "Forms mode replacement for save-buffer. |
| 1731 | It saves the data buffer instead of the forms buffer. | 1864 | It saves the data buffer instead of the forms buffer. |
| @@ -1802,6 +1935,32 @@ Calls `forms-write-file-filter' before writing out the data." | |||
| 1802 | (throw 'done t)))))) | 1935 | (throw 'done t)))))) |
| 1803 | nil | 1936 | nil |
| 1804 | (goto-char (aref forms--markers (1- (length forms--markers))))))) | 1937 | (goto-char (aref forms--markers (1- (length forms--markers))))))) |
| 1938 | |||
| 1939 | (defun forms-print () | ||
| 1940 | "Send the records to the printer with 'print-buffer', one record per page." | ||
| 1941 | (interactive) | ||
| 1942 | (let ((inhibit-read-only t) | ||
| 1943 | (save-record forms--current-record) | ||
| 1944 | (nb-record 1) | ||
| 1945 | (record nil)) | ||
| 1946 | (while (<= nb-record forms--total-records) | ||
| 1947 | (forms-jump-record nb-record) | ||
| 1948 | (setq record (buffer-string)) | ||
| 1949 | (save-excursion | ||
| 1950 | (set-buffer (get-buffer-create "*forms-print*")) | ||
| 1951 | (goto-char (buffer-end 1)) | ||
| 1952 | (insert record) | ||
| 1953 | (setq buffer-read-only nil) | ||
| 1954 | (if (< nb-record forms--total-records) | ||
| 1955 | (insert "\n\n"))) | ||
| 1956 | (setq nb-record (1+ nb-record))) | ||
| 1957 | (save-excursion | ||
| 1958 | (set-buffer "*forms-print*") | ||
| 1959 | (print-buffer) | ||
| 1960 | (set-buffer-modified-p nil) | ||
| 1961 | (kill-buffer (current-buffer))) | ||
| 1962 | (forms-jump-record save-record))) | ||
| 1963 | |||
| 1805 | ;;; | 1964 | ;;; |
| 1806 | ;;; Special service | 1965 | ;;; Special service |
| 1807 | ;;; | 1966 | ;;; |