diff options
| author | Stefan Monnier | 2003-05-29 23:53:21 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2003-05-29 23:53:21 +0000 |
| commit | f5a356cdd66f19a5d16726317d24ce0bfcf60003 (patch) | |
| tree | fa2c5a0e723658b6f722824f76186722f771c23a | |
| parent | 6c770e384d322b3677d98a13e4c36f4a606b08e8 (diff) | |
| download | emacs-f5a356cdd66f19a5d16726317d24ce0bfcf60003.tar.gz emacs-f5a356cdd66f19a5d16726317d24ce0bfcf60003.zip | |
(forms-mode-hook): Rename from forms-mode-hooks.
(forms-mode): Use add-hook rather than make-local-variable+setq.
Use with-current-buffer. Run the new and the old hooks.
(forms--update): Use with-current-buffer and line-end-position.
(forms--goto-record): New fun.
(forms-jump-record, forms-insert-record, forms-delete-record): Use it.
(forms--process-format-list): Remove unused var `this-item'.
(forms--intuit-from-file): Remove unused var `the-result'.
(forms--trans): Remove unused var `x'.
(forms--exit, forms-exit, forms-exit-no-save): Remove unused arg.
| -rw-r--r-- | lisp/forms.el | 122 |
1 files changed, 49 insertions, 73 deletions
diff --git a/lisp/forms.el b/lisp/forms.el index 24133d22257..39ee142dc2f 100644 --- a/lisp/forms.el +++ b/lisp/forms.el | |||
| @@ -301,12 +301,12 @@ | |||
| 301 | (provide 'forms) ;;; official | 301 | (provide 'forms) ;;; official |
| 302 | (provide 'forms-mode) ;;; for compatibility | 302 | (provide 'forms-mode) ;;; for compatibility |
| 303 | 303 | ||
| 304 | (defconst forms-version (substring "$Revision: 2.46 $" 11 -2) | 304 | (defconst forms-version (substring "$Revision: 2.47 $" 11 -2) |
| 305 | "The version number of forms-mode (as string). The complete RCS id is: | 305 | "The version number of forms-mode (as string). The complete RCS id is: |
| 306 | 306 | ||
| 307 | $Id: forms.el,v 2.46 2003/05/23 12:48:06 rms Exp $") | 307 | $Id: forms.el,v 2.47 2003/05/28 11:19:48 rms Exp $") |
| 308 | 308 | ||
| 309 | (defcustom forms-mode-hooks nil | 309 | (defcustom forms-mode-hook nil |
| 310 | "Hook run upon entering Forms mode." | 310 | "Hook run upon entering Forms mode." |
| 311 | :group 'forms | 311 | :group 'forms |
| 312 | :type 'hook) | 312 | :type 'hook) |
| @@ -648,30 +648,24 @@ Commands: Equivalent keys in read-only mode: | |||
| 648 | (let ((read-file-filter forms-read-file-filter) | 648 | (let ((read-file-filter forms-read-file-filter) |
| 649 | (write-file-filter forms-write-file-filter)) | 649 | (write-file-filter forms-write-file-filter)) |
| 650 | (if read-file-filter | 650 | (if read-file-filter |
| 651 | (save-excursion | 651 | (with-current-buffer forms--file-buffer |
| 652 | (set-buffer forms--file-buffer) | ||
| 653 | (let ((inhibit-read-only t) | 652 | (let ((inhibit-read-only t) |
| 654 | (file-modified (buffer-modified-p))) | 653 | (file-modified (buffer-modified-p))) |
| 655 | (run-hooks 'read-file-filter) | 654 | (run-hooks 'read-file-filter) |
| 656 | (if (not file-modified) (set-buffer-modified-p nil))) | 655 | (if (not file-modified) (set-buffer-modified-p nil))) |
| 657 | (if write-file-filter | 656 | (if write-file-filter |
| 658 | (progn | 657 | (add-hook 'write-file-functions write-file-filter nil t))) |
| 659 | (make-local-variable 'write-file-functions) | ||
| 660 | (setq write-file-functions (list write-file-filter))))) | ||
| 661 | (if write-file-filter | 658 | (if write-file-filter |
| 662 | (save-excursion | 659 | (with-current-buffer forms--file-buffer |
| 663 | (set-buffer forms--file-buffer) | 660 | (add-hook 'write-file-functions write-file-filter nil t))))) |
| 664 | (make-local-variable 'write-file-functions) | ||
| 665 | (setq write-file-functions (list write-file-filter)))))) | ||
| 666 | 661 | ||
| 667 | ;; count the number of records, and set see if it may be modified | 662 | ;; count the number of records, and set see if it may be modified |
| 668 | (let (ro) | 663 | (let (ro) |
| 669 | (setq forms--total-records | 664 | (setq forms--total-records |
| 670 | (save-excursion | 665 | (with-current-buffer forms--file-buffer |
| 671 | (prog1 | 666 | (prog1 |
| 672 | (progn | 667 | (progn |
| 673 | ;;(message "forms: counting records...") | 668 | ;;(message "forms: counting records...") |
| 674 | (set-buffer forms--file-buffer) | ||
| 675 | (bury-buffer (current-buffer)) | 669 | (bury-buffer (current-buffer)) |
| 676 | (setq ro buffer-read-only) | 670 | (setq ro buffer-read-only) |
| 677 | (count-lines (point-min) (point-max))) | 671 | (count-lines (point-min) (point-max))) |
| @@ -724,7 +718,7 @@ Commands: Equivalent keys in read-only mode: | |||
| 724 | 718 | ||
| 725 | ;; user customising | 719 | ;; user customising |
| 726 | ;;(message "forms: proceeding setup (user hooks)...") | 720 | ;;(message "forms: proceeding setup (user hooks)...") |
| 727 | (run-hooks 'forms-mode-hooks) | 721 | (run-hooks 'forms-mode-hook 'forms-mode-hooks) |
| 728 | ;;(message "forms: setting up... done.") | 722 | ;;(message "forms: setting up... done.") |
| 729 | 723 | ||
| 730 | ;; be helpful | 724 | ;; be helpful |
| @@ -757,7 +751,6 @@ Commands: Equivalent keys in read-only mode: | |||
| 757 | (setq forms--elements (make-vector forms-number-of-fields nil)) | 751 | (setq forms--elements (make-vector forms-number-of-fields nil)) |
| 758 | 752 | ||
| 759 | (let ((the-list forms-format-list) ; the list of format elements | 753 | (let ((the-list forms-format-list) ; the list of format elements |
| 760 | (this-item 0) ; element in list | ||
| 761 | (prev-item nil) | 754 | (prev-item nil) |
| 762 | (field-num 0)) ; highest field number | 755 | (field-num 0)) ; highest field number |
| 763 | 756 | ||
| @@ -1226,8 +1219,7 @@ Commands: Equivalent keys in read-only mode: | |||
| 1226 | (let ((read-file-filter forms-read-file-filter) | 1219 | (let ((read-file-filter forms-read-file-filter) |
| 1227 | (the-record)) | 1220 | (the-record)) |
| 1228 | (setq the-record | 1221 | (setq the-record |
| 1229 | (save-excursion | 1222 | (with-current-buffer forms--file-buffer |
| 1230 | (set-buffer forms--file-buffer) | ||
| 1231 | (let ((inhibit-read-only t)) | 1223 | (let ((inhibit-read-only t)) |
| 1232 | (run-hooks 'read-file-filter)) | 1224 | (run-hooks 'read-file-filter)) |
| 1233 | (goto-char (point-min)) | 1225 | (goto-char (point-min)) |
| @@ -1238,8 +1230,7 @@ Commands: Equivalent keys in read-only mode: | |||
| 1238 | (kill-buffer forms--file-buffer) | 1230 | (kill-buffer forms--file-buffer) |
| 1239 | 1231 | ||
| 1240 | ;; Count the number of fields in `the-record'. | 1232 | ;; Count the number of fields in `the-record'. |
| 1241 | (let (the-result | 1233 | (let ((start-pos 0) |
| 1242 | (start-pos 0) | ||
| 1243 | found-pos | 1234 | found-pos |
| 1244 | (field-sep-length (length forms-field-sep))) | 1235 | (field-sep-length (length forms-field-sep))) |
| 1245 | (setq forms-number-of-fields 1) | 1236 | (setq forms-number-of-fields 1) |
| @@ -1453,14 +1444,13 @@ Commands: Equivalent keys in read-only mode: | |||
| 1453 | "Translate in SUBJ all chars ARG into char REP. ARG and REP should | 1444 | "Translate in SUBJ all chars ARG into char REP. ARG and REP should |
| 1454 | be single-char strings." | 1445 | be single-char strings." |
| 1455 | (let ((i 0) | 1446 | (let ((i 0) |
| 1456 | (x (length subj)) | ||
| 1457 | (re (regexp-quote arg)) | 1447 | (re (regexp-quote arg)) |
| 1458 | (k (string-to-char rep))) | 1448 | (k (string-to-char rep))) |
| 1459 | (while (setq i (string-match re subj i)) | 1449 | (while (setq i (string-match re subj i)) |
| 1460 | (aset subj i k) | 1450 | (aset subj i k) |
| 1461 | (setq i (1+ i))))) | 1451 | (setq i (1+ i))))) |
| 1462 | 1452 | ||
| 1463 | (defun forms--exit (query &optional save) | 1453 | (defun forms--exit (&optional save) |
| 1464 | "Internal exit from forms mode function." | 1454 | "Internal exit from forms mode function." |
| 1465 | 1455 | ||
| 1466 | (let ((buf (buffer-name forms--file-buffer))) | 1456 | (let ((buf (buffer-name forms--file-buffer))) |
| @@ -1468,8 +1458,7 @@ Commands: Equivalent keys in read-only mode: | |||
| 1468 | (if (and save | 1458 | (if (and save |
| 1469 | (buffer-modified-p forms--file-buffer)) | 1459 | (buffer-modified-p forms--file-buffer)) |
| 1470 | (forms-save-buffer)) | 1460 | (forms-save-buffer)) |
| 1471 | (save-excursion | 1461 | (with-current-buffer forms--file-buffer |
| 1472 | (set-buffer forms--file-buffer) | ||
| 1473 | (delete-auto-save-file-if-necessary) | 1462 | (delete-auto-save-file-if-necessary) |
| 1474 | (kill-buffer (current-buffer))) | 1463 | (kill-buffer (current-buffer))) |
| 1475 | (if (get-buffer buf) ; not killed??? | 1464 | (if (get-buffer buf) ; not killed??? |
| @@ -1596,12 +1585,10 @@ As a side effect: sets `forms--the-record-list'." | |||
| 1596 | (if (string-match "\n" the-record) | 1585 | (if (string-match "\n" the-record) |
| 1597 | (error "Multi-line fields in this record - update refused")) | 1586 | (error "Multi-line fields in this record - update refused")) |
| 1598 | 1587 | ||
| 1599 | (save-excursion | 1588 | (with-current-buffer forms--file-buffer |
| 1600 | (set-buffer forms--file-buffer) | ||
| 1601 | ;; Use delete-region instead of kill-region, to avoid | 1589 | ;; Use delete-region instead of kill-region, to avoid |
| 1602 | ;; adding junk to the kill-ring. | 1590 | ;; adding junk to the kill-ring. |
| 1603 | (delete-region (save-excursion (beginning-of-line) (point)) | 1591 | (delete-region (line-beginning-position) (line-end-position)) |
| 1604 | (save-excursion (end-of-line) (point))) | ||
| 1605 | (insert the-record) | 1592 | (insert the-record) |
| 1606 | (beginning-of-line)))) | 1593 | (beginning-of-line)))) |
| 1607 | 1594 | ||
| @@ -1633,15 +1620,15 @@ As a side effect: sets `forms--the-record-list'." | |||
| 1633 | (find-file-other-window fn) | 1620 | (find-file-other-window fn) |
| 1634 | (or forms--mode-setup (forms-mode t)))) | 1621 | (or forms--mode-setup (forms-mode t)))) |
| 1635 | 1622 | ||
| 1636 | (defun forms-exit (query) | 1623 | (defun forms-exit () |
| 1637 | "Normal exit from Forms mode. Modified buffers are saved." | 1624 | "Normal exit from Forms mode. Modified buffers are saved." |
| 1638 | (interactive "P") | 1625 | (interactive) |
| 1639 | (forms--exit query t)) | 1626 | (forms--exit t)) |
| 1640 | 1627 | ||
| 1641 | (defun forms-exit-no-save (query) | 1628 | (defun forms-exit-no-save () |
| 1642 | "Exit from Forms mode without saving buffers." | 1629 | "Exit from Forms mode without saving buffers." |
| 1643 | (interactive "P") | 1630 | (interactive) |
| 1644 | (forms--exit query nil)) | 1631 | (forms--exit nil)) |
| 1645 | 1632 | ||
| 1646 | ;;; Navigating commands | 1633 | ;;; Navigating commands |
| 1647 | 1634 | ||
| @@ -1655,6 +1642,16 @@ As a side effect: sets `forms--the-record-list'." | |||
| 1655 | (interactive "P") | 1642 | (interactive "P") |
| 1656 | (forms-jump-record (- forms--current-record (prefix-numeric-value arg)) t)) | 1643 | (forms-jump-record (- forms--current-record (prefix-numeric-value arg)) t)) |
| 1657 | 1644 | ||
| 1645 | (defun forms--goto-record (rn &optional current) | ||
| 1646 | "Goto record number RN. | ||
| 1647 | If CURRENT is provided, it specifies the current record and can be used | ||
| 1648 | to speed up access to RN. Returns the number of records missing, if any." | ||
| 1649 | (if current | ||
| 1650 | (forward-line (- rn current)) | ||
| 1651 | ;; goto-line does not do what we want when the buffer is narrowed. | ||
| 1652 | (goto-char (point-min)) | ||
| 1653 | (forward-line (1- rn)))) | ||
| 1654 | |||
| 1658 | (defun forms-jump-record (arg &optional relative) | 1655 | (defun forms-jump-record (arg &optional relative) |
| 1659 | "Jump to a random record." | 1656 | "Jump to a random record." |
| 1660 | (interactive "NRecord number: ") | 1657 | (interactive "NRecord number: ") |
| @@ -1673,25 +1670,18 @@ As a side effect: sets `forms--the-record-list'." | |||
| 1673 | (forms--checkmod) | 1670 | (forms--checkmod) |
| 1674 | 1671 | ||
| 1675 | ;; Calculate displacement. | 1672 | ;; Calculate displacement. |
| 1676 | (let ((disp (- arg forms--current-record)) | 1673 | (let ((cur forms--current-record)) |
| 1677 | (cur forms--current-record)) | ||
| 1678 | 1674 | ||
| 1679 | ;; `forms--show-record' needs it now. | 1675 | ;; `forms--show-record' needs it now. |
| 1680 | (setq forms--current-record arg) | 1676 | (setq forms--current-record arg) |
| 1681 | 1677 | ||
| 1682 | ;; Get the record and show it. | 1678 | ;; Get the record and show it. |
| 1683 | (forms--show-record | 1679 | (forms--show-record |
| 1684 | (save-excursion | 1680 | (with-current-buffer forms--file-buffer |
| 1685 | (set-buffer forms--file-buffer) | ||
| 1686 | (beginning-of-line) | 1681 | (beginning-of-line) |
| 1687 | 1682 | ||
| 1688 | ;; Move, and adjust the amount if needed (shouldn't happen). | 1683 | ;; Move, and adjust the amount if needed (shouldn't happen). |
| 1689 | (if relative | 1684 | (setq cur (- arg (forms--goto-record arg (if relative cur)))) |
| 1690 | (if (zerop disp) | ||
| 1691 | nil | ||
| 1692 | (setq cur (+ cur disp (- (forward-line disp))))) | ||
| 1693 | (goto-char (point-min)) | ||
| 1694 | (setq cur (+ cur disp (- (forward-line (1- arg)))))) | ||
| 1695 | 1685 | ||
| 1696 | (forms--get-record))) | 1686 | (forms--get-record))) |
| 1697 | 1687 | ||
| @@ -1712,8 +1702,7 @@ As a side effect: re-calculates the number of records in the data file." | |||
| 1712 | (interactive) | 1702 | (interactive) |
| 1713 | (let | 1703 | (let |
| 1714 | ((numrec | 1704 | ((numrec |
| 1715 | (save-excursion | 1705 | (with-current-buffer forms--file-buffer |
| 1716 | (set-buffer forms--file-buffer) | ||
| 1717 | (count-lines (point-min) (point-max))))) | 1706 | (count-lines (point-min) (point-max))))) |
| 1718 | (if (= numrec forms--total-records) | 1707 | (if (= numrec forms--total-records) |
| 1719 | nil | 1708 | nil |
| @@ -1738,8 +1727,7 @@ Otherwise enables edit mode if the visited file is writable." | |||
| 1738 | 1727 | ||
| 1739 | ;; Enable edit mode, if possible. | 1728 | ;; Enable edit mode, if possible. |
| 1740 | (let ((ro forms-read-only)) | 1729 | (let ((ro forms-read-only)) |
| 1741 | (if (save-excursion | 1730 | (if (with-current-buffer forms--file-buffer |
| 1742 | (set-buffer forms--file-buffer) | ||
| 1743 | buffer-read-only) | 1731 | buffer-read-only) |
| 1744 | (progn | 1732 | (progn |
| 1745 | (setq forms-read-only t) | 1733 | (setq forms-read-only t) |
| @@ -1799,10 +1787,8 @@ after the current record." | |||
| 1799 | the-list | 1787 | the-list |
| 1800 | forms-field-sep)) | 1788 | forms-field-sep)) |
| 1801 | 1789 | ||
| 1802 | (save-excursion | 1790 | (with-current-buffer forms--file-buffer |
| 1803 | (set-buffer forms--file-buffer) | 1791 | (forms--goto-record ln) |
| 1804 | (goto-char (point-min)) | ||
| 1805 | (forward-line (1- ln)) | ||
| 1806 | (open-line 1) | 1792 | (open-line 1) |
| 1807 | (insert the-record) | 1793 | (insert the-record) |
| 1808 | (beginning-of-line)) | 1794 | (beginning-of-line)) |
| @@ -1823,10 +1809,8 @@ after the current record." | |||
| 1823 | (if (or arg | 1809 | (if (or arg |
| 1824 | (y-or-n-p "Really delete this record? ")) | 1810 | (y-or-n-p "Really delete this record? ")) |
| 1825 | (let ((ln forms--current-record)) | 1811 | (let ((ln forms--current-record)) |
| 1826 | (save-excursion | 1812 | (with-current-buffer forms--file-buffer |
| 1827 | (set-buffer forms--file-buffer) | 1813 | (forms--goto-record ln) |
| 1828 | (goto-char (point-min)) | ||
| 1829 | (forward-line (1- ln)) | ||
| 1830 | ;; Use delete-region instead of kill-region, to avoid | 1814 | ;; Use delete-region instead of kill-region, to avoid |
| 1831 | ;; adding junk to the kill-ring. | 1815 | ;; adding junk to the kill-ring. |
| 1832 | (delete-region (progn (beginning-of-line) (point)) | 1816 | (delete-region (progn (beginning-of-line) (point)) |
| @@ -1850,10 +1834,8 @@ after the current record." | |||
| 1850 | (setq regexp forms--search-regexp)) | 1834 | (setq regexp forms--search-regexp)) |
| 1851 | (forms--checkmod) | 1835 | (forms--checkmod) |
| 1852 | 1836 | ||
| 1853 | (let (the-line the-record here | 1837 | (let (the-line the-record here) |
| 1854 | (fld-sep forms-field-sep)) | 1838 | (with-current-buffer forms--file-buffer |
| 1855 | (save-excursion | ||
| 1856 | (set-buffer forms--file-buffer) | ||
| 1857 | (end-of-line) | 1839 | (end-of-line) |
| 1858 | (setq here (point)) | 1840 | (setq here (point)) |
| 1859 | (if (or (re-search-forward regexp nil t) | 1841 | (if (or (re-search-forward regexp nil t) |
| @@ -1886,10 +1868,8 @@ after the current record." | |||
| 1886 | (setq regexp forms--search-regexp)) | 1868 | (setq regexp forms--search-regexp)) |
| 1887 | (forms--checkmod) | 1869 | (forms--checkmod) |
| 1888 | 1870 | ||
| 1889 | (let (the-line the-record here | 1871 | (let (the-line the-record here) |
| 1890 | (fld-sep forms-field-sep)) | 1872 | (with-current-buffer forms--file-buffer |
| 1891 | (save-excursion | ||
| 1892 | (set-buffer forms--file-buffer) | ||
| 1893 | (beginning-of-line) | 1873 | (beginning-of-line) |
| 1894 | (setq here (point)) | 1874 | (setq here (point)) |
| 1895 | (if (or (re-search-backward regexp nil t) | 1875 | (if (or (re-search-backward regexp nil t) |
| @@ -1919,10 +1899,9 @@ after writing out the data." | |||
| 1919 | (let ((write-file-filter forms-write-file-filter) | 1899 | (let ((write-file-filter forms-write-file-filter) |
| 1920 | (read-file-filter forms-read-file-filter) | 1900 | (read-file-filter forms-read-file-filter) |
| 1921 | (cur forms--current-record)) | 1901 | (cur forms--current-record)) |
| 1922 | (save-excursion | 1902 | (with-current-buffer forms--file-buffer |
| 1923 | (set-buffer forms--file-buffer) | ||
| 1924 | (let ((inhibit-read-only t)) | 1903 | (let ((inhibit-read-only t)) |
| 1925 | ;; Write file hooks are run via local-write-file-hooks. | 1904 | ;; Write file hooks are run via write-file-functions. |
| 1926 | ;; (if write-file-filter | 1905 | ;; (if write-file-filter |
| 1927 | ;; (save-excursion | 1906 | ;; (save-excursion |
| 1928 | ;; (run-hooks 'write-file-filter))) | 1907 | ;; (run-hooks 'write-file-filter))) |
| @@ -2019,16 +1998,14 @@ after writing out the data." | |||
| 2019 | (while (<= nb-record forms--total-records) | 1998 | (while (<= nb-record forms--total-records) |
| 2020 | (forms-jump-record nb-record) | 1999 | (forms-jump-record nb-record) |
| 2021 | (setq record (buffer-string)) | 2000 | (setq record (buffer-string)) |
| 2022 | (save-excursion | 2001 | (with-current-buffer (get-buffer-create "*forms-print*") |
| 2023 | (set-buffer (get-buffer-create "*forms-print*")) | ||
| 2024 | (goto-char (buffer-end 1)) | 2002 | (goto-char (buffer-end 1)) |
| 2025 | (insert record) | 2003 | (insert record) |
| 2026 | (setq buffer-read-only nil) | 2004 | (setq buffer-read-only nil) |
| 2027 | (if (< nb-record total-nb-records) | 2005 | (if (< nb-record total-nb-records) |
| 2028 | (insert "\n\n"))) | 2006 | (insert "\n\n"))) |
| 2029 | (setq nb-record (1+ nb-record))) | 2007 | (setq nb-record (1+ nb-record))) |
| 2030 | (save-excursion | 2008 | (with-current-buffer "*forms-print*" |
| 2031 | (set-buffer "*forms-print*") | ||
| 2032 | (print-buffer) | 2009 | (print-buffer) |
| 2033 | (set-buffer-modified-p nil) | 2010 | (set-buffer-modified-p nil) |
| 2034 | (kill-buffer (current-buffer))) | 2011 | (kill-buffer (current-buffer))) |
| @@ -2076,8 +2053,7 @@ Usage: (setq forms-number-of-fields | |||
| 2076 | (if (fboundp el) | 2053 | (if (fboundp el) |
| 2077 | (setq ret (concat ret (prin1-to-string (symbol-function el)) | 2054 | (setq ret (concat ret (prin1-to-string (symbol-function el)) |
| 2078 | "\n")))))) | 2055 | "\n")))))) |
| 2079 | (save-excursion | 2056 | (with-current-buffer (get-buffer-create "*forms-mode debug*") |
| 2080 | (set-buffer (get-buffer-create "*forms-mode debug*")) | ||
| 2081 | (if (zerop (buffer-size)) | 2057 | (if (zerop (buffer-size)) |
| 2082 | (emacs-lisp-mode)) | 2058 | (emacs-lisp-mode)) |
| 2083 | (goto-char (point-max)) | 2059 | (goto-char (point-max)) |