feat: use natural sort order by default (#328)
* Sort entries with natural sorting * refactor: move natural ordering logic and add config option --------- Co-authored-by: Steven Arcangeli <stevearc@stevearc.com>
This commit is contained in:
parent
e045ee3b4e
commit
71b076b3af
3 changed files with 20 additions and 2 deletions
|
|
@ -279,6 +279,10 @@ M.register("type", {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local function pad_number(int)
|
||||||
|
return string.format("%012d", int)
|
||||||
|
end
|
||||||
|
|
||||||
M.register("name", {
|
M.register("name", {
|
||||||
render = function(entry, conf)
|
render = function(entry, conf)
|
||||||
error("Do not use the name column. It is for sorting only")
|
error("Do not use the name column. It is for sorting only")
|
||||||
|
|
@ -289,7 +293,11 @@ M.register("name", {
|
||||||
end,
|
end,
|
||||||
|
|
||||||
get_sort_value = function(entry)
|
get_sort_value = function(entry)
|
||||||
return entry[FIELD_NAME]
|
if config.view_options.natural_order then
|
||||||
|
return entry[FIELD_NAME]:gsub("%d+", pad_number)
|
||||||
|
else
|
||||||
|
return entry[FIELD_NAME]
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,9 @@ local default_config = {
|
||||||
is_always_hidden = function(name, bufnr)
|
is_always_hidden = function(name, bufnr)
|
||||||
return false
|
return false
|
||||||
end,
|
end,
|
||||||
|
-- Sort file names in a more intuitive order for humans. Is less performant,
|
||||||
|
-- so you may want to set to false if you work with large directories.
|
||||||
|
natural_order = true,
|
||||||
sort = {
|
sort = {
|
||||||
-- sort order can be "asc" or "desc"
|
-- sort order can be "asc" or "desc"
|
||||||
-- see :help oil-columns to see which columns are sortable
|
-- see :help oil-columns to see which columns are sortable
|
||||||
|
|
|
||||||
|
|
@ -519,7 +519,14 @@ end
|
||||||
---@return fun(a: oil.InternalEntry, b: oil.InternalEntry): boolean
|
---@return fun(a: oil.InternalEntry, b: oil.InternalEntry): boolean
|
||||||
local function get_sort_function(adapter)
|
local function get_sort_function(adapter)
|
||||||
local idx_funs = {}
|
local idx_funs = {}
|
||||||
for _, sort_pair in ipairs(config.view_options.sort) do
|
local sort_config = config.view_options.sort
|
||||||
|
|
||||||
|
-- If empty, default to type + name sorting
|
||||||
|
if vim.tbl_isempty(sort_config) then
|
||||||
|
sort_config = { { "type", "asc" }, { "name", "asc" } }
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, sort_pair in ipairs(sort_config) do
|
||||||
local col_name, order = unpack(sort_pair)
|
local col_name, order = unpack(sort_pair)
|
||||||
if order ~= "asc" and order ~= "desc" then
|
if order ~= "asc" and order ~= "desc" then
|
||||||
vim.notify_once(
|
vim.notify_once(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue