From c248f42c31378d63b1099dc456fd61778adc239f Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Fri, 1 Sep 2017 19:30:25 +0530 Subject: [PATCH] Calculate number of cols for name only once --- nnn.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/nnn.c b/nnn.c index c54c112d..ea26f70c 100644 --- 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 */