lualine.nvim/lua/lualine/utils/section.lua

49 lines
2.1 KiB
Lua
Raw Normal View History

-- Copyright (c) 2020-2021 hoob3rt
-- MIT license, see LICENSE for more details.
local utils_component = require('lualine.utils.component')
local M ={}
-- Returns formated string for a section
function M.draw_section(section, highlight_name)
local status = {}
local drawn_components = {}
for _, component in pairs(section) do
local localstatus = component[1]()
if #localstatus > 0 then
local custom_highlight_at_begining =
localstatus:find('%%#.*#') == 1 or component.color ~= nil
-- Apply modifier functions for options
if component.format then localstatus = component.format(localstatus) end
localstatus = utils_component.apply_icon(localstatus, component)
localstatus = utils_component.apply_case(localstatus, component)
localstatus = utils_component.apply_padding(localstatus, component)
localstatus = utils_component.apply_highlights(localstatus, component, highlight_name)
localstatus = utils_component.apply_spearator(localstatus, component)
if custom_highlight_at_begining or (#drawn_components > 0 and
not drawn_components[#drawn_components].separator_applied) then
-- Don't prepend with old highlight when the component changes it imidiately
-- Or when it was already applied with separator
table.insert(status, localstatus)
else
table.insert(status, highlight_name .. localstatus)
end
table.insert(drawn_components, component)
end
end
-- Draw nothing when all the components were empty
if #status == 0 then return '' end
-- Remove separators sorounding custom highlighted component
for i = 1, #status do
if (drawn_components[i].color and drawn_components[i].color.bg) or
drawn_components[i].custom_highlight then
status[i] = utils_component.strip_separator(status[i], drawn_components[i])
if i > 1 then
status[i - 1] = utils_component.strip_separator(status[i - 1], drawn_components[i - 1])
end
end
end
status[#status] = utils_component.strip_separator(status[#status], drawn_components[#status])
return table.concat(status)
end
return M