changeset 46852:6eb625bead4f

Removed eshell-under-cygwin-p, and all uses of it.
author John Wiegley <johnw@newartisans.com>
date Sat, 10 Aug 2002 00:18:18 +0000
parents 57dbd7f9adb9
children cb339473da3b
files lisp/eshell/em-cmpl.el lisp/eshell/em-dirs.el lisp/eshell/em-glob.el lisp/eshell/em-hist.el lisp/eshell/em-ls.el lisp/eshell/esh-util.el
diffstat 6 files changed, 267 insertions(+), 100 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/eshell/em-cmpl.el	Sat Aug 10 00:17:41 2002 +0000
+++ b/lisp/eshell/em-cmpl.el	Sat Aug 10 00:18:18 2002 +0000
@@ -142,8 +142,7 @@
   :type (get 'pcomplete-dir-ignore 'custom-type)
   :group 'eshell-cmpl)
 
-(defcustom eshell-cmpl-ignore-case (or (eshell-under-windows-p)
-				       (eshell-under-cygwin-p))
+(defcustom eshell-cmpl-ignore-case (eshell-under-windows-p)
   (documentation-property 'pcomplete-ignore-case
 			  'variable-documentation)
   :type (get 'pcomplete-ignore-case 'custom-type)
--- a/lisp/eshell/em-dirs.el	Sat Aug 10 00:17:41 2002 +0000
+++ b/lisp/eshell/em-dirs.el	Sat Aug 10 00:18:18 2002 +0000
@@ -353,8 +353,7 @@
   (setq args (eshell-flatten-list args))
   (let ((path (car args))
 	(subpath (car (cdr args)))
-	(case-fold-search (or (eshell-under-windows-p)
-			      (eshell-under-cygwin-p)))
+	(case-fold-search (eshell-under-windows-p))
 	handled)
     (if (numberp path)
 	(setq path (number-to-string path)))
--- a/lisp/eshell/em-glob.el	Sat Aug 10 00:17:41 2002 +0000
+++ b/lisp/eshell/em-glob.el	Sat Aug 10 00:18:18 2002 +0000
@@ -76,8 +76,7 @@
   :type 'boolean
   :group 'eshell-glob)
 
-(defcustom eshell-glob-case-insensitive (or (eshell-under-windows-p)
-					    (eshell-under-cygwin-p))
+(defcustom eshell-glob-case-insensitive (eshell-under-windows-p)
   "*If non-nil, glob pattern matching will ignore case."
   :type 'boolean
   :group 'eshell-glob)
--- a/lisp/eshell/em-hist.el	Sat Aug 10 00:17:41 2002 +0000
+++ b/lisp/eshell/em-hist.el	Sat Aug 10 00:18:18 2002 +0000
@@ -805,8 +805,7 @@
 	 (motion (if (> arg 0) 1 -1))
 	 (n (mod (- (or start (eshell-search-start arg)) motion) len))
 	 (tried-each-ring-item nil)
-	 (case-fold-search (or (eshell-under-windows-p)
-			       (eshell-under-cygwin-p)))
+	 (case-fold-search (eshell-under-windows-p))
 	 (prev nil))
     ;; Do the whole search as many times as the argument says.
     (while (and (/= arg 0) (not tried-each-ring-item))
--- a/lisp/eshell/em-ls.el	Sat Aug 10 00:17:41 2002 +0000
+++ b/lisp/eshell/em-ls.el	Sat Aug 10 00:18:18 2002 +0000
@@ -1,8 +1,9 @@
 ;;; em-ls.el --- implementation of ls in Lisp
 
-;; Copyright (C) 1999, 2000 Free Software Foundation
+;; Copyright (C) 1999, 2000, 2001 Free Software Foundation
 
 ;; Author: John Wiegley <johnw@gnu.org>
+;; Modified: Rafael Sepúlveda <drs@gnulinux.org.mx>
 
 ;; This file is part of GNU Emacs.
 
@@ -288,12 +289,16 @@
   (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,63 +312,167 @@
    "ls" (if eshell-ls-initial-args
 	    (list eshell-ls-initial-args args)
 	  args)
-   `((?a "all" nil show-all
-	 "show all files in directory")
+   `((?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
-	 "using 1024 as the block size")
+	 "like --block-size=1024")
      (?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")
+     (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")
-     (?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")
+     (?v nil by-version sort-method
+	 "sort by version")
      (?1 nil single-column listing-style
 	 "list one file per line")
      (nil "help" nil nil
-	  "show this usage display")
+	  "display this help and exit")
      :external "ls"
      :usage "[OPTION]... [FILE]...
 List information about the FILEs (the current directory by default).
-Sort entries alphabetically across.")
+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 <bug-fileutils@gnu.org>.
+
    ;; 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-pattern
+     (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,7 +566,7 @@
 		(if show-size
 		    (concat (eshell-ls-size-string attrs size-width) " "))
 		(format
-		 "%s%4d %-8s %-8s "
+		 "%s%5d %-8s %-8s "
 		 (or (nth 8 attrs) "??????????")
 		 (or (nth 1 attrs) 0)
 		 (or (let ((user (nth 2 attrs)))
@@ -484,19 +593,21 @@
 		      (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)) " ")))
+		     (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,9 +629,14 @@
 			       (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)))
+			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,8 +700,6 @@
 		      (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))))
@@ -600,9 +714,23 @@
 			 ((not rx) nil)
 			 (t
 			  (string-lessp lx rx)))))
-		     (t
+		     ((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)))))))
+				    (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,58 +971,105 @@
 (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)
+      (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
 
-	      ((not (eshell-ls-filetype-p (cdr file) ?-))
-	       'eshell-ls-special-face)
+		 ((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) ; 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)
+		 ((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
 
-	      ((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)
+	     (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)))))
 
-	      ((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))
+	(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:
 
--- a/lisp/eshell/esh-util.el	Sat Aug 10 00:17:41 2002 +0000
+++ b/lisp/eshell/esh-util.el	Sat Aug 10 00:18:18 2002 +0000
@@ -146,10 +146,6 @@
   "Return non-nil if we are running under MS-DOS/Windows."
   (memq system-type '(ms-dos windows-nt)))
 
-(defsubst eshell-under-cygwin-p ()
-  "Return non-nil if we are running under Cygwin."
-  (eq system-type 'cygwin32))
-
 (defmacro eshell-condition-case (tag form &rest handlers)
   "Like `condition-case', but only if `eshell-pass-through-errors' is nil."
   (if eshell-handle-errors