Merge pull request #696 from lifecrisis/issue361

BUGFIX: Broken "g:NERDTreeBookmarksSort" setting fixed.
This commit is contained in:
Phil Runninger
2017-05-26 14:27:14 -04:00
committed by GitHub
4 changed files with 45 additions and 31 deletions

View File

@@ -52,11 +52,6 @@ function! nerdtree#completeBookmarks(A,L,P)
return filter(g:NERDTreeBookmark.BookmarkNames(), 'v:val =~# "^' . a:A . '"') return filter(g:NERDTreeBookmark.BookmarkNames(), 'v:val =~# "^' . a:A . '"')
endfunction 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(dir) {{{2
function! nerdtree#compareNodes(n1, n2) function! nerdtree#compareNodes(n1, n2)
return a:n1.path.compareTo(a:n2.path) return a:n1.path.compareTo(a:n2.path)

View File

@@ -835,11 +835,15 @@ This is where bookmarks are saved. See |NERDTreeBookmarkCommands|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*'NERDTreeBookmarksSort'* *'NERDTreeBookmarksSort'*
Values: 0 or 1 Values: 0, 1, or 2
Default: 1 Default: 1
If set to 0 then the bookmarks list is not sorted. This option controls the method by which the list of user bookmarks is
If set to 1 the bookmarks list is sorted. sorted. When sorted, bookmarks will render in alphabetical order by name.
If set to 0, the bookmarks list is not sorted.
If set to 1, the bookmarks list is sorted in a case-insensitive manner.
If set to 2, the bookmarks list is sorted in a case-sensitive manner.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*'NERDTreeMouseMode'* *'NERDTreeMouseMode'*

View File

@@ -19,12 +19,9 @@ function! s:Bookmark.AddBookmark(name, path)
endif endif
endfor endfor
call add(s:Bookmark.Bookmarks(), s:Bookmark.New(a:name, a:path)) call add(s:Bookmark.Bookmarks(), s:Bookmark.New(a:name, a:path))
if g:NERDTreeBookmarksSort ==# 1
call s:Bookmark.Sort()
endif
endfunction endfunction
" FUNCTION: Bookmark.Bookmarks() {{{1 " FUNCTION: Bookmark.Bookmarks() {{{1
" Class method to get all bookmarks. Lazily initializes the bookmarks global " Class method to get all bookmarks. Lazily initializes the bookmarks global
" variable " variable
function! s:Bookmark.Bookmarks() function! s:Bookmark.Bookmarks()
@@ -34,7 +31,7 @@ function! s:Bookmark.Bookmarks()
return g:NERDTreeBookmarks return g:NERDTreeBookmarks
endfunction endfunction
" FUNCTION: Bookmark.BookmarkExistsFor(name) {{{1 " FUNCTION: Bookmark.BookmarkExistsFor(name) {{{1
" class method that returns 1 if a bookmark with the given name is found, 0 " class method that returns 1 if a bookmark with the given name is found, 0
" otherwise " otherwise
function! s:Bookmark.BookmarkExistsFor(name) function! s:Bookmark.BookmarkExistsFor(name)
@@ -46,7 +43,7 @@ function! s:Bookmark.BookmarkExistsFor(name)
endtry endtry
endfunction endfunction
" FUNCTION: Bookmark.BookmarkFor(name) {{{1 " FUNCTION: Bookmark.BookmarkFor(name) {{{1
" Class method to get the bookmark that has the given name. {} is return if no " Class method to get the bookmark that has the given name. {} is return if no
" bookmark is found " bookmark is found
function! s:Bookmark.BookmarkFor(name) function! s:Bookmark.BookmarkFor(name)
@@ -58,7 +55,7 @@ function! s:Bookmark.BookmarkFor(name)
throw "NERDTree.BookmarkNotFoundError: no bookmark found for name: \"". a:name .'"' throw "NERDTree.BookmarkNotFoundError: no bookmark found for name: \"". a:name .'"'
endfunction endfunction
" FUNCTION: Bookmark.BookmarkNames() {{{1 " FUNCTION: Bookmark.BookmarkNames() {{{1
" Class method to return an array of all bookmark names " Class method to return an array of all bookmark names
function! s:Bookmark.BookmarkNames() function! s:Bookmark.BookmarkNames()
let names = [] let names = []
@@ -104,17 +101,31 @@ function! s:Bookmark.CacheBookmarks(silent)
call nerdtree#echo(invalidBookmarksFound . " invalid bookmarks were read. See :help NERDTreeInvalidBookmarks for info.") call nerdtree#echo(invalidBookmarksFound . " invalid bookmarks were read. See :help NERDTreeInvalidBookmarks for info.")
endif endif
endif endif
if g:NERDTreeBookmarksSort ==# 1
call s:Bookmark.Sort()
endif
endif endif
endfunction endfunction
" FUNCTION: Bookmark.compareTo(otherbookmark) {{{1 " FUNCTION: Bookmark.CompareBookmarksByName(firstBookmark, secondBookmark) {{{1
" Compare these two bookmarks for sorting purposes " Class method that indicates the relative position of two bookmarks when
function! s:Bookmark.compareTo(otherbookmark) " placed in alphabetical order by name. Case-sensitivity is determined by an
return a:otherbookmark.name < self.name " option. Supports the "s:Bookmark.SortBookmarksList()" method.
function! s:Bookmark.CompareBookmarksByName(firstBookmark, secondBookmark)
let l:result = 0
if g:NERDTreeBookmarksSort == 1
if a:firstBookmark.name <? a:secondBookmark.name
let l:result = -1
elseif a:firstBookmark.name >? a:secondBookmark.name
let l:result = 1
endif
elseif g:NERDTreeBookmarksSort == 2
if a:firstBookmark.name <# a:secondBookmark.name
let l:result = -1
elseif a:firstBookmark.name ># a:secondBookmark.name
let l:result = 1
endif
endif
return l:result
endfunction endfunction
" FUNCTION: Bookmark.ClearAll() {{{1 " FUNCTION: Bookmark.ClearAll() {{{1
" Class method to delete all bookmarks. " Class method to delete all bookmarks.
function! s:Bookmark.ClearAll() function! s:Bookmark.ClearAll()
@@ -170,7 +181,7 @@ function! s:Bookmark.GetSelected()
return {} return {}
endfunction endfunction
" FUNCTION: Bookmark.InvalidBookmarks() {{{1 " FUNCTION: Bookmark.InvalidBookmarks() {{{1
" Class method to get all invalid bookmark strings read from the bookmarks " Class method to get all invalid bookmark strings read from the bookmarks
" file " file
function! s:Bookmark.InvalidBookmarks() function! s:Bookmark.InvalidBookmarks()
@@ -233,20 +244,20 @@ function! s:Bookmark.openInNewTab(options)
call self.open(a:options) call self.open(a:options)
endfunction endfunction
" FUNCTION: Bookmark.setPath(path) {{{1 " FUNCTION: Bookmark.setPath(path) {{{1
" makes this bookmark point to the given path " makes this bookmark point to the given path
function! s:Bookmark.setPath(path) function! s:Bookmark.setPath(path)
let self.path = a:path let self.path = a:path
endfunction endfunction
" FUNCTION: Bookmark.Sort() {{{1 " FUNCTION: Bookmark.SortBookmarksList() {{{1
" Class method that sorts all bookmarks " Class method that sorts the global list of bookmarks alphabetically by name.
function! s:Bookmark.Sort() " Note that case-sensitivity is determined by a user option.
let CompareFunc = function("nerdtree#compareBookmarks") function! s:Bookmark.SortBookmarksList()
call sort(s:Bookmark.Bookmarks(), CompareFunc) call sort(s:Bookmark.Bookmarks(), s:Bookmark.CompareBookmarksByName)
endfunction endfunction
" FUNCTION: Bookmark.str() {{{1 " FUNCTION: Bookmark.str() {{{1
" Get the string that should be rendered in the view for this bookmark " Get the string that should be rendered in the view for this bookmark
function! s:Bookmark.str() function! s:Bookmark.str()
let pathStrMaxLen = winwidth(g:NERDTree.GetWinNum()) - 4 - len(self.name) let pathStrMaxLen = winwidth(g:NERDTree.GetWinNum()) - 4 - len(self.name)
@@ -292,7 +303,7 @@ function! s:Bookmark.validate()
endif endif
endfunction endfunction
" FUNCTION: Bookmark.Write() {{{1 " FUNCTION: Bookmark.Write() {{{1
" Class method to write all bookmarks to the bookmarks file " Class method to write all bookmarks to the bookmarks file
function! s:Bookmark.Write() function! s:Bookmark.Write()
let bookmarkStrings = [] let bookmarkStrings = []

View File

@@ -313,6 +313,10 @@ function! s:UI._renderBookmarks()
call cursor(line(".")+1, col(".")) call cursor(line(".")+1, col("."))
endif endif
if g:NERDTreeBookmarksSort == 1 || g:NERDTreeBookmarksSort == 2
call g:NERDTreeBookmark.SortBookmarksList()
endif
for i in g:NERDTreeBookmark.Bookmarks() for i in g:NERDTreeBookmark.Bookmarks()
call setline(line(".")+1, i.str()) call setline(line(".")+1, i.str())
call cursor(line(".")+1, col(".")) call cursor(line(".")+1, col("."))