Mercurial > emacs
changeset 111377:176c5c4dd786
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.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 06 Nov 2010 12:08:33 +0200 |
parents | 21858bb1a2e7 |
children | 1062cf507cfa |
files | lisp/ChangeLog lisp/ls-lisp.el |
diffstat | 2 files changed, 42 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sat Nov 06 11:57:24 2010 +0200 +++ b/lisp/ChangeLog Sat Nov 06 12:08:33 2010 +0200 @@ -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>
--- a/lisp/ls-lisp.el Sat Nov 06 11:57:24 2010 +0200 +++ b/lisp/ls-lisp.el Sat Nov 06 12:08:33 2010 +0200 @@ -236,7 +236,7 @@ (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 @@ (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 @@ (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)