diff options
author | Phil Sung <philbert@gmail.com> | 2016-02-28 15:07:02 +1030 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2016-02-28 15:07:02 +1030 |
commit | e00974a7d1981d716d38ecf45b689dd30a381c65 (patch) | |
tree | 635c1677b80ec6db07e52e8c1c45bf7c4348ef0e | |
parent | d5f270f2965f3c52963e2bf0057756e350d771d1 (diff) |
Create subdirectories automatically in wdired
* lisp/wdired.el (wdired-create-parent-directories): New
variable (bug#6817).
(wdired-create-parentdirs): New function.
(wdired-do-renames): Use it.
* doc/emacs/dired.texi (Wdired): Mention
`wdired-create-parent-directories'
-rw-r--r-- | doc/emacs/dired.texi | 4 | ||||
-rw-r--r-- | etc/NEWS | 6 | ||||
-rw-r--r-- | lisp/wdired.el | 17 |
3 files changed, 27 insertions, 0 deletions
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi index 13242d12d3..60542df109 100644 --- a/doc/emacs/dired.texi +++ b/doc/emacs/dired.texi @@ -1294,6 +1294,10 @@ relative). To mark a file for deletion, delete the entire file name. To change the target of a symbolic link, edit the link target name which appears next to the link name. + If you edit the file names to create a new subdirectory, Wdired will +automatically create these new directories. To inhibit this behavior, +set @code{wdired-create-parent-directories} to @code{nil}. + The rest of the text in the buffer, such as the file sizes and modification dates, is marked read-only, so you can't edit it. However, if you set @code{wdired-allow-to-change-permissions} to @@ -1426,6 +1426,12 @@ compression command is determined from the new `dired-compress-files-alist' variable. +++ +*** In wdired, when editing files to contain slash characters, +the resulting directories are automatically created. Whether +to do this or not is controlled by the +`wdired-create-parent-directories' variable. + ++++ *** `W' is now bound to `browse-url-of-dired-file', and is useful for viewing HTML files and the like. diff --git a/lisp/wdired.el b/lisp/wdired.el index 9f258794f9..d943dada03 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -152,6 +152,16 @@ renamed by `dired-do-rename' and `dired-do-rename-regexp'." :version "24.3" :group 'wdired) +(defcustom wdired-create-parent-directories t + "If non-nil, create parent directories of destination files. +If non-nil, when you rename a file to a destination path within a +nonexistent directory, wdired will create any parent directories +necessary. When nil, attempts to rename a file into a +nonexistent directory will fail." + :version "25.2" + :type 'boolean + :group 'wdired) + (defvar wdired-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-x\C-s" 'wdired-finish-edit) @@ -490,6 +500,8 @@ non-nil means return old filename." (require 'dired-aux) (condition-case err (let ((dired-backup-overwrite nil)) + (and wdired-create-parent-directories + (wdired-create-parentdirs file-new)) (dired-rename-file file-ori file-new overwrite)) (error @@ -499,6 +511,11 @@ non-nil means return old filename." err))))))))) errors)) +(defun wdired-create-parentdirs (file-new) + "Create parent directories for FILE-NEW if they don't exist." + (and (not (file-exists-p (file-name-directory file-new))) + (message "Creating directory for file %s" file-new) + (make-directory (file-name-directory file-new) t))) (defun wdired-exit () "Exit wdired and return to dired mode. |