mirror of
https://github.com/preservim/nerdtree.git
synced 2024-11-22 13:12:40 +08:00
35b04fa3df
This is the counterpart to a PR I just submitted to undotree
(https://github.com/mbbill/undotree/pull/61).
I noticed that my statusline doesn't update properly when using NERDTree to move
between revisions of a file with `go` or `gi`
(https://github.com/wincent/wincent/issues/16). I established that this was
because it was using `'eventignore'` to suppress all autocmds, which in turn
prevents the statusline from updating.
Commenting out the `set eventignore=all` line makes the failure to update go
away, at the cost of firing more autocmds.
I considered adding an option for opting out of this behavior (eg. `let
g:NERDTreeEventignore=0` or something), or rearchitecting my statusline to use
an approach like vim-airline does based on CursorMoved autocmds (see
https://github.com/vim-airline/vim-airline/issues/82; see also
30f078daf5/plugin/airline.vim (L36-L50)
for current implementation), but then realized that a simpler fix is to have
NERDTree just disable only the autocmds that it uses instead of disabling all of
them.
This is probably not enough to unbreak every bit of code in the world that
depends on those autocmds, but it does at least unbreak my use case, because it
allows my `WinLeave` autocmd to run and update the statusline.
148 lines
4.2 KiB
VimL
148 lines
4.2 KiB
VimL
if exists("g:loaded_nerdtree_autoload")
|
|
finish
|
|
endif
|
|
let g:loaded_nerdtree_autoload = 1
|
|
|
|
function! nerdtree#version()
|
|
return '5.0.0'
|
|
endfunction
|
|
|
|
" SECTION: General Functions {{{1
|
|
"============================================================
|
|
|
|
"FUNCTION: nerdtree#checkForBrowse(dir) {{{2
|
|
"inits a window tree in the current buffer if appropriate
|
|
function! nerdtree#checkForBrowse(dir)
|
|
if a:dir != '' && isdirectory(a:dir)
|
|
call g:NERDTreeCreator.CreateWindowTree(a:dir)
|
|
endif
|
|
endfunction
|
|
|
|
" FUNCTION: nerdtree#completeBookmarks(A,L,P) {{{2
|
|
" completion function for the bookmark commands
|
|
function! nerdtree#completeBookmarks(A,L,P)
|
|
return filter(g:NERDTreeBookmark.BookmarkNames(), 'v:val =~# "^' . a:A . '"')
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#compareBookmarks(dir) {{{2
|
|
function! nerdtree#compareBookmarks(first, second)
|
|
return a:first.compareTo(a:second)
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#compareNodes(dir) {{{2
|
|
function! nerdtree#compareNodes(n1, n2)
|
|
return a:n1.path.compareTo(a:n2.path)
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#compareNodesBySortKey(n1, n2) {{{2
|
|
function! nerdtree#compareNodesBySortKey(n1, n2)
|
|
if a:n1.path.getSortKey() <# a:n2.path.getSortKey()
|
|
return -1
|
|
elseif a:n1.path.getSortKey() ># a:n2.path.getSortKey()
|
|
return 1
|
|
else
|
|
return 0
|
|
endif
|
|
endfunction
|
|
|
|
" FUNCTION: nerdtree#deprecated(func, [msg]) {{{2
|
|
" Issue a deprecation warning for a:func. If a second arg is given, use this
|
|
" as the deprecation message
|
|
function! nerdtree#deprecated(func, ...)
|
|
let msg = a:0 ? a:func . ' ' . a:1 : a:func . ' is deprecated'
|
|
|
|
if !exists('s:deprecationWarnings')
|
|
let s:deprecationWarnings = {}
|
|
endif
|
|
if !has_key(s:deprecationWarnings, a:func)
|
|
let s:deprecationWarnings[a:func] = 1
|
|
echomsg msg
|
|
endif
|
|
endfunction
|
|
|
|
" FUNCTION: nerdtree#exec(cmd) {{{2
|
|
" same as :exec cmd but eventignore=all is set for the duration
|
|
function! nerdtree#exec(cmd)
|
|
let old_ei = &ei
|
|
set ei=BufEnter,BufLeave,VimEnter
|
|
exec a:cmd
|
|
let &ei = old_ei
|
|
endfunction
|
|
|
|
" FUNCTION: nerdtree#has_opt(options, name) {{{2
|
|
function! nerdtree#has_opt(options, name)
|
|
return has_key(a:options, a:name) && a:options[a:name] == 1
|
|
endfunction
|
|
|
|
" FUNCTION: nerdtree#loadClassFiles() {{{2
|
|
function! nerdtree#loadClassFiles()
|
|
runtime lib/nerdtree/path.vim
|
|
runtime lib/nerdtree/menu_controller.vim
|
|
runtime lib/nerdtree/menu_item.vim
|
|
runtime lib/nerdtree/key_map.vim
|
|
runtime lib/nerdtree/bookmark.vim
|
|
runtime lib/nerdtree/tree_file_node.vim
|
|
runtime lib/nerdtree/tree_dir_node.vim
|
|
runtime lib/nerdtree/opener.vim
|
|
runtime lib/nerdtree/creator.vim
|
|
runtime lib/nerdtree/flag_set.vim
|
|
runtime lib/nerdtree/nerdtree.vim
|
|
runtime lib/nerdtree/ui.vim
|
|
runtime lib/nerdtree/event.vim
|
|
runtime lib/nerdtree/notifier.vim
|
|
endfunction
|
|
|
|
" FUNCTION: nerdtree#postSourceActions() {{{2
|
|
function! nerdtree#postSourceActions()
|
|
call g:NERDTreeBookmark.CacheBookmarks(1)
|
|
call nerdtree#ui_glue#createDefaultBindings()
|
|
|
|
"load all nerdtree plugins
|
|
runtime! nerdtree_plugin/**/*.vim
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#runningWindows(dir) {{{2
|
|
function! nerdtree#runningWindows()
|
|
return has("win16") || has("win32") || has("win64")
|
|
endfunction
|
|
|
|
" SECTION: View Functions {{{1
|
|
"============================================================
|
|
|
|
"FUNCTION: nerdtree#echo {{{2
|
|
"A wrapper for :echo. Appends 'NERDTree:' on the front of all messages
|
|
"
|
|
"Args:
|
|
"msg: the message to echo
|
|
function! nerdtree#echo(msg)
|
|
redraw
|
|
echomsg "NERDTree: " . a:msg
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#echoError {{{2
|
|
"Wrapper for nerdtree#echo, sets the message type to errormsg for this message
|
|
"Args:
|
|
"msg: the message to echo
|
|
function! nerdtree#echoError(msg)
|
|
echohl errormsg
|
|
call nerdtree#echo(a:msg)
|
|
echohl normal
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#echoWarning {{{2
|
|
"Wrapper for nerdtree#echo, sets the message type to warningmsg for this message
|
|
"Args:
|
|
"msg: the message to echo
|
|
function! nerdtree#echoWarning(msg)
|
|
echohl warningmsg
|
|
call nerdtree#echo(a:msg)
|
|
echohl normal
|
|
endfunction
|
|
|
|
"FUNCTION: nerdtree#renderView {{{2
|
|
function! nerdtree#renderView()
|
|
call b:NERDTree.render()
|
|
endfunction
|
|
|
|
" vim: set sw=4 sts=4 et fdm=marker:
|