1
0
Fork 0
mirror of synced 2024-11-16 14:05:34 -05:00
ultimate-vim/sources_non_forked/nerdtree/lib/nerdtree/nerdtree.vim

216 lines
5.9 KiB
VimL
Raw Normal View History

2014-08-03 18:02:51 -04:00
"CLASS: NERDTree
"============================================================
let s:NERDTree = {}
let g:NERDTree = s:NERDTree
2015-07-13 06:22:46 -04:00
"FUNCTION: s:NERDTree.AddPathFilter() {{{1
function! s:NERDTree.AddPathFilter(callback)
call add(s:NERDTree.PathFilters(), a:callback)
endfunction
2015-12-08 08:20:04 -05:00
"FUNCTION: s:NERDTree.changeRoot(node) {{{1
function! s:NERDTree.changeRoot(node)
if a:node.path.isDirectory
let self.root = a:node
else
call a:node.cacheParent()
let self.root = a:node.parent
endif
call self.root.open()
"change dir to the dir of the new root if instructed to
2019-11-16 10:28:42 -05:00
if g:NERDTreeChDirMode >= 2
call self.root.path.changeToDir()
2015-12-08 08:20:04 -05:00
endif
call self.render()
call self.root.putCursorHere(0, 0)
silent doautocmd User NERDTreeNewRoot
endfunction
2015-07-13 06:22:46 -04:00
"FUNCTION: s:NERDTree.Close() {{{1
2015-12-08 08:20:04 -05:00
"Closes the tab tree window for this tab
2015-07-13 06:22:46 -04:00
function! s:NERDTree.Close()
if !s:NERDTree.IsOpen()
return
endif
if winnr("$") != 1
2018-02-04 06:35:08 -05:00
" Use the window ID to identify the currently active window or fall
" back on the buffer ID if win_getid/win_gotoid are not available, in
" which case we'll focus an arbitrary window showing the buffer.
let l:useWinId = exists('*win_getid') && exists('*win_gotoid')
2015-07-13 06:22:46 -04:00
if winnr() == s:NERDTree.GetWinNum()
2019-08-22 11:36:17 -04:00
call nerdtree#exec("wincmd p", 1)
2018-02-04 06:35:08 -05:00
let l:activeBufOrWin = l:useWinId ? win_getid() : bufnr("")
2019-08-22 11:36:17 -04:00
call nerdtree#exec("wincmd p", 1)
2015-07-13 06:22:46 -04:00
else
2018-02-04 06:35:08 -05:00
let l:activeBufOrWin = l:useWinId ? win_getid() : bufnr("")
2015-07-13 06:22:46 -04:00
endif
2019-08-22 11:36:17 -04:00
call nerdtree#exec(s:NERDTree.GetWinNum() . " wincmd w", 1)
2019-11-16 10:28:42 -05:00
call nerdtree#exec("close", 0)
2018-02-04 06:35:08 -05:00
if l:useWinId
2019-08-22 11:36:17 -04:00
call nerdtree#exec("call win_gotoid(" . l:activeBufOrWin . ")", 0)
2018-02-04 06:35:08 -05:00
else
2019-08-22 11:36:17 -04:00
call nerdtree#exec(bufwinnr(l:activeBufOrWin) . " wincmd w", 0)
2018-02-04 06:35:08 -05:00
endif
2015-07-13 06:22:46 -04:00
else
close
endif
endfunction
"FUNCTION: s:NERDTree.CloseIfQuitOnOpen() {{{1
"Closes the NERD tree window if the close on open option is set
function! s:NERDTree.CloseIfQuitOnOpen()
2019-05-17 10:09:13 -04:00
if nerdtree#and(g:NERDTreeQuitOnOpen,1) && s:NERDTree.IsOpen()
2015-07-13 06:22:46 -04:00
call s:NERDTree.Close()
endif
endfunction
"FUNCTION: s:NERDTree.CursorToBookmarkTable(){{{1
"Places the cursor at the top of the bookmarks table
function! s:NERDTree.CursorToBookmarkTable()
2015-12-08 08:20:04 -05:00
if !b:NERDTree.ui.getShowBookmarks()
2015-07-13 06:22:46 -04:00
throw "NERDTree.IllegalOperationError: cant find bookmark table, bookmarks arent active"
endif
if g:NERDTreeMinimalUI
return cursor(1, 2)
endif
let rootNodeLine = b:NERDTree.ui.getRootLineNum()
let line = 1
while getline(line) !~# '^>-\+Bookmarks-\+$'
let line = line + 1
if line >= rootNodeLine
throw "NERDTree.BookmarkTableNotFoundError: didnt find the bookmarks table"
endif
endwhile
call cursor(line, 2)
endfunction
"FUNCTION: s:NERDTree.CursorToTreeWin(){{{1
"Places the cursor in the nerd tree window
function! s:NERDTree.CursorToTreeWin()
call g:NERDTree.MustBeOpen()
2019-08-22 11:36:17 -04:00
call nerdtree#exec(g:NERDTree.GetWinNum() . "wincmd w", 1)
2015-07-13 06:22:46 -04:00
endfunction
2014-08-03 18:02:51 -04:00
" Function: s:NERDTree.ExistsForBuffer() {{{1
" Returns 1 if a nerd tree root exists in the current buffer
function! s:NERDTree.ExistsForBuf()
2015-12-08 08:20:04 -05:00
return exists("b:NERDTree")
2014-08-03 18:02:51 -04:00
endfunction
" Function: s:NERDTree.ExistsForTab() {{{1
" Returns 1 if a nerd tree root exists in the current tab
function! s:NERDTree.ExistsForTab()
2015-12-08 08:20:04 -05:00
if !exists("t:NERDTreeBufName")
return
end
"check b:NERDTree is still there and hasn't been e.g. :bdeleted
return !empty(getbufvar(bufnr(t:NERDTreeBufName), 'NERDTree'))
2014-08-03 18:02:51 -04:00
endfunction
function! s:NERDTree.ForCurrentBuf()
if s:NERDTree.ExistsForBuf()
return b:NERDTree
else
return {}
endif
endfunction
2015-12-08 08:20:04 -05:00
"FUNCTION: s:NERDTree.ForCurrentTab() {{{1
function! s:NERDTree.ForCurrentTab()
if !s:NERDTree.ExistsForTab()
return
endif
let bufnr = bufnr(t:NERDTreeBufName)
return getbufvar(bufnr, "NERDTree")
endfunction
"FUNCTION: s:NERDTree.getRoot() {{{1
function! s:NERDTree.getRoot()
return self.root
endfunction
2015-07-13 06:22:46 -04:00
"FUNCTION: s:NERDTree.GetWinNum() {{{1
"gets the nerd tree window number for this tab
function! s:NERDTree.GetWinNum()
if exists("t:NERDTreeBufName")
return bufwinnr(t:NERDTreeBufName)
endif
2015-12-08 08:20:04 -05:00
2019-11-16 10:28:42 -05:00
" If WindowTree, there is no t:NERDTreeBufName variable. Search all windows.
for w in range(1,winnr('$'))
if bufname(winbufnr(w)) =~# '^' . g:NERDTreeCreator.BufNamePrefix() . '\d\+$'
return w
endif
endfor
2015-12-08 08:20:04 -05:00
return -1
2015-07-13 06:22:46 -04:00
endfunction
"FUNCTION: s:NERDTree.IsOpen() {{{1
function! s:NERDTree.IsOpen()
2019-11-16 10:28:42 -05:00
return s:NERDTree.GetWinNum() != -1
2015-07-13 06:22:46 -04:00
endfunction
2015-12-08 08:20:04 -05:00
"FUNCTION: s:NERDTree.isTabTree() {{{1
function! s:NERDTree.isTabTree()
return self._type == "tab"
endfunction
"FUNCTION: s:NERDTree.isWinTree() {{{1
function! s:NERDTree.isWinTree()
return self._type == "window"
endfunction
2015-07-13 06:22:46 -04:00
"FUNCTION: s:NERDTree.MustBeOpen() {{{1
function! s:NERDTree.MustBeOpen()
if !s:NERDTree.IsOpen()
throw "NERDTree.TreeNotOpen"
endif
endfunction
"FUNCTION: s:NERDTree.New() {{{1
2015-12-08 08:20:04 -05:00
function! s:NERDTree.New(path, type)
2014-08-03 18:02:51 -04:00
let newObj = copy(self)
let newObj.ui = g:NERDTreeUI.New(newObj)
2015-12-08 08:20:04 -05:00
let newObj.root = g:NERDTreeDirNode.New(a:path, newObj)
let newObj._type = a:type
2014-08-03 18:02:51 -04:00
return newObj
endfunction
2015-07-13 06:22:46 -04:00
"FUNCTION: s:NERDTree.PathFilters() {{{1
function! s:NERDTree.PathFilters()
if !exists('s:NERDTree._PathFilters')
let s:NERDTree._PathFilters = []
endif
return s:NERDTree._PathFilters
endfunction
2015-12-08 08:20:04 -05:00
"FUNCTION: s:NERDTree.previousBuf() {{{1
function! s:NERDTree.previousBuf()
return self._previousBuf
endfunction
2015-07-13 06:22:46 -04:00
2016-11-09 12:22:55 -05:00
function! s:NERDTree.setPreviousBuf(bnum)
let self._previousBuf = a:bnum
endfunction
2014-08-03 18:02:51 -04:00
"FUNCTION: s:NERDTree.render() {{{1
"A convenience function - since this is called often
function! s:NERDTree.render()
call self.ui.render()
endfunction
2018-02-04 06:35:08 -05:00
" vim: set sw=4 sts=4 et fdm=marker: