From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: dired-create-directory with arbitrary depth Date: Thu, 08 Nov 2007 02:45:00 +0200 Organization: JURTA Message-ID: <87lk99a8sr.fsf@jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1194483776 6001 80.91.229.12 (8 Nov 2007 01:02:56 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 8 Nov 2007 01:02:56 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Nov 08 02:02:59 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IpvnN-0007Et-HQ for ged-emacs-devel@m.gmane.org; Thu, 08 Nov 2007 02:02:57 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IpvnC-0001Jw-Cq for ged-emacs-devel@m.gmane.org; Wed, 07 Nov 2007 20:02:46 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ipvli-0007R4-3D for emacs-devel@gnu.org; Wed, 07 Nov 2007 20:01:14 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ipvlh-0007Oq-2n for emacs-devel@gnu.org; Wed, 07 Nov 2007 20:01:13 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ipvlg-0007OT-Tv for emacs-devel@gnu.org; Wed, 07 Nov 2007 20:01:12 -0500 Original-Received: from relay01.kiev.sovam.com ([62.64.120.200]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Ipvlg-00063H-9K for emacs-devel@gnu.org; Wed, 07 Nov 2007 20:01:12 -0500 Original-Received: from [83.170.232.243] (helo=smtp.svitonline.com) by relay01.kiev.sovam.com with esmtp (Exim 4.67) (envelope-from ) id 1IpvlR-0000ZX-Tm for emacs-devel@gnu.org; Thu, 08 Nov 2007 03:01:00 +0200 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux) X-Scanner-Signature: b3971b7ac160fe45482707327a257f38 X-DrWeb-checked: yes X-SpamTest-Envelope-From: juri@jurta.org X-SpamTest-Group-ID: 00000000 X-SpamTest-Header: Not Detected X-SpamTest-Info: Profiles 1747 [Nov 07 2007] X-SpamTest-Info: helo_type=3 X-SpamTest-Info: {HEADERS: header Content-Type found without required header Content-Transfer-Encoding} X-SpamTest-Method: none X-SpamTest-Rate: 25 X-SpamTest-Status: Not detected X-SpamTest-Status-Extended: not_detected X-SpamTest-Version: SMTP-Filter Version 3.0.0 [0255], KAS30/Release X-detected-kernel: by monty-python.gnu.org: FreeBSD 4.8-5.1 (or MacOS X 10.2-10.3) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:82779 Archived-At: I propose to remove a restriction that `dired-create-directory' can create only one immediate subdirectory. The patch below keeps the old behavior for creating an immediate subdirectory but also allows creating subdirectories with an arbitrary depth. It searches for the topmost nonexistent parent directory and uses it to add a dired entry. It also calls `make-directory' with the `parents' arguments to create all parent directories: Index: lisp/dired-aux.el =================================================================== RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v retrieving revision 1.156 diff -c -r1.156 dired-aux.el *** lisp/dired-aux.el 25 Sep 2007 10:44:23 -0000 1.156 --- lisp/dired-aux.el 8 Nov 2007 00:44:45 -0000 *************** *** 1528,1537 **** "Create a directory called DIRECTORY." (interactive (list (read-file-name "Create directory: " (dired-current-directory)))) ! (let ((expanded (directory-file-name (expand-file-name directory)))) ! (make-directory expanded) ! (dired-add-file expanded) ! (dired-move-to-filename))) (defun dired-into-dir-with-symlinks (target) (and (file-directory-p target) --- 1542,1557 ---- "Create a directory called DIRECTORY." (interactive (list (read-file-name "Create directory: " (dired-current-directory)))) ! (let* ((expanded (directory-file-name (expand-file-name directory))) ! (try expanded) new) ! ;; Find the topmost nonexistent parent dir (variable `new') ! (while (and try (not (file-exists-p try)) (not (equal new try))) ! (setq new try ! try (directory-file-name (file-name-directory try)))) ! (make-directory expanded t) ! (when new ! (dired-add-file new) ! (dired-move-to-filename)))) (defun dired-into-dir-with-symlinks (target) (and (file-directory-p target) -- Juri Linkov http://www.jurta.org/emacs/