bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PATCH: df alignment with -mP


From: Paul Eggert
Subject: Re: PATCH: df alignment with -mP
Date: Mon, 21 Aug 2006 21:02:19 -0700
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

"Gustavo G. Rondina" <address@hidden> writes:

> The usage of some options (e.g., -mP) causes a bad column alignment.

Thanks for the patch.  I agree it would be better to remove all the
magic numbers -- df should align its columns automatically, the way
'ls' does.  In the meantime I installed the following slightly-smaller
patch.

2006-08-21  Paul Eggert  <address@hidden>

        * src/df.c (print_header, show_dev): Use a column width that
        depends on the block size of -P is specified and not autoscaling.
        Problem reported by Gustavo G. Rondina in:
        http://lists.gnu.org/archive/html/bug-coreutils/2006-08/msg00164.html

--- src/df.c    15 Aug 2006 23:41:24 -0000      1.175
+++ src/df.c    22 Aug 2006 03:59:15 -0000      1.176
@@ -163,7 +163,7 @@ print_header (void)
        printf (_("     Size   Used  Avail Use%%"));
     }
   else if (posix_format)
-    printf (_(" %4s-blocks      Used Available Capacity"),
+    printf (_(" %s-blocks      Used Available Capacity"),
            umaxtostr (output_block_size, buf));
   else
     {
@@ -275,6 +275,7 @@ show_dev (char const *disk, char const *
   struct fs_usage fsu;
   char buf[3][LONGEST_HUMAN_READABLE + 2];
   int width;
+  int col1_adjustment = 0;
   int use_width;
   uintmax_t input_units;
   uintmax_t output_units;
@@ -356,9 +357,19 @@ show_dev (char const *disk, char const *
     }
   else
     {
-      width = (human_output_opts & human_autoscale
-              ? 5 + ! (human_output_opts & human_base_1024)
-              : 9);
+      if (human_output_opts & human_autoscale)
+       width = 5 + ! (human_output_opts & human_base_1024);
+      else
+       {
+         width = 9;
+         if (posix_format)
+           {
+             uintmax_t b;
+             col1_adjustment = -3;
+             for (b = output_block_size; 9 < b; b /= 10)
+               col1_adjustment++;
+           }
+       }
       use_width = ((posix_format
                    && ! (human_output_opts & human_autoscale))
                   ? 8 : 4);
@@ -380,8 +391,9 @@ show_dev (char const *disk, char const *
     }
 
   printf (" %*s %*s %*s ",
-         width, df_readable (false, total,
-                             buf[0], input_units, output_units),
+         width + col1_adjustment,
+         df_readable (false, total,
+                      buf[0], input_units, output_units),
          width, df_readable (negate_used, used,
                              buf[1], input_units, output_units),
          width, df_readable (negate_available, available,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]