nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
commit d3a7cd20aed896e62ca4fbcd44b8ebdf842d1adf
parent ec3c3b0fa11ed63fd54603d52bc767d361f35d3f
Author: Phil Runninger <PhilRunninger@users.noreply.github.com>
Date:   Tue, 24 Apr 2018 14:19:36 -0400

Merge pull request #830 from bravestarr/fix-multibyte-path

Display a path with multi-byte characters correctly when it is truncated
Diffstat:
Mlib/nerdtree/bookmark.vim | 9++++++---
Mlib/nerdtree/path.vim | 6++++--
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/lib/nerdtree/bookmark.vim b/lib/nerdtree/bookmark.vim
@@ -280,14 +280,17 @@ endfunction
 " FUNCTION: Bookmark.str() {{{1
 " Get the string that should be rendered in the view for this bookmark
 function! s:Bookmark.str()
-    let pathStrMaxLen = winwidth(g:NERDTree.GetWinNum()) - 4 - len(self.name)
+    let pathStrMaxLen = winwidth(g:NERDTree.GetWinNum()) - 4 - strdisplaywidth(self.name)
     if &nu
         let pathStrMaxLen = pathStrMaxLen - &numberwidth
     endif
 
     let pathStr = self.path.str({'format': 'UI'})
-    if len(pathStr) > pathStrMaxLen
-        let pathStr = '<' . strpart(pathStr, len(pathStr) - pathStrMaxLen)
+    if strdisplaywidth(pathStr) > pathStrMaxLen
+        while strdisplaywidth(pathStr) > pathStrMaxLen && strchars(pathStr) > 0
+            let pathStr = strcharpart(pathStr, 1)
+        endwhile
+        let pathStr = '<' . pathStr
     endif
     return '>' . self.name . ' ' . pathStr
 endfunction
diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim
@@ -719,8 +719,10 @@ function! s:Path.str(...)
 
     if has_key(options, 'truncateTo')
         let limit = options['truncateTo']
-        if len(toReturn) > limit-1
-            let toReturn = toReturn[(len(toReturn)-limit+1):]
+        if strdisplaywidth(toReturn) > limit-1
+            while strdisplaywidth(toReturn) > limit-1 && strchars(toReturn) > 0
+                let toReturn = strcharpart(toReturn, 1)
+            endwhile
             if len(split(toReturn, '/')) > 1
                 let toReturn = '</' . join(split(toReturn, '/')[1:], '/') . '/'
             else