[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/eshell/em-ls.el
From: |
John Wiegley |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/eshell/em-ls.el |
Date: |
Fri, 09 Aug 2002 20:18:18 -0400 |
Index: emacs/lisp/eshell/em-ls.el
diff -c emacs/lisp/eshell/em-ls.el:1.12 emacs/lisp/eshell/em-ls.el:1.13
*** emacs/lisp/eshell/em-ls.el:1.12 Mon Dec 31 15:33:24 2001
--- emacs/lisp/eshell/em-ls.el Fri Aug 9 20:18:18 2002
***************
*** 1,8 ****
;;; em-ls.el --- implementation of ls in Lisp
! ;; Copyright (C) 1999, 2000 Free Software Foundation
;; Author: John Wiegley <address@hidden>
;; This file is part of GNU Emacs.
--- 1,9 ----
;;; em-ls.el --- implementation of ls in Lisp
! ;; Copyright (C) 1999, 2000, 2001 Free Software Foundation
;; Author: John Wiegley <address@hidden>
+ ;; Modified: Rafael SepĂșlveda <address@hidden>
;; This file is part of GNU Emacs.
***************
*** 288,299 ****
--- 289,304 ----
(defvar error-func)
(defvar flush-func)
(defvar human-readable)
+ (defvar ignore)
+ (defvar ignore-backups)
(defvar ignore-pattern)
+ (defvar indicator-style)
(defvar insert-func)
(defvar listing-style)
(defvar numeric-uid-gid)
(defvar reverse-list)
(defvar show-all)
+ (defvar show-full-time)
(defvar show-recursive)
(defvar show-size)
(defvar sort-method)
***************
*** 307,369 ****
"ls" (if eshell-ls-initial-args
(list eshell-ls-initial-args args)
args)
! `((?a "all" nil show-all
! "show all files in directory")
(?c nil by-ctime sort-method
"sort by modification time")
(?d "directory" nil dir-literal
"list directory entries instead of contents")
(?k "kilobytes" 1024 block-size
! "using 1024 as the block size")
(?h "human-readable" 1024 human-readable
"print sizes in human readable format")
! (?H "si" 1000 human-readable
! "likewise, but use powers of 1000 not 1024")
(?I "ignore" t ignore-pattern
"do not list implied entries matching pattern")
(?l nil long-listing listing-style
"use a long listing format")
(?n "numeric-uid-gid" nil numeric-uid-gid
"list numeric UIDs and GIDs instead of names")
(?r "reverse" nil reverse-list
"reverse order while sorting")
(?s "size" nil show-size
"print size of each file, in blocks")
(?t nil by-mtime sort-method
"sort by modification time")
(?u nil by-atime sort-method
"sort by last access time")
- (?x nil by-lines listing-style
- "list entries by lines instead of by columns")
- (?C nil by-columns listing-style
- "list entries by columns")
- (?L "deference" nil dereference-links
- "list entries pointed to by symbolic links")
- (?R "recursive" nil show-recursive
- "list subdirectories recursively")
- (?S nil by-size sort-method
- "sort by file size")
(?U nil unsorted sort-method
"do not sort; list entries in directory order")
(?X nil by-extension sort-method
"sort alphabetically by entry extension")
(?1 nil single-column listing-style
"list one file per line")
(nil "help" nil nil
! "show this usage display")
:external "ls"
:usage "[OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
! Sort entries alphabetically across.")
;; setup some defaults, based on what the user selected
(unless block-size
(setq block-size eshell-ls-default-blocksize))
(unless listing-style
(setq listing-style 'by-columns))
(unless args
(setq args (list ".")))
(let ((eshell-ls-exclude-regexp eshell-ls-exclude-regexp) ange-cache)
! (when ignore-pattern
(unless (eshell-using-module 'eshell-glob)
(error (concat "-I option requires that `eshell-glob'"
" be a member of `eshell-modules-list'")))
--- 312,478 ----
"ls" (if eshell-ls-initial-args
(list eshell-ls-initial-args args)
args)
! `((?a "all" all show-all
! "do not hide entries starting with .")
! (?A "almost-all" almost show-all
! "do not list implied . and ..")
! (?B "ignore-backups" nil ignore-backups
! "do not list implied entries that match ending\n\t\t\t with
`eshell-ls-backup-regexp'")
(?c nil by-ctime sort-method
"sort by modification time")
+ (?C nil by-columns listing-style
+ "list entries by columns")
(?d "directory" nil dir-literal
"list directory entries instead of contents")
+ (?F "classify" classify indicator-style
+ "append indicator (one of */=@|) to entries")
+ (nil "full-time" nil show-full-time
+ "list both full date and full time")
+ (?g nil nil ignore
+ "(ignored)")
(?k "kilobytes" 1024 block-size
! "like --block-size=1024")
(?h "human-readable" 1024 human-readable
"print sizes in human readable format")
! (nil "si" 1000 human-readable
! "likewise, but use powers of 1000 not 1024")
! (?H nil -1 human-readable
! "same as `--si' for now; soon to change\n\t\t\t to conform to POSIX")
! (nil "indicator-style" t indicator-style
! "append indicator with style WORD to entry names:\n\t\t\t none
(default), classify (-F), file-type (-p)")
(?I "ignore" t ignore-pattern
"do not list implied entries matching pattern")
(?l nil long-listing listing-style
"use a long listing format")
+ (?L "deference" nil dereference-links
+ "list entries pointed to by symbolic links")
(?n "numeric-uid-gid" nil numeric-uid-gid
"list numeric UIDs and GIDs instead of names")
+ (?p "file-type" file-type indicator-style
+ "append indicator (one of /=@|) to entries")
(?r "reverse" nil reverse-list
"reverse order while sorting")
+ (?R "recursive" nil show-recursive
+ "list subdirectories recursively")
(?s "size" nil show-size
"print size of each file, in blocks")
+ (?S nil by-size sort-method
+ "sort by file size")
(?t nil by-mtime sort-method
"sort by modification time")
(?u nil by-atime sort-method
"sort by last access time")
(?U nil unsorted sort-method
"do not sort; list entries in directory order")
+ (?x nil by-lines listing-style
+ "list entries by lines instead of by columns")
(?X nil by-extension sort-method
"sort alphabetically by entry extension")
+ (?v nil by-version sort-method
+ "sort by version")
(?1 nil single-column listing-style
"list one file per line")
(nil "help" nil nil
! "display this help and exit")
:external "ls"
:usage "[OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
! Sort entries alphabetically if none of -cftuSUX nor --sort.")
! ;; FIXME: Pending GNU 'ls' implementations and/or revisions.
! ;;
! ;; -b, --escape print octal escapes for nongraphic characters
! ;; --block-size=SIZE use SIZE-byte blocks
! ;; -c with -lt: sort by, and show, ctime (time of
last
! ;; modification of file status information)
! ;; with -l: show ctime and sort by name
! ;; otherwise: sort by ctime
! ;; --color[=WHEN] control whether color is used to distinguish
file
! ;; types. WHEN may be `never', `always', or
`auto'
! ;; -D, --dired generate output designed for Emacs' dired mode
! ;; -f do not sort, enable -aU, disable -lst
! ;; --format=WORD across -x, commas -m, horizontal -x, long -l,
! ;; single-column -1, verbose -l, vertical -C
! ;; -G, --no-group inhibit display of group information
! ;; --indicator-style=WORD append indicator with style WORD to entry
names:
! ;; none (default), classify (-F), file-type
(-p)
! ;; -i, --inode print index number of each file
! ;; -I, --ignore=PATTERN do not list implied entries matching shell
PATTERN
! ;; -L, --dereference show file information for referents of
symlinks
! ;; -m fill width with a comma separated list of
entries
! ;; -n, --numeric-uid-gid list numeric UIDs and GIDs instead of names
! ;; -N, --literal print raw entry names (don't treat e.g.
control
! ;; characters specially)
! ;; -o use long listing format without group info
! ;; -q, --hide-control-chars print ? instead of non graphic characters
! ;; --show-control-chars show non graphic characters as-is (default
! ;; unless program is `ls' and output is a
terminal)
! ;; -Q, --quote-name enclose entry names in double quotes
! ;; --quoting-style=WORD use quoting style WORD for entry names:
! ;; literal, locale, shell, shell-always, c,
escape
! ;; -s, --size print size of each file, in blocks
! ;; --sort=WORD extension -X, none -U, size -S, time -t,
! ;; version -v
! ;; status -c, time -t, atime -u, access -u, use
-u
! ;; --time=WORD show time as WORD instead of modification
time:
! ;; atime, access, use, ctime or status; use
! ;; specified time as sort key if --sort=time
! ;; -T, --tabsize=COLS assume tab stops at each COLS instead of 8
! ;; -u with -lt: sort by, and show, access time
! ;; with -l: show access time and sort by name
! ;; otherwise: sort by access time
! ;; -w, --width=COLS assume screen width instead of current value
! ;; --version output version information and exit
!
! ;; By default, color is not used to distinguish types of files. That is
! ;; equivalent to using --color=none. Using the --color option without the
! ;; optional WHEN argument is equivalent to using --color=always. With
! ;; --color=auto, color codes are output only if standard output is connected
! ;; to a terminal (tty).
!
! ;; Report bugs to <address@hidden>.
!
;; setup some defaults, based on what the user selected
(unless block-size
(setq block-size eshell-ls-default-blocksize))
(unless listing-style
(setq listing-style 'by-columns))
+ (when (eq -1 human-readable)
+ (message "%s" (concat "ls: Warning: the meaning of -H will change "
+ "in the future to conform to POSIX.\n"
+ "Use --si for the old meaning."))
+ (setq human-readable 1000))
+ (when indicator-style
+ ; (set-text-properties 0 (length indicator-style) nil indicator-style))
+ (cond
+ ((string= "classify" indicator-style)
+ (setq indicator-style 'classify))
+ ((string= "file-type" indicator-style)
+ (setq indicator-style 'file-type))
+ ((string= "none" indicator-style)
+ (setq indicator-style nil))
+ (t
+ (error (concat
+ (format "ls: invalid argument `%s' for `--indicator-style'\n"
indicator-style)
+ "Valid arguments are:\n"
+ " - `none'\n"
+ " - `classify'\n"
+ " - `file-type'\n"
+ "Try `ls --help' for more information.\n" )))))
+
(unless args
(setq args (list ".")))
+ (when show-full-time
+ (setq listing-style 'long-listing))
+
(let ((eshell-ls-exclude-regexp eshell-ls-exclude-regexp) ange-cache)
! (when ignore-backups ; `-B' parameter
! (setq eshell-ls-exclude-regexp
! (if eshell-ls-exclude-regexp
! (concat "\\(" eshell-ls-exclude-regexp "\\|"
! eshell-ls-backup-regexp "\\)")
! eshell-ls-backup-regexp)))
!
! (when ignore-pattern ; `-I' parameter
(unless (eshell-using-module 'eshell-glob)
(error (concat "-I option requires that `eshell-glob'"
" be a member of `eshell-modules-list'")))
***************
*** 457,463 ****
(if show-size
(concat (eshell-ls-size-string attrs size-width) " "))
(format
! "%s%4d %-8s %-8s "
(or (nth 8 attrs) "??????????")
(or (nth 1 attrs) 0)
(or (let ((user (nth 2 attrs)))
--- 566,572 ----
(if show-size
(concat (eshell-ls-size-string attrs size-width) " "))
(format
! "%s%5d %-8s %-8s "
(or (nth 8 attrs) "??????????")
(or (nth 1 attrs) 0)
(or (let ((user (nth 2 attrs)))
***************
*** 484,502 ****
(concat (make-string (- 8 len) ? ) str)
str))
" " (format-time-string
! (concat
! "%b %e "
! (if (= (nth 5 (decode-time (current-time)))
! (nth 5 (decode-time
! (nth (cond
! ((eq sort-method 'by-atime) 4)
! ((eq sort-method 'by-ctime) 6)
! (t 5)) attrs))))
! "%H:%M"
! " %Y")) (nth (cond
! ((eq sort-method 'by-atime) 4)
! ((eq sort-method 'by-ctime) 6)
! (t 5)) attrs)) " ")))
(funcall insert-func line file "\n"))))))
(defun eshell-ls-dir (dirinfo &optional insert-name root-dir size-width)
--- 593,613 ----
(concat (make-string (- 8 len) ? ) str)
str))
" " (format-time-string
! (if show-full-time
! "%a %b %d %T %Y"
! (concat
! "%b %e "
! (if (= (nth 5 (decode-time (current-time)))
! (nth 5 (decode-time
! (nth (cond
! ((eq sort-method 'by-atime) 4)
! ((eq sort-method 'by-ctime) 6)
! (t 5)) attrs))))
! "%H:%M"
! " %Y"))) (nth (cond
! ((eq sort-method 'by-atime) 4)
! ((eq sort-method 'by-ctime) 6)
! (t 5)) attrs)) " ")))
(funcall insert-func line file "\n"))))))
(defun eshell-ls-dir (dirinfo &optional insert-name root-dir size-width)
***************
*** 518,526 ****
(expand-file-name dir)))
(cdr dirinfo))) ":\n"))
(let ((entries (eshell-directory-files-and-attributes
! dir nil (and (not show-all)
! eshell-ls-exclude-hidden
! "\\`[^.]") t)))
(when (and (not show-all) eshell-ls-exclude-regexp)
(while (and entries (string-match eshell-ls-exclude-regexp
(caar entries)))
--- 629,642 ----
(expand-file-name dir)))
(cdr dirinfo))) ":\n"))
(let ((entries (eshell-directory-files-and-attributes
! dir nil
! (or
! (and (eq show-all 'almost)
! "^\\(....*\\|.[^.]\\)$")
! (and (not (eq show-all 'all))
! eshell-ls-exclude-hidden
! "\\`[^.]"))
! t)))
(when (and (not show-all) eshell-ls-exclude-regexp)
(while (and entries (string-match eshell-ls-exclude-regexp
(caar entries)))
***************
*** 584,591 ****
(eshell-ls-compare-entries l r 5 'eshell-time-less-p))
((eq sort-method 'by-ctime)
(eshell-ls-compare-entries l r 6 'eshell-time-less-p))
- ((eq sort-method 'by-size)
- (eshell-ls-compare-entries l r 7 '<))
((eq sort-method 'by-extension)
(let ((lx (file-name-extension
(directory-file-name (car l))))
--- 700,705 ----
***************
*** 600,608 ****
((not rx) nil)
(t
(string-lessp lx rx)))))
! (t
(string-lessp (directory-file-name (car l))
! (directory-file-name (car r)))))))
(if reverse-list
(not result)
result)))))))
--- 714,736 ----
((not rx) nil)
(t
(string-lessp lx rx)))))
! ((eq sort-method 'by-size)
! (eshell-ls-compare-entries l r 7 '<))
! ((eq sort-method 'by-version)
(string-lessp (directory-file-name (car l))
! (directory-file-name (car r))))
!
! (t
! (let* ((dir-l (directory-file-name (car l)))
! (lx (if (= (aref dir-l 0) ?.)
! (substring dir-l 1)
! dir-l))
! (dir-r (directory-file-name (car r)))
! (rx (if (= (aref dir-r 0) ?.)
! (substring dir-r 1)
! dir-r)))
! (string-lessp lx rx))))))
!
(if reverse-list
(not result)
result)))))))
***************
*** 843,900 ****
(defun eshell-ls-decorated-name (file)
"Return FILE, possibly decorated.
Use TRUENAME for predicate tests, if passed."
! (if eshell-ls-use-colors
! (let ((face
! (cond
! ((not (cdr file))
! 'eshell-ls-missing-face)
!
! ((stringp (cadr file))
! 'eshell-ls-symlink-face)
!
! ((eq (cadr file) t)
! 'eshell-ls-directory-face)
!
! ((not (eshell-ls-filetype-p (cdr file) ?-))
! 'eshell-ls-special-face)
!
! ((and (/= (user-uid) 0) ; root can execute anything
! (eshell-ls-applicable (cdr file) 3
! 'file-executable-p (car file)))
! 'eshell-ls-executable-face)
!
! ((not (eshell-ls-applicable (cdr file) 1
! 'file-readable-p (car file)))
! 'eshell-ls-unreadable-face)
!
! ((string-match eshell-ls-archive-regexp (car file))
! 'eshell-ls-archive-face)
!
! ((string-match eshell-ls-backup-regexp (car file))
! 'eshell-ls-backup-face)
!
! ((string-match eshell-ls-product-regexp (car file))
! 'eshell-ls-product-face)
!
! ((string-match eshell-ls-clutter-regexp (car file))
! 'eshell-ls-clutter-face)
!
! ((not (eshell-ls-applicable (cdr file) 2
! 'file-writable-p (car file)))
! 'eshell-ls-readonly-face)
! (eshell-ls-highlight-alist
! (let ((tests eshell-ls-highlight-alist)
! value)
! (while tests
! (if (funcall (caar tests) (car file) (cdr file))
! (setq value (cdar tests) tests nil)
! (setq tests (cdr tests))))
! value)))))
! (if face
! (add-text-properties 0 (length (car file))
! (list 'face face)
! (car file)))))
! (car file))
;;; Code:
--- 971,1075 ----
(defun eshell-ls-decorated-name (file)
"Return FILE, possibly decorated.
Use TRUENAME for predicate tests, if passed."
! (let ((classify-indicator
! (when (and
! (cdr file)
! (or
! (eq indicator-style 'classify)
! (eq indicator-style 'file-type)))
! (cond
! ((stringp (cadr file))
! (if (not (eq listing-style 'long-listing)) ;avoid showing
`@' in long listing
! "@")) ;symlinks
!
! ((eq (cadr file) t)
! "/") ;directory
!
! ((and (stringp (car (nthcdr 9 file)))
! (string-match "p" (substring (car (nthcdr 9 file)) 0 1)))
! "|") ;FIFO
! ((and (stringp (car (nthcdr 9 file)))
! (string-match "s" (substring (car (nthcdr 9 file)) 0 1)))
! "=") ;socket
!
! ((and (/= (user-uid) 0)
! (not (eq indicator-style 'file-type)) ;inhibith * in -p
! (eshell-ls-applicable (cdr file) 3
! 'file-executable-p (car file)))
! "*")))) ;executable
!
! (face
! (when eshell-ls-use-colors
! (cond
! ((not (cdr file))
! 'eshell-ls-missing-face)
!
! ((stringp (cadr file))
! (if (file-exists-p (cadr file))
! 'eshell-ls-symlink-face
! 'eshell-ls-broken-symlink-face))
!
! ((eq (cadr file) t)
! 'eshell-ls-directory-face)
!
! ((not (eshell-ls-filetype-p (cdr file) ?-))
! (cond
! ((and (stringp (car (nthcdr 9 file)))
! (string-match "p" (substring (car (nthcdr 9 file)) 0 1)))
! 'eshell-ls-fifo-face)
! ((and (stringp (car (nthcdr 9 file)))
! (string-match "s" (substring (car (nthcdr 9 file)) 0
1)))
! 'eshell-ls-socket-face)
! (t
! 'eshell-ls-special-face)))
!
! ((and (/= (user-uid) 0) ; root can execute anything
! (eshell-ls-applicable (cdr file) 3
! 'file-executable-p (car file)))
! 'eshell-ls-executable-face)
!
! ((not (eshell-ls-applicable (cdr file) 1
! 'file-readable-p (car file)))
! 'eshell-ls-unreadable-face)
!
! ((string-match eshell-ls-archive-regexp (car file))
! 'eshell-ls-archive-face)
!
! ((string-match eshell-ls-backup-regexp (car file))
! 'eshell-ls-backup-face)
!
! ((string-match eshell-ls-product-regexp (car file))
! 'eshell-ls-product-face)
!
! ((string-match eshell-ls-clutter-regexp (car file))
! 'eshell-ls-clutter-face)
!
! ((if eshell-ls-highlight-alist
! (let ((tests eshell-ls-highlight-alist)
! value)
! (while tests
! (if (funcall (caar tests) (car file) (cdr file))
! (setq value (cdar tests) tests nil)
! (setq tests (cdr tests))))
! value)))
!
! ;; this should be the last evaluation, even after user defined
alist.
! ((not (eshell-ls-applicable (cdr file) 2
! 'file-writable-p (car file)))
! 'eshell-ls-readonly-face)))))
!
! (when (and face (not (get-text-property 0 'classify-indicator (car
file))))
! (add-text-properties 0 (length (car file))
! (list 'face face)
! (car file)))
!
! (when (and classify-indicator (not (get-text-property 0
'classify-indicator (car file))))
! (setcar file (concat (car file) classify-indicator))
! (add-text-properties 0 (length (car file))
! (list 'classify-indicator t)
! (car file))))
!
! (car file))
;;; Code:
- [Emacs-diffs] Changes to emacs/lisp/eshell/em-ls.el,
John Wiegley <=