From af39458989358d7dbf8e77a298883c17dc3f238d Mon Sep 17 00:00:00 2001 From: Martin Grenfell Date: Tue, 24 Nov 2015 22:06:04 +0000 Subject: [PATCH] rework the cascading slightly to correctly show open/closed dir arrows --- lib/nerdtree/tree_dir_node.vim | 45 +++++++++++++++++++++++++-------- lib/nerdtree/tree_file_node.vim | 5 +--- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/lib/nerdtree/tree_dir_node.vim b/lib/nerdtree/tree_dir_node.vim index 259456f..41fb76b 100644 --- a/lib/nerdtree/tree_dir_node.vim +++ b/lib/nerdtree/tree_dir_node.vim @@ -76,19 +76,15 @@ endfunction "FUNCTION: TreeDirNode.displayString() {{{1 unlet s:TreeDirNode.displayString function! s:TreeDirNode.displayString() - let vc = self.getVisibleChildren() - if len(vc) != 1 - return self.path.displayString() - endif + let cascade = self.getCascade() + let rv = "" + for node in cascade + let rv = rv . node.path.displayString() + endfor - let visChild = vc[0] + let sym = cascade[-1].isOpen ? g:NERDTreeDirArrowCollapsible : g:NERDTreeDirArrowExpandable - "TODO: optimize - if !visChild.path.isDirectory - return self.path.displayString() - endif - - return self.path.getLastPathComponent(1) . visChild.displayString() + return sym . ' ' . rv endfunction "FUNCTION: TreeDirNode.findNode(path) {{{1 @@ -116,6 +112,33 @@ function! s:TreeDirNode.findNode(path) return {} endfunction +"FUNCTION: TreeDirNode.getCascade() {{{1 +"Return an array of dir nodes (starting from self) that can be cascade opened. +function! s:TreeDirNode.getCascade() + + let rv = [self] + let node = self + + while 1 + let vc = node.getVisibleChildren() + if len(vc) != 1 + break + endif + + let visChild = vc[0] + + "TODO: optimize + if !visChild.path.isDirectory + break + endif + + call add(rv, visChild) + let node = visChild + endwhile + + return rv +endfunction + "FUNCTION: TreeDirNode.getChildCount() {{{1 "Returns the number of children this node has function! s:TreeDirNode.getChildCount() diff --git a/lib/nerdtree/tree_file_node.vim b/lib/nerdtree/tree_file_node.vim index c69ae71..54e5291 100644 --- a/lib/nerdtree/tree_file_node.vim +++ b/lib/nerdtree/tree_file_node.vim @@ -337,10 +337,7 @@ function! s:TreeFileNode._renderToString(depth, drawText) let treeParts = repeat(' ', a:depth - 1) - if self.path.isDirectory - let sym = self.isOpen ? g:NERDTreeDirArrowCollapsible : g:NERDTreeDirArrowExpandable - let treeParts = treeParts . sym . ' ' - else + if !self.path.isDirectory let treeParts = treeParts . ' ' endif