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

Display a path with multi-byte characters correctly when it is truncated
This commit is contained in:
Phil Runninger 2018-04-24 14:19:36 -04:00 committed by GitHub
commit d3a7cd20ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 5 deletions

View File

@ -280,14 +280,17 @@ endfunction
" FUNCTION: Bookmark.str() {{{1 " FUNCTION: Bookmark.str() {{{1
" Get the string that should be rendered in the view for this bookmark " Get the string that should be rendered in the view for this bookmark
function! s:Bookmark.str() 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 if &nu
let pathStrMaxLen = pathStrMaxLen - &numberwidth let pathStrMaxLen = pathStrMaxLen - &numberwidth
endif endif
let pathStr = self.path.str({'format': 'UI'}) let pathStr = self.path.str({'format': 'UI'})
if len(pathStr) > pathStrMaxLen if strdisplaywidth(pathStr) > pathStrMaxLen
let pathStr = '<' . strpart(pathStr, len(pathStr) - pathStrMaxLen) while strdisplaywidth(pathStr) > pathStrMaxLen && strchars(pathStr) > 0
let pathStr = strcharpart(pathStr, 1)
endwhile
let pathStr = '<' . pathStr
endif endif
return '>' . self.name . ' ' . pathStr return '>' . self.name . ' ' . pathStr
endfunction endfunction

View File

@ -719,8 +719,10 @@ function! s:Path.str(...)
if has_key(options, 'truncateTo') if has_key(options, 'truncateTo')
let limit = options['truncateTo'] let limit = options['truncateTo']
if len(toReturn) > limit-1 if strdisplaywidth(toReturn) > limit-1
let toReturn = toReturn[(len(toReturn)-limit+1):] while strdisplaywidth(toReturn) > limit-1 && strchars(toReturn) > 0
let toReturn = strcharpart(toReturn, 1)
endwhile
if len(split(toReturn, '/')) > 1 if len(split(toReturn, '/')) > 1
let toReturn = '</' . join(split(toReturn, '/')[1:], '/') . '/' let toReturn = '</' . join(split(toReturn, '/')[1:], '/') . '/'
else else