summaryrefslogtreecommitdiff
path: root/lisp/forms.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2003-05-29 23:53:21 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2003-05-29 23:53:21 +0000
commitf5a356cdd66f19a5d16726317d24ce0bfcf60003 (patch)
treefa2c5a0e723658b6f722824f76186722f771c23a /lisp/forms.el
parent6c770e384d322b3677d98a13e4c36f4a606b08e8 (diff)
downloademacs-f5a356cdd66f19a5d16726317d24ce0bfcf60003.tar.gz
(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.
Diffstat (limited to 'lisp/forms.el')
-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 @@
(provide 'forms) ;;; official
(provide 'forms-mode) ;;; for compatibility
-(defconst forms-version (substring "$Revision: 2.46 $" 11 -2)
+(defconst forms-version (substring "$Revision: 2.47 $" 11 -2)
"The version number of forms-mode (as string). The complete RCS id is:
- $Id: forms.el,v 2.46 2003/05/23 12:48:06 rms Exp $")
+ $Id: forms.el,v 2.47 2003/05/28 11:19:48 rms Exp $")
-(defcustom forms-mode-hooks nil
+(defcustom forms-mode-hook nil
"Hook run upon entering Forms mode."
:group 'forms
:type 'hook)
@@ -648,30 +648,24 @@ Commands: Equivalent keys in read-only mode:
(let ((read-file-filter forms-read-file-filter)
(write-file-filter forms-write-file-filter))
(if read-file-filter
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
(let ((inhibit-read-only t)
(file-modified (buffer-modified-p)))
(run-hooks 'read-file-filter)
(if (not file-modified) (set-buffer-modified-p nil)))
(if write-file-filter
- (progn
- (make-local-variable 'write-file-functions)
- (setq write-file-functions (list write-file-filter)))))
+ (add-hook 'write-file-functions write-file-filter nil t)))
(if write-file-filter
- (save-excursion
- (set-buffer forms--file-buffer)
- (make-local-variable 'write-file-functions)
- (setq write-file-functions (list write-file-filter))))))
+ (with-current-buffer forms--file-buffer
+ (add-hook 'write-file-functions write-file-filter nil t)))))
;; count the number of records, and set see if it may be modified
(let (ro)
(setq forms--total-records
- (save-excursion
+ (with-current-buffer forms--file-buffer
(prog1
(progn
;;(message "forms: counting records...")
- (set-buffer forms--file-buffer)
(bury-buffer (current-buffer))
(setq ro buffer-read-only)
(count-lines (point-min) (point-max)))
@@ -724,7 +718,7 @@ Commands: Equivalent keys in read-only mode:
;; user customising
;;(message "forms: proceeding setup (user hooks)...")
- (run-hooks 'forms-mode-hooks)
+ (run-hooks 'forms-mode-hook 'forms-mode-hooks)
;;(message "forms: setting up... done.")
;; be helpful
@@ -757,7 +751,6 @@ Commands: Equivalent keys in read-only mode:
(setq forms--elements (make-vector forms-number-of-fields nil))
(let ((the-list forms-format-list) ; the list of format elements
- (this-item 0) ; element in list
(prev-item nil)
(field-num 0)) ; highest field number
@@ -1226,8 +1219,7 @@ Commands: Equivalent keys in read-only mode:
(let ((read-file-filter forms-read-file-filter)
(the-record))
(setq the-record
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
(let ((inhibit-read-only t))
(run-hooks 'read-file-filter))
(goto-char (point-min))
@@ -1238,8 +1230,7 @@ Commands: Equivalent keys in read-only mode:
(kill-buffer forms--file-buffer)
;; Count the number of fields in `the-record'.
- (let (the-result
- (start-pos 0)
+ (let ((start-pos 0)
found-pos
(field-sep-length (length forms-field-sep)))
(setq forms-number-of-fields 1)
@@ -1453,14 +1444,13 @@ Commands: Equivalent keys in read-only mode:
"Translate in SUBJ all chars ARG into char REP. ARG and REP should
be single-char strings."
(let ((i 0)
- (x (length subj))
(re (regexp-quote arg))
(k (string-to-char rep)))
(while (setq i (string-match re subj i))
(aset subj i k)
(setq i (1+ i)))))
-(defun forms--exit (query &optional save)
+(defun forms--exit (&optional save)
"Internal exit from forms mode function."
(let ((buf (buffer-name forms--file-buffer)))
@@ -1468,8 +1458,7 @@ Commands: Equivalent keys in read-only mode:
(if (and save
(buffer-modified-p forms--file-buffer))
(forms-save-buffer))
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
(delete-auto-save-file-if-necessary)
(kill-buffer (current-buffer)))
(if (get-buffer buf) ; not killed???
@@ -1596,12 +1585,10 @@ As a side effect: sets `forms--the-record-list'."
(if (string-match "\n" the-record)
(error "Multi-line fields in this record - update refused"))
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
;; Use delete-region instead of kill-region, to avoid
;; adding junk to the kill-ring.
- (delete-region (save-excursion (beginning-of-line) (point))
- (save-excursion (end-of-line) (point)))
+ (delete-region (line-beginning-position) (line-end-position))
(insert the-record)
(beginning-of-line))))
@@ -1633,15 +1620,15 @@ As a side effect: sets `forms--the-record-list'."
(find-file-other-window fn)
(or forms--mode-setup (forms-mode t))))
-(defun forms-exit (query)
+(defun forms-exit ()
"Normal exit from Forms mode. Modified buffers are saved."
- (interactive "P")
- (forms--exit query t))
+ (interactive)
+ (forms--exit t))
-(defun forms-exit-no-save (query)
+(defun forms-exit-no-save ()
"Exit from Forms mode without saving buffers."
- (interactive "P")
- (forms--exit query nil))
+ (interactive)
+ (forms--exit nil))
;;; Navigating commands
@@ -1655,6 +1642,16 @@ As a side effect: sets `forms--the-record-list'."
(interactive "P")
(forms-jump-record (- forms--current-record (prefix-numeric-value arg)) t))
+(defun forms--goto-record (rn &optional current)
+ "Goto record number RN.
+If CURRENT is provided, it specifies the current record and can be used
+to speed up access to RN. Returns the number of records missing, if any."
+ (if current
+ (forward-line (- rn current))
+ ;; goto-line does not do what we want when the buffer is narrowed.
+ (goto-char (point-min))
+ (forward-line (1- rn))))
+
(defun forms-jump-record (arg &optional relative)
"Jump to a random record."
(interactive "NRecord number: ")
@@ -1673,25 +1670,18 @@ As a side effect: sets `forms--the-record-list'."
(forms--checkmod)
;; Calculate displacement.
- (let ((disp (- arg forms--current-record))
- (cur forms--current-record))
+ (let ((cur forms--current-record))
;; `forms--show-record' needs it now.
(setq forms--current-record arg)
;; Get the record and show it.
(forms--show-record
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
(beginning-of-line)
;; Move, and adjust the amount if needed (shouldn't happen).
- (if relative
- (if (zerop disp)
- nil
- (setq cur (+ cur disp (- (forward-line disp)))))
- (goto-char (point-min))
- (setq cur (+ cur disp (- (forward-line (1- arg))))))
+ (setq cur (- arg (forms--goto-record arg (if relative cur))))
(forms--get-record)))
@@ -1712,8 +1702,7 @@ As a side effect: re-calculates the number of records in the data file."
(interactive)
(let
((numrec
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
(count-lines (point-min) (point-max)))))
(if (= numrec forms--total-records)
nil
@@ -1738,8 +1727,7 @@ Otherwise enables edit mode if the visited file is writable."
;; Enable edit mode, if possible.
(let ((ro forms-read-only))
- (if (save-excursion
- (set-buffer forms--file-buffer)
+ (if (with-current-buffer forms--file-buffer
buffer-read-only)
(progn
(setq forms-read-only t)
@@ -1799,10 +1787,8 @@ after the current record."
the-list
forms-field-sep))
- (save-excursion
- (set-buffer forms--file-buffer)
- (goto-char (point-min))
- (forward-line (1- ln))
+ (with-current-buffer forms--file-buffer
+ (forms--goto-record ln)
(open-line 1)
(insert the-record)
(beginning-of-line))
@@ -1823,10 +1809,8 @@ after the current record."
(if (or arg
(y-or-n-p "Really delete this record? "))
(let ((ln forms--current-record))
- (save-excursion
- (set-buffer forms--file-buffer)
- (goto-char (point-min))
- (forward-line (1- ln))
+ (with-current-buffer forms--file-buffer
+ (forms--goto-record ln)
;; Use delete-region instead of kill-region, to avoid
;; adding junk to the kill-ring.
(delete-region (progn (beginning-of-line) (point))
@@ -1850,10 +1834,8 @@ after the current record."
(setq regexp forms--search-regexp))
(forms--checkmod)
- (let (the-line the-record here
- (fld-sep forms-field-sep))
- (save-excursion
- (set-buffer forms--file-buffer)
+ (let (the-line the-record here)
+ (with-current-buffer forms--file-buffer
(end-of-line)
(setq here (point))
(if (or (re-search-forward regexp nil t)
@@ -1886,10 +1868,8 @@ after the current record."
(setq regexp forms--search-regexp))
(forms--checkmod)
- (let (the-line the-record here
- (fld-sep forms-field-sep))
- (save-excursion
- (set-buffer forms--file-buffer)
+ (let (the-line the-record here)
+ (with-current-buffer forms--file-buffer
(beginning-of-line)
(setq here (point))
(if (or (re-search-backward regexp nil t)
@@ -1919,10 +1899,9 @@ after writing out the data."
(let ((write-file-filter forms-write-file-filter)
(read-file-filter forms-read-file-filter)
(cur forms--current-record))
- (save-excursion
- (set-buffer forms--file-buffer)
+ (with-current-buffer forms--file-buffer
(let ((inhibit-read-only t))
- ;; Write file hooks are run via local-write-file-hooks.
+ ;; Write file hooks are run via write-file-functions.
;; (if write-file-filter
;; (save-excursion
;; (run-hooks 'write-file-filter)))
@@ -2019,16 +1998,14 @@ after writing out the data."
(while (<= nb-record forms--total-records)
(forms-jump-record nb-record)
(setq record (buffer-string))
- (save-excursion
- (set-buffer (get-buffer-create "*forms-print*"))
+ (with-current-buffer (get-buffer-create "*forms-print*")
(goto-char (buffer-end 1))
(insert record)
(setq buffer-read-only nil)
(if (< nb-record total-nb-records)
(insert "\n \n")))
(setq nb-record (1+ nb-record)))
- (save-excursion
- (set-buffer "*forms-print*")
+ (with-current-buffer "*forms-print*"
(print-buffer)
(set-buffer-modified-p nil)
(kill-buffer (current-buffer)))
@@ -2076,8 +2053,7 @@ Usage: (setq forms-number-of-fields
(if (fboundp el)
(setq ret (concat ret (prin1-to-string (symbol-function el))
"\n"))))))
- (save-excursion
- (set-buffer (get-buffer-create "*forms-mode debug*"))
+ (with-current-buffer (get-buffer-create "*forms-mode debug*")
(if (zerop (buffer-size))
(emacs-lisp-mode))
(goto-char (point-max))