feat(columns): per-character permission column highlights (#375)

Problem: the permissions column rendered as a monolithic unstyled
string, making it hard to scan `rwx` bits at a glance.

Solution: add per-character highlight groups for permission characters
following the `eza`/`lsd` convention. All groups link to standard
Neovim highlights so every colorscheme works out of the box.
This commit is contained in:
Barrett Ruth 2026-03-16 15:52:00 -04:00
parent 7b16324c5a
commit b87c505b76
Signed by: barrett
GPG key ID: A6C96C9349D2FC81
6 changed files with 81 additions and 3 deletions

View file

@ -25,6 +25,31 @@ M.mode_to_str = function(mode)
.. perm_to_str(bit.band(extra, 1) ~= 0 and 't', mode)
end
local char_hl = {
r = 'OilPermissionRead',
w = 'OilPermissionWrite',
x = 'OilPermissionExec',
s = 'OilPermissionSetuid',
S = 'OilPermissionSetuid',
t = 'OilPermissionSticky',
T = 'OilPermissionSticky',
['-'] = 'OilPermissionNone',
}
---@param str string
---@return table[]
M.mode_to_highlights = function(str)
local highlights = {}
for i = 1, #str do
local c = str:sub(i, i)
local hl = char_hl[c]
if hl then
table.insert(highlights, { hl, i - 1, i })
end
end
return highlights
end
---@param mode integer
---@return string
M.mode_to_octal_str = function(mode)