-
- if (isatty(STDOUT_FILENO)) {
- if (columns() >= 80+12 || arg_full)
- printf("%-25s %-6s %-12s %-18s %-15s %s\n", "UNIT", "LOAD", "ACTIVE", "SUB", "JOB", "DESCRIPTION");
- else
- printf("%-25s %-6s %-12s %-18s %-15s\n", "UNIT", "LOAD", "ACTIVE", "SUB", "JOB");
- }
-
- for (k = 0; k < c; k++) {
- const char *dot;
- struct unit_info *u = unit_infos+k;
-
- if ((!arg_type || ((dot = strrchr(u->id, '.')) &&
- streq(dot+1, arg_type))) &&
- (arg_all || !(streq(u->active_state, "inactive") || u->following[0]) || u->job_id > 0)) {
- char *e;
- int a = 0, b = 0;
- const char *on_loaded, *off_loaded;
- const char *on_active, *off_active;
-
- if (!streq(u->load_state, "loaded")) {
- on_loaded = ansi_highlight(true);
- off_loaded = ansi_highlight(false);
- } else
- on_loaded = off_loaded = "";
-
- if (streq(u->active_state, "failed")) {
- on_active = ansi_highlight(true);
- off_active = ansi_highlight(false);
- } else
- on_active = off_active = "";
-
- e = arg_full ? NULL : ellipsize(u->id, 25, 33);
-
- printf("%-25s %s%-6s%s %s%-12s %-18s%s%n",
- e ? e : u->id,
- on_loaded, u->load_state, off_loaded,
- on_active, u->active_state, u->sub_state, off_active,
- &a);
-
- free(e);
-
- a -= strlen(on_loaded) + strlen(off_loaded);
- a -= strlen(on_active) + strlen(off_active);
-
- if (u->job_id != 0)
- printf(" %-15s%n", u->job_type, &b);
- else
- b = 1 + 15;
-
- if (a + b + 1 < columns()) {
- if (u->job_id == 0)
- printf(" ");
-
- if (arg_full)
- printf(" %s", u->description);
- else
- printf(" %.*s", columns() - a - b - 1, u->description);
- }
-
- fputs("\n", stdout);
- }
- }
-
- if (isatty(STDOUT_FILENO)) {
-
- printf("\nLOAD = Reflects whether the unit definition was properly loaded.\n"
- "ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n"
- "SUB = The low-level unit activation state, values depend on unit type.\n"
- "JOB = Pending job for the unit.\n");
-
- if (arg_all)
- printf("\n%u units listed.\n", c);
- else
- printf("\n%u units listed. Pass --all to see inactive units, too.\n", c);
- }