]> code.delx.au - gnu-emacs/blobdiff - lisp/eshell/em-ls.el
Merge from emacs-24; up to 2012-12-17T11:17:34Z!rgm@gnu.org
[gnu-emacs] / lisp / eshell / em-ls.el
index 2dd92ba35300c6df3ca1a0142b8563f5449504c8..73ed617b871d493d668c05e2fa448c3c03f33a56 100644 (file)
@@ -1,6 +1,6 @@
 ;;; em-ls.el --- implementation of ls in Lisp
 
-;; Copyright (C) 1999-201 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2013 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -26,9 +26,8 @@
 
 ;;; Code:
 
-(eval-when-compile
-  (require 'cl-lib)
-  (require 'eshell))
+(eval-when-compile (require 'eshell))
+(require 'cl-lib)
 (require 'esh-util)
 (require 'esh-opt)
 
@@ -328,6 +327,7 @@ instead."
 (defvar numeric-uid-gid)
 (defvar reverse-list)
 (defvar show-all)
+(defvar show-almost-all)
 (defvar show-recursive)
 (defvar show-size)
 (defvar sort-method)
@@ -337,13 +337,15 @@ instead."
 (defun eshell-do-ls (&rest args)
   "Implementation of \"ls\" in Lisp, passing ARGS."
   (funcall flush-func -1)
-  ;; process the command arguments, and begin listing files
+  ;; Process the command arguments, and begin listing files.
   (eshell-eval-using-options
    "ls" (if eshell-ls-initial-args
            (list eshell-ls-initial-args args)
          args)
    `((?a "all" nil show-all
-        "show all files in directory")
+        "do not ignore entries starting with .")
+     (?A "almost-all" nil show-almost-all
+        "do not list implied . and ..")
      (?c nil by-ctime sort-method
         "sort by last status change time")
      (?d "directory" nil dir-literal
@@ -558,7 +560,15 @@ relative to that directory."
                                     ;; later when we are going to
                                     ;; display user and group names.
                                     (if numeric-uid-gid 'integer 'string))))
-         (when (and (not show-all) eshell-ls-exclude-regexp)
+          (when (and show-almost-all
+                     (not show-all))
+            (setq entries
+                  (cl-remove-if
+                   (lambda (entry)
+                     (member (caar entry) '("." "..")))
+                   entries)))
+         (when (and (not show-all)
+                     eshell-ls-exclude-regexp)
            (while (and entries (string-match eshell-ls-exclude-regexp
                                              (caar entries)))
              (setq entries (cdr entries)))