aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2003-05-29 23:53:21 +0000
committerStefan Monnier2003-05-29 23:53:21 +0000
commitf5a356cdd66f19a5d16726317d24ce0bfcf60003 (patch)
treefa2c5a0e723658b6f722824f76186722f771c23a
parent6c770e384d322b3677d98a13e4c36f4a606b08e8 (diff)
downloademacs-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.el122
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.
1647If CURRENT is provided, it specifies the current record and can be used
1648to 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))