diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim index e0c1d954..d2b1cffd 100644 --- a/lib/nerdtree/path.vim +++ b/lib/nerdtree/path.vim @@ -62,7 +62,11 @@ function! s:Path.cacheDisplayString() abort endif if self.isSymLink - let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' -> ' . self.symLinkDest + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . ' -> ' + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . self.symLinkDest + if self.isBroken + let self.cachedDisplayString = self.addDelimiter(self.cachedDisplayString) . g:NERDTreeGlyphBroken + endif endif if !self.isDirectory && b:NERDTree.ui.getShowFileLines() != 0 @@ -607,24 +611,33 @@ function! s:Path.readInfoFromDisk(fullpath) let fullpath = s:Path.WinToUnixPath(a:fullpath) - if getftype(fullpath) ==# 'fifo' + let ftype = getftype(fullpath) + + if ftype ==# 'fifo' throw 'NERDTree.InvalidFiletypeError: Cant handle FIFO files: ' . a:fullpath endif let self.pathSegments = filter(split(fullpath, '/'), '!empty(v:val)') - let self.isReadOnly = 0 if isdirectory(a:fullpath) let self.isDirectory = 1 + let self.isReadOnly = 0 + let self.isBroken = 0 elseif filereadable(a:fullpath) let self.isDirectory = 0 let self.isReadOnly = filewritable(a:fullpath) ==# 0 + let self.isBroken = 0 + elseif ftype ==# 'link' + let self.isDirectory = 0 + let self.isReadOnly = 0 + let self.isBroken = 1 else + call nerdtree#echoWarning('invalid ' . a:fullpath . 'file type: ' . ftype) throw 'NERDTree.InvalidArgumentsError: Invalid path = ' . a:fullpath endif let self.isExecutable = 0 - if !self.isDirectory + if !self.isDirectory && !self.isBroken let self.isExecutable = getfperm(a:fullpath) =~# 'x' endif diff --git a/lib/nerdtree/tree_dir_node.vim b/lib/nerdtree/tree_dir_node.vim index 3fb38331..4121f24f 100644 --- a/lib/nerdtree/tree_dir_node.vim +++ b/lib/nerdtree/tree_dir_node.vim @@ -299,7 +299,7 @@ function! s:TreeDirNode._glob(pattern, all) " See ':h version7.txt' and ':h version8.txt' for details on the " development of the glob() and globpath() functions. if v:version > 704 || (v:version ==# 704 && has('patch654')) - let l:globList = globpath(l:pathSpec, a:pattern, !g:NERDTreeRespectWildIgnore, 1, 0) + let l:globList = globpath(l:pathSpec, a:pattern, !g:NERDTreeRespectWildIgnore, 1, 1) elseif v:version ==# 704 && has('patch279') let l:globList = globpath(l:pathSpec, a:pattern, !g:NERDTreeRespectWildIgnore, 1) elseif v:version > 702 || (v:version ==# 702 && has('patch051')) diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim index 84c04fda..df0ef6a9 100644 --- a/plugin/NERD_tree.vim +++ b/plugin/NERD_tree.vim @@ -71,6 +71,7 @@ let g:NERDTreeSortOrder = get(g:, 'NERDTreeSortOrder', ['\/$', '*', '\.swp$', let g:NERDTreeOldSortOrder = [] let g:NERDTreeGlyphReadOnly = get(g:, 'NERDTreeGlyphReadOnly', 'RO') +let g:NERDTreeGlyphBroken = get(g:, 'NERDTreeGlyphBroken', ' [*broken]') if has('conceal') let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\x07")