]> Sergey Matveev's repositories - nnn.git/commitdiff
Show permissions in detail mode
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 23 Feb 2019 14:04:07 +0000 (19:34 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 23 Feb 2019 14:30:31 +0000 (20:00 +0530)
src/nnn.c

index 9eae353db156a01a1865f0d63397abbf5aee4bb8..008b2f5f92b0482e4920aa541f41b7b448a9fa42 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1995,9 +1995,15 @@ static void printent(struct entry *ent, int sel, uint namecols)
 
 static void printent_long(struct entry *ent, int sel, uint namecols)
 {
-       static char buf[18], *pname;
+       static char timebuf[18], permbuf[4], *pname;
 
-       strftime(buf, 18, "%F %R", localtime(&ent->t));
+       /* Timestamp */
+       strftime(timebuf, 18, "%F %R", localtime(&ent->t));
+
+       /* Permissions */
+       snprintf(permbuf, 4, "%d%d%d", (ent->mode >> 6) & 7, (ent->mode >> 3) & 7, ent->mode & 7);
+
+       /* Trim escape chars from name */
        pname = unescape(ent->name, namecols);
 
        /* Directories are always shown on top */
@@ -2009,39 +2015,39 @@ static void printent_long(struct entry *ent, int sel, uint namecols)
        switch (ent->mode & S_IFMT) {
        case S_IFREG:
                if (ent->mode & 0100)
-                       printw(" %-16.16s %8.8s* %s*\n", buf,
+                       printw(" %-16.16s  0%s %8.8s* %s*\n", timebuf, permbuf,
                               coolsize(cfg.blkorder ? ent->blocks << BLK_SHIFT : ent->size), pname);
                else
-                       printw(" %-16.16s %8.8s  %s\n", buf,
+                       printw(" %-16.16s  0%s %8.8s  %s\n", timebuf, permbuf,
                               coolsize(cfg.blkorder ? ent->blocks << BLK_SHIFT : ent->size), pname);
                break;
        case S_IFDIR:
                if (cfg.blkorder)
-                       printw(" %-16.16s %8.8s/ %s/\n",
-                              buf, coolsize(ent->blocks << BLK_SHIFT), pname);
+                       printw(" %-16.16s  0%s %8.8s/ %s/\n",
+                              timebuf, permbuf, coolsize(ent->blocks << BLK_SHIFT), pname);
                else
-                       printw(" %-16.16s        /  %s/\n", buf, pname);
+                       printw(" %-16.16s  0%s        /  %s/\n", timebuf, permbuf, pname);
                break;
        case S_IFLNK:
                if (ent->flags & DIR_OR_LINK_TO_DIR)
-                       printw(" %-16.16s       @/  %s@\n", buf, pname);
+                       printw(" %-16.16s  0%s       @/  %s@\n", timebuf, permbuf, pname);
                else
-                       printw(" %-16.16s        @  %s@\n", buf, pname);
+                       printw(" %-16.16s  0%s        @  %s@\n", timebuf, permbuf, pname);
                break;
        case S_IFSOCK:
-               printw(" %-16.16s        =  %s=\n", buf, pname);
+               printw(" %-16.16s  0%s        =  %s=\n", timebuf, permbuf, pname);
                break;
        case S_IFIFO:
-               printw(" %-16.16s        |  %s|\n", buf, pname);
+               printw(" %-16.16s  0%s        |  %s|\n", timebuf, permbuf, pname);
                break;
        case S_IFBLK:
-               printw(" %-16.16s        b  %s\n", buf, pname);
+               printw(" %-16.16s  0%s        b  %s\n", timebuf, permbuf, pname);
                break;
        case S_IFCHR:
-               printw(" %-16.16s        c  %s\n", buf, pname);
+               printw(" %-16.16s  0%s        c  %s\n", timebuf, permbuf, pname);
                break;
        default:
-               printw(" %-16.16s %8.8s? %s?\n", buf,
+               printw(" %-16.16s  0%s %8.8s? %s?\n", timebuf, permbuf,
                       coolsize(cfg.blkorder ? ent->blocks << BLK_SHIFT : ent->size), pname);
                break;
        }