[systemd-devel] [PATCH] Move path to the right to mitigate alignment issues with untruncated paths. Add --full option (like systemctl) to skip all truncation.

David Strauss david at davidstrauss.net
Wed Jul 25 17:55:58 PDT 2012


Sorry, looks like I stacked this on my other batch-friendliness
patches. Happy to re-roll if that's an issue.

On Wed, Jul 25, 2012 at 5:54 PM,  <david at davidstrauss.net> wrote:
> From: David Strauss <david at davidstrauss.net>
>
> ---
>  src/cgtop/cgtop.c | 35 ++++++++++++++++++++++++-----------
>  1 file changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
> index b4454c54..c3d2a28 100644
> --- a/src/cgtop/cgtop.c
> +++ b/src/cgtop/cgtop.c
> @@ -67,6 +67,7 @@ static enum {
>  } arg_order = ORDER_CPU;
>
>  bool arg_batch = false;
> +bool arg_full = false;
>
>  static void group_free(Group *g) {
>          assert(g);
> @@ -447,13 +448,13 @@ static int display(Hashmap *a) {
>          if (rows <= 0)
>                  rows = 25;
>
> -        printf("%s%-37s%s %s%7s%s %s%6s%s %s%8s%s %s%8s%s %s%8s%s\n\n",
> -               arg_order == ORDER_PATH   ? ANSI_HIGHLIGHT_ON : "", "Path",     arg_order == ORDER_PATH   ? ANSI_HIGHLIGHT_OFF : "",
> +        printf("%s%7s%s %s%6s%s %s%8s%s %s%8s%s %s%8s%s %s%-37s%s\n\n",
>                 arg_order == ORDER_TASKS  ? ANSI_HIGHLIGHT_ON : "", "Tasks",    arg_order == ORDER_TASKS  ? ANSI_HIGHLIGHT_OFF : "",
>                 arg_order == ORDER_CPU    ? ANSI_HIGHLIGHT_ON : "", "%CPU",     arg_order == ORDER_CPU    ? ANSI_HIGHLIGHT_OFF : "",
>                 arg_order == ORDER_MEMORY ? ANSI_HIGHLIGHT_ON : "", "Memory",   arg_order == ORDER_MEMORY ? ANSI_HIGHLIGHT_OFF : "",
>                 arg_order == ORDER_IO     ? ANSI_HIGHLIGHT_ON : "", "Input/s",  arg_order == ORDER_IO     ? ANSI_HIGHLIGHT_OFF : "",
> -               arg_order == ORDER_IO     ? ANSI_HIGHLIGHT_ON : "", "Output/s", arg_order == ORDER_IO     ? ANSI_HIGHLIGHT_OFF : "");
> +               arg_order == ORDER_IO     ? ANSI_HIGHLIGHT_ON : "", "Output/s", arg_order == ORDER_IO     ? ANSI_HIGHLIGHT_OFF : "",
> +               arg_order == ORDER_PATH   ? ANSI_HIGHLIGHT_ON : "", "Path",     arg_order == ORDER_PATH   ? ANSI_HIGHLIGHT_OFF : "");
>
>          for (j = 0; j < n; j++) {
>                  char *p;
> @@ -464,14 +465,10 @@ static int display(Hashmap *a) {
>
>                  g = array[j];
>
> -                p = ellipsize(g->path, 37, 33);
> -                printf("%-37s", p ? p : g->path);
> -                free(p);
> -
>                  if (g->n_tasks_valid)
> -                        printf(" %7u", g->n_tasks);
> +                        printf("%7u", g->n_tasks);
>                  else
> -                        fputs("       -", stdout);
> +                        fputs("      -", stdout);
>
>                  if (g->cpu_valid)
>                          printf(" %6.1f", g->cpu_fraction*100);
> @@ -491,6 +488,15 @@ static int display(Hashmap *a) {
>                  } else
>                          fputs("        -        -", stdout);
>
> +                if (arg_full) {
> +                        printf(" %s", g->path);
> +                }
> +                else {
> +                        p = ellipsize(g->path, 37, 33);
> +                        printf(" %-37s", p ? p : g->path);
> +                        free(p);
> +                }
> +
>                  putchar('\n');
>          }
>
> @@ -510,14 +516,16 @@ static void help(void) {
>                 "  -d --delay=DELAY    Specify delay\n"
>                 "  -n --iterations=N   Run for N iterations before exiting\n"
>                 "  -b --batch          Run in batch mode, accepting no input\n"
> -               "     --depth=DEPTH    Maximum traversal depth (default: 2)\n",
> +               "     --depth=DEPTH    Maximum traversal depth (default: 2)\n"
> +               "     --full           Don't ellipsize paths on output\n",
>                 program_invocation_short_name);
>  }
>
>  static int parse_argv(int argc, char *argv[]) {
>
>          enum {
> -                ARG_DEPTH = 0x100
> +                ARG_DEPTH = 0x100,
> +                ARG_FULL  = 0x101
>          };
>
>          static const struct option options[] = {
> @@ -525,6 +533,7 @@ static int parse_argv(int argc, char *argv[]) {
>                  { "delay",      required_argument, NULL, 'd'       },
>                  { "iterations", required_argument, NULL, 'n'       },
>                  { "batch",      no_argument,       NULL, 'b'       },
> +                { "full",       no_argument,       NULL, ARG_FULL  },
>                  { "depth",      required_argument, NULL, ARG_DEPTH },
>                  { NULL,         0,                 NULL, 0         }
>          };
> @@ -570,6 +579,10 @@ static int parse_argv(int argc, char *argv[]) {
>
>                          break;
>
> +                case ARG_FULL:
> +                        arg_full = true;
> +                        break;
> +
>                  case 'b':
>                          arg_batch = true;
>                          break;
> --
> 1.7.11.2
>



-- 
David Strauss
   | david at davidstrauss.net
   | +1 512 577 5827 [mobile]


More information about the systemd-devel mailing list