nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
commit a053925279b2b7a060a7714a7d98a8c5576878bf
parent 703e1ef4fe8350afbc61ce8271f72cef2d5c363a
Author: Phil Runninger (mac) <prunninger@vhtcx.com>
Date:   Sun,  1 Jul 2018 19:57:02 -0400

Recalculate the node's sortkey every time.

The cached _sortkey wasn't being recalculated after changing the
NERDTreeSortOrder, resulting in incorrect sort orders.

Diffstat:
Mlib/nerdtree/path.vim | 9++-------
Mlib/nerdtree/tree_dir_node.vim | 1+
Mplugin/NERD_tree.vim | 14++++++++++----
3 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim
@@ -7,10 +7,6 @@
 " ============================================================================
 
 
-" This constant is used throughout this script for sorting purposes.
-let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*')
-lockvar s:NERDTreeSortStarIndex
-
 let s:Path = {}
 let g:NERDTreePath = s:Path
 
@@ -374,7 +370,8 @@ function! s:Path.getSortOrderIndex()
         endif
         let i = i + 1
     endwhile
-    return s:NERDTreeSortStarIndex
+
+    return index(g:NERDTreeSortOrder, '*')
 endfunction
 
 " FUNCTION: Path._splitChunks(path) {{{1
@@ -395,7 +392,6 @@ endfunction
 " FUNCTION: Path.getSortKey() {{{1
 " returns a key used in compare function for sorting
 function! s:Path.getSortKey()
-    if !exists("self._sortKey")
         let path = self.getLastPathComponent(1)
         if !g:NERDTreeSortHiddenFirst
             let path = substitute(path, '^[._]', '', '')
@@ -408,7 +404,6 @@ function! s:Path.getSortKey()
         else
             let self._sortKey = [self.getSortOrderIndex()] + self._splitChunks(path)
         endif
-    endif
 
     return self._sortKey
 endfunction
diff --git a/lib/nerdtree/tree_dir_node.vim b/lib/nerdtree/tree_dir_node.vim
@@ -607,6 +607,7 @@ endfunction
 " FUNCTION: TreeDirNode.sortChildren() {{{1
 " Sort "self.children" by alphabetical order and directory priority.
 function! s:TreeDirNode.sortChildren()
+    call AddDefaultGroupToSortOrder()
     let CompareFunc = function("nerdtree#compareNodesBySortKey")
     call sort(self.children, CompareFunc)
 endfunction
diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim
@@ -24,6 +24,15 @@ let loaded_nerd_tree = 1
 let s:old_cpo = &cpo
 set cpo&vim
 
+"Function: AddDefaultGroupToSortOrder() function {{{2
+"This function adds the default grouping '*' to the sort sequence if it's not
+"already in the list.
+function! AddDefaultGroupToSortOrder()
+    if count(g:NERDTreeSortOrder, '*') < 1
+        call add(g:NERDTreeSortOrder, '*')
+    endif
+endfunction
+
 "Function: s:initVariable() function {{{2
 "This function is used to initialise a given variable to a given value. The
 "variable is only initialised if it does not exist prior
@@ -82,10 +91,7 @@ call s:initVariable("g:NERDTreeCascadeSingleChildDir", 1)
 if !exists("g:NERDTreeSortOrder")
     let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$',  '\.bak$', '\~$']
 else
-    "if there isnt a * in the sort sequence then add one
-    if count(g:NERDTreeSortOrder, '*') < 1
-        call add(g:NERDTreeSortOrder, '*')
-    endif
+    call AddDefaultGroupToSortOrder()
 endif
 
 call s:initVariable("g:NERDTreeGlyphReadOnly", "RO")