feat: highlight groups for hidden files (#459)
* feat: hidden highlights * feat: OilHidden for hidden highlights instead of Comment * fix: add the new combinatoric highlight groups * perf: get rid of a call to is_hidden_file * fix: tweak the default highlight group links * fix: update function call in unit tests --------- Co-authored-by: Steven Arcangeli <stevearc@stevearc.com>
This commit is contained in:
parent
740b8fd425
commit
60e68967e5
4 changed files with 92 additions and 14 deletions
24
doc/oil.txt
24
doc/oil.txt
|
|
@ -607,30 +607,54 @@ yank_entry *actions.yank_entr
|
|||
--------------------------------------------------------------------------------
|
||||
HIGHLIGHTS *oil-highlights*
|
||||
|
||||
OilHidden *hl-OilHidden*
|
||||
Hidden entry in an oil buffer
|
||||
|
||||
OilDir *hl-OilDir*
|
||||
Directory names in an oil buffer
|
||||
|
||||
OilDirHidden *hl-OilDirHidden*
|
||||
Hidden directory names in an oil buffer
|
||||
|
||||
OilDirIcon *hl-OilDirIcon*
|
||||
Icon for directories
|
||||
|
||||
OilSocket *hl-OilSocket*
|
||||
Socket files in an oil buffer
|
||||
|
||||
OilSocketHidden *hl-OilSocketHidden*
|
||||
Hidden socket files in an oil buffer
|
||||
|
||||
OilLink *hl-OilLink*
|
||||
Soft links in an oil buffer
|
||||
|
||||
OilOrphanLink *hl-OilOrphanLink*
|
||||
Orphaned soft links in an oil buffer
|
||||
|
||||
OilLinkHidden *hl-OilLinkHidden*
|
||||
Hidden soft links in an oil buffer
|
||||
|
||||
OilOrphanLinkHidden *hl-OilOrphanLinkHidden*
|
||||
Hidden orphaned soft links in an oil buffer
|
||||
|
||||
OilLinkTarget *hl-OilLinkTarget*
|
||||
The target of a soft link
|
||||
|
||||
OilOrphanLinkTarget *hl-OilOrphanLinkTarget*
|
||||
The target of an orphaned soft link
|
||||
|
||||
OilLinkTargetHidden *hl-OilLinkTargetHidden*
|
||||
The target of a hidden soft link
|
||||
|
||||
OilOrphanLinkTargetHidden *hl-OilOrphanLinkTargetHidden*
|
||||
The target of an hidden orphaned soft link
|
||||
|
||||
OilFile *hl-OilFile*
|
||||
Normal files in an oil buffer
|
||||
|
||||
OilFileHidden *hl-OilFileHidden*
|
||||
Hidden normal files in an oil buffer
|
||||
|
||||
OilCreate *hl-OilCreate*
|
||||
Create action in the oil preview window
|
||||
|
||||
|
|
|
|||
|
|
@ -796,11 +796,21 @@ end
|
|||
---@private
|
||||
M._get_highlights = function()
|
||||
return {
|
||||
{
|
||||
name = "OilHidden",
|
||||
link = "Comment",
|
||||
desc = "Hidden entry in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilDir",
|
||||
link = "Directory",
|
||||
desc = "Directory names in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilDirHidden",
|
||||
link = "OilHidden",
|
||||
desc = "Hidden directory names in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilDirIcon",
|
||||
link = "OilDir",
|
||||
|
|
@ -811,6 +821,11 @@ M._get_highlights = function()
|
|||
link = "Keyword",
|
||||
desc = "Socket files in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilSocketHidden",
|
||||
link = "OilHidden",
|
||||
desc = "Hidden socket files in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilLink",
|
||||
link = nil,
|
||||
|
|
@ -821,6 +836,16 @@ M._get_highlights = function()
|
|||
link = nil,
|
||||
desc = "Orphaned soft links in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilLinkHidden",
|
||||
link = "OilHidden",
|
||||
desc = "Hidden soft links in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilOrphanLinkHidden",
|
||||
link = "OilLinkHidden",
|
||||
desc = "Hidden orphaned soft links in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilLinkTarget",
|
||||
link = "Comment",
|
||||
|
|
@ -831,11 +856,26 @@ M._get_highlights = function()
|
|||
link = "DiagnosticError",
|
||||
desc = "The target of an orphaned soft link",
|
||||
},
|
||||
{
|
||||
name = "OilLinkTargetHidden",
|
||||
link = "OilHidden",
|
||||
desc = "The target of a hidden soft link",
|
||||
},
|
||||
{
|
||||
name = "OilOrphanLinkTargetHidden",
|
||||
link = "OilOrphanLinkTarget",
|
||||
desc = "The target of an hidden orphaned soft link",
|
||||
},
|
||||
{
|
||||
name = "OilFile",
|
||||
link = nil,
|
||||
desc = "Normal files in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilFileHidden",
|
||||
link = "OilHidden",
|
||||
desc = "Hidden normal files in an oil buffer",
|
||||
},
|
||||
{
|
||||
name = "OilCreate",
|
||||
link = "DiagnosticInfo",
|
||||
|
|
|
|||
|
|
@ -19,10 +19,16 @@ local last_cursor_entry = {}
|
|||
|
||||
---@param name string
|
||||
---@param bufnr integer
|
||||
---@return boolean
|
||||
---@return boolean display
|
||||
---@return boolean is_hidden Whether the file is classified as a hidden file
|
||||
M.should_display = function(name, bufnr)
|
||||
return not config.view_options.is_always_hidden(name, bufnr)
|
||||
and (config.view_options.show_hidden or not config.view_options.is_hidden_file(name, bufnr))
|
||||
if config.view_options.is_always_hidden(name, bufnr) then
|
||||
return false, true
|
||||
else
|
||||
local is_hidden = config.view_options.is_hidden_file(name, bufnr)
|
||||
local display = config.view_options.show_hidden or not is_hidden
|
||||
return display, is_hidden
|
||||
end
|
||||
end
|
||||
|
||||
---@param bufname string
|
||||
|
|
@ -633,13 +639,15 @@ local function render_buffer(bufnr, opts)
|
|||
end
|
||||
|
||||
if M.should_display("..", bufnr) then
|
||||
local cols = M.format_entry_cols({ 0, "..", "directory" }, column_defs, col_width, adapter)
|
||||
local cols =
|
||||
M.format_entry_cols({ 0, "..", "directory" }, column_defs, col_width, adapter, true)
|
||||
table.insert(line_table, cols)
|
||||
end
|
||||
|
||||
for _, entry in ipairs(entry_list) do
|
||||
if M.should_display(entry[FIELD_NAME], bufnr) then
|
||||
local cols = M.format_entry_cols(entry, column_defs, col_width, adapter)
|
||||
local should_display, is_hidden = M.should_display(entry[FIELD_NAME], bufnr)
|
||||
if should_display then
|
||||
local cols = M.format_entry_cols(entry, column_defs, col_width, adapter, is_hidden)
|
||||
table.insert(line_table, cols)
|
||||
|
||||
local name = entry[FIELD_NAME]
|
||||
|
|
@ -688,10 +696,15 @@ end
|
|||
---@param column_defs table[]
|
||||
---@param col_width integer[]
|
||||
---@param adapter oil.Adapter
|
||||
---@param is_hidden boolean
|
||||
---@return oil.TextChunk[]
|
||||
M.format_entry_cols = function(entry, column_defs, col_width, adapter)
|
||||
M.format_entry_cols = function(entry, column_defs, col_width, adapter, is_hidden)
|
||||
local name = entry[FIELD_NAME]
|
||||
local meta = entry[FIELD_META]
|
||||
local hl_suffix = ""
|
||||
if is_hidden then
|
||||
hl_suffix = "Hidden"
|
||||
end
|
||||
if meta and meta.display_name then
|
||||
name = meta.display_name
|
||||
end
|
||||
|
|
@ -711,9 +724,9 @@ M.format_entry_cols = function(entry, column_defs, col_width, adapter)
|
|||
-- Always add the entry name at the end
|
||||
local entry_type = entry[FIELD_TYPE]
|
||||
if entry_type == "directory" then
|
||||
table.insert(cols, { name .. "/", "OilDir" })
|
||||
table.insert(cols, { name .. "/", "OilDir" .. hl_suffix })
|
||||
elseif entry_type == "socket" then
|
||||
table.insert(cols, { name, "OilSocket" })
|
||||
table.insert(cols, { name, "OilSocket" .. hl_suffix })
|
||||
elseif entry_type == "link" then
|
||||
local link_text
|
||||
if meta then
|
||||
|
|
@ -722,7 +735,7 @@ M.format_entry_cols = function(entry, column_defs, col_width, adapter)
|
|||
end
|
||||
|
||||
if meta.link then
|
||||
link_text = "->" .. " " .. meta.link
|
||||
link_text = "-> " .. meta.link
|
||||
if meta.link_stat and meta.link_stat.type == "directory" then
|
||||
link_text = util.addslash(link_text)
|
||||
end
|
||||
|
|
@ -730,12 +743,13 @@ M.format_entry_cols = function(entry, column_defs, col_width, adapter)
|
|||
end
|
||||
local is_orphan = not (meta and meta.link_stat)
|
||||
|
||||
table.insert(cols, { name, is_orphan and "OilOrphanLink" or "OilLink" })
|
||||
table.insert(cols, { name, (is_orphan and "OilOrphanLink" or "OilLink") .. hl_suffix })
|
||||
if link_text then
|
||||
table.insert(cols, { link_text, is_orphan and "OilOrphanLinkTarget" or "OilLinkTarget" })
|
||||
local target_hl = (is_orphan and "OilOrphanLinkTarget" or "OilLinkTarget") .. hl_suffix
|
||||
table.insert(cols, { link_text, target_hl })
|
||||
end
|
||||
else
|
||||
table.insert(cols, { name, "OilFile" })
|
||||
table.insert(cols, { name, "OilFile" .. hl_suffix })
|
||||
end
|
||||
return cols
|
||||
end
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ describe("parser", function()
|
|||
local file = test_adapter.test_set("/foo/a.txt", "file")
|
||||
vim.cmd.edit({ args = { "oil-test:///foo/" } })
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
local cols = view.format_entry_cols(file, {}, {}, test_adapter)
|
||||
local cols = view.format_entry_cols(file, {}, {}, test_adapter, false)
|
||||
local lines = util.render_table({ cols }, {})
|
||||
table.insert(lines, "")
|
||||
table.insert(lines, " ")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue