diff lisp/ls-lisp.el @ 50767:5e248d2a95e7

(ls-lisp-format-file-size): New function to implement "-h" switch. (ls-lisp-format): Use it.
author Juanma Barranquero <lekktu@gmail.com>
date Thu, 01 May 2003 11:16:21 +0000
parents 850f7b918635
children 01a94a546935
line wrap: on
line diff
--- a/lisp/ls-lisp.el	Thu May 01 04:39:07 2003 +0000
+++ b/lisp/ls-lisp.el	Thu May 01 11:16:21 2003 +0000
@@ -65,6 +65,8 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+
 (defgroup ls-lisp nil
   "Emulate the ls program completely in Emacs Lisp."
   :version "21.1"
@@ -533,7 +535,7 @@
 			(if group
 			    (format " %-8s" group)
 			  (format " %-8d" gid))))))
-	    (format (if (floatp file-size) " %8.0f" " %8d") file-size)
+	    (ls-lisp-format-file-size file-size (memq ?h switches))
 	    " "
 	    (ls-lisp-format-time file-attr time-index now)
 	    " "
@@ -587,6 +589,15 @@
 	   time))
       (error "Unk  0  0000"))))
 
+(defun ls-lisp-format-file-size (file-size human-readable)
+  (if (or (not human-readable)
+          (< file-size 1024))
+      (format (if (floatp file-size) " %8.0f" " %8d") file-size)
+    (do ((file-size (/ file-size 1024.0) (/ file-size 1024.0))
+         ;; kilo, mega, giga, tera, peta, exa
+         (post-fixes (list "k" "M" "G" "T" "P" "E") (cdr post-fixes)))
+        ((< file-size 1024) (format " %7.0f%s"  file-size (car post-fixes))))))
+
 (provide 'ls-lisp)
 
 ;;; ls-lisp.el ends here