GNU bug report logs - #29189
25.3; Dired does not work with binary filenames

Previous Next

Package: emacs;

Reported by: Allen Li <vianchielfaura <at> gmail.com>

Date: Tue, 7 Nov 2017 09:04:01 UTC

Severity: minor

Found in version 25.3

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Allen Li <vianchielfaura <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: handa <at> gnu.org, 29189 <at> debbugs.gnu.org, Andreas Schwab <schwab <at> suse.de>
Subject: bug#29189: 25.3; Dired does not work with binary filenames
Date: Wed, 15 Nov 2017 22:31:48 -0800
On Sat, Nov 11, 2017 at 7:21 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>> Date: Sat, 11 Nov 2017 16:18:20 +0200
>> From: Eli Zaretskii <eliz <at> gnu.org>
>> Cc: schwab <at> suse.de, 29189 <at> debbugs.gnu.org
>>
>> The problem is in insert-directory.  It manually decodes each file
>> name which was output by 'ls', and that produces strangely
>> inconsistent results when the file name includes raw bytes: sometimes
>> we get the 2-byte sequence starting with \300, sometimes the original
>> byte survives unchanged, and sometimes I see the sequence \301\200
>> instead of a lone \300 in the file name.  I'm trying to understand
>> what's going on and find a solution to that.
>
> Can you please try the patch below?  (You will need to re-dump Emacs
> after patching files.el.)
>
> diff --git a/lisp/files.el b/lisp/files.el
> index b47411f..43198bc 100644
> --- a/lisp/files.el
> +++ b/lisp/files.el
> @@ -6803,10 +6803,13 @@ insert-directory
>                             val (get-text-property (point) 'dired-filename))
>                       (goto-char (next-single-property-change
>                                   (point) 'dired-filename nil (point-max)))
> -                     ;; Force no eol conversion on a file name, so
> -                     ;; that CR is preserved.
> -                     (decode-coding-region pos (point)
> -                                           (if val coding-no-eol coding))
> +                      (let ((fn (buffer-substring-no-properties pos (point))))
> +                        (delete-region pos (point))
> +                        (insert
> +                        ;; Force no eol conversion on a file name, so
> +                        ;; that CR is preserved.
> +                        (decode-coding-string (string-make-unibyte fn)
> +                                              (if val coding-no-eol coding))))
>                       (if val
>                           (put-text-property pos (point)
>                                              'dired-filename t)))))))

This patch works for me.




This bug report was last modified 6 years and 261 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.