aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/forms.el
diff options
context:
space:
mode:
authorEli Zaretskii1999-05-31 08:34:19 +0000
committerEli Zaretskii1999-05-31 08:34:19 +0000
commitf3ae6c2a76c201660a4ecfe640fcd72c7bb7a2c1 (patch)
tree20aec8a54ff48f1ac7fd8898f470f5254b97e236 /lisp/forms.el
parent264f512a8d0d9ed3c1d0d7e8d610c1c654b4ebdd (diff)
downloademacs-f3ae6c2a76c201660a4ecfe640fcd72c7bb7a2c1.tar.gz
emacs-f3ae6c2a76c201660a4ecfe640fcd72c7bb7a2c1.zip
forms-save-buffer): Call set-buffer-modified-p to
force the data buffer to be saved, even if the data didn't change, in case the write filter was modified. Restore the current record after read-file-filter finishes.
Diffstat (limited to 'lisp/forms.el')
-rw-r--r--lisp/forms.el23
1 files changed, 18 insertions, 5 deletions
diff --git a/lisp/forms.el b/lisp/forms.el
index a251c306c05..a76312d2f9d 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -301,10 +301,10 @@
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.37 $" 11 -2) 304(defconst forms-version (substring "$Revision: 2.38 $" 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.37 1999/01/15 16:19:53 rms Exp kwzh $") 307 $Id: forms.el,v 2.38 1999/05/01 01:11:12 kwzh Exp eliz $")
308 308
309(defcustom forms-mode-hooks nil 309(defcustom forms-mode-hooks nil
310 "Hook functions to be run upon entering Forms mode." 310 "Hook functions to be run upon entering Forms mode."
@@ -1924,19 +1924,32 @@ after writing out the data."
1924 (interactive "p") 1924 (interactive "p")
1925 (forms--checkmod) 1925 (forms--checkmod)
1926 (let ((write-file-filter forms-write-file-filter) 1926 (let ((write-file-filter forms-write-file-filter)
1927 (read-file-filter forms-read-file-filter)) 1927 (read-file-filter forms-read-file-filter)
1928 (cur forms--current-record))
1928 (save-excursion 1929 (save-excursion
1929 (set-buffer forms--file-buffer) 1930 (set-buffer forms--file-buffer)
1930 (let ((inhibit-read-only t)) 1931 (let ((inhibit-read-only t))
1931 ;; Write file hooks are run via local-write-file-hooks. 1932 ;; Write file hooks are run via local-write-file-hooks.
1932 ;; (if write-file-filter 1933 ;; (if write-file-filter
1933 ;; (save-excursion 1934 ;; (save-excursion
1934 ;; (run-hooks 'write-file-filter))) 1935 ;; (run-hooks 'write-file-filter)))
1936
1937 ;; If they have a write-file-filter, force the buffer to be
1938 ;; saved even if it doesn't seem to be changed. First, they
1939 ;; might have changed the write-file-filter; and second, if
1940 ;; save-buffer does nothing, write-file-filter won't get run,
1941 ;; and then read-file-filter will be mightily confused.
1942 (or (null write-file-filter)
1943 (set-buffer-modified-p t))
1935 (save-buffer args) 1944 (save-buffer args)
1936 (if read-file-filter 1945 (if read-file-filter
1937 (save-excursion 1946 (save-excursion
1938 (run-hooks 'read-file-filter))) 1947 (run-hooks 'read-file-filter)))
1939 (set-buffer-modified-p nil)))) 1948 (set-buffer-modified-p nil)))
1949 ;; Make sure we end up with the same record number as we started.
1950 ;; Since read-file-filter may perform arbitrary transformations on
1951 ;; the data buffer contents, save-excursion is not enough.
1952 (forms-jump-record cur))
1940 t) 1953 t)
1941 1954
1942(defun forms--revert-buffer (&optional arg noconfirm) 1955(defun forms--revert-buffer (&optional arg noconfirm)