src/nnn.c | 17 +++++++++-------- diff --git a/src/nnn.c b/src/nnn.c index f45777ff7150798656ef3cd9a15cf3c02658e463..dde27b60feb24663cac9da2cc279342c4dc1233a 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -3424,8 +3424,10 @@ wchar_t *buf = wbuf; size_t lencount = 0; /* Convert multi-byte to wide char */ - size_t len = mbstowcs(wbuf, str, NAME_MAX); + size_t len = mbstowcs(wbuf, str, maxcols); + if (len >= maxcols) + wbuf[maxcols] = '\0'; len = wcswidth(wbuf, len); /* Reduce number of wide chars to max columns */ @@ -3761,7 +3763,6 @@ if (attrs) attroff(attrs); if (ind) addch(ind); - addch('\n'); } /* For the usage of comma operator in C, visit https://en.wikipedia.org/wiki/Comma_operator */ @@ -5725,8 +5726,8 @@ n -= 32; } } - /* 3 = Preceding space, indicator, newline */ - return (n - 3); + /* 2 columns for preceding space and indicator */ + return (n - 2); } static void draw_line(char *path, int ncols) @@ -5770,7 +5771,7 @@ xcols = COLS; int ncols = (xcols <= PATH_MAX) ? xcols : PATH_MAX; int onscreen = xlines - 4; - int i; + int i, j = 1; // Fast redraw if (g_state.move) { @@ -5860,16 +5861,16 @@ move(1, 0); addch('^'); } - move(2, 0); - if (g_state.oldcolor) { attron(COLOR_PAIR(cfg.curctx + 1) | A_BOLD); g_state.dircolor = 1; } /* Print listing */ - for (i = curscroll; i < ndents && i < curscroll + onscreen; ++i) + for (i = curscroll; i < ndents && i < curscroll + onscreen; ++i) { + move(++j, 0); printptr(&pdents[i], ncols, i == cur); + } /* Must reset e.g. no files in dir */ if (g_state.dircolor) {