[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#34915: 27.0.50; Wdired regression with ls -F
From: |
Stephen Berman |
Subject: |
bug#34915: 27.0.50; Wdired regression with ls -F |
Date: |
Fri, 12 Apr 2019 14:23:38 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
On Tue, 19 Mar 2019 13:43:16 +0000 "Basil L. Contovounesios" <contovob@tcd.ie>
wrote:
> X-Debbugs-Cc: Stephen Berman <stephen.berman@gmx.net>
>
> The following behaviour is present in master but not emacs-26.
> I haven't bisected the issue to Stephen's changes to Wdired, but I
> checked that it wasn't caused by Stefan's recent changes to Dired.
>
> 0. emacs -Q
> 1. (progn (setq dired-listing-switches "-Fl")
> (dired (make-temp-file "my-wdired-" t)))
> C-j
> 2. M-x dired-create-empty-file RET exec RET
> 3. M +x RET
> 4. M-x wdired-change-to-wdired-mode RET
> 5. w C-c C-c
> 1 rename actions failed--type ? for details
> 6. ?
> Rename ‘/tmp/my-wdired-tMSVuW/exec*’ to ‘/tmp/my-wdired-tMSVuW/wexec*’
> failed:
> (file-missing Renaming No such file or directory
> /tmp/my-wdired-tMSVuW/exec*
> /tmp/my-wdired-tMSVuW/wexec*)
> 7. M-x dired-create-empty-file RET plain RET
> 8. M-x wdired-change-to-wdired-mode RET
> 9. w C-c C-c
>
> This wdired-finish-edit succeeds, but instead of only renaming 'plain'
> to 'wplain', it also renames 'exec' to 'exec*'.
>
> It seems like Wdired thinks the indicators added by ls (one of */=>@|)
> are part of the file name now.
This is indeed due to my changes. The patch below appears to fix the
problem, but I'm not sure how robust it is (I was also, and remain,
unsure about my handling of symlinks in the previous patch, but I
haven't found time to look at it more closely; at least I haven't seen
any bug reports about it so far).
Steve Berman
diff --git a/lisp/wdired.el b/lisp/wdired.el
index acc62e4e39..ca3e2f7845 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -612,14 +612,21 @@ wdired--restore-dired-filename-prop
(when (re-search-forward
directory-listing-before-filename-regexp lep t)
(setq beg (point)
- ;; If the file is a symlink, put the dired-filename
- ;; property only on the link name. (Using
- ;; (file-symlink-p (dired-get-filename)) fails in
- ;; wdired-mode, bug#32673.)
- end (if (and (re-search-backward
- dired-permission-flags-regexp nil t)
- (looking-at "l")
- (search-forward " -> " lep t))
+ end (if (or
+ ;; If the file is a symlink, put the
+ ;; dired-filename property only on the link
+ ;; name. (Using (file-symlink-p
+ ;; (dired-get-filename)) fails in
+ ;; wdired-mode, bug#34915.)
+ (and (re-search-backward
+ dired-permission-flags-regexp nil t)
+ (looking-at "l")
+ (search-forward " -> " lep t))
+ ;; When using the -F switch, don't treat file
+ ;; type indicator characters as part of the
+ ;; file name (bug#34915).
+ (and (string-match "F" dired-actual-switches)
+ (re-search-forward "[*/@|=>]$" lep t)))
(goto-char (match-beginning 0))
lep))
(put-text-property beg end 'dired-filename t))))))
- bug#34915: 27.0.50; Wdired regression with ls -F,
Stephen Berman <=