aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-09 17:03:47 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-09 17:03:47 +0530
commit2a85da09d5e0215807ed4d154e6e7722a1abf4f5 (patch)
treed391364d87b4ef7b3f3c1b36ecbe6dcd2cfd5105 /src
parent33768a6cffd43e4939bb48d0e46e8dd807f77c5e (diff)
downloadnnn-2a85da09d5e0215807ed4d154e6e7722a1abf4f5.tar.gz
Refactor redraw
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/nnn.c b/src/nnn.c
index ac46c7b..017b04c 100644
--- 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");
}