mirror of
https://github.com/jarun/nnn.git
synced 2024-12-01 02:49:44 +00:00
Support file colors in detail mode
This commit is contained in:
parent
42fd2a4d13
commit
ef2d5a54d2
57
src/nnn.c
57
src/nnn.c
|
@ -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));
|
||||||
|
|
Loading…
Reference in a new issue