feat: add sort_by "filetype" (#2302)
* feat: adds new type of sorting based on vim's filetype detection * fix(ft/sorter): fallbacks to C.name when both ft's are nil or equal * feat: adds new type of sorting based on vim's filetype detection --------- Co-authored-by: Alexander Courtis <alex@courtis.org>
This commit is contained in:
parent
4af572246c
commit
3d2fd90b28
@ -568,8 +568,8 @@ Reloads the explorer every time a buffer is written to.
|
|||||||
|
|
||||||
*nvim-tree.sort_by*
|
*nvim-tree.sort_by*
|
||||||
Changes how files within the same directory are sorted.
|
Changes how files within the same directory are sorted.
|
||||||
Can be one of `name`, `case_sensitive`, `modification_time`, `extension` or a
|
Can be one of `name`, `case_sensitive`, `modification_time`, `extension`,
|
||||||
function.
|
`filetype` or a function.
|
||||||
Type: `string` | `function(nodes)`, Default: `"name"`
|
Type: `string` | `function(nodes)`, Default: `"name"`
|
||||||
|
|
||||||
Function may perform a sort or return a string with one of the above
|
Function may perform a sort or return a string with one of the above
|
||||||
@ -577,6 +577,7 @@ function.
|
|||||||
- `absolute_path`: `string`
|
- `absolute_path`: `string`
|
||||||
- `executable`: `boolean`
|
- `executable`: `boolean`
|
||||||
- `extension`: `string`
|
- `extension`: `string`
|
||||||
|
- `filetype`: `string`
|
||||||
- `link_to`: `string`
|
- `link_to`: `string`
|
||||||
- `name`: `string`
|
- `name`: `string`
|
||||||
- `type`: `"directory"` | `"file"` | `"link"`
|
- `type`: `"directory"` | `"file"` | `"link"`
|
||||||
|
|||||||
@ -80,6 +80,7 @@ function M.sort(t)
|
|||||||
absolute_path = n.absolute_path,
|
absolute_path = n.absolute_path,
|
||||||
executable = n.executable,
|
executable = n.executable,
|
||||||
extension = n.extension,
|
extension = n.extension,
|
||||||
|
filetype = vim.filetype.match { filename = n.name },
|
||||||
link_to = n.link_to,
|
link_to = n.link_to,
|
||||||
name = n.name,
|
name = n.name,
|
||||||
type = n.type,
|
type = n.type,
|
||||||
@ -191,6 +192,32 @@ function C.extension(a, b)
|
|||||||
return a.extension:lower() <= b.extension:lower()
|
return a.extension:lower() <= b.extension:lower()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function C.filetype(a, b)
|
||||||
|
local a_ft = vim.filetype.match { filename = a.name }
|
||||||
|
local b_ft = vim.filetype.match { filename = b.name }
|
||||||
|
|
||||||
|
-- directories first
|
||||||
|
if a.nodes and not b.nodes then
|
||||||
|
return true
|
||||||
|
elseif not a.nodes and b.nodes then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- one is nil, the other wins
|
||||||
|
if a_ft and not b_ft then
|
||||||
|
return true
|
||||||
|
elseif not a_ft and b_ft then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- same filetype or both nil, sort by name
|
||||||
|
if a_ft == b_ft then
|
||||||
|
return C.name(a, b)
|
||||||
|
end
|
||||||
|
|
||||||
|
return a_ft < b_ft
|
||||||
|
end
|
||||||
|
|
||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
M.config = {}
|
M.config = {}
|
||||||
M.config.sort_by = opts.sort_by
|
M.config.sort_by = opts.sort_by
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user