}
k = ellipsize(sysfs, n_columns, 20);
- printf("%s%s %s\n", prefix, lookahead ? "\342\224\234" : "\342\224\224", k ? k : sysfs);
+ printf("%s%s %s\n", prefix, draw_special_char(lookahead ? DRAW_BOX_VERT_AND_RIGHT : DRAW_BOX_UP_AND_RIGHT),
+ k ? k : sysfs);
free(k);
if (asprintf(&l,
}
k = ellipsize(l, n_columns, 70);
- printf("%s%s %s\n", prefix, lookahead ? "\342\224\202" : " ", k ? k : l);
+ printf("%s%s %s\n", prefix, lookahead ? draw_special_char(DRAW_BOX_VERT) : " ",
+ k ? k : l);
free(k);
free(l);
if (*item) {
char *p;
- p = strappend(prefix, lookahead ? "\342\224\202 " : " ");
+ p = strjoin(prefix, lookahead ? draw_special_char(DRAW_BOX_VERT) : " ", " ", NULL);
show_sysfs_one(udev, seat, item, sysfs, p ? p : prefix, n_columns - 2);
free(p);
}
printf("%s%s %*lu %s\n",
prefix,
- extra ? "\342\200\243" : ((more || i < n_pids-1) ? "\342\224\234" : "\342\224\224"),
+ draw_special_char(extra ? DRAW_TRIANGULAR_BULLET :
+ ((more || i < n_pids-1) ? DRAW_BOX_VERT_AND_RIGHT : DRAW_BOX_UP_AND_RIGHT)),
pid_width,
(unsigned long) pids[i],
strna(t));
}
if (last) {
- printf("%s\342\224\234 %s\n", prefix, path_get_file_name(last));
+ printf("%s%s %s\n", prefix, draw_special_char(DRAW_BOX_VERT_AND_RIGHT),
+ path_get_file_name(last));
if (!p1) {
- p1 = strappend(prefix, "\342\224\202 ");
+ p1 = strjoin(prefix, draw_special_char(DRAW_BOX_VERT), " ", NULL);
if (!p1) {
free(k);
r = -ENOMEM;
show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads);
if (last) {
- printf("%s\342\224\224 %s\n", prefix, path_get_file_name(last));
+ printf("%s%s %s\n", prefix, draw_special_char(DRAW_BOX_UP_AND_RIGHT),
+ path_get_file_name(last));
if (!p2) {
p2 = strappend(prefix, " ");
out:
return (bool)cached_answer;
}
+
+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", /* ‣ */
+ },
+ /* ASCII fallback */ {
+ [DRAW_BOX_VERT] = "|",
+ [DRAW_BOX_VERT_AND_RIGHT] = "+",
+ [DRAW_BOX_UP_AND_RIGHT] = "\\",
+ [DRAW_TRIANGULAR_BULLET] = ">",
+ }
+ };
+
+ return draw_table[!is_locale_utf8()][ch];
+}
void *arg);
bool is_locale_utf8(void);
+
+typedef enum DrawSpecialChar {
+ DRAW_BOX_VERT,
+ DRAW_BOX_VERT_AND_RIGHT,
+ DRAW_BOX_UP_AND_RIGHT,
+ DRAW_TRIANGULAR_BULLET,
+ _DRAW_SPECIAL_CHAR_MAX
+} DrawSpecialChar;
+const char *draw_special_char(DrawSpecialChar ch);