]> git.eshelyaron.com Git - emacs.git/commitdiff
Create subdirectories automatically in wdired
authorPhil Sung <philbert@gmail.com>
Sun, 28 Feb 2016 04:37:02 +0000 (15:07 +1030)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 28 Feb 2016 04:37:02 +0000 (15:07 +1030)
* 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'

doc/emacs/dired.texi
etc/NEWS
lisp/wdired.el

index 13242d12d3c7d51475bc460813915d0c348c93a8..60542df1097da79c792f8e2c26c673d66cd03037 100644 (file)
@@ -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
index 29b013a3edee69b53a915db19f8d077c834e6ad4..c12f4d19cf16dc2bc69c3aed65d0864e2292c167 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1425,6 +1425,12 @@ compress many marked files into a single named archive.  The
 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.
index 9f258794f96eff17525557aa5c557463230338cd..d943dada0309f5f4fffb80b4b6c5f4c19a2ea14b 100644 (file)
@@ -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.