mirror of
https://github.com/preservim/nerdtree.git
synced 2024-11-22 13:55:02 +08:00
0b65089122
Sorting the list of user bookmarks requires care to ensure that Vim's builtin sort function is called correctly. Previously, this function was called incorrectly. This is why the sorting of bookmarks never worked. The offending functions have been removed here and replaced with "s:Bookmark.CompareBookmarksByName". To understand the necessity for this change, read ":h sort()" for the requirements of the function reference argument (esp., note that it must return -1, 0, or 1). In addition to fixing this problem, the new comparison function will inspect the "g:NERDTreeBookmarksSort" setting to determine whether case-sensitivity is preferred in the sort. The documentation has been modified to accurately reflect this adjustment. The change is also made in such a way as not to break any existing configurations. Fixes #361 ("My bookmarks aren't sorted").
173 lines
4.7 KiB
VimL
173 lines
4.7 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 !isdirectory(a:dir)
|
|
return
|
|
endif
|
|
|
|
if s:reuseWin(a:dir)
|
|
return
|
|
endif
|
|
|
|
call g:NERDTreeCreator.CreateWindowTree(a:dir)
|
|
endfunction
|
|
|
|
"FUNCTION: s:reuseWin(dir) {{{2
|
|
"finds a NERDTree buffer with root of dir, and opens it.
|
|
function! s:reuseWin(dir) abort
|
|
let path = g:NERDTreePath.New(fnamemodify(a:dir, ":p"))
|
|
|
|
for i in range(1, bufnr("$"))
|
|
unlet! nt
|
|
let nt = getbufvar(i, "NERDTree")
|
|
if empty(nt)
|
|
continue
|
|
endif
|
|
|
|
if nt.isWinTree() && nt.root.path.equals(path)
|
|
call nt.setPreviousBuf(bufnr("#"))
|
|
exec "buffer " . i
|
|
return 1
|
|
endif
|
|
endfor
|
|
|
|
return 0
|
|
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#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 with eventignore set for the duration
|
|
" to disable the autocommands used by NERDTree (BufEnter,
|
|
" BufLeave and VimEnter)
|
|
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:
|