Skip to content

Commit

Permalink
Clean up the handler for the "x" mapping (#767)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
lifecrisis committed Nov 18, 2017
1 parent 70c8cb9 commit f526c4e
Showing 1 changed file with 20 additions and 16 deletions.
36 changes: 20 additions & 16 deletions autoload/nerdtree/ui_glue.vim
Expand Up @@ -184,24 +184,28 @@ function! s:closeChildren(node)
endfunction

" 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)
let parent = a:node.parent
while g:NERDTreeCascadeOpenSingleChildDir && !parent.isRoot()
let childNodes = parent.getVisibleChildren()
if len(childNodes) == 1 && childNodes[0].path.isDirectory
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)

if a:node.isRoot()
call nerdtree#echo('cannot close parent of tree root')
return
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

" FUNCTION: s:closeTreeWindow() {{{1
Expand Down

0 comments on commit f526c4e

Please sign in to comment.