aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Morris2013-02-12 00:36:09 -0800
committerGlenn Morris2013-02-12 00:36:09 -0800
commit0b244335656c7f425b139cc8bad7f26cb749d0e1 (patch)
treeb1e8b80f1d2433677edcf895b78b480f5dd846d3
parent7e561c10122e7dfd176e5b1b2e2e4af1c29a47de (diff)
downloademacs-0b244335656c7f425b139cc8bad7f26cb749d0e1.tar.gz
emacs-0b244335656c7f425b139cc8bad7f26cb749d0e1.zip
* files.el (basic-save-buffer): Offer to create a non-existing directory.
Fixes: debbugs:3016
-rw-r--r--lisp/ChangeLog3
-rw-r--r--lisp/files.el55
2 files changed, 36 insertions, 22 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d5fe7c4047d..0aaead88b9c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,8 @@
12013-02-12 Glenn Morris <rgm@gnu.org> 12013-02-12 Glenn Morris <rgm@gnu.org>
2 2
3 * files.el (basic-save-buffer):
4 Offer to create a non-existing directory. (Bug#3016)
5
3 * calc/calc-graph.el (calc-graph-show-dumb): 6 * calc/calc-graph.el (calc-graph-show-dumb):
4 * calendar/calendar.el (calendar-mode-map): 7 * calendar/calendar.el (calendar-mode-map):
5 * cus-edit.el (custom-mode-map): 8 * cus-edit.el (custom-mode-map):
diff --git a/lisp/files.el b/lisp/files.el
index 890834d4af0..f9ed65b8ac0 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -4563,28 +4563,39 @@ Before and after saving the buffer, this function runs
4563 (not (file-exists-p buffer-file-name)))) 4563 (not (file-exists-p buffer-file-name))))
4564 (let ((recent-save (recent-auto-save-p)) 4564 (let ((recent-save (recent-auto-save-p))
4565 setmodes) 4565 setmodes)
4566 ;; If buffer has no file name, ask user for one. 4566 (if buffer-file-name
4567 (or buffer-file-name 4567 (let ((dir (file-name-directory
4568 (let ((filename 4568 (expand-file-name buffer-file-name))))
4569 (expand-file-name 4569 (unless (file-exists-p dir)
4570 (read-file-name "File to save in: " 4570 (if (y-or-n-p
4571 nil (expand-file-name (buffer-name)))))) 4571 (format "Directory `%s' does not exist; create? " dir))
4572 (if (file-exists-p filename) 4572 (make-directory dir t)
4573 (if (file-directory-p filename) 4573 (error "Canceled"))))
4574 ;; Signal an error if the user specified the name of an 4574 ;; If buffer has no file name, ask user for one.
4575 ;; existing directory. 4575 (let ((filename
4576 (error "%s is a directory" filename) 4576 (expand-file-name
4577 (unless (y-or-n-p (format "File `%s' exists; overwrite? " 4577 (read-file-name "File to save in: "
4578 filename)) 4578 nil (expand-file-name (buffer-name))))))
4579 (error "Canceled"))) 4579 (if (file-exists-p filename)
4580 ;; Signal an error if the specified name refers to a 4580 (if (file-directory-p filename)
4581 ;; non-existing directory. 4581 ;; Signal an error if the user specified the name of an
4582 (let ((dir (file-name-directory filename))) 4582 ;; existing directory.
4583 (unless (file-directory-p dir) 4583 (error "%s is a directory" filename)
4584 (if (file-exists-p dir) 4584 (unless (y-or-n-p (format "File `%s' exists; overwrite? "
4585 (error "%s is not a directory" dir) 4585 filename))
4586 (error "%s: no such directory" dir))))) 4586 (error "Canceled")))
4587 (set-visited-file-name filename))) 4587 ;; Signal an error if the specified name refers to a
4588 ;; non-existing directory.
4589 (let ((dir (file-name-directory filename)))
4590 (unless (file-directory-p dir)
4591 (if (file-exists-p dir)
4592 (error "%s is not a directory" dir)
4593 (if (y-or-n-p
4594 (format "Directory `%s' does not exist; create? "
4595 dir))
4596 (make-directory dir t)
4597 (error "Canceled"))))))
4598 (set-visited-file-name filename)))
4588 (or (verify-visited-file-modtime (current-buffer)) 4599 (or (verify-visited-file-modtime (current-buffer))
4589 (not (file-exists-p buffer-file-name)) 4600 (not (file-exists-p buffer-file-name))
4590 (yes-or-no-p 4601 (yes-or-no-p