diff options
| author | Eli Zaretskii | 1999-05-31 08:34:19 +0000 |
|---|---|---|
| committer | Eli Zaretskii | 1999-05-31 08:34:19 +0000 |
| commit | f3ae6c2a76c201660a4ecfe640fcd72c7bb7a2c1 (patch) | |
| tree | 20aec8a54ff48f1ac7fd8898f470f5254b97e236 | |
| parent | 264f512a8d0d9ed3c1d0d7e8d610c1c654b4ebdd (diff) | |
| download | emacs-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.
| -rw-r--r-- | lisp/forms.el | 23 |
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) |