commit 6188c5ea5f6fd44e24768ccb889aaa739808d9f3
parent 0bf429bac3b5d868b5cc5e1da51049d72d1c8a49
Author: Jason Franklin <lifecrisis@users.noreply.github.com>
Date: Mon, 7 May 2018 08:22:55 -0400
Merge pull request #838 from lifecrisis/updir-fix
Diffstat:
1 file changed, 24 insertions(+), 31 deletions(-)
diff --git a/autoload/nerdtree/ui_glue.vim b/autoload/nerdtree/ui_glue.vim
@@ -29,9 +29,9 @@ function! nerdtree#ui_glue#createDefaultBindings()
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenRecursively, 'scope': "DirNode", 'callback': s."openNodeRecursively" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapUpdir, 'scope': "all", 'callback': s."upDirCurrentRootClosed" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapUpdirKeepOpen, 'scope': "all", 'callback': s."upDirCurrentRootOpen" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapChangeRoot, 'scope': "Node", 'callback': s."chRoot" })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapUpdir, 'scope': 'all', 'callback': s . 'upDirCurrentRootClosed' })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapUpdirKeepOpen, 'scope': 'all', 'callback': s . 'upDirCurrentRootOpen' })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapChangeRoot, 'scope': 'Node', 'callback': s . 'chRoot' })
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapChdir, 'scope': "Node", 'callback': s."chCwd" })
@@ -619,40 +619,33 @@ function! s:toggleZoom()
call b:NERDTree.ui.toggleZoom()
endfunction
-"FUNCTION: nerdtree#ui_glue#upDir(keepState) {{{1
-"moves the tree up a level
+" FUNCTION: nerdtree#ui_glue#upDir(preserveState) {{{1
+" Move the NERDTree up one level.
"
-"Args:
-"keepState: 1 if the current root should be left open when the tree is
-"re-rendered
-function! nerdtree#ui_glue#upDir(keepState)
- let cwd = b:NERDTree.root.path.str({'format': 'UI'})
- if cwd ==# "/" || cwd =~# '^[^/]..$'
- call nerdtree#echo("already at top dir")
- else
- if !a:keepState
- call b:NERDTree.root.close()
- endif
+" Args:
+" preserveState: if 1, the current root is left open when the new tree is
+" rendered; if 0, the current root node is closed
+function! nerdtree#ui_glue#upDir(preserveState)
- let oldRoot = b:NERDTree.root
+ try
+ call b:NERDTree.root.cacheParent()
+ catch /^NERDTree.CannotCacheParentError/
+ call nerdtree#echo('already at root directory')
+ return
+ endtry
- if empty(b:NERDTree.root.parent)
- let path = b:NERDTree.root.path.getParent()
- let newRoot = g:NERDTreeDirNode.New(path, b:NERDTree)
- call newRoot.open()
- call newRoot.transplantChild(b:NERDTree.root)
- let b:NERDTree.root = newRoot
- else
- let b:NERDTree.root = b:NERDTree.root.parent
- endif
+ let l:oldRoot = b:NERDTree.root
+ let l:newRoot = b:NERDTree.root.parent
- if g:NERDTreeChDirMode ==# 2
- call b:NERDTree.root.path.changeToDir()
- endif
+ call l:newRoot.open()
+ call l:newRoot.transplantChild(l:oldRoot)
- call b:NERDTree.render()
- call oldRoot.putCursorHere(0, 0)
+ if !a:preserveState
+ call l:oldRoot.close()
endif
+
+ call b:NERDTree.changeRoot(l:newRoot)
+ call l:oldRoot.putCursorHere(0, 0)
endfunction
" FUNCTION: s:upDirCurrentRootOpen() {{{1