bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#32173: 26.1; wdired: broken 'wdired-use-interactive-rename'


From: Eli Zaretskii
Subject: bug#32173: 26.1; wdired: broken 'wdired-use-interactive-rename'
Date: Fri, 20 Jul 2018 22:44:31 +0300

> From: Enrico Scholz <enrico.scholz@ensc.de>
> Date: Mon, 16 Jul 2018 15:28:29 +0200
> 
> wdired seems to misbehave when 'wdired-use-interactive-rename' is
> active:
> 
> 1. create scratch directory with a file
> 
>    mkdir /tmp/test
>    cd /tmp/test
>    touch foo.c
> 
> 2. start emacs
> 
>    LC_ALL=C emacs -Q -nw
> 
> 3. set option above
> 
>    M-: (setq wdired-use-interactive-rename t)
> 
> 4. go into the folder
> 
>    C-x C-f /tmp/test
> 
>    emacs will show
> 
>    | /tmp/test:
>    | total used in directory 0 available 4023272
>    | drwxrwxr-x.  2 ensc ensc  60 Jul 16 15:16 .
>    | drwxrwxrwt. 18 root root 600 Jul 16 15:17 ..
>    | -rw-rw-r--.  1 ensc ensc   0 Jul 16 14:58 foo.c
> 
> 5. enter wdired mode
> 
>    C-x C-q
> 
> 6. replace 'foo' with 'test'; e.g.
> 
>    test M-d
> 
> 7. commit it
> 
>    C-c C-c
> 
> 
> ---> emacs asks
> 
> | Move `c' to `test.c'? [Type yn!q or C-h]
> 
> or
> 
> | Move `.' to `test.c'? [Type yn!q or C-h]
> 
> (seems to differ slightly when repeating step 6).  Buffer content is
> malformed too (first two lines are merged, or whitespace between time
> and filename is removed).

It looks like the code expects you to delete the entire original name
and then type the new name from scratch, it doesn't expect to see part
of the old file name unaltered.

Does the patch below give good result?

diff --git a/lisp/wdired.el b/lisp/wdired.el
index bb60e77..13005cb 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -550,7 +550,11 @@ wdired-search-and-rename
             (progn
               (setq done t)
               (let ((inhibit-read-only t))
-                (dired-move-to-filename)
+                ;; Can't use dired-move-to-filename, because editing
+                ;; the file names could have left the 'dired-filename'
+                ;; property only on part of the file name.
+                (re-search-forward directory-listing-before-filename-regexp
+                                   (line-end-position) t)
                 (search-forward (wdired-get-filename t) nil t)
                 (replace-match (file-name-nondirectory filename-ori) t t))
               (dired-do-create-files-regexp





reply via email to

[Prev in Thread] Current Thread [Next in Thread]