From eacd5d72ecde909c2214427733c8750a5c38c891 Mon Sep 17 00:00:00 2001 From: Danielle Sucher Date: Tue, 8 Oct 2013 00:25:27 -0400 Subject: [PATCH] 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] --- lib/nerdtree/path.vim | 17 +++++++++++++++++ nerdtree_plugin/fs_menu.vim | 10 ++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim index 58bb013..6cd8c80 100644 --- 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 index 9b81ed3..f36b31b 100644 --- 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