From: Michal Schmidt Date: Mon, 12 Nov 2012 21:27:48 +0000 (+0100) Subject: util: nicer tree drawings X-Git-Tag: v196~102 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=45a5ff0de744bc73a0695e61f749ee983ef97b64 util: nicer tree drawings Draw trees more similar to pstree/findmnt/lsblk/... --- diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c index 172c75d82..d113ec3e4 100644 --- a/src/login/sysfs-show.c +++ b/src/login/sysfs-show.c @@ -105,8 +105,8 @@ static int show_sysfs_one( } k = ellipsize(sysfs, n_columns, 20); - printf("%s%s %s\n", prefix, draw_special_char(lookahead ? DRAW_BOX_VERT_AND_RIGHT : DRAW_BOX_UP_AND_RIGHT), - k ? k : sysfs); + printf("%s%s%s\n", prefix, draw_special_char(lookahead ? DRAW_TREE_BRANCH : DRAW_TREE_RIGHT), + k ? k : sysfs); free(k); if (asprintf(&l, @@ -118,8 +118,8 @@ static int show_sysfs_one( } k = ellipsize(l, n_columns, 70); - printf("%s%s %s\n", prefix, lookahead ? draw_special_char(DRAW_BOX_VERT) : " ", - k ? k : l); + printf("%s%s%s\n", prefix, lookahead ? draw_special_char(DRAW_TREE_VERT) : " ", + k ? k : l); free(k); free(l); @@ -127,7 +127,7 @@ static int show_sysfs_one( if (*item) { char *p; - p = strjoin(prefix, lookahead ? draw_special_char(DRAW_BOX_VERT) : " ", " ", NULL); + p = strappend(prefix, lookahead ? draw_special_char(DRAW_TREE_VERT) : " "); show_sysfs_one(udev, seat, item, sysfs, p ? p : prefix, n_columns - 2); free(p); } diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index 69fe7fc96..437d09711 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -86,10 +86,10 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi get_process_cmdline(pids[i], n_columns, true, &t); - printf("%s%s %*lu %s\n", + printf("%s%s%*lu %s\n", prefix, draw_special_char(extra ? DRAW_TRIANGULAR_BULLET : - ((more || i < n_pids-1) ? DRAW_BOX_VERT_AND_RIGHT : DRAW_BOX_UP_AND_RIGHT)), + ((more || i < n_pids-1) ? DRAW_TREE_BRANCH : DRAW_TREE_RIGHT)), pid_width, (unsigned long) pids[i], strna(t)); @@ -208,11 +208,11 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns } if (last) { - printf("%s%s %s\n", prefix, draw_special_char(DRAW_BOX_VERT_AND_RIGHT), - path_get_file_name(last)); + printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_BRANCH), + path_get_file_name(last)); if (!p1) { - p1 = strjoin(prefix, draw_special_char(DRAW_BOX_VERT), " ", NULL); + p1 = strappend(prefix, draw_special_char(DRAW_TREE_VERT)); if (!p1) { free(k); r = -ENOMEM; @@ -234,8 +234,8 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads); if (last) { - printf("%s%s %s\n", prefix, draw_special_char(DRAW_BOX_UP_AND_RIGHT), - path_get_file_name(last)); + printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT), + path_get_file_name(last)); if (!p2) { p2 = strappend(prefix, " "); diff --git a/src/shared/util.c b/src/shared/util.c index 99836953b..5a326ec43 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -6148,16 +6148,16 @@ out: const char *draw_special_char(DrawSpecialChar ch) { static const char *draw_table[2][_DRAW_SPECIAL_CHAR_MAX] = { /* UTF-8 */ { - [DRAW_BOX_VERT] = "\342\224\202", /* │ */ - [DRAW_BOX_VERT_AND_RIGHT] = "\342\224\234", /* ├ */ - [DRAW_BOX_UP_AND_RIGHT] = "\342\224\224", /* └ */ - [DRAW_TRIANGULAR_BULLET] = "\342\200\243", /* ‣ */ + [DRAW_TREE_VERT] = "\342\224\202 ", /* │ */ + [DRAW_TREE_BRANCH] = "\342\224\234\342\224\200", /* ├─ */ + [DRAW_TREE_RIGHT] = "\342\224\224\342\224\200", /* └─ */ + [DRAW_TRIANGULAR_BULLET] = "\342\200\243 ", /* ‣ */ }, /* ASCII fallback */ { - [DRAW_BOX_VERT] = "|", - [DRAW_BOX_VERT_AND_RIGHT] = "+", - [DRAW_BOX_UP_AND_RIGHT] = "\\", - [DRAW_TRIANGULAR_BULLET] = ">", + [DRAW_TREE_VERT] = "| ", + [DRAW_TREE_BRANCH] = "|-", + [DRAW_TREE_RIGHT] = "`-", + [DRAW_TRIANGULAR_BULLET] = "> ", } }; diff --git a/src/shared/util.h b/src/shared/util.h index 99972cc63..c2bed2a84 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -604,9 +604,9 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, bool is_locale_utf8(void); typedef enum DrawSpecialChar { - DRAW_BOX_VERT, - DRAW_BOX_VERT_AND_RIGHT, - DRAW_BOX_UP_AND_RIGHT, + DRAW_TREE_VERT, + DRAW_TREE_BRANCH, + DRAW_TREE_RIGHT, DRAW_TRIANGULAR_BULLET, _DRAW_SPECIAL_CHAR_MAX } DrawSpecialChar;