]> Sergey Matveev's repositories - nnn.git/commitdiff
Show total files in du mode
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 22 Jun 2017 04:09:17 +0000 (09:39 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 22 Jun 2017 04:09:17 +0000 (09:39 +0530)
config.def.h
nnn.c

index 7b3859eb30381de2fd56fd165bb6dcca230eadcc..724adbb03eab9829c508dcd1415b34a1eb99bc95 100644 (file)
@@ -128,7 +128,7 @@ static struct key bindings[] = {
        { 'o',            SEL_DFB,       "",     "" },
        /* Toggle sort by size */
        { 's',            SEL_FSIZE,     "",     "" },
-       /* Sort by total block size including dir contents */
+       /* Sort by total block count including dir contents */
        { 'S',            SEL_BSIZE,    "",     "" },
        /* Toggle sort by time */
        { 't',            SEL_MTIME,     "",     "" },
diff --git a/nnn.c b/nnn.c
index 115bed884b1d5629a3f70376cc354d1f549d2e0b..c066fbc1ec24bb3c9e69f579bbb673b7e85962d1 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -169,6 +169,7 @@ static char *editor;
 static char *desktop_manager;
 static blkcnt_t ent_blocks;
 static blkcnt_t dir_blocks;
+static ulong num_files;
 static size_t fs_free;
 static uint open_max;
 static bm bookmark[MAX_BM];
@@ -1431,6 +1432,7 @@ sum_bsizes(const char *fpath, const struct stat *sb,
        if (sb->st_blocks && (typeflag == FTW_F || typeflag == FTW_D))
                ent_blocks += sb->st_blocks;
 
+       ++num_files;
        return 0;
 }
 
@@ -1479,8 +1481,10 @@ dentfill(char *path, struct entry **dents,
 
        n = 0;
 
-       if (cfg.blkorder)
+       if (cfg.blkorder) {
+               num_files = 0;
                dir_blocks = 0;
+       }
 
        dirp = opendir(path);
        if (dirp == NULL)
@@ -1492,18 +1496,14 @@ dentfill(char *path, struct entry **dents,
                    (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))))
                        continue;
 
-               mkpath(path, dp->d_name, newpath, PATH_MAX);
-               if (lstat(newpath, &sb) == -1) {
-                       continue;
-                       /* if (*dents)
-                               free(*dents);
-                       printerr(1, "lstat"); */
-               }
-
                if (filter(re, dp->d_name) == 0) {
                        if (!cfg.blkorder)
                                continue;
 
+                       mkpath(path, dp->d_name, newpath, PATH_MAX);
+                       if (lstat(newpath, &sb) == -1)
+                               continue;
+
                        if (S_ISDIR(sb.st_mode)) {
                                ent_blocks = 0;
                                if (nftw(newpath, sum_bsizes, open_max,
@@ -1512,12 +1512,23 @@ dentfill(char *path, struct entry **dents,
                                        dir_blocks += sb.st_blocks;
                                } else
                                        dir_blocks += ent_blocks;
-                       } else if (sb.st_blocks)
-                               dir_blocks += sb.st_blocks;
+                       } else {
+                               if (sb.st_blocks)
+                                       dir_blocks += sb.st_blocks;
+
+                               ++num_files;
+                       }
 
                        continue;
                }
 
+               mkpath(path, dp->d_name, newpath, PATH_MAX);
+               if (lstat(newpath, &sb) == -1) {
+                       if (*dents)
+                               free(*dents);
+                       printerr(1, "lstat");
+               }
+
                if (n == total_dents) {
                        total_dents += 64;
                        *dents = realloc(*dents, total_dents * sizeof(**dents));
@@ -1540,8 +1551,10 @@ dentfill(char *path, struct entry **dents,
                                        (*dents)[n].blocks = sb.st_blocks;
                                } else
                                        (*dents)[n].blocks = ent_blocks;
-                       } else
+                       } else {
                                (*dents)[n].blocks = sb.st_blocks;
+                               ++num_files;
+                       }
 
                        if ((*dents)[n].blocks)
                                dir_blocks += (*dents)[n].blocks;
@@ -1695,9 +1708,9 @@ redraw(char *path)
                                sprintf(g_buf, "total %d %s[%s%s]", ndents, sort,
                                        replace_escape(dents[cur].name), ind);
                        else {
-                               i = sprintf(g_buf, "du: %s in dir, ",
-                                           coolsize(dir_blocks << 9));
-                               sprintf(g_buf + i, "%s free [%s%s]", coolsize(fs_free),
+                               i = sprintf(g_buf, "du: %s (%lu files) ",
+                                           coolsize(dir_blocks << 9), num_files);
+                               sprintf(g_buf + i, "vol: %s free [%s%s]", coolsize(fs_free),
                                        replace_escape(dents[cur].name), ind);
                        }