Mercurial > emacs
changeset 49401:a57a71b7eaae
(insert-directory): Read the output of "ls" by
no-conversion, and decode it later while preserving
`dired-filename' property.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 23 Jan 2003 05:59:47 +0000 |
parents | 07e32c3fa913 |
children | 99a31f21f1c9 |
files | lisp/files.el |
diffstat | 1 files changed, 24 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/files.el Thu Jan 23 05:58:58 2003 +0000 +++ b/lisp/files.el Thu Jan 23 05:59:47 2003 +0000 @@ -4017,12 +4017,15 @@ ;; Read the actual directory using `insert-directory-program'. ;; RESULT gets the status code. - (let* ((coding-system-for-read + (let* (;; We at first read by no-conversion, then after + ;; putting text property `dired-filename, decode one + ;; bunch by one to preserve that property. + (coding-system-for-read 'no-conversion) + ;; This is to control encoding the arguments in call-process. + (coding-system-for-write (and enable-multibyte-characters (or file-name-coding-system - default-file-name-coding-system))) - ;; This is to control encoding the arguments in call-process. - (coding-system-for-write coding-system-for-read)) + default-file-name-coding-system)))) (setq result (if wildcard ;; Run ls in the directory part of the file pattern @@ -4106,6 +4109,23 @@ (beginning-of-line) (delete-region (point) (progn (forward-line 2) (point))))) + ;; Now decode what read if necessary. + (let ((coding (or coding-system-for-write + (detect-coding-region beg (point) t))) + val pos) + (if (not (eq (coding-system-base coding) 'undecided)) + (save-restriction + (narrow-to-region beg (point)) + (goto-char (point-min)) + (while (not (eobp)) + (setq pos (point) + val (get-text-property (point) 'dired-filename)) + (goto-char (next-single-property-change + (point) 'dired-filename nil (point-max))) + (decode-coding-region pos (point) coding) + (if val + (put-text-property pos (point) 'dired-filename t)))))) + (if full-directory-p ;; Try to insert the amount of free space. (save-excursion