diff options
| author | Glenn Morris <rgm@gnu.org> | 2013-02-12 00:36:09 -0800 |
|---|---|---|
| committer | Glenn Morris <rgm@gnu.org> | 2013-02-12 00:36:09 -0800 |
| commit | 0b244335656c7f425b139cc8bad7f26cb749d0e1 (patch) | |
| tree | b1e8b80f1d2433677edcf895b78b480f5dd846d3 /lisp/files.el | |
| parent | 7e561c10122e7dfd176e5b1b2e2e4af1c29a47de (diff) | |
| download | emacs-0b244335656c7f425b139cc8bad7f26cb749d0e1.tar.gz | |
* files.el (basic-save-buffer): Offer to create a non-existing directory.
Fixes: debbugs:3016
Diffstat (limited to 'lisp/files.el')
| -rw-r--r-- | lisp/files.el | 55 |
1 files changed, 33 insertions, 22 deletions
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 (not (file-exists-p buffer-file-name)))) (let ((recent-save (recent-auto-save-p)) setmodes) - ;; If buffer has no file name, ask user for one. - (or buffer-file-name - (let ((filename - (expand-file-name - (read-file-name "File to save in: " - nil (expand-file-name (buffer-name)))))) - (if (file-exists-p filename) - (if (file-directory-p filename) - ;; Signal an error if the user specified the name of an - ;; existing directory. - (error "%s is a directory" filename) - (unless (y-or-n-p (format "File `%s' exists; overwrite? " - filename)) - (error "Canceled"))) - ;; Signal an error if the specified name refers to a - ;; non-existing directory. - (let ((dir (file-name-directory filename))) - (unless (file-directory-p dir) - (if (file-exists-p dir) - (error "%s is not a directory" dir) - (error "%s: no such directory" dir))))) - (set-visited-file-name filename))) + (if buffer-file-name + (let ((dir (file-name-directory + (expand-file-name buffer-file-name)))) + (unless (file-exists-p dir) + (if (y-or-n-p + (format "Directory `%s' does not exist; create? " dir)) + (make-directory dir t) + (error "Canceled")))) + ;; If buffer has no file name, ask user for one. + (let ((filename + (expand-file-name + (read-file-name "File to save in: " + nil (expand-file-name (buffer-name)))))) + (if (file-exists-p filename) + (if (file-directory-p filename) + ;; Signal an error if the user specified the name of an + ;; existing directory. + (error "%s is a directory" filename) + (unless (y-or-n-p (format "File `%s' exists; overwrite? " + filename)) + (error "Canceled"))) + ;; Signal an error if the specified name refers to a + ;; non-existing directory. + (let ((dir (file-name-directory filename))) + (unless (file-directory-p dir) + (if (file-exists-p dir) + (error "%s is not a directory" dir) + (if (y-or-n-p + (format "Directory `%s' does not exist; create? " + dir)) + (make-directory dir t) + (error "Canceled")))))) + (set-visited-file-name filename))) (or (verify-visited-file-modtime (current-buffer)) (not (file-exists-p buffer-file-name)) (yes-or-no-p |
