commit f526c4e652c066807db1d8e99c0d23017c511328 parent 70c8cb9bfa33add36680bafaef79e3474164dd11 Author: Jason Franklin <lifecrisis@users.noreply.github.com> Date: Sat, 18 Nov 2017 09:51:34 -0500 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. Diffstat:
| M | autoload/nerdtree/ui_glue.vim | | | 36 | ++++++++++++++++++++---------------- |
1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim @@ -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
