diff --git a/lua/oil/columns.lua b/lua/oil/columns.lua index cc3b445..d531a7c 100644 --- a/lua/oil/columns.lua +++ b/lua/oil/columns.lua @@ -228,8 +228,8 @@ M.register("type", { end, }) -local function pad_number(int) - return string.format("%012d", int) +local function adjust_number(int) + return string.format("%03d%s", #int, int) end M.register("name", { @@ -256,14 +256,16 @@ M.register("name", { end end else - if config.view_options.case_insensitive then - return function(entry) - return entry[FIELD_NAME]:gsub("%d+", pad_number):lower() - end - else - return function(entry) - return entry[FIELD_NAME]:gsub("%d+", pad_number) + local memo = {} + return function(entry) + if memo[entry] == nil then + local name = entry[FIELD_NAME]:gsub("0*(%d+)", adjust_number) + if config.view_options.case_insensitive then + name = name:lower() + end + memo[entry] = name end + return memo[entry] end end end, diff --git a/lua/oil/view.lua b/lua/oil/view.lua index c2cb076..e4145ad 100644 --- a/lua/oil/view.lua +++ b/lua/oil/view.lua @@ -587,7 +587,7 @@ local function get_sort_function(adapter, num_entries) end return function(a, b) for _, sort_fn in ipairs(idx_funs) do - local get_sort_value, order = unpack(sort_fn) + local get_sort_value, order = sort_fn[1], sort_fn[2] local a_val = get_sort_value(a) local b_val = get_sort_value(b) if a_val ~= b_val then