Support file colors in detail mode

This commit is contained in:
Arun Prakash Jana 2020-08-04 21:02:19 +05:30
parent 42fd2a4d13
commit ef2d5a54d2
No known key found for this signature in database
GPG key ID: A75979F35C080412

View file

@ -3491,6 +3491,7 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel)
{ {
bool ln = FALSE; bool ln = FALSE;
char ind1 = '\0', ind2 = '\0'; char ind1 = '\0', ind2 = '\0';
uchar pair = 0;
int attrs = sel ? A_REVERSE | A_DIM : A_DIM; int attrs = sel ? A_REVERSE | A_DIM : A_DIM;
uint len; uint len;
char *size; char *size;
@ -3515,14 +3516,21 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel)
switch (ent->mode & S_IFMT) { switch (ent->mode & S_IFMT) {
case S_IFDIR: case S_IFDIR:
pair = C_DIR;
ind2 = '/'; // fallthrough ind2 = '/'; // fallthrough
case S_IFREG: case S_IFREG:
if (!ind2) { if (!ind2) {
if (ent->flags & HARD_LINK) if (ent->mode & 0100) {
ln = TRUE; pair = C_EXE;
if (ent->mode & 0100)
ind2 = '*'; ind2 = '*';
}
if (ent->flags & HARD_LINK) {
pair = C_HRD;
ln = TRUE;
}
if (!pair)
pair = C_FIL;
if (!ind2) /* Add a column if end indicator is not needed */ if (!ind2) /* Add a column if end indicator is not needed */
++namecols; ++namecols;
@ -3536,32 +3544,53 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel)
break; break;
case S_IFLNK: case S_IFLNK:
ln = TRUE; ln = TRUE;
pair = (ent->flags & SYM_ORPHAN) ? C_ORP : C_LNK;
ind1 = '@'; ind1 = '@';
ind2 = (ent->flags & DIR_OR_LINK_TO_DIR) ? '/' : '@'; // fallthrough ind2 = (ent->flags & DIR_OR_LINK_TO_DIR) ? '/' : '@'; // fallthrough
case S_IFSOCK: case S_IFSOCK:
if (!ind1) if (!ind1) {
ind1 = ind2 = '='; // fallthrough pair = C_SOC;
ind1 = ind2 = '=';
} // fallthrough
case S_IFIFO: case S_IFIFO:
if (!ind1) if (!ind1) {
ind1 = ind2 = '|'; // fallthrough pair = C_PIP;
ind1 = ind2 = '|';
} // fallthrough
case S_IFBLK: case S_IFBLK:
if (!ind1) if (!ind1) {
ind1 = 'b'; // fallthrough pair = C_BLK;
ind1 = 'b';
} // fallthrough
case S_IFCHR: case S_IFCHR:
if (!ind1) if (!ind1) {
ind1 = 'c'; // fallthrough pair = C_CHR;
ind1 = 'c';
} // fallthrough
default: default:
if (!ind1) if (!ind1) {
pair = C_UND;
ind1 = ind2 = '?'; ind1 = ind2 = '?';
}
addstr(" "); addstr(" ");
addch(ind1); addch(ind1);
break; break;
} }
if (!ent->size && (pair == C_FIL || pair == C_EXE))
pair = C_UND;
else if (ent->flags & FILE_MISSING)
pair = C_MIS;
addstr(" "); addstr(" ");
if (!ln) { if (!(ln && g_state.ctxcolor)) {
attroff(A_DIM); attroff(A_DIM);
attrs ^= A_DIM; attrs ^= A_DIM;
if (!g_state.ctxcolor && pair && fcolors[pair]) {
attrs |= COLOR_PAIR(pair);
attron(COLOR_PAIR(pair));
}
} }
#ifndef NOLOCALE #ifndef NOLOCALE
addwstr(unescape(ent->name, namecols)); addwstr(unescape(ent->name, namecols));