feat: made extensions consistent with statusline

This commit is contained in:
hoob3rt 2021-03-11 00:07:38 +01:00
parent e4723362c4
commit c19724fbaa
1 changed files with 66 additions and 27 deletions

View File

@ -35,8 +35,32 @@ M.inactive_sections = {
lualine_z = { }
}
M.extensions = {
}
M.extensions = {}
local function apply_configuration(config_table)
if not config_table then return end
local function parse_sections(section_group_name)
if not config_table[section_group_name] then return end
for section_name, section in pairs(config_table[section_group_name]) do
M[section_group_name][section_name] = config_table[section_group_name][section_name]
if type(section) == 'table' then
for _, component in pairs(section) do
if type(component) == 'table' and type(component[2]) == 'table' then
local options = component[2]
component[2] = nil
for key, val in pairs(options) do
component[key] = val
end
end
end
end
end
end
parse_sections('options')
parse_sections('sections')
parse_sections('inactive_sections')
if config_table.extensions then M.extensions = config_table.extensions end
end
local function check_single_separator()
local compoennt_separator = M.options.component_separators
@ -126,9 +150,7 @@ local function component_loader(component)
end
end
local function load_components()
local function load_sections(sections)
local function load_sections(sections)
for section_name, section in pairs(sections) do
for index, component in pairs(section) do
if type(component) == 'string' or type(component) == 'function' then
@ -140,22 +162,19 @@ local function load_components()
section[index] = component
end
end
end
end
local function load_components()
load_sections(M.sections)
load_sections(M.inactive_sections)
end
local function load_extensions()
for _, extension in pairs(M.extensions) do
if type(extension) == 'string' then
require('lualine.extensions.' .. extension).load_extension()
end
if type(extension) == 'table' then
extension.load_extension()
end
if type(extension) == 'function' then
extension()
end
for index, extension in pairs(M.extensions) do
local local_extension = require('lualine.extensions.' .. extension)
load_sections(local_extension.sections)
load_sections(local_extension.inactive_sections)
M.extensions[index] = local_extension
end
end
@ -181,7 +200,27 @@ local function lualine_set_theme()
theme_set = M.options.theme
end
local function statusline(sections, is_focused)
local function statusline(is_focused)
local sections = nil
for _, extension in ipairs(M.extensions) do
for _, filetype in ipairs(extension.filetypes) do
if vim.bo.filetype == filetype then
if is_focused then
sections = extension.sections
else
sections = extension.inactive_sections
end
break
end
end
end
if sections == nil then
if is_focused then
sections = M.sections
else
sections = M.inactive_sections
end
end
if M.options.theme ~= theme_set then
_G.lualine_set_theme()
end
@ -252,9 +291,9 @@ end
local function status_dispatch()
if vim.g.statusline_winid == vim.fn.win_getid() then
return statusline(M.sections, true)
return statusline(true)
else
return statusline(M.inactive_sections, false)
return statusline(false)
end
end