Subject: bug#6381: [PATCH] Add digit grouping option for file sizes in "ls"

From: Sam Bobroff <[email-masked]>
Date: Wed, 09 Jun 2010 14:05:29 +1000

Hello,

Please excuse me if I'm not going about this the right way but I would
like to offer a tiny patch for "ls" that adds an option to turn on digit
grouping for file sizes in the long output format.

(The support for displaying digit grouping is already present, all that
is required is an option for turning it on.)

I find it a very nice way to view file sizes because it makes it easy to
read the size of large files (like -h) but it does not hide any
information (unlike -h).

For example:

$ ls -l bigfile
-rw-r--r-- 1 samb samb 2146034154 2010-06-08 14:55 big.log

$ ls -ly bigfile
-rw-r--r-- 1 samb samb 2,146,034,154 2010-06-08 14:55 big.log

(The patch is against the latest git checkout but I have only actually
compiled it against the latest .tar release due to dependencies.)

Peace out,
Sam Bobroff.
diff --git a/src/ls.c b/src/ls.c
index 9549130..e5b772f 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -836,6 +836,7 @@ static struct option const long_options[] =
   {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
   {"context", no_argument, 0, 'Z'},
   {"author", no_argument, NULL, AUTHOR_OPTION},
+  {"digit-group", no_argument, NULL, 'y'},
   {GETOPT_HELP_OPTION_DECL},
   {GETOPT_VERSION_OPTION_DECL},
   {NULL, 0, NULL, 0}
@@ -1639,7 +1640,7 @@ decode_switches (int argc, char **argv)
     {
       int oi = -1;
       int c = getopt_long (argc, argv,
-                           "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",
+                           "abcdfghiklmnopqrstuvw:xyABCDFGHI:LNQRST:UXZ1",
                            long_options, &oi);
       if (c == -1)
         break;
@@ -1760,6 +1761,10 @@ decode_switches (int argc, char **argv)
           format = horizontal;
           break;
 
+        case 'y':
+          human_output_opts = human_group_digits;
+          break;
+
         case 'A':
           if (ignore_mode == IGNORE_DEFAULT)
             ignore_mode = IGNORE_DOT_AND_DOTDOT;
@@ -4708,6 +4713,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
   -w, --width=COLS           assume screen width instead of current value\n\
   -x                         list entries by lines instead of by columns\n\
   -X                         sort alphabetically by entry extension\n\
+  -y, --digit-group          with -l, group digits of file size\n\
+
   -Z, --context              print any SELinux security context of each file\n\
   -1                         list one file per line\n\
 "), stdout);