aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-09-01 22:54:43 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-09-01 22:58:03 +0530
commit02bb39855008253cdb64b0d8c3b866f952de8f34 (patch)
treeda509b07493398adf23705fe8cce0b23ec88a7f9
parenta8afbf89d56951bafc9038a1db09c74d260dbe6b (diff)
downloadnnn-02bb39855008253cdb64b0d8c3b866f952de8f34.tar.gz
Option -D to show dirs in context color
-rw-r--r--nnn.14
-rw-r--r--src/nnn.c25
2 files changed, 22 insertions, 7 deletions
diff --git a/nnn.1 b/nnn.1
index 9b29db9..af1ea8c 100644
--- a/nnn.1
+++ b/nnn.1
@@ -12,6 +12,7 @@
.Op Ar -c
.Op Ar -C
.Op Ar -d
+.Op Ar -D
.Op Ar -e
.Op Ar -E
.Op Ar -f
@@ -78,6 +79,9 @@ supports the following options:
.Fl d
detail mode
.Pp
+.Fl D
+ show directories in context color with \fBNNN_FCOLORS\fR set
+.Pp
.Fl e
open text files in $VISUAL (else $EDITOR, fallback vi) [preferably CLI]
.Pp
diff --git a/src/nnn.c b/src/nnn.c
index 0791f1e..eb935a6 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -312,9 +312,10 @@ typedef struct {
uint runplugin : 1; /* Choose plugin mode */
uint runctx : 2; /* The context in which plugin is to be run */
uint selmode : 1; /* Set when selecting files */
- uint oldcolor : 1; /* Show dirs in context colors */
- uint reserved : 14;
+ uint oldcolor : 1; /* Use older colorscheme */
uint stayonsel : 1; /* Disable auto-proceed on select */
+ uint dirctx : 1; /* Show dirs in context color */
+ uint reserved : 12;
} runstate;
/* Contexts or workspaces */
@@ -1722,7 +1723,7 @@ static bool initcurses(void *oldmask)
if (ext) {
*pcode = xchartohex(*colors) << 4;
if (*++colors)
- *pcode += xchartohex(*colors);
+ fcolors[i + 1] = *pcode += xchartohex(*colors);
else { /* Each color code must be 2 hex symbols */
exitcurses();
fprintf(stderr, "NNN_COLORS!\n");
@@ -3569,8 +3570,11 @@ static void printent(const struct entry *ent, uint namecols, bool sel)
break;
case S_IFDIR:
pair = C_DIR;
- if (!g_state.oldcolor)
+ if (!g_state.oldcolor) {
attrs |= A_BOLD;
+ if (g_state.dirctx)
+ pair = cfg.curctx + 1;
+ }
ind = '/';
break;
case S_IFLNK:
@@ -3651,7 +3655,7 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel)
bool ln = FALSE;
char ind1 = '\0', ind2 = '\0';
uchar pair = 0;
- int attrs = sel ? A_REVERSE | (g_state.oldcolor ? A_DIM : COLOR_PAIR(C_MIS))
+ int attrs = sel ? (A_REVERSE | (g_state.oldcolor ? A_DIM : COLOR_PAIR(C_MIS)))
: (g_state.oldcolor ? A_DIM : COLOR_PAIR(C_MIS));
uint len;
char *size;
@@ -3677,8 +3681,11 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel)
switch (ent->mode & S_IFMT) {
case S_IFDIR:
pair = C_DIR;
- if (!g_state.oldcolor)
+ if (!g_state.oldcolor) {
attrs |= A_BOLD;
+ if (g_state.dirctx)
+ pair = cfg.curctx + 1;
+ }
ind2 = '/'; // fallthrough
case S_IFREG:
if (!ind2) {
@@ -7249,6 +7256,7 @@ static void usage(void)
" -c cli-only NNN_OPENER (trumps -e)\n"
" -C earlier colorscheme\n"
" -d detail mode\n"
+ " -D dirs in context color\n"
" -e text in $VISUAL/$EDITOR/vi\n"
" -E use EDITOR for undetached edits\n"
#ifndef NORL
@@ -7419,7 +7427,7 @@ int main(int argc, char *argv[])
while ((opt = (env_opts_id > 0
? env_opts[--env_opts_id]
- : getopt(argc, argv, "aAb:cCdeEfFgHJKl:nop:P:QrRs:St:T:uVwxh"))) != -1) {
+ : getopt(argc, argv, "aAb:cCdDeEfFgHJKl:nop:P:QrRs:St:T:uVwxh"))) != -1) {
switch (opt) {
#ifndef NOFIFO
case 'a':
@@ -7443,6 +7451,9 @@ int main(int argc, char *argv[])
cfg.showdetail = 1;
printptr = &printent_long;
break;
+ case 'D':
+ g_state.dirctx = 1;
+ break;
case 'e':
cfg.useeditor = 1;
break;