From b99a28a3761ee864fd3cf5150c49bc6c7ffc1f5a Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Tue, 12 Feb 2019 03:14:08 +0530 Subject: [PATCH] Fix #208: cut at correct codepoint for CJK --- src/nnn.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 7602d96a..4016b012 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1874,7 +1874,7 @@ static char *unescape(const char *str, uint maxcols) { static wchar_t wbuf[PATH_MAX] __attribute__ ((aligned)); static wchar_t *buf; - static size_t len; + static size_t len, lencount; /* Convert multi-byte to wide char */ len = mbstowcs(wbuf, str, PATH_MAX); @@ -1882,11 +1882,12 @@ static char *unescape(const char *str, uint maxcols) g_buf[0] = '\0'; buf = wbuf; - if (maxcols && len > maxcols) { - len = wcswidth(wbuf, len); - - if (len > maxcols) - wbuf[maxcols] = 0; + if (maxcols) { + len = lencount = wcswidth(wbuf, len); + while (len > maxcols) { + wbuf[--lencount] = L'\0'; + len = wcswidth(wbuf, lencount); + } } while (*buf) { @@ -2824,7 +2825,7 @@ static void redraw(char *path) /* Calculate the number of cols available to print entry name */ if (cfg.showdetail) - ncols -= 32; + ncols -= 30; else ncols -= 5;