nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
lib/nerdtree/nerdtree.vim (5855B)
   1 "CLASS: NERDTree
   2 "============================================================
   3 let s:NERDTree = {}
   4 let g:NERDTree = s:NERDTree
   5 
   6 "FUNCTION: s:NERDTree.AddPathFilter() {{{1
   7 function! s:NERDTree.AddPathFilter(callback)
   8     call add(s:NERDTree.PathFilters(), a:callback)
   9 endfunction
  10 
  11 "FUNCTION: s:NERDTree.changeRoot(node) {{{1
  12 function! s:NERDTree.changeRoot(node)
  13     if a:node.path.isDirectory
  14         let self.root = a:node
  15     else
  16         call a:node.cacheParent()
  17         let self.root = a:node.parent
  18     endif
  19 
  20     call self.root.open()
  21 
  22     "change dir to the dir of the new root if instructed to
  23     if g:NERDTreeChDirMode >= 2
  24         call self.root.path.changeToDir()
  25     endif
  26 
  27     call self.render()
  28     call self.root.putCursorHere(0, 0)
  29 
  30     if exists('#User#NERDTreeNewRoot')
  31         doautocmd User NERDTreeNewRoot
  32     endif
  33 endfunction
  34 
  35 "FUNCTION: s:NERDTree.Close() {{{1
  36 "Closes the tab tree window for this tab
  37 function! s:NERDTree.Close()
  38     if !s:NERDTree.IsOpen()
  39         return
  40     endif
  41 
  42     if winnr('$') !=# 1
  43         " Use the window ID to identify the currently active window or fall
  44         " back on the buffer ID if win_getid/win_gotoid are not available, in
  45         " which case we'll focus an arbitrary window showing the buffer.
  46         let l:useWinId = exists('*win_getid') && exists('*win_gotoid')
  47 
  48         if winnr() ==# s:NERDTree.GetWinNum()
  49             call nerdtree#exec('wincmd p', 1)
  50             let l:activeBufOrWin = l:useWinId ? win_getid() : bufnr('')
  51             call nerdtree#exec('wincmd p', 1)
  52         else
  53             let l:activeBufOrWin = l:useWinId ? win_getid() : bufnr('')
  54         endif
  55 
  56         call nerdtree#exec(s:NERDTree.GetWinNum() . ' wincmd w', 1)
  57         call nerdtree#exec('close', 0)
  58         if l:useWinId
  59             call nerdtree#exec('call win_gotoid(' . l:activeBufOrWin . ')', 0)
  60         else
  61             call nerdtree#exec(bufwinnr(l:activeBufOrWin) . ' wincmd w', 0)
  62         endif
  63     else
  64         close
  65     endif
  66 endfunction
  67 
  68 "FUNCTION: s:NERDTree.CursorToBookmarkTable(){{{1
  69 "Places the cursor at the top of the bookmarks table
  70 function! s:NERDTree.CursorToBookmarkTable()
  71     if !b:NERDTree.ui.getShowBookmarks()
  72         throw 'NERDTree.IllegalOperationError: cant find bookmark table, bookmarks arent active'
  73     endif
  74 
  75     if g:NERDTreeMinimalUI
  76         return cursor(1, 2)
  77     endif
  78 
  79     let rootNodeLine = b:NERDTree.ui.getRootLineNum()
  80 
  81     let line = 1
  82     while getline(line) !~# '^>-\+Bookmarks-\+$'
  83         let line = line + 1
  84         if line >= rootNodeLine
  85             throw 'NERDTree.BookmarkTableNotFoundError: didnt find the bookmarks table'
  86         endif
  87     endwhile
  88     call cursor(line, 2)
  89 endfunction
  90 
  91 "FUNCTION: s:NERDTree.CursorToTreeWin(){{{1
  92 "Places the cursor in the nerd tree window
  93 function! s:NERDTree.CursorToTreeWin(...)
  94     call g:NERDTree.MustBeOpen()
  95     call nerdtree#exec(g:NERDTree.GetWinNum() . 'wincmd w', a:0 >0 ? a:1 : 1)
  96 endfunction
  97 
  98 " Function: s:NERDTree.ExistsForBuffer()   {{{1
  99 " Returns 1 if a nerd tree root exists in the current buffer
 100 function! s:NERDTree.ExistsForBuf()
 101     return exists('b:NERDTree')
 102 endfunction
 103 
 104 " Function: s:NERDTree.ExistsForTab()   {{{1
 105 " Returns 1 if a nerd tree root exists in the current tab
 106 function! s:NERDTree.ExistsForTab()
 107     if !exists('t:NERDTreeBufName')
 108         return
 109     end
 110 
 111     "check b:NERDTree is still there and hasn't been e.g. :bdeleted
 112     return !empty(getbufvar(bufnr(t:NERDTreeBufName), 'NERDTree'))
 113 endfunction
 114 
 115 function! s:NERDTree.ForCurrentBuf()
 116     if s:NERDTree.ExistsForBuf()
 117         return b:NERDTree
 118     else
 119         return {}
 120     endif
 121 endfunction
 122 
 123 "FUNCTION: s:NERDTree.ForCurrentTab() {{{1
 124 function! s:NERDTree.ForCurrentTab()
 125     if !s:NERDTree.ExistsForTab()
 126         return
 127     endif
 128 
 129     let bufnr = bufnr(t:NERDTreeBufName)
 130     return getbufvar(bufnr, 'NERDTree')
 131 endfunction
 132 
 133 "FUNCTION: s:NERDTree.getRoot() {{{1
 134 function! s:NERDTree.getRoot()
 135     return self.root
 136 endfunction
 137 
 138 "FUNCTION: s:NERDTree.GetWinNum() {{{1
 139 "gets the nerd tree window number for this tab
 140 function! s:NERDTree.GetWinNum()
 141     if exists('t:NERDTreeBufName')
 142         return bufwinnr(t:NERDTreeBufName)
 143     endif
 144 
 145     " If WindowTree, there is no t:NERDTreeBufName variable. Search all windows.
 146     for w in range(1,winnr('$'))
 147         if bufname(winbufnr(w)) =~# '^' . g:NERDTreeCreator.BufNamePrefix() . '\d\+$'
 148             return w
 149         endif
 150     endfor
 151 
 152     return -1
 153 endfunction
 154 
 155 "FUNCTION: s:NERDTree.IsOpen() {{{1
 156 function! s:NERDTree.IsOpen()
 157     return s:NERDTree.GetWinNum() !=# -1
 158 endfunction
 159 
 160 "FUNCTION: s:NERDTree.isTabTree() {{{1
 161 function! s:NERDTree.isTabTree()
 162     return self._type ==# 'tab'
 163 endfunction
 164 
 165 "FUNCTION: s:NERDTree.isWinTree() {{{1
 166 function! s:NERDTree.isWinTree()
 167     return self._type ==# 'window'
 168 endfunction
 169 
 170 "FUNCTION: s:NERDTree.MustBeOpen() {{{1
 171 function! s:NERDTree.MustBeOpen()
 172     if !s:NERDTree.IsOpen()
 173         throw 'NERDTree.TreeNotOpen'
 174     endif
 175 endfunction
 176 
 177 "FUNCTION: s:NERDTree.New() {{{1
 178 function! s:NERDTree.New(path, type)
 179     let newObj = copy(self)
 180     let newObj.ui = g:NERDTreeUI.New(newObj)
 181     let newObj.root = g:NERDTreeDirNode.New(a:path, newObj)
 182     let newObj._type = a:type
 183     return newObj
 184 endfunction
 185 
 186 "FUNCTION: s:NERDTree.PathFilters() {{{1
 187 function! s:NERDTree.PathFilters()
 188     if !exists('s:NERDTree._PathFilters')
 189         let s:NERDTree._PathFilters = []
 190     endif
 191     return s:NERDTree._PathFilters
 192 endfunction
 193 
 194 "FUNCTION: s:NERDTree.previousBuf() {{{1
 195 function! s:NERDTree.previousBuf()
 196     return self._previousBuf
 197 endfunction
 198 
 199 function! s:NERDTree.setPreviousBuf(bnum)
 200     let self._previousBuf = a:bnum
 201 endfunction
 202 
 203 "FUNCTION: s:NERDTree.render() {{{1
 204 "A convenience function - since this is called often
 205 function! s:NERDTree.render()
 206     call self.ui.render()
 207 endfunction
 208 
 209 " vim: set sw=4 sts=4 et fdm=marker: