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:
