unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Rudi C <rudiwillalwaysloveyou@gmail.com>
To: Tassilo Horn <tsdh@gnu.org>
Cc: Eli Zaretskii <eliz@gnu.org>,
	Stefan Kangas <stefankangas@gmail.com>,
	emacs-devel@gnu.org
Subject: Re: PR: dired-do-create-files now checks for trailing slashes in the target
Date: Wed, 29 Sep 2021 18:01:27 +0330	[thread overview]
Message-ID: <CAE9z9A1JixTmm=_6WF_7UhO8=_in=JOKV-L4np_HTYzFrGxgSA@mail.gmail.com> (raw)
In-Reply-To: <87k0iz32t6.fsf@gnu.org>


[-- Attachment #1.1: Type: text/plain, Size: 1311 bytes --]

Everything Tassilo said seems correct to me, too.

> slash is ephemeral and users may not be aware

Even if they are not aware, they won't lose anything, do they? They will
also probably pick it up easily enough (I learned this after I observed
"inconsistent" behavior in rsync.).

I have attached a new patch that adds a custom option. While I do like
having the option, IMO it should be on by default.

> Is there some other way we could get this
> without relying on the difference between foo and foo/?  A separate
> command, perhaps?  Or some extra prompting?

I think we can add an `'ask' choice to this custom variable I introduced in
this patch, but that really seems like overkill to me; You can just set
`dired-create-destination-dirs' to `'ask', and if you refuse to create the
new directory, you will still have your previous behavior: `old_name` ->
`new_name/` -> user refuses dired' prompt to create a new directory ->
fired moves `old_name` -> `new_name`



On Wed, Sep 29, 2021 at 5:24 PM Tassilo Horn <tsdh@gnu.org> wrote:

> Hi Stefan,
>
> > BTW, in rsync I can't do "foo/bar/".  Does it make sense to support
> > that, perhaps optionally?  Much like "mkdir -p".
>
> That does already work with Rudi's patch and
> dired-create-destination-dirs set to a non-nil value. ;-)
>
> Bye,
> Tassilo
>

[-- Attachment #1.2: Type: text/html, Size: 1923 bytes --]

[-- Attachment #2: 0002-Added-option-dired-create-destination-dirs-trailing-.patch --]
[-- Type: application/octet-stream, Size: 2312 bytes --]

From 7a680d06e4b6ecf9e88e1c309f214d4e1a7f8700 Mon Sep 17 00:00:00 2001
From: NightMachinary <rudiwillalwaysloveyou@gmail.com>
Date: Wed, 29 Sep 2021 17:54:29 +0330
Subject: [PATCH 2/2] Added option
 dired-create-destination-dirs-trailing-separator-special

---
 lisp/dired-aux.el | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index fcaa8dd008..ee727ec5cc 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1789,6 +1789,17 @@ If `ask', ask for user confirmation."
   :group 'dired
   :version "27.1")
 
+(defcustom dired-create-destination-dirs-trailing-separator-special nil
+  "If t, when selecting a single destination in Dired, paths that end in a path separator will be treated as a non-existent directory, and acted on according to `dired-create-destination-dirs'.
+
+This option is only relevant if `dired-create-destination-dirs' is not `nil', and you are moving/copying a single directory.
+
+For example, when renaming a directory named `old_name' to `new_name/' (note the trailing path separator), `new_name' might be created depending on `dired-create-destination-dirs' and `old_name' will be moved into it if it is created; Otherwise `old_name' will be directly renamed to `new_name'."
+  :type '(choice (const :tag "Do not treat paths with a trailing path separator specially" nil)
+                 (const :tag "Treat paths with a trailing path separator specially" t))
+  :group 'dired
+  :version "28.1")
+
 (defun dired-maybe-create-dirs (dir)
   "Create DIR if doesn't exist according to `dired-create-destination-dirs'."
   (when (and dired-create-destination-dirs (not (file-exists-p dir)))
@@ -2157,8 +2168,11 @@ Optional arg HOW-TO determines how to treat the target.
 		     target-dir op-symbol arg rfn-list default))))
 	 (into-dir
           (progn
-            (when (or (not dired-one-file)
-                      (directory-name-p target))
+            (when
+                (or
+                 (not dired-one-file)
+                 (and dired-create-destination-dirs-trailing-separator-special
+                      (directory-name-p target)))
               (dired-maybe-create-dirs target))
             (cond ((null how-to)
 		   ;; Allow users to change the letter case of
-- 
2.32.0


[-- Attachment #3: 0001-dired-do-create-files-now-checks-for-trailing-slashe.patch --]
[-- Type: application/octet-stream, Size: 986 bytes --]

From 951e12f352b783b15edbabb4623a5c721425bd25 Mon Sep 17 00:00:00 2001
From: NightMachinary <rudiwillalwaysloveyou@gmail.com>
Date: Tue, 28 Sep 2021 21:14:05 +0330
Subject: [PATCH 1/2] dired-do-create-files now checks for trailing slashes in
 the target

---
 lisp/dired-aux.el | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 397c5c67cb..fcaa8dd008 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -2157,7 +2157,9 @@ Optional arg HOW-TO determines how to treat the target.
 		     target-dir op-symbol arg rfn-list default))))
 	 (into-dir
           (progn
-            (unless dired-one-file (dired-maybe-create-dirs target))
+            (when (or (not dired-one-file)
+                      (directory-name-p target))
+              (dired-maybe-create-dirs target))
             (cond ((null how-to)
 		   ;; Allow users to change the letter case of
 		   ;; a directory on a case-insensitive
-- 
2.32.0


  reply	other threads:[~2021-09-29 14:31 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-28 17:50 PR: dired-do-create-files now checks for trailing slashes in the target Rudi C
2021-09-28 18:17 ` Stefan Kangas
2021-09-28 18:42   ` Rudi C
2021-09-28 19:03     ` Stefan Kangas
2021-09-28 19:38       ` Tassilo Horn
2021-09-28 20:07         ` Stefan Kangas
2021-09-28 20:23       ` Rudi C
2021-09-28 18:42   ` Eli Zaretskii
2021-09-28 19:29     ` Tassilo Horn
2021-09-28 19:55       ` Eli Zaretskii
2021-09-29  4:46         ` Tassilo Horn
2021-09-29 13:09           ` Eli Zaretskii
2021-09-29 13:20             ` Rudi C
2021-09-29 13:34               ` Eli Zaretskii
2021-09-29 13:37               ` Tassilo Horn
2021-09-29 13:42               ` Stefan Kangas
2021-09-29 13:53                 ` Tassilo Horn
2021-09-29 14:31                   ` Rudi C [this message]
2021-09-29 13:23             ` Tassilo Horn
2021-09-29 13:41               ` Eli Zaretskii
2021-09-29 13:42                 ` Tassilo Horn
2021-09-29 13:57                   ` Eli Zaretskii
2021-09-29 14:21                     ` Lars Ingebrigtsen
2021-09-29 15:04                       ` Stefan Kangas
2021-09-29 15:17                         ` Tassilo Horn
2021-09-30  6:06                           ` Lars Ingebrigtsen
2021-09-30  7:29                             ` Lars Ingebrigtsen
2021-09-30  8:32                             ` Tassilo Horn
2021-09-30 13:33                               ` Lars Ingebrigtsen
2021-09-30 14:10                                 ` Tassilo Horn
2021-09-30 16:03                                   ` Eli Zaretskii
2021-09-30 16:48                                     ` Tassilo Horn
2021-09-30 17:47                                       ` Eli Zaretskii
2021-09-30 18:52                                         ` Rudi C
2021-09-30 19:02                                           ` Eli Zaretskii
2021-11-01 15:37                                         ` Rudi C
2021-11-02 14:44                                           ` Lars Ingebrigtsen
2021-11-02 15:08                                             ` Rudi C
2021-11-02 15:15                                               ` Eli Zaretskii
2021-11-09 12:52                                                 ` Rudi C
2021-11-09 13:47                                                   ` Eli Zaretskii
2021-12-05 12:12                                                   ` Tassilo Horn
2021-12-05 13:26                                                     ` Rudi C
2021-12-05 17:00                                                       ` Tassilo Horn
2021-12-06  4:34                                                       ` Richard Stallman
2021-12-05 20:24                                                     ` Lars Ingebrigtsen
2021-12-06  6:01                                                       ` Tassilo Horn
2021-09-30 15:45                               ` [External] : " Drew Adams
2021-09-30 13:54                             ` Stefan Kangas
2021-09-30 13:59                               ` Lars Ingebrigtsen
2021-09-29 15:44                       ` Eli Zaretskii
2021-09-29 17:01                   ` [External] : " Drew Adams
2021-09-29 19:09                     ` Tassilo Horn
2021-09-29 19:35                       ` Drew Adams
2021-09-29 13:57               ` Stefan Kangas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAE9z9A1JixTmm=_6WF_7UhO8=_in=JOKV-L4np_HTYzFrGxgSA@mail.gmail.com' \
    --to=rudiwillalwaysloveyou@gmail.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=stefankangas@gmail.com \
    --cc=tsdh@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).