nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
commit eacd5d72ecde909c2214427733c8750a5c38c891
parent b0bb781fc73ef40365e4c996a16f04368d64fc9d
Author: Danielle Sucher <dsucher@gmail.com>
Date:   Tue,  8 Oct 2013 00:25:27 -0400

Create nested parent directories as needed

Allows the user to create or copy a nested node
in a single step with ma or mc, recursively
creating nested parent directories if needed, and
without throwing any errors if they already exist.

[Finishes #163, #34]

Diffstat:
Mlib/nerdtree/path.vim | 17+++++++++++++++++
Mnerdtree_plugin/fs_menu.vim | 10++++++++--
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim
@@ -141,6 +141,7 @@ function! s:Path.Create(fullpath)
 
         "assume its a file and create
         else
+            call s:Path.createParentDirectories(a:fullpath)
             call writefile([], a:fullpath)
         endif
     catch
@@ -161,6 +162,8 @@ function! s:Path.copy(dest)
         throw "NERDTree.CopyingNotSupportedError: Copying is not supported on this OS"
     endif
 
+    call s:Path.createParentDirectories(a:dest)
+
     let dest = s:Path.WinToUnixPath(a:dest)
 
     let cmd = g:NERDTreeCopyCmd . " " . escape(self.str(), nerdtree#escChars()) . " " . escape(dest, nerdtree#escChars())
@@ -197,6 +200,20 @@ function! s:Path.copyingWillOverwrite(dest)
     endif
 endfunction
 
+"FUNCTION: Path.createParentDirectories(path) {{{1
+"
+"create parent directories for this path if needed
+"without throwing any errors is those directories already exist
+"
+"Args:
+"path: full path of the node whose parent directories may need to be created
+function! s:Path.createParentDirectories(path)
+    let dir_path = fnamemodify(a:path, ':h')
+    if !isdirectory(dir_path)
+        call mkdir(dir_path, 'p')
+    endif
+endfunction
+
 "FUNCTION: Path.delete() {{{1
 "
 "Deletes the file represented by this path.
diff --git a/nerdtree_plugin/fs_menu.vim b/nerdtree_plugin/fs_menu.vim
@@ -114,7 +114,10 @@ function! NERDTreeAddNode()
         let parentNode = b:NERDTreeRoot.findNode(newPath.getParent())
 
         let newTreeNode = g:NERDTreeFileNode.New(newPath)
-        if parentNode.isOpen || !empty(parentNode.children)
+        if empty(parentNode)
+            call b:NERDTreeRoot.refresh()
+            call nerdtree#renderView()
+        elseif parentNode.isOpen || !empty(parentNode.children)
             call parentNode.addChild(newTreeNode, 1)
             call NERDTreeRender()
             call newTreeNode.putCursorHere(1, 0)
@@ -224,7 +227,10 @@ function! NERDTreeCopyNode()
         if confirmed
             try
                 let newNode = currentNode.copy(newNodePath)
-                if !empty(newNode)
+                if empty(newNode)
+                    call b:NERDTreeRoot.refresh()
+                    call nerdtree#renderView()
+                else
                     call NERDTreeRender()
                     call newNode.putCursorHere(0, 0)
                 endif