diff options
| author | 2019-09-09 23:41:45 +0530 | |
|---|---|---|
| committer | 2019-09-09 23:41:45 +0530 | |
| commit | a064818acf4a3632934421fb94ea84cab059d59f (patch) | |
| tree | 73024b59c83690d6455f32e9c7db834bfd140a02 /src | |
| parent | 7621078d52da266371483e45a2b79bb020cb50c0 (diff) | |
| download | nnn-a064818acf4a3632934421fb94ea84cab059d59f.tar.gz | |
Fold only long paths
Diffstat (limited to 'src')
| -rw-r--r-- | src/nnn.c | 39 |
1 files changed, 23 insertions, 16 deletions
@@ -549,7 +549,7 @@ static char *xitoa(uint val) #ifdef KEY_RESIZE /* Clear the old prompt */ -static inline void clearoldprompt() +static inline void clearoldprompt(void) { move(xlines - 1, 0); clrtoeol(); @@ -3152,9 +3152,10 @@ static void redraw(char *path) int ncols = (xcols <= PATH_MAX) ? xcols : PATH_MAX; int lastln = xlines, onscreen = xlines - 4; int i, attrs; + size_t len = strlen(path); char buf[12]; char c; - char *ptr = path, *base = xbasename(path); + char *ptr = path, *base; --lastln; @@ -3204,28 +3205,34 @@ 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, store the truncating char in c */ - c = path[ncols - 11]; - path[ncols - 11] = '\0'; /* Print path */ - if (base - ptr <= 1) - printw("%s\n\n", path); + if ((len + 11) <= (size_t)ncols) + addnstr(path, ncols - 11); else { - base = base - 1; - while (ptr < base) { - if (*ptr == '/') { - addch(*ptr); - addch(*(++ptr)); + base = xbasename(path); + if ((base - ptr) <= 1) + addnstr(path, ncols - 11); + else { + len = 0; + --base; + while (ptr < base) { + if (*ptr == '/') { + addch(*ptr); + addch(*(++ptr)); + len += 2; /* 2 characters added */ + } + ++ptr; } - ++ptr; - } - printw("/%s\n\n", base + 1); + addnstr(base, ncols - (11 + len + 1)); + } } + /* Go to first entry */ + move(2, 0); + attroff(A_UNDERLINE); - path[ncols - 11] = c; /* Restore c */ /* Calculate the number of cols available to print entry name */ if (cfg.showdetail) { |