nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
commit af39458989358d7dbf8e77a298883c17dc3f238d
parent 2cef8bb6022b9e450cdee23d03024822e1dbeeea
Author: Martin Grenfell <martin.grenfell@gmail.com>
Date:   Tue, 24 Nov 2015 22:06:04 +0000

rework the cascading slightly to correctly show open/closed dir arrows

Diffstat:
Mlib/nerdtree/tree_dir_node.vim | 45++++++++++++++++++++++++++++++++++-----------
Mlib/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
@@ -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
@@ -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