Skip to content

Commit

Permalink
Create nested parent directories as needed
Browse files Browse the repository at this point in the history
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 preservim#163, preservim#34]
  • Loading branch information
DanielleSucher committed Oct 13, 2013
1 parent b0bb781 commit 1f57813
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
17 changes: 17 additions & 0 deletions lib/nerdtree/path.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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())
Expand Down Expand Up @@ -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.
Expand Down
10 changes: 8 additions & 2 deletions nerdtree_plugin/fs_menu.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 1f57813

Please sign in to comment.