diff --git a/home/yazi/init.lua b/home/yazi/init.lua index b6e3f49..ec402ca 100644 --- a/home/yazi/init.lua +++ b/home/yazi/init.lua @@ -1,159 +1,183 @@ function Manager:render(area) - self.area = area + self.area = area - local chunks = ui.Layout():direction(ui.Layout.HORIZONTAL):constraints({ - ui.Constraint.Ratio(MANAGER.ratio.parent, MANAGER.ratio.all), - ui.Constraint.Ratio(MANAGER.ratio.current, MANAGER.ratio.all), - ui.Constraint.Ratio(MANAGER.ratio.preview, MANAGER.ratio.all) - }):split(area) + local chunks = ui.Layout() + :direction(ui.Layout.HORIZONTAL) + :constraints({ + ui.Constraint.Ratio(MANAGER.ratio.parent, MANAGER.ratio.all), + ui.Constraint.Ratio(MANAGER.ratio.current, MANAGER.ratio.all), + ui.Constraint.Ratio(MANAGER.ratio.preview, MANAGER.ratio.all), + }) + :split(area) - local bar = function(c, x, y) - return ui.Bar(ui.Rect { - x = math.max(0, x), - y = math.max(0, y), - w = math.min(1, area.w), - h = math.min(1, area.h) - }, ui.Bar.TOP):symbol(c) - end + local bar = function(c, x, y) + return ui.Bar( + ui.Rect({ + x = math.max(0, x), + y = math.max(0, y), + w = math.min(1, area.w), + h = math.min(1, area.h), + }), + ui.Bar.TOP + ):symbol(c) + end - return ya.flat { - -- Borders - ui.Border(area, ui.Border.ALL):type(ui.Border.ROUNDED), - ui.Bar(chunks[1], ui.Bar.RIGHT), ui.Bar(chunks[3], ui.Bar.LEFT), + return ya.flat({ + -- Borders + ui.Border(area, ui.Border.ALL):type(ui.Border.ROUNDED), + ui.Bar(chunks[1], ui.Bar.RIGHT), + ui.Bar(chunks[3], ui.Bar.LEFT), - bar("┬", chunks[1].right - 1, chunks[1].y), - bar("┴", chunks[1].right - 1, chunks[1].bottom - 1), - bar("┬", chunks[2].right, chunks[2].y), - bar("┴", chunks[2].right, chunks[1].bottom - 1), -- Parent - Parent:render(chunks[1]:padding(ui.Padding.xy(1))), -- Current - Current:render(chunks[2]:padding(ui.Padding.y(1))), -- Preview - Preview:render(chunks[3]:padding(ui.Padding.xy(1))) - } + bar("┬", chunks[1].right - 1, chunks[1].y), + bar("┴", chunks[1].right - 1, chunks[1].bottom - 1), + bar("┬", chunks[2].right, chunks[2].y), + bar("┴", chunks[2].right, chunks[1].bottom - 1), -- Parent + Parent:render(chunks[1]:padding(ui.Padding.xy(1))), -- Current + Current:render(chunks[2]:padding(ui.Padding.y(1))), -- Preview + Preview:render(chunks[3]:padding(ui.Padding.xy(1))), + }) end -Status = {area = ui.Rect.default} +Status = { area = ui.Rect.default } function Status.style() - if cx.active.mode.is_select then - return THEME.status.mode_select - elseif cx.active.mode.is_unset then - return THEME.status.mode_unset - else - return THEME.status.mode_normal - end + if cx.active.mode.is_select then + return THEME.status.mode_select + elseif cx.active.mode.is_unset then + return THEME.status.mode_unset + else + return THEME.status.mode_normal + end end function Status:mode() - local mode = tostring(cx.active.mode):upper() - if mode == "UNSET" then mode = "UN-SET" end + local mode = tostring(cx.active.mode):upper() + if mode == "UNSET" then + mode = "UN-SET" + end - local style = self.style() - return ui.Line { - ui.Span(THEME.status.separator_open):fg(style.bg), - ui.Span(" " .. mode .. " "):style(style) - } + local style = self.style() + return ui.Line({ + ui.Span(THEME.status.separator_open):fg(style.bg), + ui.Span(" " .. mode .. " "):style(style), + }) end function Status:size() - local h = cx.active.current.hovered - if h == nil then return ui.Line {} end + local h = cx.active.current.hovered + if h == nil then + return ui.Line({}) + end - local style = self.style() - return ui.Line { - ui.Span(" " .. ya.readable_size(h:size() or h.cha.length) .. " "):fg( - style.bg):bg(THEME.status.separator_style.bg), - ui.Span(THEME.status.separator_close):fg(THEME.status.separator_style.fg) - } + local style = self.style() + return ui.Line({ + ui.Span(" " .. ya.readable_size(h:size() or h.cha.length) .. " ") + :fg(style.bg) + :bg(THEME.status.separator_style.bg), + ui.Span(THEME.status.separator_close):fg(THEME.status.separator_style.fg), + }) end function Status:name() - local h = cx.active.current.hovered - if h == nil then return ui.Span("") end - local linked = "" - if h.link_to ~= nil then linked = " -> " .. tostring(h.link_to) end - return ui.Span(" " .. h.name .. linked) + local h = cx.active.current.hovered + if h == nil then + return ui.Span("") + end + local linked = "" + if h.link_to ~= nil then + linked = " -> " .. tostring(h.link_to) + end + return ui.Span(" " .. h.name .. linked) end function Status:permissions() - local h = cx.active.current.hovered - if h == nil then return ui.Line {} end + local h = cx.active.current.hovered + if h == nil then + return ui.Line({}) + end - local perm = h.cha:permissions() - if perm == nil then return ui.Line {} end + local perm = h.cha:permissions() + if perm == nil then + return ui.Line({}) + end - local spans = {} - for i = 1, #perm do - local c = perm:sub(i, i) - local style = THEME.status.permissions_t - if c == "-" then - style = THEME.status.permissions_s - elseif c == "r" then - style = THEME.status.permissions_r - elseif c == "w" then - style = THEME.status.permissions_w - elseif c == "x" or c == "s" or c == "S" or c == "t" or c == "T" then - style = THEME.status.permissions_x - end - spans[i] = ui.Span(c):style(style) - end - return ui.Line(spans) + local spans = {} + for i = 1, #perm do + local c = perm:sub(i, i) + local style = THEME.status.permissions_t + if c == "-" then + style = THEME.status.permissions_s + elseif c == "r" then + style = THEME.status.permissions_r + elseif c == "w" then + style = THEME.status.permissions_w + elseif c == "x" or c == "s" or c == "S" or c == "t" or c == "T" then + style = THEME.status.permissions_x + end + spans[i] = ui.Span(c):style(style) + end + return ui.Line(spans) end function Status:percentage() - local percent = 0 - local cursor = cx.active.current.cursor - local length = #cx.active.current.files - if cursor ~= 0 and length ~= 0 then - percent = math.floor((cursor + 1) * 100 / length) - end + local percent = 0 + local cursor = cx.active.current.cursor + local length = #cx.active.current.files + if cursor ~= 0 and length ~= 0 then + percent = math.floor((cursor + 1) * 100 / length) + end - if percent == 0 then - percent = " Top " - else - percent = string.format(" %3d%% ", percent) - end + if percent == 0 then + percent = " Top " + else + percent = string.format(" %3d%% ", percent) + end - local style = self.style() - return ui.Line { - ui.Span(" " .. THEME.status.separator_open):fg(THEME.status - .separator_style.fg), - ui.Span(percent):fg(style.bg):bg(THEME.status.separator_style.bg) - } + local style = self.style() + return ui.Line({ + ui.Span(" " .. THEME.status.separator_open):fg(THEME.status.separator_style.fg), + ui.Span(percent):fg(style.bg):bg(THEME.status.separator_style.bg), + }) end function Status:position() - local cursor = cx.active.current.cursor - local length = #cx.active.current.files + local cursor = cx.active.current.cursor + local length = #cx.active.current.files - local style = self.style() - return ui.Line { - ui.Span(string.format(" %2d/%-2d ", cursor + 1, length)):style(style), - ui.Span(THEME.status.separator_close):fg(style.bg) - } + local style = self.style() + return ui.Line({ + ui.Span(string.format(" %2d/%-2d ", cursor + 1, length)):style(style), + ui.Span(THEME.status.separator_close):fg(style.bg), + }) end function Status:render(area) - self.area = area + self.area = area - local left = ui.Line {self:mode(), self:size(), self:name()} - local right = ui.Line { - self:owner(), self:permissions(), self:percentage(), self:position() - } - return { - ui.Paragraph(area, {left}), - ui.Paragraph(area, {right}):align(ui.Paragraph.RIGHT), - table.unpack(Progress:render(area, right:width())) - } + local left = ui.Line({ self:mode(), self:size(), self:name() }) + local right = ui.Line({ + self:owner(), + self:permissions(), + self:percentage(), + self:position(), + }) + return { + ui.Paragraph(area, { left }), + ui.Paragraph(area, { right }):align(ui.Paragraph.RIGHT), + table.unpack(Progress:render(area, right:width())), + } end function Status:owner() - local h = cx.active.current.hovered - if h == nil or ya.target_family() ~= "unix" then return ui.Line {} end + local h = cx.active.current.hovered + if h == nil or ya.target_family() ~= "unix" then + return ui.Line({}) + end - return ui.Line { - ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), - ui.Span(":"), - ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), - ui.Span(" ") - } + return ui.Line({ + ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), + ui.Span(":"), + ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), + ui.Span(" "), + }) end