Function: eshell-parse-ange-ls
eshell-parse-ange-ls is a byte-compiled function defined in
esh-util.el.gz.
Signature
(eshell-parse-ange-ls DIR)
Source Code
;; Defined in /usr/src/emacs/lisp/eshell/esh-util.el.gz
(defun eshell-parse-ange-ls (dir)
(require 'ange-ftp)
(require 'tramp)
(let ((ange-ftp-name-format
(list (nth 0 tramp-file-name-structure)
(nth 3 tramp-file-name-structure)
(nth 2 tramp-file-name-structure)
(nth 4 tramp-file-name-structure)))
;; ange-ftp uses `ange-ftp-ftp-name-arg' and `ange-ftp-ftp-name-res'
;; for optimization in `ange-ftp-ftp-name'. If Tramp wasn't active,
;; there could be incorrect values from previous calls in case the
;; "ftp" method is used in the Tramp file name. So we unset
;; those values.
(ange-ftp-ftp-name-arg "")
(ange-ftp-ftp-name-res nil)
entry)
(with-temp-buffer
(insert (ange-ftp-ls dir "-la" nil))
(goto-char (point-min))
(if (looking-at "^total [0-9]+$")
(forward-line 1))
;; Some systems put in a blank line here.
(if (eolp) (forward-line 1))
(while (looking-at
`,(concat "\\([dlscb-][rwxst-]+\\)"
"\\s-*" "\\([0-9]+\\)" "\\s-+"
"\\(\\S-+\\)" "\\s-+"
"\\(\\S-+\\)" "\\s-+"
"\\([0-9]+\\)" "\\s-+" "\\(.*\\)"))
(let* ((perms (match-string 1))
(links (string-to-number (match-string 2)))
(user (match-string 3))
(group (match-string 4))
(size (string-to-number (match-string 5)))
(name (ange-ftp-parse-filename))
(mtime
(let ((moment (parse-time-string (match-string 6))))
(if (decoded-time-second moment)
(setf (decoded-time-year moment)
(decoded-time-year (decode-time)))
(setf (decoded-time-second moment) 0)
(setf (decoded-time-minute moment) 0)
(setf (decoded-time-hour moment) 0))
(encode-time moment)))
symlink)
(if (string-match "\\(.+\\) -> \\(.+\\)" name)
(setq symlink (match-string 2 name)
name (match-string 1 name)))
(setq entry
(cons
(cons name
(list (if (eq (aref perms 0) ?d)
t
symlink)
links user group
nil mtime nil
size perms nil nil)) entry)))
(forward-line)))
entry))