--- sacc/sacc.c 2019-04-19 13:19:54.984075003 -0400 +++ clrsacc/sacc.c 2019-04-18 16:49:22.576940854 -0400 @@ -103,6 +103,7 @@ { wchar_t wc; size_t col = 0, i, slen; + char c; int rl, w; if (!len) @@ -110,6 +111,15 @@ slen = strlen(s); for (i = 0; i < slen; i += rl) { + // hacky support for color escape sequences + if (s[i] == '\x1b') { + putchar(s[i++]); + while((c = s[i++]) != 'm') + putchar(c); + putchar('m'); + rl = 0; + continue; + } if ((rl = mbtowc(&wc, s + i, slen - i < 4 ? slen - i : 4)) <= 0) break; if ((w = wcwidth(wc)) == -1) @@ -213,43 +223,44 @@ { switch (t) { case '0': - return "Text+"; + return "\033[37m  "; case '1': - return "Dir +"; + return "\033[34m  "; case '2': - return "CSO |"; + return "CSO │"; case '3': - return "Err |"; + return "\033[31m │"; case '4': - return "Macf+"; + return "  "; case '5': - return "DOSf+"; + return "  "; case '6': - return "UUEf+"; + return "UUE "; case '7': - return "Find+"; + return "\033[33m  "; case '8': - return "Tlnt+"; + return "\033[35m  "; case '9': - return "Binf+"; + return "\033[31m  "; case '+': - return "Mirr+"; + return "Mir "; case 'T': - return "IBMt|"; + return "IBMt│"; case 'g': - return "GIF +"; + return "\033[36m  "; case 'I': - return "Img +"; + return "\033[36m  "; case 'h': - return "HTML+"; + return "\033[32m 爵"; case 'i': - return " |"; + /* return " │"; */ + return " "; default: /* "Characters '0' through 'Z' are reserved." (ASCII) */ if (t >= '0' && t <= 'Z') return "! |"; else - return "UNKN|"; + return "\033[38mUNKN|"; } } --- sacc/ui_ti.c 2019-04-19 13:19:54.984075003 -0400 +++ clrsacc/ui_ti.c 2019-04-18 16:30:46.800987519 -0400 @@ -94,8 +94,27 @@ static void printitem(Item *item) { - if (snprintf(bufout, sizeof(bufout), "%s %s", typedisplay(item->type), - item->username) >= sizeof(bufout)) + const char *style = BOLD, *typestyle; + + switch (item->type) { + case 'i': + style = ""; + typestyle = ""; + break; + /* case '0': */ + /* typestyle = ""; */ + /* break; */ + /* case '1': */ + /* typestyle = ""; */ + /* break; */ + default: + style = BOLD; + typestyle = BOLD; + } + + if (snprintf(bufout, sizeof(bufout), "%s%s " RESET "%s%s" RESET, + typestyle, typedisplay(item->type), style, item->username) + >= sizeof(bufout)) bufout[sizeof(bufout)-1] = '\0'; mbsprint(bufout, columns); putchar('\r'); --- sacc/common.h 2019-04-19 13:19:54.983075003 -0400 +++ clrsacc/common.h 2019-04-18 16:23:08.881006671 -0400 @@ -1,5 +1,10 @@ #define clear(p) do { void **_p = (void **)(p); free(*_p); *_p = NULL; } while (0); +#define CYAN "\x1b[36m" +#define YELLOW "\x1b[33m" +#define BOLD "\x1b[1m" +#define RESET "\x1b[0m" + typedef struct item Item; typedef struct dir Dir;