# HG changeset patch # User John Wiegley # Date 1028938698 0 # Node ID 6eb625bead4fc46eddef542a5131006395ba6abc # Parent 57dbd7f9adb98fedbbae2f9773749481973d5c42 Removed eshell-under-cygwin-p, and all uses of it. diff -r 57dbd7f9adb9 -r 6eb625bead4f lisp/eshell/em-cmpl.el --- 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) diff -r 57dbd7f9adb9 -r 6eb625bead4f lisp/eshell/em-dirs.el --- 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))) diff -r 57dbd7f9adb9 -r 6eb625bead4f lisp/eshell/em-glob.el --- 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) diff -r 57dbd7f9adb9 -r 6eb625bead4f lisp/eshell/em-hist.el --- 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)) diff -r 57dbd7f9adb9 -r 6eb625bead4f lisp/eshell/em-ls.el --- 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 +;; Modified: Rafael Sepúlveda ;; 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 . + ;; 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: diff -r 57dbd7f9adb9 -r 6eb625bead4f lisp/eshell/esh-util.el --- 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