mirror of
https://github.com/preservim/nerdtree.git
synced 2025-11-09 11:53:48 -05:00
Support sorting files and directories by modification time. (#901)
* Introduce a flag to to sort by the node's modification time. This flag is part of the NERDTreeSortOrder list. '[[timestamp]]' sorts oldest to newest, while '[[-timestamp]]' sorts newest to oldest. Its position in the array determines whether it is the primary sort (first position) or secondary sort (any other position). The remaining elements in the array describe the other sort level following all prior rules. If needed, a tertiary sort is done alphabetically on the filename. Examples: ['[[timestamp]]'] - oldest to newest ['\/$','*','[[-timestamp]]'] - dirs, then files, each newest first. When using this flag, performance is slowed a little because the sortKey is always recalculated with every sort. Why? Because if a file is saved (either in vim or by an outside program), NERDTree needs to go back out to the shell to get the new modification time. * Update NERDTreeSortOrder documentation. The new `[[timestamp]]' and '[[-timestamp]]' flags are added to support sorting by modification time. * Fix the inequality. Must be >= to force recalculation of _sortKey. * Move `let path=` closer to where it's used.
This commit is contained in:
@@ -392,7 +392,17 @@ endfunction
|
||||
" FUNCTION: Path.getSortKey() {{{1
|
||||
" returns a key used in compare function for sorting
|
||||
function! s:Path.getSortKey()
|
||||
if !exists("self._sortKey") || g:NERDTreeSortOrder !=# g:NERDTreeOldSortOrder
|
||||
let l:ascending = index(g:NERDTreeSortOrder,'[[timestamp]]')
|
||||
let l:descending = index(g:NERDTreeSortOrder,'[[-timestamp]]')
|
||||
if !exists("self._sortKey") || g:NERDTreeSortOrder !=# g:NERDTreeOldSortOrder || l:ascending >= 0 || l:descending >= 0
|
||||
let self._sortKey = [self.getSortOrderIndex()]
|
||||
|
||||
if l:descending >= 0
|
||||
call insert(self._sortKey, -getftime(self.str()), l:descending == 0 ? 0 : len(self._sortKey))
|
||||
elseif l:ascending >= 0
|
||||
call insert(self._sortKey, getftime(self.str()), l:ascending == 0 ? 0 : len(self._sortKey))
|
||||
endif
|
||||
|
||||
let path = self.getLastPathComponent(1)
|
||||
if !g:NERDTreeSortHiddenFirst
|
||||
let path = substitute(path, '^[._]', '', '')
|
||||
@@ -400,13 +410,9 @@ function! s:Path.getSortKey()
|
||||
if !g:NERDTreeCaseSensitiveSort
|
||||
let path = tolower(path)
|
||||
endif
|
||||
if !g:NERDTreeNaturalSort
|
||||
let self._sortKey = [self.getSortOrderIndex(), path]
|
||||
else
|
||||
let self._sortKey = [self.getSortOrderIndex()] + self._splitChunks(path)
|
||||
endif
|
||||
endif
|
||||
|
||||
call extend(self._sortKey, (g:NERDTreeNaturalSort ? self._splitChunks(path) : [path]))
|
||||
endif
|
||||
return self._sortKey
|
||||
endfunction
|
||||
|
||||
|
||||
Reference in New Issue
Block a user