aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--misc/auto-completion/bash/nnn-completion.bash1
-rw-r--r--misc/auto-completion/fish/nnn.fish1
-rw-r--r--misc/auto-completion/zsh/_nnn1
-rw-r--r--nnn.14
-rw-r--r--src/nnn.c32
5 files changed, 37 insertions, 2 deletions
diff --git a/misc/auto-completion/bash/nnn-completion.bash b/misc/auto-completion/bash/nnn-completion.bash
index d0c80e5..cb2b6f2 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 d47c72e..fdd27f8 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 0de2bda..9a33020 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 a360a52..aed98a5 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 5331dfd..65e2390 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -99,6 +99,8 @@
#endif
#include <ftw.h>
#include <wchar.h>
+#include <pwd.h>
+#include <grp.h>
#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;