|
@@ -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) { |
|
|
|
|
|
pair = C_EXE; |
|
|
|
|
|
ind2 = '*'; |
|
|
|
|
|
} |
|
|
|
|
|
if (ent->flags & HARD_LINK) { |
|
|
|
|
|
pair = C_HRD; |
|
|
ln = TRUE; |
|
|
ln = TRUE; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (ent->mode & 0100) |
|
|
|
|
|
ind2 = '*'; |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
ind1 = ind2 = '='; // fallthrough |
|
|
|
|
|
|
|
|
if (!ind1) { |
|
|
|
|
|
pair = C_SOC; |
|
|
|
|
|
ind1 = ind2 = '='; |
|
|
|
|
|
} // fallthrough |
|
|
case S_IFIFO: |
|
|
case S_IFIFO: |
|
|
if (!ind1) |
|
|
|
|
|
ind1 = ind2 = '|'; // fallthrough |
|
|
|
|
|
|
|
|
if (!ind1) { |
|
|
|
|
|
pair = C_PIP; |
|
|
|
|
|
ind1 = ind2 = '|'; |
|
|
|
|
|
} // fallthrough |
|
|
case S_IFBLK: |
|
|
case S_IFBLK: |
|
|
if (!ind1) |
|
|
|
|
|
ind1 = 'b'; // fallthrough |
|
|
|
|
|
|
|
|
if (!ind1) { |
|
|
|
|
|
pair = C_BLK; |
|
|
|
|
|
ind1 = 'b'; |
|
|
|
|
|
} // fallthrough |
|
|
case S_IFCHR: |
|
|
case S_IFCHR: |
|
|
if (!ind1) |
|
|
|
|
|
ind1 = 'c'; // fallthrough |
|
|
|
|
|
|
|
|
if (!ind1) { |
|
|
|
|
|
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)); |
|
|