]> Sergey Matveev's repositories - nnn.git/commitdiff
Refactor redraw
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 9 Mar 2019 11:33:47 +0000 (17:03 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 9 Mar 2019 11:33:47 +0000 (17:03 +0530)
src/nnn.c

index ac46c7b40b568936bb2d305da2e4906e744b40d5..017b04c194041cdf44123a07b4e66425e3686974 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2675,10 +2675,13 @@ static void populate(char *path, char *lastname)
 
 static void redraw(char *path)
 {
-       char buf[NAME_MAX + 65];
-       char c;
        size_t ncols = (COLS <= PATH_MAX) ? COLS : PATH_MAX;
-       int nlines = MIN(LINES - 4, ndents), i, attrs;
+       int lastln = LINES;
+       int nlines = MIN(lastln - 4, ndents), i, attrs;
+       char buf[12];
+       char c;
+
+       --lastln;
 
        /* Clear screen */
        erase();
@@ -2723,12 +2726,12 @@ static void redraw(char *path)
        printw("\b] "); /* 10 chars printed in total for contexts - "[1 2 3 4] " */
 
        attron(A_UNDERLINE);
-       /* No text wrapping in cwd line */
+       /* No text wrapping in cwd line, store the truncating char in c */
        c = path[ncols - 11];
        path[ncols - 11] = '\0';
        printw("%s\n\n", path);
        attroff(A_UNDERLINE);
-       path[ncols - 11] = c;
+       path[ncols - 11] = c; /* Restore c */
 
        /* Calculate the number of cols available to print entry name */
        if (cfg.showdetail) {
@@ -2770,34 +2773,34 @@ static void redraw(char *path)
 
        if (cfg.showdetail) {
                if (ndents) {
-                       char sort[9];
+                       char sort[] = "\0y time ";
 
                        if (cfg.mtimeorder)
-                               xstrlcpy(sort, "by time ", 9);
-                       else if (cfg.sizeorder)
-                               xstrlcpy(sort, "by size ", 9);
-                       else
-                               sort[0] = '\0';
+                               sort[0] = 'b';
+                       else if (cfg.sizeorder) {
+                               sort[0] = 'b';
+                               sort[3] = 's';
+                               sort[5] = 'z';
+                       }
 
                        /* We need to show filename as it may be truncated in directory listing */
                        if (!cfg.blkorder)
-                               snprintf(buf, NAME_MAX + 65, "%d/%d %s[%s]",
-                                        cur + 1, ndents, sort, unescape(dents[cur].name, NAME_MAX));
+                               mvprintw(lastln, 0, "%d/%d %s[%s]\n", cur + 1, ndents, sort,
+                                        unescape(dents[cur].name, NAME_MAX));
                        else {
-                               i = snprintf(buf, 64, "%d/%d ", cur + 1, ndents);
+                               xstrlcpy(buf, coolsize(dir_blocks << BLK_SHIFT), 12);
 
                                if (cfg.apparentsz)
-                                       buf[i++] = 'a';
+                                       c = 'a';
                                else
-                                       buf[i++] = 'd';
+                                       c = 'd';
 
-                               i += snprintf(buf + i, 64, "u: %s (%lu files) ",
-                                             coolsize(dir_blocks << BLK_SHIFT), num_files);
-                               snprintf(buf + i, NAME_MAX, "vol: %s free [%s]",
+                               mvprintw(lastln, 0,
+                                        "%d/%d %cu: %s (%lu files) free: %s [%s]\n",
+                                        cur + 1, ndents, c, buf, num_files,
                                         coolsize(get_fs_info(path, FREE)),
                                         unescape(dents[cur].name, NAME_MAX));
                        }
-                       printmsg(buf);
                } else
                        printmsg("0/0");
        }