From fd2332a33f0fc7c8545cd1c358ad032876318a43 Mon Sep 17 00:00:00 2001 From: Vincent Law Date: Thu, 28 Apr 2022 08:43:58 +0800 Subject: [PATCH] feat: case sensitive sorter (#1198) --- doc/nvim-tree-lua.txt | 2 +- lua/nvim-tree/explorer/sorters.lua | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index face92e6..491b97d1 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -253,7 +253,7 @@ Here is a list of the options available in the setup call: *nvim-tree.sort_by* - |sort_by|: changes how files within the same directory are sorted. can be - one of 'name' | 'modification_time' + one of 'name' | 'case_sensitive' | 'modification_time'. type: `string` default: `"name"` diff --git a/lua/nvim-tree/explorer/sorters.lua b/lua/nvim-tree/explorer/sorters.lua index 597a101c..e82cba00 100644 --- a/lua/nvim-tree/explorer/sorters.lua +++ b/lua/nvim-tree/explorer/sorters.lua @@ -75,7 +75,7 @@ function M.merge_sort(t, comparator) split_merge(t, 1, #t, comparator) end -function M.node_comparator_name(a, b) +local function node_comparator_name_ignorecase_or_not(a, b, ignorecase) if not (a and b) then return true end @@ -85,7 +85,19 @@ function M.node_comparator_name(a, b) return false end - return a.name:lower() <= b.name:lower() + if ignorecase then + return a.name:lower() <= b.name:lower() + else + return a.name <= b.name + end +end + +function M.node_comparator_name_case_sensisive(a, b) + return node_comparator_name_ignorecase_or_not(a, b, false) +end + +function M.node_comparator_name_ignorecase(a, b) + return node_comparator_name_ignorecase_or_not(a, b, true) end function M.node_comparator_modification_time(a, b) @@ -116,8 +128,10 @@ function M.setup(opts) M.sort_by = opts.sort_by if M.sort_by == "modification_time" then M.node_comparator = M.node_comparator_modification_time + elseif M.sort_by == "case_sensitive" then + M.node_comparator = M.node_comparator_name_case_sensisive else - M.node_comparator = M.node_comparator_name + M.node_comparator = M.node_comparator_name_ignorecase end end