1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-04 06:31:13 -08:00

(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.

(basic-save-buffer): Use basic-save-buffer-1.
This commit is contained in:
Richard M. Stallman 1994-03-29 06:59:50 +00:00
parent 26a8d14bf2
commit 87d26afc28

View file

@ -1530,57 +1530,7 @@ the last real save, but optional arg FORCE non-nil means delete anyway."
(setq hooks (cdr hooks)))
;; If a hook returned t, file is already "written".
(cond ((not done)
(if (not (file-writable-p buffer-file-name))
(let ((dir (file-name-directory buffer-file-name)))
(if (not (file-directory-p dir))
(error "%s is not a directory" dir)
(if (not (file-exists-p buffer-file-name))
(error "Directory %s write-protected" dir)
(if (yes-or-no-p
(format "File %s is write-protected; try to save anyway? "
(file-name-nondirectory
buffer-file-name)))
(setq tempsetmodes t)
(error "Attempt to save to a file which you aren't allowed to write"))))))
(or buffer-backed-up
(setq setmodes (backup-buffer)))
(if file-precious-flag
;; If file is precious, write temp name, then rename it.
(let ((dir (file-name-directory buffer-file-name))
(realname buffer-file-name)
tempname temp nogood i succeed)
(setq i 0)
(setq nogood t)
;; Find the temporary name to write under.
(while nogood
(setq tempname (format "%s#tmp#%d" dir i))
(setq nogood (file-exists-p tempname))
(setq i (1+ i)))
(unwind-protect
(progn (clear-visited-file-modtime)
(write-region (point-min) (point-max)
tempname nil realname)
(setq succeed t))
;; If writing the temp file fails,
;; delete the temp file.
(or succeed (delete-file tempname)))
;; Since we have created an entirely new file
;; and renamed it, make sure it gets the
;; right permission bits set.
(setq setmodes (file-modes buffer-file-name))
;; We succeeded in writing the temp file,
;; so rename it.
(rename-file tempname buffer-file-name t))
;; If file not writable, see if we can make it writable
;; temporarily while we write it.
;; But no need to do so if we have just backed it up
;; (setmodes is set) because that says we're superseding.
(cond ((and tempsetmodes (not setmodes))
;; Change the mode back, after writing.
(setq setmodes (file-modes buffer-file-name))
(set-file-modes buffer-file-name 511)))
(write-region (point-min) (point-max)
buffer-file-name nil t)))))
(setq setmodes (basic-save-buffer-1)))))
(setq buffer-file-number (nth 10 (file-attributes buffer-file-name)))
(if setmodes
(condition-case ()
@ -1592,6 +1542,65 @@ the last real save, but optional arg FORCE non-nil means delete anyway."
(run-hooks 'after-save-hook))
(message "(No changes need to be saved)")))
;; This does the "real job" of writing a buffer into its visited file
;; and making a backup file. This is what is normally done
;; but inhibited if one of write-file-hooks returns non-nil.
;; It returns a value to store in setmodes.
(defun basic-save-buffer-1 ()
(let (tempsetmodes setmodes)
(if (not (file-writable-p buffer-file-name))
(let ((dir (file-name-directory buffer-file-name)))
(if (not (file-directory-p dir))
(error "%s is not a directory" dir)
(if (not (file-exists-p buffer-file-name))
(error "Directory %s write-protected" dir)
(if (yes-or-no-p
(format "File %s is write-protected; try to save anyway? "
(file-name-nondirectory
buffer-file-name)))
(setq tempsetmodes t)
(error "Attempt to save to a file which you aren't allowed to write"))))))
(or buffer-backed-up
(setq setmodes (backup-buffer)))
(if file-precious-flag
;; If file is precious, write temp name, then rename it.
(let ((dir (file-name-directory buffer-file-name))
(realname buffer-file-name)
tempname temp nogood i succeed)
(setq i 0)
(setq nogood t)
;; Find the temporary name to write under.
(while nogood
(setq tempname (format "%s#tmp#%d" dir i))
(setq nogood (file-exists-p tempname))
(setq i (1+ i)))
(unwind-protect
(progn (clear-visited-file-modtime)
(write-region (point-min) (point-max)
tempname nil realname)
(setq succeed t))
;; If writing the temp file fails,
;; delete the temp file.
(or succeed (delete-file tempname)))
;; Since we have created an entirely new file
;; and renamed it, make sure it gets the
;; right permission bits set.
(setq setmodes (file-modes buffer-file-name))
;; We succeeded in writing the temp file,
;; so rename it.
(rename-file tempname buffer-file-name t))
;; If file not writable, see if we can make it writable
;; temporarily while we write it.
;; But no need to do so if we have just backed it up
;; (setmodes is set) because that says we're superseding.
(cond ((and tempsetmodes (not setmodes))
;; Change the mode back, after writing.
(setq setmodes (file-modes buffer-file-name))
(set-file-modes buffer-file-name 511)))
(write-region (point-min) (point-max)
buffer-file-name nil t))
setmodes))
(defun save-some-buffers (&optional arg exiting)
"Save some modified file-visiting buffers. Asks user about each one.
Optional argument (the prefix) non-nil means save all with no questions.