From 02c02c520d42ac769c3de2a82677fbb2fbd86df4 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sun, 5 Apr 2020 05:53:46 +0530 Subject: [PATCH] Option -C to disable color --- misc/auto-completion/bash/nnn-completion.bash | 1 + misc/auto-completion/fish/nnn.fish | 1 + misc/auto-completion/zsh/_nnn | 1 + nnn.1 | 4 ++ src/nnn.c | 53 +++++++++++-------- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/misc/auto-completion/bash/nnn-completion.bash b/misc/auto-completion/bash/nnn-completion.bash index b498b631..3614e288 100644 --- a/misc/auto-completion/bash/nnn-completion.bash +++ b/misc/auto-completion/bash/nnn-completion.bash @@ -15,6 +15,7 @@ _nnn () -A -b -c + -C -d -e -E diff --git a/misc/auto-completion/fish/nnn.fish b/misc/auto-completion/fish/nnn.fish index 82dfc36f..9dc05f11 100644 --- a/misc/auto-completion/fish/nnn.fish +++ b/misc/auto-completion/fish/nnn.fish @@ -14,6 +14,7 @@ end complete -c nnn -s A -d 'disable dir auto-select' complete -c nnn -s b -r -d 'bookmark key to open' -x -a '(echo $NNN_BMS | awk -F: -v RS=\; \'{print $1"\t"$2}\')' complete -c nnn -s c -d 'cli-only opener' +complete -c nnn -s C -d 'disable color' complete -c nnn -s d -d 'start in detail mode' complete -c nnn -s e -d 'open text files in $VISUAL/$EDITOR/vi' complete -c nnn -s E -d 'use EDITOR for undetached edits' diff --git a/misc/auto-completion/zsh/_nnn b/misc/auto-completion/zsh/_nnn index d40ea684..6da9dea8 100644 --- a/misc/auto-completion/zsh/_nnn +++ b/misc/auto-completion/zsh/_nnn @@ -12,6 +12,7 @@ args=( '(-A)-A[disable dir auto-select]' '(-b)-b[bookmark key to open]:key char' '(-c)-c[cli-only opener]' + '(-C)-C[disable color]' '(-d)-d[start in detail mode]' '(-e)-e[open text files in $VISUAL/$EDITOR/vi]' '(-E)-E[use EDITOR for undetached edits]' diff --git a/nnn.1 b/nnn.1 index 9d99947b..86c879cb 100644 --- a/nnn.1 +++ b/nnn.1 @@ -9,6 +9,7 @@ .Op Ar -A .Op Ar -b key .Op Ar -c +.Op Ar -C .Op Ar -d .Op Ar -e .Op Ar -E @@ -62,6 +63,9 @@ supports the following options: .Fl c opener opens files in cli utilities only (overrides -e) .Pp +.Fl C + disable color +.Pp .Fl d detail mode .Pp diff --git a/src/nnn.c b/src/nnn.c index 71d1c490..090a15c8 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -400,6 +400,7 @@ static char g_pipepath[TMP_LEN_MAX] __attribute__ ((aligned)); #define STATE_TRASH 0x40 #define STATE_FORCEQUIT 0x80 #define STATE_FORTUNE 0x100 +#define STATE_NOCOLOR 0x200 static uint g_states; @@ -1522,18 +1523,21 @@ static bool initcurses(void *oldmask) mouseinterval(0); #endif curs_set(FALSE); /* Hide cursor */ - start_color(); - use_default_colors(); - /* Get and set the context colors */ - for (i = 0; i < CTX_MAX; ++i) { - if (*colors) { - g_ctx[i].color = (*colors < '0' || *colors > '7') ? 4 : *colors - '0'; - ++colors; - } else - g_ctx[i].color = 4; + if (!(g_states & STATE_NOCOLOR)) { + start_color(); + use_default_colors(); - init_pair(i + 1, g_ctx[i].color, -1); + /* Get and set the context colors */ + for (i = 0; i < CTX_MAX; ++i) { + if (*colors) { + g_ctx[i].color = (*colors < '0' || *colors > '7') ? 4 : *colors - '0'; + ++colors; + } else + g_ctx[i].color = 4; + + init_pair(i + 1, g_ctx[i].color, -1); + } } settimeout(); /* One second */ @@ -3206,7 +3210,7 @@ static char get_ind(mode_t mode, bool perms) return '*'; return '\0'; case S_IFDIR: - return perms ? 'd' : '\0'; + return perms ? 'd' : '/'; case S_IFLNK: return perms ? 'l' : '@'; case S_IFSOCK: @@ -3303,16 +3307,19 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel) addch('0' + (ent->mode & 7)); switch (ent->mode & S_IFMT) { - case S_IFREG: - if (ent->flags & HARD_LINK) - ln = TRUE; - - if (ent->mode & 0100) - ind2 = '*'; - // fallthrough case S_IFDIR: - if (!ind2) /* Add a column if end indicator is not needed */ - ++namecols; + ind2 = '/'; // fallthrough + case S_IFREG: + if (!ind2) { + if (ent->flags & HARD_LINK) + ln = TRUE; + + if (ent->mode & 0100) + ind2 = '*'; + + if (!ind2) /* Add a column if end indicator is not needed */ + ++namecols; + } size = coolsize(cfg.blkorder ? ent->blocks << blk_shift : ent->size); len = 10 - (uint)strlen(size); @@ -6577,6 +6584,7 @@ static void usage(void) " -A no dir auto-select\n" " -b key open bookmark key\n" " -c cli-only opener (overrides -e)\n" + " -C disable color\n" " -d detail mode\n" " -e text in $VISUAL/$EDITOR/vi\n" " -E use EDITOR for undetached edits\n" @@ -6748,7 +6756,7 @@ int main(int argc, char *argv[]) while ((opt = (env_opts_id > 0 ? env_opts[--env_opts_id] - : getopt(argc, argv, "Ab:cdeEfFgHKnop:QrRs:St:T:Vxh"))) != -1) { + : getopt(argc, argv, "Ab:cCdeEfFgHKnop:QrRs:St:T:Vxh"))) != -1) { switch (opt) { case 'A': cfg.autoselect = 0; @@ -6759,6 +6767,9 @@ int main(int argc, char *argv[]) case 'c': cfg.cliopener = 1; break; + case 'C': + g_states |= STATE_NOCOLOR; + break; case 'S': cfg.blkorder = 1; nftw_fn = sum_bsize;