aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman2002-07-14 15:30:54 +0000
committerRichard M. Stallman2002-07-14 15:30:54 +0000
commit63fabbb4feb9f253ba5c241810d2c0e085f929db (patch)
tree9dfb562f663442830df25c9642bba735fa843108
parent682b60ae440a9ce8597bfc96304b2deb259ff01f (diff)
downloademacs-63fabbb4feb9f253ba5c241810d2c0e085f929db.tar.gz
emacs-63fabbb4feb9f253ba5c241810d2c0e085f929db.zip
(find-alternate-file): Offer to save a modified buffer.
Handle kill-buffer-query-functions better.
-rw-r--r--lisp/files.el35
1 files changed, 22 insertions, 13 deletions
diff --git a/lisp/files.el b/lisp/files.el
index ab21424c2b3..1471270d541 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -929,11 +929,14 @@ If the current buffer now contains an empty file that you just visited
929 file-dir (file-name-directory file))) 929 file-dir (file-name-directory file)))
930 (list (read-file-name 930 (list (read-file-name
931 "Find alternate file: " file-dir nil nil file-name)))) 931 "Find alternate file: " file-dir nil nil file-name))))
932 (and (buffer-modified-p) (buffer-file-name) 932 (unless (run-hook-with-args-until-failure 'kill-buffer-query-functions)
933 ;; (not buffer-read-only) 933 (error "Aborted"))
934 (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? " 934 (when (and (buffer-modified-p) (buffer-file-name))
935 (buffer-name)))) 935 (if (yes-or-no-p (format "Buffer %s is modified; save it first? "
936 (error "Aborted")) 936 (buffer-name)))
937 (save-buffer)
938 (unless (yes-or-no-p "Kill and replace the buffer without saving it? ")
939 (error "Aborted"))))
937 (let ((obuf (current-buffer)) 940 (let ((obuf (current-buffer))
938 (ofile buffer-file-name) 941 (ofile buffer-file-name)
939 (onum buffer-file-number) 942 (onum buffer-file-number)
@@ -949,14 +952,20 @@ If the current buffer now contains an empty file that you just visited
949 (setq buffer-file-number nil) 952 (setq buffer-file-number nil)
950 (setq buffer-file-truename nil) 953 (setq buffer-file-truename nil)
951 (find-file filename)) 954 (find-file filename))
952 (cond ((eq obuf (current-buffer)) 955 (when (eq obuf (current-buffer))
953 (setq buffer-file-name ofile) 956 ;; This executes if find-file gets an error
954 (setq buffer-file-number onum) 957 ;; and does not really find anything.
955 (setq buffer-file-truename otrue) 958 ;; We put things back as they were.
956 (lock-buffer) 959 ;; If find-file actually finds something, we kill obuf below.
957 (rename-buffer oname)))) 960 (setq buffer-file-name ofile)
958 (or (eq (current-buffer) obuf) 961 (setq buffer-file-number onum)
959 (kill-buffer obuf)))) 962 (setq buffer-file-truename otrue)
963 (lock-buffer)
964 (rename-buffer oname)))
965 (unless (eq (current-buffer) obuf)
966 ;; We already asked; don't ask again.
967 (setq kill-buffer-query-functions nil)
968 (kill-buffer obuf))))
960 969
961(defun create-file-buffer (filename) 970(defun create-file-buffer (filename)
962 "Create a suitably named buffer for visiting FILENAME, and return it. 971 "Create a suitably named buffer for visiting FILENAME, and return it.