You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

507 lines
17 KiB
VimL

Squashed 'vim/bundle/nerdtree/' changes from b0bb781fc..4dada8c04 4dada8c04 update version number to 5.0.0 be8f18914 remove some unneeded header comments f486403b6 add license file 024966c7a move changelog out of the main doc, remove credits section e4891632f update changelog 0c13ebc12 remove some old commented code e27ab9c5c fsmenu: use nerdtree#echo* methods instead of reimplementing them 5b7085d9a fs menu: remove unused var assigns adc11983b fs_menu: put the NERDTreeListNode* methods together b19995b14 Merge pull request #382 from PhilRunninger/master 3fb18e739 Switch to upper case DIR /Q, in true DOS fashion f1af61ddf Use the system('DIR /Q...') function to display file info. c60f40137 Merge (p)roperties (for Windows) into the (l)ist menu item. fb030bcb1 Merge pull request #1 from scrooloose/master 47c20c4b6 Merge pull request #378 from Xuyuanp/up/master d38438209 Merge pull request #470 from egalpin/master af13d3965 Merge pull request #488 from hiberabyss/master caca3af21 Merge pull request #496 from evindor/master 3092ddf83 Merge pull request #502 from JESii/master 88104d26a Add ability to list file metadata... 8996ea5bb Fix MacOS detection for menu, fixes #478 34630f392 issue #147: add support to ~ expand in bookmarks 0b44415a3 Merge pull request #486 from Xuyuanp/syntax 43012a621 Merge pull request #484 from PickRelated/master d66370a8e Made NERDTreeFlags contained in NERDTreeExecFile 8c8c79410 Added character escaping to syn match regexes 8c7534bc9 Merge pull request #482 from PickRelated/master dc29ec2db Added global variables for changing default arrows g:NERDTreeDirArrowExpandable g:NERDTreeDirArrowCollapsable 188bd9265 Added global variables for changing default arrows bcf3de4fd Merge pull request #471 from SchDen/patch-1 f5fd12183 Incorrect path to event.vim 37f7a6cbe Update README.markdown 86e2e40af Merge pull request #466 from toiffel/master 93c9726c6 Fixed case-sensitive sorting of tree nodes when 'ignorecase' option is on 96c07746b Merge pull request #453 from WoLpH/patch-1 013c607ba Fixed incompatibility with older Vim versions af85499ed rename 2 sort key related vars 99fa465b5 fix syntax error 008b62f71 Merge pull request #450 from vtsang/master 6018af36b pretty up some FAQ code blocks 2c1ebc37b add an FAQ about highlighting file with certain extensions dfe260d1d doc the path listener API 10261d60a Updated the comment 80e184df5 Refactor code to use getSortKey() and replace regular expression with simple string comparison in tree_dir_node.vim 3fb3fe347 Merge branch 'master' of https://github.com/vtsang/nerdtree 57d5bd773 Speed up sortChildren() by using sorting token This improves the sorting functions from 12 seconds to 0.66 seconds for ~4000 objects 1f2531ec3 Speed up sortChildren() by using sorting token This improves the sorting functions from 12 seconds to 0.66 seconds for ~4000 objects a87b1bf3c Merge branch 'update_reuse_option' 5c2060149 doc NERDTreeAddPathFilter() 76dbc0c8e Merge branch 'add_path_filter_api' da3874cf9 fix a bug when opening files in a new tab 727021221 bugfix for secondary trees occurring when the screen state is saved 64a9579c1 add a path filter API 09e1dbec1 Merge branch 'refactor_autoload' fc4bcb480 remove UI.lolcats()... not sure what the story is there 8b189cb26 move some rendering and cursor moving functions out of autoload b0114d202 move dumpHelp out of autoload 53d2de86e move the closeTree functions out of autoload 0d88ce946 move isTreeOpen() out of autoload 8270b6d71 move nerdtree#getTreeWinNum out of autoload 973c9906f refactor 3 more functions out of the monolithic autoload file 0e87d45e8 update readme to add an FAQ, update the FAQ style and rm the changelog f8499462c Revert "Use different arrow characters for compatibility." 186f817f5 Revert "fix one of the old style arrows" 5cec19365 Merge pull request #411 from xdl/master b3281cc63 fix one of the old style arrows 87b27802b allow control over whether to reuse windows in different tabs 1cbd52aa7 Merge pull request #434 from handcraftedbits/master cd5f1685b Merge pull request #436 from devmanhinton/patch-1 321de6036 Remove NERD_tree.txt typo f6cad7e95 Use different arrow characters for compatibility. 6dfbcd660 Return early if exception was thrown in pathForString 3b98a7fca Merge pull request #403 from gcmt/pretty-cwd ba2604474 Truncate paths at slashes. f8fd2ecce Merge pull request #390 from zhangoose/patch-1 a895a53f1 easier to read one of the FAQ answers 3d421b8ec use the built in fnamemodify() to make a path relative 3ce33f017 fix escaping for `:edit` when renaming files 031ab5267 Merge remote-tracking branch 'origin/master' 5d0626a00 Merge pull request #384 from gastropoda/reopen-after-rename 1c0814622 apply @mixvin's windows path fix at the top of the method instead cd8d87fa5 Fix opening file path, in Windows 2fd0aa3ec Fix reloading renamed file 6ccf83df2 Add menu option to display file/directory properties. 5d1945228 Merge branch 'master' into up/master 8e06723c0 fix #363 a283c0e03 fix #363 4f1e6ecb0 Merge pull request #365 from ifsred/master c4086667e Fix doc map for NERDTreeMapChangeRoot a47c6caf8 Merge pull request #359 from Xuyuanp/up/master 8cd045d0e add refreshDirFlags method to avoid refreshing too many files c2dd75086 move nerdtree#treeExists.* methods into the NERDTree class fd14757c0 add proper events and make the notifier class generic f9a933991 allow plugins to override the default mappings aa831e242 Merge pull request #356 from alvan/patch-2 0c045d85e fix a bug from recent refactoring RE some NERDTreeCWD 2f552e116 add highlighting for flags 579d96a0f remove testing git plugin 9f351de59 Merge branch 'master' into expt_add_path_flags_and_git 1e0d1cbc8 move some more view code into the UI class 98a5d1fca Use event BufLeave instead of BufWinLeave to record screen state to avoid undefined b:NERDTree error 2f59cc208 Merge branch 'master' into expt_add_path_flags_and_git eaa66aaf6 fix the NERDTreeFind command - broken in recent refactoring 864462200 Merge branch 'master' into expt_add_path_flags_and_git 410081a60 Merge pull request #353 from lucascaton/master 1784de15d Updating creator.vim file (this fixes #352) 7f36008e8 Merge branch 'master' of github.com:scrooloose/nerdtree 23dfc6d81 continue breaking down the epic autoload module f982f61e8 continue breaking up the autoload/nerdtree god module 86488b1aa move ui functions out into their own autoload 04d9b2754 add `.refreshFlags()` to path/dir/file objects 3941389f1 fix a retarded bug with FlagSet.clearFlags 32cf3ee62 allow flags to be scoped to a plugin a7428eba3 add proof of concept for path flags API and add git modified flags 3effeb5cb Merge pull request #347 from kelaban/minor-fix-to-readme 04ac39b4b Fixes README for opening vim with no files d162c08fd comment and tweak the <LeftRelease> fix in 24561ad 2a769a726 Merge pull request #298 from buggo/master 0ee888ee1 simplify the <cr> mapping definition 0b551a8ab Merge pull request #346 from shanesmith/master 82cd4f5a9 Fix <CR> not working if active node map is special char such as <Right> b64942a50 uncomment out some needed syntax matching code... fail e954b2e6f trivial highlighting update for consistency e68e12a33 fix highlighting for readonly files b33d6daf0 remove the NERDChristmasTree option abb93879b simplify the syntax matching code slightly 634c23ead Merge branch 'better_symlink_highlighting' into update_highlighting 9d9edd03d separate out syntax matching for Dir Arrows vs old style 9704a38a1 update symlink highlighting 55a8954c4 update the doc/quickhelp for :Bookmark 0b1166ff7 update code in readme to auto-open a tree on startup b2d2cc184 Merge branch 'inkarkat-better-set-filetype' 4b89264df Merge branch 'better-set-filetype' of https://github.com/inkarkat/nerdtree into inkarkat-better-set-filetype 1168f5898 update the NERDTreeCascadeOpenSingleChildDir doc 0928b5b02 Merge pull request #251 from pendulm/master 8189597c0 Merge pull request #266 from staeff/patch-1 9e54c4808 Merge pull request #299 from tophsic/master 3863e6973 Merge pull request #316 from ZeroProbability/master 8b4841315 rename NERDTreeWildIgnore option and refactor the usage of it 186abb84c Merge pull request #303 from amarshall/wildignore 10ba84b1f Merge pull request #308 from igrep/patch-1 a45304832 Merge pull request #295 from DanielleSucher/create_parent_directories_as_needed dd8fe4bf6 Merge pull request #274 from an1zhegorodov/master e9427a9ca Merge pull request #326 from migueldvb/docs 23d2d1984 Merge pull request #331 from jinnko/add-bookmarks-sort-flag 1da289085 Merge pull request #338 from trkoch/spaces-umlauts 47a3a8410 Merge pull request #340 from netj/sort-hidden-first-option 43842e0de Option for mixing dot files when sorting fbab099fa Support space in path when renaming e38d8a834 Add flag to disable/enable bookmark sorting 603e6c74f Use pathogen.vim Helptags command in README file 13b4058f2 Issue 315 - Incorrect buffer deleted on file delete ad4ebaac9 correct invalid reference to MenuController a50c57192 Add option to respect wildignore 4f48af0cb Fix typo 24561ad59 Ugly hack to fix Error 121 when NERDTree is the active window and clicking on the command line below another window. eacd5d72e Create nested parent directories as needed 5b51f9d1b Fix help mistake 2ebe28468 Fixed typo in NERD_tree.txt 6ef67a2d8 Add correspoding close action to cascade open single child dir 60683f1cc Fix typo Casade to Cascade b8cab9bae Set filetype unconditionally and after defining mappings. git-subtree-dir: vim/bundle/nerdtree git-subtree-split: 4dada8c04fba25e788ea1836c82f9c18c1166b44
8 years ago
"CLASS: UI
"============================================================
let s:UI = {}
let g:NERDTreeUI = s:UI
"FUNCTION: s:UI.centerView() {{{2
"centers the nerd tree window around the cursor (provided the nerd tree
"options permit)
function! s:UI.centerView()
if g:NERDTreeAutoCenter
let current_line = winline()
let lines_to_top = current_line
let lines_to_bottom = winheight(g:NERDTree.GetWinNum()) - current_line
if lines_to_top < g:NERDTreeAutoCenterThreshold || lines_to_bottom < g:NERDTreeAutoCenterThreshold
normal! zz
endif
endif
endfunction
"FUNCTION: s:UI._dumpHelp {{{1
"prints out the quick help
function! s:UI._dumpHelp()
let old_h = @h
if b:treeShowHelp ==# 1
let @h= "\" NERD tree (" . nerdtree#version() . ") quickhelp~\n"
let @h=@h."\" ============================\n"
let @h=@h."\" File node mappings~\n"
let @h=@h."\" ". (g:NERDTreeMouseMode ==# 3 ? "single" : "double") ."-click,\n"
let @h=@h."\" <CR>,\n"
if b:NERDTreeType ==# "primary"
let @h=@h."\" ". g:NERDTreeMapActivateNode .": open in prev window\n"
else
let @h=@h."\" ". g:NERDTreeMapActivateNode .": open in current window\n"
endif
if b:NERDTreeType ==# "primary"
let @h=@h."\" ". g:NERDTreeMapPreview .": preview\n"
endif
let @h=@h."\" ". g:NERDTreeMapOpenInTab.": open in new tab\n"
let @h=@h."\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
let @h=@h."\" middle-click,\n"
let @h=@h."\" ". g:NERDTreeMapOpenSplit .": open split\n"
let @h=@h."\" ". g:NERDTreeMapPreviewSplit .": preview split\n"
let @h=@h."\" ". g:NERDTreeMapOpenVSplit .": open vsplit\n"
let @h=@h."\" ". g:NERDTreeMapPreviewVSplit .": preview vsplit\n"
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Directory node mappings~\n"
let @h=@h."\" ". (g:NERDTreeMouseMode ==# 1 ? "double" : "single") ."-click,\n"
let @h=@h."\" ". g:NERDTreeMapActivateNode .": open & close node\n"
let @h=@h."\" ". g:NERDTreeMapOpenRecursively .": recursively open node\n"
let @h=@h."\" ". g:NERDTreeMapCloseDir .": close parent of node\n"
let @h=@h."\" ". g:NERDTreeMapCloseChildren .": close all child nodes of\n"
let @h=@h."\" current node recursively\n"
let @h=@h."\" middle-click,\n"
let @h=@h."\" ". g:NERDTreeMapOpenExpl.": explore selected dir\n"
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Bookmark table mappings~\n"
let @h=@h."\" double-click,\n"
let @h=@h."\" ". g:NERDTreeMapActivateNode .": open bookmark\n"
let @h=@h."\" ". g:NERDTreeMapOpenInTab.": open in new tab\n"
let @h=@h."\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
let @h=@h."\" ". g:NERDTreeMapDeleteBookmark .": delete bookmark\n"
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Tree navigation mappings~\n"
let @h=@h."\" ". g:NERDTreeMapJumpRoot .": go to root\n"
let @h=@h."\" ". g:NERDTreeMapJumpParent .": go to parent\n"
let @h=@h."\" ". g:NERDTreeMapJumpFirstChild .": go to first child\n"
let @h=@h."\" ". g:NERDTreeMapJumpLastChild .": go to last child\n"
let @h=@h."\" ". g:NERDTreeMapJumpNextSibling .": go to next sibling\n"
let @h=@h."\" ". g:NERDTreeMapJumpPrevSibling .": go to prev sibling\n"
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Filesystem mappings~\n"
let @h=@h."\" ". g:NERDTreeMapChangeRoot .": change tree root to the\n"
let @h=@h."\" selected dir\n"
let @h=@h."\" ". g:NERDTreeMapUpdir .": move tree root up a dir\n"
let @h=@h."\" ". g:NERDTreeMapUpdirKeepOpen .": move tree root up a dir\n"
let @h=@h."\" but leave old root open\n"
let @h=@h."\" ". g:NERDTreeMapRefresh .": refresh cursor dir\n"
let @h=@h."\" ". g:NERDTreeMapRefreshRoot .": refresh current root\n"
let @h=@h."\" ". g:NERDTreeMapMenu .": Show menu\n"
let @h=@h."\" ". g:NERDTreeMapChdir .":change the CWD to the\n"
let @h=@h."\" selected dir\n"
let @h=@h."\" ". g:NERDTreeMapCWD .":change tree root to CWD\n"
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Tree filtering mappings~\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"
"add quickhelp entries for each custom key map
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Custom mappings~\n"
for i in g:NERDTreeKeyMap.All()
if !empty(i.quickhelpText)
let @h=@h."\" ". i.key .": ". i.quickhelpText ."\n"
endif
endfor
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Other mappings~\n"
let @h=@h."\" ". g:NERDTreeMapQuit .": Close the NERDTree window\n"
let @h=@h."\" ". g:NERDTreeMapToggleZoom .": Zoom (maximize-minimize)\n"
let @h=@h."\" the NERDTree window\n"
let @h=@h."\" ". g:NERDTreeMapHelp .": toggle help\n"
let @h=@h."\"\n\" ----------------------------\n"
let @h=@h."\" Bookmark commands~\n"
let @h=@h."\" :Bookmark [<name>]\n"
let @h=@h."\" :BookmarkToRoot <name>\n"
let @h=@h."\" :RevealBookmark <name>\n"
let @h=@h."\" :OpenBookmark <name>\n"
let @h=@h."\" :ClearBookmarks [<names>]\n"
let @h=@h."\" :ClearAllBookmarks\n"
silent! put h
elseif g:NERDTreeMinimalUI == 0
let @h="\" Press ". g:NERDTreeMapHelp ." for help\n"
silent! put h
endif
let @h = old_h
endfunction
"FUNCTION: s:UI.new(nerdtree) {{{1
function! s:UI.New(nerdtree)
let newObj = copy(self)
let newObj.nerdtree = a:nerdtree
return newObj
endfunction
"FUNCTION: s:UI.getPath(ln) {{{1
"Gets the full path to the node that is rendered on the given line number
"
"Args:
"ln: the line number to get the path for
"
"Return:
"A path if a node was selected, {} if nothing is selected.
"If the 'up a dir' line was selected then the path to the parent of the
"current root is returned
function! s:UI.getPath(ln)
let line = getline(a:ln)
let rootLine = self.getRootLineNum()
"check to see if we have the root node
if a:ln == rootLine
return b:NERDTreeRoot.path
endif
if !g:NERDTreeDirArrows
" in case called from outside the tree
if line !~# '^ *[|`'.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.' ]' || line =~# '^$'
return {}
endif
endif
if line ==# s:UI.UpDirLine()
return b:NERDTreeRoot.path.getParent()
endif
let indent = self._indentLevelFor(line)
"remove the tree parts and the leading space
let curFile = self._stripMarkup(line, 0)
let wasdir = 0
if curFile =~# '/$'
let wasdir = 1
let curFile = substitute(curFile, '/\?$', '/', "")
endif
let dir = ""
let lnum = a:ln
while lnum > 0
let lnum = lnum - 1
let curLine = getline(lnum)
let curLineStripped = self._stripMarkup(curLine, 1)
"have we reached the top of the tree?
if lnum == rootLine
let dir = b:NERDTreeRoot.path.str({'format': 'UI'}) . dir
break
endif
if curLineStripped =~# '/$'
let lpindent = self._indentLevelFor(curLine)
if lpindent < indent
let indent = indent - 1
let dir = substitute (curLineStripped,'^\\', "", "") . dir
continue
endif
endif
endwhile
let curFile = b:NERDTreeRoot.path.drive . dir . curFile
let toReturn = g:NERDTreePath.New(curFile)
return toReturn
endfunction
"FUNCTION: s:UI.getLineNum(file_node){{{1
"returns the line number this node is rendered on, or -1 if it isnt rendered
function! s:UI.getLineNum(file_node)
"if the node is the root then return the root line no.
if a:file_node.isRoot()
return b:NERDTree.ui.getRootLineNum()
endif
let totalLines = line("$")
"the path components we have matched so far
let pathcomponents = [substitute(b:NERDTreeRoot.path.str({'format': 'UI'}), '/ *$', '', '')]
"the index of the component we are searching for
let curPathComponent = 1
let fullpath = a:file_node.path.str({'format': 'UI'})
let lnum = b:NERDTree.ui.getRootLineNum()
while lnum > 0
let lnum = lnum + 1
"have we reached the bottom of the tree?
if lnum ==# totalLines+1
return -1
endif
let curLine = getline(lnum)
let indent = self._indentLevelFor(curLine)
if indent ==# curPathComponent
let curLine = self._stripMarkup(curLine, 1)
let curPath = join(pathcomponents, '/') . '/' . curLine
if stridx(fullpath, curPath, 0) ==# 0
if fullpath ==# curPath || strpart(fullpath, len(curPath)-1,1) ==# '/'
let curLine = substitute(curLine, '/ *$', '', '')
call add(pathcomponents, curLine)
let curPathComponent = curPathComponent + 1
if fullpath ==# curPath
return lnum
endif
endif
endif
endif
endwhile
return -1
endfunction
"FUNCTION: s:UI.getRootLineNum(){{{1
"gets the line number of the root node
function! s:UI.getRootLineNum()
let rootLine = 1
while getline(rootLine) !~# '^\(/\|<\)'
let rootLine = rootLine + 1
endwhile
return rootLine
endfunction
"FUNCTION: s:UI._indentLevelFor(line) {{{1
function! s:UI._indentLevelFor(line)
let level = match(a:line, '[^ \-+~'.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.'`|]') / s:UI.IndentWid()
" check if line includes arrows
if match(a:line, '['.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.']') > -1
" decrement level as arrow uses 3 ascii chars
let level = level - 1
endif
return level
endfunction
"FUNCTION: s:UI.IndentWid() {{{1
function! s:UI.IndentWid()
return 2
endfunction
"FUNCTION: s:UI.MarkupReg() {{{1
function! s:UI.MarkupReg()
if g:NERDTreeDirArrows
return '^\(['.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.'] \| \+['.g:NERDTreeDirArrowExpandable.g:NERDTreeDirArrowCollapsible.'] \| \+\)'
endif
return '^[ `|]*[\-+~]'
endfunction
"FUNCTION: s:UI._renderBookmarks {{{1
function! s:UI._renderBookmarks()
if g:NERDTreeMinimalUI == 0
call setline(line(".")+1, ">----------Bookmarks----------")
call cursor(line(".")+1, col("."))
endif
for i in g:NERDTreeBookmark.Bookmarks()
call setline(line(".")+1, i.str())
call cursor(line(".")+1, col("."))
endfor
call setline(line(".")+1, '')
call cursor(line(".")+1, col("."))
endfunction
"FUNCTION: s:UI.restoreScreenState() {{{1
"
"Sets the screen state back to what it was when nerdtree#saveScreenState was last
"called.
"
"Assumes the cursor is in the NERDTree window
function! s:UI.restoreScreenState()
if !has_key(self, '_screenState')
return
endif
exec("silent vertical resize " . self._screenState['oldWindowSize'])
let old_scrolloff=&scrolloff
let &scrolloff=0
call cursor(self._screenState['oldTopLine'], 0)
normal! zt
call setpos(".", self._screenState['oldPos'])
let &scrolloff=old_scrolloff
endfunction
"FUNCTION: s:UI.saveScreenState() {{{1
"Saves the current cursor position in the current buffer and the window
"scroll position
function! s:UI.saveScreenState()
let win = winnr()
call g:NERDTree.CursorToTreeWin()
let self._screenState = {}
let self._screenState['oldPos'] = getpos(".")
let self._screenState['oldTopLine'] = line("w0")
let self._screenState['oldWindowSize']= winwidth("")
call nerdtree#exec(win . "wincmd w")
endfunction
"FUNCTION: s:UI._stripMarkup(line, removeLeadingSpaces){{{1
"returns the given line with all the tree parts stripped off
"
"Args:
"line: the subject line
"removeLeadingSpaces: 1 if leading spaces are to be removed (leading spaces =
"any spaces before the actual text of the node)
function! s:UI._stripMarkup(line, removeLeadingSpaces)
let line = a:line
"remove the tree parts and the leading space
let line = substitute (line, g:NERDTreeUI.MarkupReg(),"","")
"strip off any read only flag
let line = substitute (line, ' \[RO\]', "","")
"strip off any bookmark flags
let line = substitute (line, ' {[^}]*}', "","")
"strip off any executable flags
let line = substitute (line, '*\ze\($\| \)', "","")
"strip off any generic flags
let line = substitute (line, '\[[^]]*\]', "","")
let wasdir = 0
if line =~# '/$'
let wasdir = 1
endif
let line = substitute (line,' -> .*',"","") " remove link to
if wasdir ==# 1
let line = substitute (line, '/\?$', '/', "")
endif
if a:removeLeadingSpaces
let line = substitute (line, '^ *', '', '')
endif
return line
endfunction
"FUNCTION: s:UI.render() {{{1
function! s:UI.render()
setlocal modifiable
"remember the top line of the buffer and the current line so we can
"restore the view exactly how it was
let curLine = line(".")
let curCol = col(".")
let topLine = line("w0")
"delete all lines in the buffer (being careful not to clobber a register)
silent 1,$delete _
call self._dumpHelp()
"delete the blank line before the help and add one after it
if g:NERDTreeMinimalUI == 0
call setline(line(".")+1, "")
call cursor(line(".")+1, col("."))
endif
if b:NERDTreeShowBookmarks
call self._renderBookmarks()
endif
"add the 'up a dir' line
if !g:NERDTreeMinimalUI
call setline(line(".")+1, s:UI.UpDirLine())
call cursor(line(".")+1, col("."))
endif
"draw the header line
let header = b:NERDTreeRoot.path.str({'format': 'UI', 'truncateTo': winwidth(0)})
call setline(line(".")+1, header)
call cursor(line(".")+1, col("."))
"draw the tree
let old_o = @o
let @o = b:NERDTreeRoot.renderToString()
silent put o
let @o = old_o
"delete the blank line at the top of the buffer
silent 1,1delete _
"restore the view
let old_scrolloff=&scrolloff
let &scrolloff=0
call cursor(topLine, 1)
normal! zt
call cursor(curLine, curCol)
let &scrolloff = old_scrolloff
setlocal nomodifiable
endfunction
"FUNCTION: UI.renderViewSavingPosition {{{1
"Renders the tree and ensures the cursor stays on the current node or the
"current nodes parent if it is no longer available upon re-rendering
function! s:UI.renderViewSavingPosition()
let currentNode = g:NERDTreeFileNode.GetSelected()
"go up the tree till we find a node that will be visible or till we run
"out of nodes
while currentNode != {} && !currentNode.isVisible() && !currentNode.isRoot()
let currentNode = currentNode.parent
endwhile
call b:NERDTree.render()
if currentNode != {}
call currentNode.putCursorHere(0, 0)
endif
endfunction
" FUNCTION: s:UI.toggleIgnoreFilter() {{{1
" toggles the use of the NERDTreeIgnore option
function! s:UI.toggleIgnoreFilter()
let b:NERDTreeIgnoreEnabled = !b:NERDTreeIgnoreEnabled
call b:NERDTree.ui.renderViewSavingPosition()
call b:NERDTree.ui.centerView()
endfunction
" FUNCTION: s:UI.toggleShowBookmarks() {{{1
" toggles the display of bookmarks
function! s:UI.toggleShowBookmarks()
let b:NERDTreeShowBookmarks = !b:NERDTreeShowBookmarks
if b:NERDTreeShowBookmarks
call b:NERDTree.render()
call g:NERDTree.CursorToBookmarkTable()
else
call b:NERDTree.ui.renderViewSavingPosition()
endif
call b:NERDTree.ui.centerView()
endfunction
" FUNCTION: s:UI.toggleShowFiles() {{{1
" toggles the display of hidden files
function! s:UI.toggleShowFiles()
let b:NERDTreeShowFiles = !b:NERDTreeShowFiles
call b:NERDTree.ui.renderViewSavingPosition()
call b:NERDTree.ui.centerView()
endfunction
" FUNCTION: s:UI.toggleShowHidden() {{{1
" toggles the display of hidden files
function! s:UI.toggleShowHidden()
let b:NERDTreeShowHidden = !b:NERDTreeShowHidden
call b:NERDTree.ui.renderViewSavingPosition()
call self.centerView()
endfunction
" FUNCTION: s:UI.toggleZoom() {{{1
" zoom (maximize/minimize) the NERDTree window
function! s:UI.toggleZoom()
if exists("b:NERDTreeZoomed") && b:NERDTreeZoomed
let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize
exec "silent vertical resize ". size
let b:NERDTreeZoomed = 0
else
exec "vertical resize"
let b:NERDTreeZoomed = 1
endif
endfunction
"FUNCTION: s:UI.UpDirLine() {{{1
function! s:UI.UpDirLine()
return '.. (up a dir)'
endfunction