nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
commit b0297c5c9149b4c51aa2065bd3dc0d639f26fefa
parent 9aba1c17f6a2803a8cc36ffea3d5ca2f63f544b7
Author: Martin Grenfell <martin_grenfell@msn.com>
Date:   Sat, 13 Dec 2008 19:29:03 +1300

use buffer level variables instead of tab lvl

Diffstat:
Mplugin/NERD_tree.vim | 150++++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 75 insertions(+), 75 deletions(-)
diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim
@@ -129,7 +129,7 @@ call s:initVariable("g:NERDTreeMapUpdirKeepOpen", "U")
 
 "SECTION: Script level variable declaration{{{2
 let s:escape_chars =  " \\`\|\"#%&,?()\*^<>"
-let s:NERDTreeWinName = '_NERD_tree_'
+let s:NERDTreeBufName = '_NERD_tree_'
 
 let s:tree_wid = 2
 let s:tree_markup_reg = '^[ `|]*[\-+~]'
@@ -150,7 +150,7 @@ command! -n=1 -complete=customlist,s:completeBookmarks NERDTreeFromBookmark call
 " SECTION: Auto commands {{{1
 "============================================================
 "Save the cursor position whenever we close the nerd tree
-exec "autocmd BufWinLeave *". s:NERDTreeWinName ." call <SID>saveScreenState()"
+exec "autocmd BufWinLeave *". s:NERDTreeBufName ." call <SID>saveScreenState()"
 "cache bookmarks when vim loads
 autocmd VimEnter * call s:Bookmark.CacheBookmarks(0)
 
@@ -285,7 +285,7 @@ endfunction
 " searchFromAbsoluteRoot: specifies whether we should search from the current
 " tree root, or the highest cached node
 function! s:Bookmark.getNode(searchFromAbsoluteRoot)
-    let searchRoot = a:searchFromAbsoluteRoot ? s:TreeDirNode.AbsoluteTreeRoot() : t:NERDTreeRoot
+    let searchRoot = a:searchFromAbsoluteRoot ? s:TreeDirNode.AbsoluteTreeRoot() : b:NERDTreeRoot
     let targetNode = searchRoot.findNode(self.path)
     if empty(targetNode)
         throw "NERDTree.BookmarkedNodeNotFound no node was found for bookmark: " . self.name
@@ -458,7 +458,7 @@ endfunction
 function! s:TreeFileNode.copy(dest)
     call self.path.copy(a:dest)
     let newPath = s:Path.New(a:dest)
-    let parent = t:NERDTreeRoot.findNode(newPath.getParent())
+    let parent = b:NERDTreeRoot.findNode(newPath.getParent())
     if !empty(parent)
         call parent.refresh()
     endif
@@ -571,29 +571,29 @@ endfunction
 
 
 "FUNCTION: TreeFileNode.isRoot() {{{3
-"returns 1 if this node is t:NERDTreeRoot
+"returns 1 if this node is b:NERDTreeRoot
 function! s:TreeFileNode.isRoot()
     if !s:treeExistsForTab()
         throw "NERDTree.TreeFileNode.IsRoot exception: No tree exists for the current tab"
     endif
-    return self.equals(t:NERDTreeRoot)
+    return self.equals(b:NERDTreeRoot)
 endfunction
 
 "FUNCTION: TreeFileNode.makeRoot() {{{3
 "Make this node the root of the tree
 function! s:TreeFileNode.makeRoot()
     if self.path.isDirectory
-        let t:NERDTreeRoot = self
+        let b:NERDTreeRoot = self
     else
         call self.cacheParent()
-        let t:NERDTreeRoot = self.parent
+        let b:NERDTreeRoot = self.parent
     endif
 
-    call t:NERDTreeRoot.open()
+    call b:NERDTreeRoot.open()
 
     "change dir to the dir of the new root if instructed to
     if g:NERDTreeChDirMode == 2
-        exec "cd " . t:NERDTreeRoot.path.strForEditCmd()
+        exec "cd " . b:NERDTreeRoot.path.strForEditCmd()
     endif
 endfunction
 "FUNCTION: TreeFileNode.New(path) {{{3
@@ -625,7 +625,7 @@ function! s:TreeFileNode.rename(newName)
     call self.parent.removeChild(self)
 
     let parentPath = self.path.getPathTrunk()
-    let newParent = t:NERDTreeRoot.findNode(parentPath)
+    let newParent = b:NERDTreeRoot.findNode(parentPath)
 
     if newParent != {}
         call newParent.createChild(self.path, 1)
@@ -652,7 +652,7 @@ let s:TreeDirNode = copy(s:TreeFileNode)
 "FUNCTION: TreeDirNode.AbsoluteTreeRoot(){{{3
 "class method that returns the highest cached ancestor of the current root
 function! s:TreeDirNode.AbsoluteTreeRoot()
-    let currentNode = t:NERDTreeRoot
+    let currentNode = b:NERDTreeRoot
     while currentNode.parent != {}
         let currentNode = currentNode.parent
     endwhile
@@ -1342,7 +1342,7 @@ function! s:Path.ignore()
     let lastPathComponent = self.getLastPathComponent(0)
 
     "filter out the user specified paths to ignore
-    if t:NERDTreeIgnoreEnabled
+    if b:NERDTreeIgnoreEnabled
         for i in g:NERDTreeIgnore
             if lastPathComponent =~ i
                 return 1
@@ -1351,11 +1351,11 @@ function! s:Path.ignore()
     endif
 
     "dont show hidden files unless instructed to
-    if t:NERDTreeShowHidden == 0 && lastPathComponent =~ '^\.'
+    if b:NERDTreeShowHidden == 0 && lastPathComponent =~ '^\.'
         return 1
     endif
 
-    if t:NERDTreeShowFiles == 0 && self.isDirectory == 0
+    if b:NERDTreeShowFiles == 0 && self.isDirectory == 0
         return 1
     endif
 
@@ -1702,30 +1702,32 @@ function! s:initNerdTree(name)
         exec 'cd ' . path.strForCd()
     endif
 
-    let t:treeShowHelp = 0
-    let t:NERDTreeIgnoreEnabled = 1
-    let t:NERDTreeShowFiles = g:NERDTreeShowFiles
-    let t:NERDTreeShowHidden = g:NERDTreeShowHidden
-    let t:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks
-
     if s:treeExistsForTab()
         if s:isTreeOpen()
             call s:closeTree()
         endif
-        unlet t:NERDTreeRoot
+        unlet b:NERDTreeRoot
     endif
 
-    let t:NERDTreeRoot = s:TreeDirNode.New(path)
-    call t:NERDTreeRoot.open()
+    let newRoot = s:TreeDirNode.New(path)
+    call newRoot.open()
 
     call s:createTreeWin()
+    let b:treeShowHelp = 0
+    let b:NERDTreeIgnoreEnabled = 1
+    let b:NERDTreeShowFiles = g:NERDTreeShowFiles
+    let b:NERDTreeShowHidden = g:NERDTreeShowHidden
+    let b:NERDTreeShowBookmarks = g:NERDTreeShowBookmarks
+    let b:NERDTreeRoot = newRoot
+
     call s:renderView()
-    call s:putCursorOnNode(t:NERDTreeRoot, 0, 0)
+    call s:putCursorOnNode(b:NERDTreeRoot, 0, 0)
 endfunction
+
 " Function: s:treeExistsForTab()   {{{2
 " Returns 1 if a nerd tree root exists in the current tab
 function! s:treeExistsForTab()
-    return exists("t:NERDTreeRoot")
+    return exists("t:NERDTreeBufName")
 endfunction
 " SECTION: Public Functions {{{1
 "============================================================
@@ -1821,8 +1823,10 @@ function! s:createTreeWin()
     let splitLocation = (g:NERDTreeWinPos == "top" || g:NERDTreeWinPos == "left") ? "topleft " : "botright "
     let splitMode = s:shouldSplitVertically() ? "vertical " : ""
     let splitSize = g:NERDTreeWinSize
-    let t:NERDTreeWinName = localtime() . s:NERDTreeWinName
-    let cmd = splitLocation . splitMode . splitSize . ' new ' . t:NERDTreeWinName
+    if !exists('t:NERDTreeBufName')
+        let t:NERDTreeBufName = localtime() . s:NERDTreeBufName
+    endif
+    let cmd = splitLocation . splitMode . splitSize . ' new ' . t:NERDTreeBufName
     silent! execute cmd
 
     setlocal winfixwidth
@@ -1830,7 +1834,7 @@ function! s:createTreeWin()
     "throwaway buffer options
     setlocal noswapfile
     setlocal buftype=nofile
-    setlocal bufhidden=delete
+    "setlocal bufhidden=delete
     setlocal nowrap
     setlocal foldcolumn=0
     setlocal nobuflisted
@@ -1935,7 +1939,7 @@ endfunction
 "prints out the quick help
 function! s:dumpHelp()
     let old_h = @h
-    if t:treeShowHelp == 1
+    if b:treeShowHelp == 1
         let @h=   "\" NERD tree (" . s:NERD_tree_version . ") quickhelp~\n"
         let @h=@h."\" ============================\n"
         let @h=@h."\" File node mappings~\n"
@@ -1993,10 +1997,10 @@ function! s:dumpHelp()
 
         let @h=@h."\"\n\" ----------------------------\n"
         let @h=@h."\" Tree filtering mappings~\n"
-        let @h=@h."\" ". g:NERDTreeMapToggleHidden .": hidden files (" . (t:NERDTreeShowHidden ? "on" : "off") . ")\n"
-        let @h=@h."\" ". g:NERDTreeMapToggleFilters .": file filters (" . (t:NERDTreeIgnoreEnabled ? "on" : "off") . ")\n"
-        let @h=@h."\" ". g:NERDTreeMapToggleFiles .": files (" . (t:NERDTreeShowFiles ? "on" : "off") . ")\n"
-        let @h=@h."\" ". g:NERDTreeMapToggleBookmarks .": bookmarks (" . (t:NERDTreeShowBookmarks ? "on" : "off") . ")\n"
+        let @h=@h."\" ". g:NERDTreeMapToggleHidden .": hidden files (" . (b:NERDTreeShowHidden ? "on" : "off") . ")\n"
+        let @h=@h."\" ". g:NERDTreeMapToggleFilters .": file filters (" . (b:NERDTreeIgnoreEnabled ? "on" : "off") . ")\n"
+        let @h=@h."\" ". g:NERDTreeMapToggleFiles .": files (" . (b:NERDTreeShowFiles ? "on" : "off") . ")\n"
+        let @h=@h."\" ". g:NERDTreeMapToggleBookmarks .": bookmarks (" . (b:NERDTreeShowBookmarks ? "on" : "off") . ")\n"
 
         let @h=@h."\"\n\" ----------------------------\n"
         let @h=@h."\" Other mappings~\n"
@@ -2059,7 +2063,7 @@ function! s:findNodeLineNumber(treenode)
     let totalLines = line("$")
 
     "the path components we have matched so far
-    let pathcomponents = [substitute(t:NERDTreeRoot.path.str(0), '/ *$', '', '')]
+    let pathcomponents = [substitute(b:NERDTreeRoot.path.str(0), '/ *$', '', '')]
     "the index of the component we are searching for
     let curPathComponent = 1
 
@@ -2137,7 +2141,7 @@ function! s:getPath(ln)
 
     "check to see if we have the root node
     if line =~ '^\/'
-        return t:NERDTreeRoot.path
+        return b:NERDTreeRoot.path
     endif
 
     " in case called from outside the tree
@@ -2146,7 +2150,7 @@ function! s:getPath(ln)
     endif
 
     if line == s:tree_up_dir_line
-        return t:NERDTreeRoot.path.getParent()
+        return b:NERDTreeRoot.path.getParent()
     endif
 
     let indent = s:indentLevelFor(line)
@@ -2183,7 +2187,7 @@ function! s:getPath(ln)
             endif
         endif
     endwhile
-    let curFile = t:NERDTreeRoot.path.drive . dir . curFile
+    let curFile = b:NERDTreeRoot.path.drive . dir . curFile
     let toReturn = s:Path.New(curFile)
     return toReturn
 endfunction
@@ -2223,7 +2227,7 @@ function! s:getSelectedNode()
         if path == {}
             return {}
         endif
-        return t:NERDTreeRoot.findNode(path)
+        return b:NERDTreeRoot.findNode(path)
     catch /^NERDTree/
         return {}
     endtry
@@ -2231,8 +2235,8 @@ endfunction
 "FUNCTION: s:getTreeWinNum() {{{2
 "gets the nerd tree window number for this tab
 function! s:getTreeWinNum()
-    if exists("t:NERDTreeWinName")
-        return bufwinnr(t:NERDTreeWinName)
+    if exists("t:NERDTreeBufName")
+        return bufwinnr(t:NERDTreeBufName)
     else
         return -1
     endif
@@ -2455,7 +2459,7 @@ function! s:openNodeSplit(treenode)
 
     "resize the tree window if no other window was open before
     if onlyOneWin
-        let size = exists("t:NERDTreeOldWindowSize") ? t:NERDTreeOldWindowSize : g:NERDTreeWinSize
+        let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize
         exec(there)
         exec("silent ". splitMode ." resize ". size)
         wincmd p
@@ -2484,7 +2488,7 @@ endfunction
 "FUNCTION: s:putCursorOnBookmarkTable(){{{2
 "Places the cursor at the top of the bookmarks table
 function! s:putCursorOnBookmarkTable()
-    if !t:NERDTreeShowBookmarks
+    if !b:NERDTreeShowBookmarks
         throw "NERDTree.IllegalOperation exception: cant find bookmark table, bookmarks arent active"
     endif
 
@@ -2558,8 +2562,6 @@ endfunction
 "
 "Args:
 function! s:renderView()
-    execute s:getTreeWinNum() . "wincmd w"
-
     setlocal modifiable
 
     "remember the top line of the buffer and the current line so we can
@@ -2577,7 +2579,7 @@ function! s:renderView()
     call setline(line(".")+1, "")
     call cursor(line(".")+1, col("."))
 
-    if t:NERDTreeShowBookmarks
+    if b:NERDTreeShowBookmarks
         call s:renderBookmarks()
     endif
 
@@ -2586,11 +2588,11 @@ function! s:renderView()
     call cursor(line(".")+1, col("."))
 
     "draw the header line
-    call setline(line(".")+1, t:NERDTreeRoot.path.str(0))
+    call setline(line(".")+1, b:NERDTreeRoot.path.str(0))
     call cursor(line(".")+1, col("."))
 
     "draw the tree
-    call s:drawTree(t:NERDTreeRoot, 0, 0, [], t:NERDTreeRoot.getChildCount() == 1)
+    call s:drawTree(b:NERDTreeRoot, 0, 0, [], b:NERDTreeRoot.getChildCount() == 1)
 
     "delete the blank line at the top of the buffer
     silent 1,1delete _
@@ -2631,16 +2633,16 @@ endfunction
 "
 "Assumes the cursor is in the NERDTree window
 function! s:restoreScreenState()
-    if !exists("t:NERDTreeOldTopLine") || !exists("t:NERDTreeOldPos") || !exists("t:NERDTreeOldWindowSize")
+    if !exists("b:NERDTreeOldTopLine") || !exists("b:NERDTreeOldPos") || !exists("b:NERDTreeOldWindowSize")
         return
     endif
-    exec("silent ". (s:shouldSplitVertically() ? "vertical" : "") ." resize ".t:NERDTreeOldWindowSize)
+    exec("silent ". (s:shouldSplitVertically() ? "vertical" : "") ." resize ".b:NERDTreeOldWindowSize)
 
     let old_scrolloff=&scrolloff
     let &scrolloff=0
-    call cursor(t:NERDTreeOldTopLine, 0)
+    call cursor(b:NERDTreeOldTopLine, 0)
     normal! zt
-    call setpos(".", t:NERDTreeOldPos)
+    call setpos(".", b:NERDTreeOldPos)
     let &scrolloff=old_scrolloff
 endfunction
 
@@ -2651,9 +2653,9 @@ function! s:saveScreenState()
     let win = winnr()
     try
         call s:putCursorInTreeWin()
-        let t:NERDTreeOldPos = getpos(".")
-        let t:NERDTreeOldTopLine = line("w0")
-        let t:NERDTreeOldWindowSize = s:shouldSplitVertically() ? winwidth("") : winheight("")
+        let b:NERDTreeOldPos = getpos(".")
+        let b:NERDTreeOldTopLine = line("w0")
+        let b:NERDTreeOldWindowSize = s:shouldSplitVertically() ? winwidth("") : winheight("")
         exec win . "wincmd w"
     catch /NERDTree.view.InvalidOperation/
     endtry
@@ -2803,8 +2805,6 @@ function! s:toggle(dir)
     if s:treeExistsForTab()
         if !s:isTreeOpen()
             call s:createTreeWin()
-            call s:renderView()
-
             call s:restoreScreenState()
         else
             call s:closeTree()
@@ -2985,7 +2985,7 @@ function! s:chRoot()
 
     call treenode.makeRoot()
     call s:renderView()
-    call s:putCursorOnNode(t:NERDTreeRoot, 0, 0)
+    call s:putCursorOnNode(b:NERDTreeRoot, 0, 0)
 endfunction
 
 " FUNCTION: s:clearBookmarks(bookmarks) {{{2
@@ -3153,7 +3153,7 @@ endfunction
 " FUNCTION: s:displayHelp() {{{2
 " toggles the help display
 function! s:displayHelp()
-    let t:treeShowHelp = t:treeShowHelp ? 0 : 1
+    let b:treeShowHelp = b:treeShowHelp ? 0 : 1
     call s:renderView()
     call s:centerView()
 endfunction
@@ -3215,7 +3215,7 @@ function! s:insertNewNode()
 
     try
         let newPath = s:Path.Create(newNodeName)
-        let parentNode = t:NERDTreeRoot.findNode(newPath.getPathTrunk())
+        let parentNode = b:NERDTreeRoot.findNode(newPath.getPathTrunk())
 
         let newTreeNode = s:TreeFileNode.New(newPath)
         if parentNode.isOpen || !empty(parentNode.children)
@@ -3259,7 +3259,7 @@ endfunction
 " FUNCTION: s:jumpToRoot() {{{2
 " moves the cursor to the root node
 function! s:jumpToRoot()
-    call s:putCursorOnNode(t:NERDTreeRoot, 1, 0)
+    call s:putCursorOnNode(b:NERDTreeRoot, 1, 0)
     call s:centerView()
 endfunction
 
@@ -3401,7 +3401,7 @@ endfunction
 " will be reloaded.
 function! s:refreshRoot()
     call s:echo("Refreshing the root node. This could take a while...")
-    call t:NERDTreeRoot.refresh()
+    call b:NERDTreeRoot.refresh()
     call s:renderView()
     redraw
     call s:echo("Refreshing the root node. This could take a while... DONE")
@@ -3501,7 +3501,7 @@ endfunction
 " FUNCTION: s:toggleIgnoreFilter() {{{2
 " toggles the use of the NERDTreeIgnore option
 function! s:toggleIgnoreFilter()
-    let t:NERDTreeIgnoreEnabled = !t:NERDTreeIgnoreEnabled
+    let b:NERDTreeIgnoreEnabled = !b:NERDTreeIgnoreEnabled
     call s:renderViewSavingPosition()
     call s:centerView()
 endfunction
@@ -3509,8 +3509,8 @@ endfunction
 " FUNCTION: s:toggleShowBookmarks() {{{2
 " toggles the display of bookmarks
 function! s:toggleShowBookmarks()
-    let t:NERDTreeShowBookmarks = !t:NERDTreeShowBookmarks
-    if t:NERDTreeShowBookmarks
+    let b:NERDTreeShowBookmarks = !b:NERDTreeShowBookmarks
+    if b:NERDTreeShowBookmarks
         call s:renderView()
         call s:putCursorOnBookmarkTable()
     else
@@ -3521,7 +3521,7 @@ endfunction
 " FUNCTION: s:toggleShowFiles() {{{2
 " toggles the display of hidden files
 function! s:toggleShowFiles()
-    let t:NERDTreeShowFiles = !t:NERDTreeShowFiles
+    let b:NERDTreeShowFiles = !b:NERDTreeShowFiles
     call s:renderViewSavingPosition()
     call s:centerView()
 endfunction
@@ -3529,7 +3529,7 @@ endfunction
 " FUNCTION: s:toggleShowHidden() {{{2
 " toggles the display of hidden files
 function! s:toggleShowHidden()
-    let t:NERDTreeShowHidden = !t:NERDTreeShowHidden
+    let b:NERDTreeShowHidden = !b:NERDTreeShowHidden
     call s:renderViewSavingPosition()
     call s:centerView()
 endfunction
@@ -3541,24 +3541,24 @@ endfunction
 "keepState: 1 if the current root should be left open when the tree is
 "re-rendered
 function! s:upDir(keepState)
-    let cwd = t:NERDTreeRoot.path.str(0)
+    let cwd = b:NERDTreeRoot.path.str(0)
     if cwd == "/" || cwd =~ '^[^/]..$'
         call s:echo("already at top dir")
     else
         if !a:keepState
-            call t:NERDTreeRoot.close()
+            call b:NERDTreeRoot.close()
         endif
 
-        let oldRoot = t:NERDTreeRoot
+        let oldRoot = b:NERDTreeRoot
 
-        if empty(t:NERDTreeRoot.parent)
-            let path = t:NERDTreeRoot.path.getPathTrunk()
+        if empty(b:NERDTreeRoot.parent)
+            let path = b:NERDTreeRoot.path.getPathTrunk()
             let newRoot = s:TreeDirNode.New(path)
             call newRoot.open()
-            call newRoot.transplantChild(t:NERDTreeRoot)
-            let t:NERDTreeRoot = newRoot
+            call newRoot.transplantChild(b:NERDTreeRoot)
+            let b:NERDTreeRoot = newRoot
         else
-            let t:NERDTreeRoot = t:NERDTreeRoot.parent
+            let b:NERDTreeRoot = b:NERDTreeRoot.parent
 
         endif