136 lines
4.2 KiB
Lua
136 lines
4.2 KiB
Lua
-- Copyright (c) 2020-2021 hoob3rt
|
|
-- MIT license, see LICENSE for more details.
|
|
local require = require('lualine_require').require
|
|
local utils = require('lualine.utils.utils')
|
|
local modules = require('lualine_require').lazy_require {
|
|
utils_notices = 'lualine.utils.notices',
|
|
}
|
|
|
|
local config = {
|
|
options = {
|
|
icons_enabled = true,
|
|
theme = 'auto',
|
|
component_separators = { left = '', right = '' },
|
|
section_separators = { left = '', right = '' },
|
|
disabled_filetypes = {
|
|
statusline = {},
|
|
winbar = {},
|
|
},
|
|
always_divide_middle = true,
|
|
globalstatus = vim.go.laststatus == 3,
|
|
refresh = {
|
|
statusline = 1000,
|
|
tabline = 1000,
|
|
winbar = 1000,
|
|
},
|
|
},
|
|
sections = {
|
|
lualine_a = { 'mode' },
|
|
lualine_b = { 'branch', 'diff', 'diagnostics' },
|
|
lualine_c = { 'filename' },
|
|
lualine_x = { 'encoding', 'fileformat', 'filetype' },
|
|
lualine_y = { 'progress' },
|
|
lualine_z = { 'location' },
|
|
},
|
|
inactive_sections = {
|
|
lualine_a = {},
|
|
lualine_b = {},
|
|
lualine_c = { 'filename' },
|
|
lualine_x = { 'location' },
|
|
lualine_y = {},
|
|
lualine_z = {},
|
|
},
|
|
tabline = {},
|
|
winbar = {},
|
|
inactive_winbar = {},
|
|
extensions = {},
|
|
}
|
|
|
|
--- change separator format 'x' to {left='x', right='x'}
|
|
---@param separators string|table
|
|
---@return table
|
|
local function fix_separators(separators)
|
|
if separators ~= nil then
|
|
if type(separators) == 'string' then
|
|
return { left = separators, right = separators }
|
|
end
|
|
end
|
|
return separators
|
|
end
|
|
|
|
---copy raw disabled_filetypes to inner statusline & winbar tables.
|
|
---@param disabled_filetypes table
|
|
---@return table
|
|
local function fix_disabled_filetypes(disabled_filetypes)
|
|
if disabled_filetypes == nil then
|
|
return
|
|
end
|
|
if disabled_filetypes.statusline == nil then
|
|
disabled_filetypes.statusline = {}
|
|
end
|
|
if disabled_filetypes.winbar == nil then
|
|
disabled_filetypes.winbar = {}
|
|
end
|
|
for k, disabled_ft in ipairs(disabled_filetypes) do
|
|
table.insert(disabled_filetypes.statusline, disabled_ft)
|
|
table.insert(disabled_filetypes.winbar, disabled_ft)
|
|
disabled_filetypes[k] = nil
|
|
end
|
|
return disabled_filetypes
|
|
end
|
|
---extends config based on config_table
|
|
---@param config_table table
|
|
---@return table copy of config
|
|
local function apply_configuration(config_table)
|
|
if not config_table then
|
|
return utils.deepcopy(config)
|
|
end
|
|
local function parse_sections(section_group_name)
|
|
if config_table[section_group_name] == nil then
|
|
return
|
|
end
|
|
if not next(config_table[section_group_name]) then
|
|
config[section_group_name] = {}
|
|
return
|
|
end
|
|
for section_name, section in pairs(config_table[section_group_name]) do
|
|
config[section_group_name][section_name] = utils.deepcopy(section)
|
|
end
|
|
end
|
|
if config_table.options and config_table.options.globalstatus and vim.fn.has('nvim-0.7') == 0 then
|
|
modules.utils_notices.add_notice(
|
|
'### Options.globalstatus\nSorry `globalstatus` option can only be used in neovim 0.7 or higher.\n'
|
|
)
|
|
config_table.options.globalstatus = false
|
|
end
|
|
if vim.fn.has('nvim-0.8') == 0 and (next(config_table.winbar or {}) or next(config_table.inactive_winbar or {})) then
|
|
modules.utils_notices.add_notice('### winbar\nSorry `winbar can only be used in neovim 0.8 or higher.\n')
|
|
config_table.winbar = {}
|
|
config_table.inactive_winbar = {}
|
|
end
|
|
parse_sections('options')
|
|
parse_sections('sections')
|
|
parse_sections('inactive_sections')
|
|
parse_sections('tabline')
|
|
parse_sections('winbar')
|
|
parse_sections('inactive_winbar')
|
|
if config_table.extensions then
|
|
config.extensions = utils.deepcopy(config_table.extensions)
|
|
end
|
|
config.options.section_separators = fix_separators(config.options.section_separators)
|
|
config.options.component_separators = fix_separators(config.options.component_separators)
|
|
config.options.disabled_filetypes = fix_disabled_filetypes(config.options.disabled_filetypes)
|
|
return utils.deepcopy(config)
|
|
end
|
|
|
|
--- returns current active config
|
|
---@return table a copy of config
|
|
local function get_current_config()
|
|
return utils.deepcopy(config)
|
|
end
|
|
|
|
return {
|
|
get_config = get_current_config,
|
|
apply_configuration = apply_configuration,
|
|
}
|