]> git.eshelyaron.com Git - emacs.git/commitdiff
(insert-directory): Read the output of "ls" by
authorKenichi Handa <handa@m17n.org>
Thu, 23 Jan 2003 05:59:47 +0000 (05:59 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 23 Jan 2003 05:59:47 +0000 (05:59 +0000)
no-conversion, and decode it later while preserving
`dired-filename' property.

lisp/files.el

index 321c52460c95a63625cb685bd24ab622f8b230a0..8a801a3d530529246b29aa12039ca1cef828fa9f 100644 (file)
@@ -4017,12 +4017,15 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'."
 
          ;; 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 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'."
              (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