Clean up the handler for the "x" mapping (#767)

Previously, pressing "x" on the tree root would result in
unpredictable behavior.  The user would either an receive an error
message or the parent of the tree root (which is not visible) would
be closed.  This commit repairs this problem.

In addition, some code duplication was removed.
This commit is contained in:
Jason Franklin
2017-11-18 09:51:34 -05:00
committed by GitHub
parent 70c8cb9bfa
commit f526c4e652

View File

@@ -184,24 +184,28 @@ function! s:closeChildren(node)
endfunction endfunction
" FUNCTION: s:closeCurrentDir(node) {{{1 " FUNCTION: s:closeCurrentDir(node) {{{1
" closes the parent dir of the current node " Close the parent directory of the current node.
function! s:closeCurrentDir(node) function! s:closeCurrentDir(node)
let parent = a:node.parent
while g:NERDTreeCascadeOpenSingleChildDir && !parent.isRoot() if a:node.isRoot()
let childNodes = parent.getVisibleChildren() call nerdtree#echo('cannot close parent of tree root')
if len(childNodes) == 1 && childNodes[0].path.isDirectory return
let parent = parent.parent
else
break
endif
endwhile
if parent ==# {} || parent.isRoot()
call nerdtree#echo("cannot close tree root")
else
call parent.close()
call b:NERDTree.render()
call parent.putCursorHere(0, 0)
endif endif
let l:parent = a:node.parent
if empty(l:parent) || l:parent.isRoot()
call nerdtree#echo('cannot close tree root')
return
endif
while l:parent.isCascadable()
let l:parent = l:parent.parent
endwhile
call l:parent.close()
call b:NERDTree.render()
call l:parent.putCursorHere(0, 0)
endfunction endfunction
" FUNCTION: s:closeTreeWindow() {{{1 " FUNCTION: s:closeTreeWindow() {{{1