]> Sergey Matveev's repositories - nnn.git/commitdiff
Calculate number of cols for name only once
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 1 Sep 2017 14:00:25 +0000 (19:30 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 1 Sep 2017 14:00:25 +0000 (19:30 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index c54c112de1261721f28aa82375acfec70369446b..ea26f70c27ddc977d174c8de9018d455063b07e4 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -1196,11 +1196,11 @@ unescape(const char *str, uint maxcols)
 }
 
 static void
-printent(struct entry *ent, int sel)
+printent(struct entry *ent, int sel, uint namecols)
 {
        static char *pname;
 
-       pname = unescape(ent->name, COLS - 5);
+       pname = unescape(ent->name, namecols);
 
        if (S_ISDIR(ent->mode))
                printw("%s%s/\n", CURSYM(sel), pname);
@@ -1247,12 +1247,12 @@ coolsize(off_t size)
 }
 
 static void
-printent_long(struct entry *ent, int sel)
+printent_long(struct entry *ent, int sel, uint namecols)
 {
        static char buf[18], *pname;
 
        strftime(buf, 18, "%d-%m-%Y %H:%M", localtime(&ent->t));
-       pname = unescape(ent->name, COLS - 32);
+       pname = unescape(ent->name, namecols);
 
        if (sel)
                attron(A_REVERSE);
@@ -1303,7 +1303,7 @@ printent_long(struct entry *ent, int sel)
                attroff(A_REVERSE);
 }
 
-static void (*printptr)(struct entry *ent, int sel) = &printent_long;
+static void (*printptr)(struct entry *ent, int sel, uint namecols) = &printent_long;
 
 static char
 get_fileind(mode_t mode, char *desc)
@@ -1943,7 +1943,6 @@ redraw(char *path)
        DPRINTF_D(cur);
        DPRINTF_S(path);
 
-       /* No text wrapping in cwd line */
        if (!realpath(path, g_buf)) {
                printwarn();
                return;
@@ -1953,6 +1952,11 @@ redraw(char *path)
        if (ncols > PATH_MAX)
                ncols = PATH_MAX;
 
+       /* No text wrapping in cwd line */
+       /* Show CWD: - xstrlen(CWD) - 1 = 6 */
+       g_buf[ncols - 6] = '\0';
+       printw(CWD "%s\n\n", g_buf);
+
        /* Fallback to light mode if less than 35 columns */
        if (ncols < 35 && cfg.showdetail) {
                cfg.showdetail ^= 1;
@@ -1960,10 +1964,11 @@ redraw(char *path)
                mode_changed = TRUE;
        }
 
-
-       /* Show CWD: - xstrlen(CWD) - 1 = 6 */
-       g_buf[ncols - 6] = '\0';
-       printw(CWD "%s\n\n", g_buf);
+       /* Calculate the number of cols available to print entry name */
+       if (cfg.showdetail)
+               ncols -= 32;
+       else
+               ncols -= 5;
 
        if (cfg.showcolor) {
                attron(COLOR_PAIR(1) | A_BOLD);
@@ -1973,17 +1978,17 @@ redraw(char *path)
        /* Print listing */
        if (cur < (nlines >> 1)) {
                for (i = 0; i < nlines; ++i)
-                       printptr(&dents[i], i == cur);
+                       printptr(&dents[i], i == cur, ncols);
        } else if (cur >= ndents - (nlines >> 1)) {
                for (i = ndents - nlines; i < ndents; ++i)
-                       printptr(&dents[i], i == cur);
+                       printptr(&dents[i], i == cur, ncols);
        } else {
                static int odd;
 
                odd = ISODD(nlines);
                nlines >>= 1;
                for (i = cur - nlines; i < cur + nlines + odd; ++i)
-                       printptr(&dents[i], i == cur);
+                       printptr(&dents[i], i == cur, ncols);
        }
 
        /* Must reset e.g. no files in dir */