summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/filterlist.lua33
-rw-r--r--builtin/modmgr.lua4
2 files changed, 37 insertions, 0 deletions
diff --git a/builtin/filterlist.lua b/builtin/filterlist.lua
index 906c339df..fd337ae92 100644
--- a/builtin/filterlist.lua
+++ b/builtin/filterlist.lua
@@ -246,3 +246,36 @@ function sort_worlds_alphabetic(this)
return a.name:lower() < b.name:lower()
end)
end
+
+--------------------------------------------------------------------------------
+function sort_mod_list(this)
+
+ table.sort(this.m_processed_list, function(a, b)
+ -- Show game mods at bottom
+ if a.typ ~= b.typ then
+ return b.typ == "game_mod"
+ end
+ -- If in same or no modpack, sort by name
+ if a.modpack == b.modpack then
+ if a.name:lower() == b.name:lower() then
+ return a.name < b.name
+ end
+ return a.name:lower() < b.name:lower()
+ -- Else compare name to modpack name
+ else
+ -- Always show modpack pseudo-mod on top of modpack mod list
+ if a.name == b.modpack then
+ return true
+ elseif b.name == a.modpack then
+ return false
+ end
+
+ local name_a = a.modpack or a.name
+ local name_b = b.modpack or b.name
+ if name_a:lower() == name_b:lower() then
+ return name_a < name_b
+ end
+ return name_a:lower() < name_b:lower()
+ end
+ end)
+end
diff --git a/builtin/modmgr.lua b/builtin/modmgr.lua
index 58ffb1530..2f1343738 100644
--- a/builtin/modmgr.lua
+++ b/builtin/modmgr.lua
@@ -972,6 +972,8 @@ function modmgr.init_worldconfig()
hide_game=modmgr.hide_gamemods,
hide_modpackcontents= modmgr.hide_modpackcontents
})
+ filterlist.add_sort_mechanism(modmgr.modlist, "alphabetic", sort_mod_list)
+ filterlist.set_sortmode(modmgr.modlist, "alphabetic")
return true
end
@@ -1068,6 +1070,8 @@ function modmgr.refresh_globals()
nil, --filter
{}
)
+ filterlist.add_sort_mechanism(modmgr.global_mods, "alphabetic", sort_mod_list)
+ filterlist.set_sortmode(modmgr.global_mods, "alphabetic")
end
--------------------------------------------------------------------------------