diff --git a/lua/lualine/init.lua b/lua/lualine/init.lua index 3c26797..6eef05f 100644 --- a/lua/lualine/init.lua +++ b/lua/lualine/init.lua @@ -1,7 +1,7 @@ -- Copyright (c) 2020-2021 hoob3rt -- MIT license, see LICENSE for more details. -local utils_component = require('lualine.utils.component') local utils = require('lualine.utils.utils') +local utils_section = require('lualine.utils.section') local highlight = require('lualine.highlight') local config = require('lualine.config') @@ -194,7 +194,7 @@ local function statusline(sections, is_focused) local section_highlight = highlight.format_highlight(is_focused, 'lualine_' .. section_name) - local section_data = utils_component.draw_section( + local section_data = utils_section.draw_section( sections['lualine_' .. section_name], section_highlight) if #section_data > 0 then diff --git a/lua/lualine/utils/component.lua b/lua/lualine/utils/component.lua index d6be489..5b79287 100644 --- a/lua/lualine/utils/component.lua +++ b/lua/lualine/utils/component.lua @@ -5,7 +5,7 @@ local M = {} local highlight = require 'lualine.highlight' -- set upper or lower case -local function apply_case(status, options) +function M.apply_case(status, options) -- Donn't work on components that emit vim statusline escaped chars if status:find('%%') and not status:find('%%%%') then return status end if options.upper == true then @@ -17,7 +17,7 @@ local function apply_case(status, options) end -- Adds spaces to left and right of a component -local function apply_padding(status, options) +function M.apply_padding(status, options) local l_padding = (options.left_padding or options.padding or 1) local r_padding = (options.right_padding or options.padding or 1) if l_padding then @@ -36,7 +36,7 @@ local function apply_padding(status, options) end -- Applies custom highlights for component -local function apply_highlights(status, options, default_hl) +function M.apply_highlights(status, options, default_hl) if options.color_highlight then status = highlight.component_format_highlight(options.color_highlight) .. status @@ -45,7 +45,7 @@ local function apply_highlights(status, options, default_hl) end -- Apply icon in front of component -local function apply_icon(status, options) +function M.apply_icon(status, options) if options.icons_enabled and options.icon then status = options.icon .. ' ' .. status end @@ -54,7 +54,7 @@ end -- Apply separator at end of component only when -- custom highlights haven't affected background -local function apply_spearator(status, options) +function M.apply_spearator(status, options) local separator if options.separator and #options.separator > 0 then separator = options.separator @@ -71,7 +71,7 @@ local function apply_spearator(status, options) return status end -local function strip_separator(status, options) +function M.strip_separator(status, options) if options.separator_applied then status = status:sub(1, #status - #options.separator_applied) options.separator_applied = nil @@ -79,47 +79,4 @@ local function strip_separator(status, options) return status end --- 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 = apply_icon(localstatus, component) - localstatus = apply_case(localstatus, component) - localstatus = apply_padding(localstatus, component) - localstatus = apply_highlights(localstatus, component, highlight_name) - localstatus = 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] = strip_separator(status[i], drawn_components[i]) - if i > 1 then - status[i - 1] = strip_separator(status[i - 1], drawn_components[i - 1]) - end - end - end - status[#status] = strip_separator(status[#status], drawn_components[#status]) - return table.concat(status) -end - return M diff --git a/lua/lualine/utils/section.lua b/lua/lualine/utils/section.lua new file mode 100644 index 0000000..dbc7f86 --- /dev/null +++ b/lua/lualine/utils/section.lua @@ -0,0 +1,48 @@ +-- 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