From e00974a7d1981d716d38ecf45b689dd30a381c65 Mon Sep 17 00:00:00 2001 From: Phil Sung Date: Sun, 28 Feb 2016 15:07:02 +1030 Subject: [PATCH] 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' --- doc/emacs/dired.texi | 4 ++++ etc/NEWS | 6 ++++++ lisp/wdired.el | 17 +++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi index 13242d12d3c..60542df1097 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 diff --git a/etc/NEWS b/etc/NEWS index 29b013a3ede..c12f4d19cf1 100644 --- 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. diff --git a/lisp/wdired.el b/lisp/wdired.el index 9f258794f96..d943dada030 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. -- 2.39.2