]> Sergey Matveev's repositories - nnn.git/commitdiff
Option -U to show user and group in status bar
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 31 Oct 2020 15:17:07 +0000 (20:47 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 31 Oct 2020 15:18:05 +0000 (20:48 +0530)
misc/auto-completion/bash/nnn-completion.bash
misc/auto-completion/fish/nnn.fish
misc/auto-completion/zsh/_nnn
nnn.1
src/nnn.c

index d0c80e53b8857079d464e9a0aefeb2386e7928c8..cb2b6f28e61bed0d4197544aeeef5a52f378ae28 100644 (file)
@@ -40,6 +40,7 @@ _nnn ()
         -t
         -T
         -u
+        -U
         -V
         -w
         -x
index d47c72e29dda00bb12d88979c9c6d2563f722ce4..fdd27f899fd3a9d921b4bb50824ef48c94521375 100644 (file)
@@ -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'
index 0de2bda9359d1aa7ac08fb4521116f9244c7a6a5..9a33020c22b132119602e8b9e5c6ffb8252e5a20 100644 (file)
@@ -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 a360a527dd5281619c460352d5eaa4eca2f0eb86..aed98a5e204685b4b2cc377cfd2eecb939e13d4f 100644 (file)
--- 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
index 5331dfd7411f330da718986483768d82c3c73043..65e239053bde330262e8011e1d1878e4efd9d435 100644 (file)
--- 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;