diff --git a/misc/auto-completion/bash/nnn-completion.bash b/misc/auto-completion/bash/nnn-completion.bash index d0c80e53..cb2b6f28 100644 --- a/misc/auto-completion/bash/nnn-completion.bash +++ b/misc/auto-completion/bash/nnn-completion.bash @@ -40,6 +40,7 @@ _nnn () -t -T -u + -U -V -w -x diff --git a/misc/auto-completion/fish/nnn.fish b/misc/auto-completion/fish/nnn.fish index d47c72e2..fdd27f89 100644 --- a/misc/auto-completion/fish/nnn.fish +++ b/misc/auto-completion/fish/nnn.fish @@ -39,6 +39,7 @@ complete -c nnn -s S -d 'persistent session' complete -c nnn -s t -r -d 'timeout in seconds to lock' complete -c nnn -s T -r -d 'a d e r s t v' complete -c nnn -s u -d 'use selection (no prompt)' +complete -c nnn -s U -d 'show user and group' complete -c nnn -s V -d 'show program version and exit' complete -c nnn -s w -d 'hardware cursor mode' complete -c nnn -s x -d 'notis, sel to system clipboard' diff --git a/misc/auto-completion/zsh/_nnn b/misc/auto-completion/zsh/_nnn index 0de2bda9..9a33020c 100644 --- a/misc/auto-completion/zsh/_nnn +++ b/misc/auto-completion/zsh/_nnn @@ -37,6 +37,7 @@ args=( '(-t)-t[timeout to lock]:seconds' '(-T)-T[a d e r s t v]:key' '(-u)-u[use selection (no prompt)]' + '(-U)-U[show user and group]' '(-V)-V[show program version and exit]' '(-w)-C[hardware cursor mode]' '(-x)-x[notis, sel to system clipboard]' diff --git a/nnn.1 b/nnn.1 index a360a527..aed98a5e 100644 --- a/nnn.1 +++ b/nnn.1 @@ -33,6 +33,7 @@ .Op Ar -t secs .Op Ar -T key .Op Ar -u +.Op Ar -U .Op Ar -V .Op Ar -w .Op Ar -x @@ -147,6 +148,9 @@ supports the following options: .Fl u use selection if available, don't prompt to choose between selection and hovered entry .Pp +.Fl U + show user and group names in status bar +.Pp .Fl V show version and exit .Pp diff --git a/src/nnn.c b/src/nnn.c index 5331dfd7..65e23905 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -99,6 +99,8 @@ #endif #include #include +#include +#include #if !defined(alloca) && defined(__GNUC__) /* @@ -250,6 +252,8 @@ typedef struct entry { off_t size; blkcnt_t blocks; /* number of 512B blocks allocated */ mode_t mode; + uid_t uid; + gid_t gid; ushort nlen; /* Length of file name */ uchar flags; /* Flags specific to the file */ } *pEntry; @@ -325,7 +329,8 @@ typedef struct { uint oldcolor : 1; /* Use older colorscheme */ uint stayonsel : 1; /* Disable auto-proceed on select */ uint dirctx : 1; /* Show dirs in context color */ - uint reserved : 11; /* Adjust when adding/removing a field */ + uint uidgid : 1; /* Show owner and group info */ + uint reserved : 10; /* Adjust when adding/removing a field */ } runstate; /* Contexts or workspaces */ @@ -5098,6 +5103,9 @@ static int dentfill(char *path, struct entry **ppdents) dentp->mode = sb.st_mode; dentp->size = sb.st_size; #endif + dentp->uid = sb.st_uid; + dentp->gid = sb.st_gid; + dentp->flags = S_ISDIR(sb.st_mode) ? 0 : ((sb.st_nlink > 1) ? HARD_LINK : 0); if (entflags) { dentp->flags |= entflags; @@ -5570,6 +5578,22 @@ static void statusbar(char *path) addch(' '); addstr(get_lsperms(pent->mode)); addch(' '); + if (g_state.uidgid) { + struct passwd *pw = getpwuid(pent->uid); + struct group *gr = getgrgid(pent->gid); + + if (pw) + addstr(pw->pw_name); + else + addch('-'); + addch(' '); + + if (gr) + addstr(gr->gr_name); + else + addch('-'); + addch(' '); + } addstr(coolsize(pent->size)); addch(' '); addstr(ptr); @@ -7333,6 +7357,7 @@ static void usage(void) " -t secs timeout to lock\n" " -T key sort order [a/d/e/r/s/t/v]\n" " -u use selection (no prompt)\n" + " -U show user and group\n" " -V show version\n" " -w place HW cursor on hovered\n" " -x notis, sel to system clipboard\n" @@ -7480,7 +7505,7 @@ int main(int argc, char *argv[]) while ((opt = (env_opts_id > 0 ? env_opts[--env_opts_id] - : getopt(argc, argv, "aAb:cCdDeEfFgHJKl:nop:P:QrRs:St:T:uVwxh"))) != -1) { + : getopt(argc, argv, "aAb:cCdDeEfFgHJKl:nop:P:QrRs:St:T:uUVwxh"))) != -1) { switch (opt) { #ifndef NOFIFO case 'a': @@ -7599,6 +7624,9 @@ int main(int argc, char *argv[]) case 'u': cfg.prefersel = 1; break; + case 'U': + g_state.uidgid = 1; + break; case 'V': fprintf(stdout, "%s\n", VERSION); return EXIT_SUCCESS;