Back-port from trunk the fix for bug #6294.

ls-lisp.el (ls-lisp-classify-file): New function.
 (ls-lisp-insert-directory): Call it if switches include -F.
 (ls-lisp-classify): Call ls-lisp-classify-file.
 (insert-directory): Remove blanks from switches.
This commit is contained in:
Eli Zaretskii 2010-11-06 12:08:33 +02:00
parent 21620882d7
commit 169759a0d4
2 changed files with 42 additions and 23 deletions

View file

@ -1,6 +1,10 @@
2010-11-06 Eli Zaretskii <eliz@gnu.org>
* ls-lisp.el (insert-directory): Doc fix. (bug#7285)
(ls-lisp-classify-file): New function.
(ls-lisp-insert-directory): Call it if switches include -F (bug#6294).
(ls-lisp-classify): Call ls-lisp-classify-file.
(insert-directory): Remove blanks from switches.
2010-11-07 Wilson Snyder <wsnyder@wsnyder.org>

View file

@ -236,7 +236,7 @@ is assumed to be always present and cannot be turned off."
(if (string-match "--dired " switches)
(setq switches (replace-match "" nil nil switches)))
;; Convert SWITCHES to a list of characters.
(setq switches (delete ?- (append switches nil)))
(setq switches (delete ?\ (delete ?- (append switches nil))))
;; Sometimes we get ".../foo*/" as FILE. While the shell and
;; `ls' don't mind, we certainly do, because it makes us think
;; there is no wildcard, only a directory name.
@ -406,7 +406,11 @@ not contain `d', so that a full listing is expected."
(setq file (substring file 0 -1)))
(let ((fattr (file-attributes file 'string)))
(if fattr
(insert (ls-lisp-format file fattr (nth 7 fattr)
(insert (ls-lisp-format
(if (memq ?F switches)
(ls-lisp-classify-file file fattr)
file)
fattr (nth 7 fattr)
switches time-index (current-time)))
(message "%s: doesn't exist or is inaccessible" file)
(ding) (sit-for 2))))) ; to show user the message!
@ -523,29 +527,40 @@ SWITCHES is a list of characters. Default sorting is alphabetic."
(nreverse file-alist)
file-alist))
(defun ls-lisp-classify (filedata)
"Append a character to each file name indicating the file type.
Also, for regular files that are executable, append `*'.
(defun ls-lisp-classify-file (filename fattr)
"Append a character to FILENAME indicating the file type.
FATTR is the file attributes returned by `file-attributes' for the file.
The file type indicators are `/' for directories, `@' for symbolic
links, `|' for FIFOs, `=' for sockets, and nothing for regular files.
\[But FIFOs and sockets are not recognized.]
FILEDATA has the form (filename . `file-attributes'). Its `cadr' is t
for directory, string (name linked to) for symbolic link, or nil."
links, `|' for FIFOs, `=' for sockets, `*' for regular files that
are executable, and nothing for other types of files."
(let* ((type (car fattr))
(modestr (nth 8 fattr))
(typestr (substring modestr 0 1)))
(cond
(type
(concat filename (if (eq type t) "/" "@")))
((string-match "x" modestr)
(concat filename "*"))
((string= "p" typestr)
(concat filename "|"))
((string= "s" typestr)
(concat filename "="))
(t filename))))
(defun ls-lisp-classify (filedata)
"Append a character to file name in FILEDATA indicating the file type.
FILEDATA has the form (FILENAME . ATTRIBUTES), where ATTRIBUTES is the
structure returned by `file-attributes' for that file.
The file type indicators are `/' for directories, `@' for symbolic
links, `|' for FIFOs, `=' for sockets, `*' for regular files that
are executable, and nothing for other types of files."
(let ((file-name (car filedata))
(type (cadr filedata)))
(cond (type
(cons
(concat (propertize file-name 'dired-filename t)
(if (eq type t) "/" "@"))
(cdr filedata)))
((string-match "x" (nth 9 filedata))
(cons
(concat (propertize file-name 'dired-filename t) "*")
(cdr filedata)))
(t
(cons
(propertize file-name 'dired-filename t)
(cdr filedata))))))
(fattr (cdr filedata)))
(setq file-name (propertize file-name 'dired-filename t))
(cons (ls-lisp-classify-file file-name fattr) fattr)))
(defun ls-lisp-extension (filename)
"Return extension of FILENAME (ignoring any version extension)