diff --git a/lua/lualine/component.lua b/lua/lualine/component.lua index 22cdd8f..85db6cc 100644 --- a/lua/lualine/component.lua +++ b/lua/lualine/component.lua @@ -5,6 +5,14 @@ local highlight = require 'lualine.highlight' -- Used to provide a unique id for each component local component_no = 1 +-- Here we're manupulation the require() cache so when we +-- require('lualine.component.components') it will return this table +-- It's hacky but package.loaded is documented in lua docs so from +-- standereds point of view we're good ]. I think it's better than +-- modifiying global state +package.loaded['lualine.component.components'] = {} +local components = package.loaded['lualine.component.components'] + local Component = { -- Creates a new component new = function(self, options, child) @@ -19,6 +27,7 @@ local Component = { new_component.options.component_name = tostring(component_no) end new_component.component_no = component_no + components[component_no] = new_component new_component:set_separator() new_component:create_option_highlights() end @@ -148,7 +157,17 @@ local Component = { -- luacheck: pop -- Driver code of the class - draw = function(self, default_highlight) + draw = function(self, default_highlight, statusline_inactive) + -- Check if we are in in inactive state and need to enable inactive_eval + -- for this compoennt + if self.inactive_eval and not statusline_inactive and vim.g.statusline_winid ~= + vim.fn.win_getid() then + -- In that case we'll return a evaluator + self.status = '%' .. string.format( + '{%%v:lua.require\'lualine.utils.utils\'.lualine_eval(%s,\'\',v:true)%%}', + tostring(self.component_no)) + return self.status + end self.status = '' if self.options.condition ~= nil and self.options.condition() ~= true then return self.status @@ -162,7 +181,9 @@ local Component = { self:apply_padding() self:apply_section_separators() self:apply_highlights(default_highlight) - self:apply_separator() + if not (statusline_inactive and self.last_component) then + self:apply_separator() + end end return self.status end diff --git a/lua/lualine/components/filename.lua b/lua/lualine/components/filename.lua index d43c60b..1230934 100644 --- a/lua/lualine/components/filename.lua +++ b/lua/lualine/components/filename.lua @@ -2,6 +2,8 @@ -- MIT license, see LICENSE for more details. local FileName = require('lualine.component'):new() +FileName.inactive_eval = true + local function count(base, pattern) return select(2, string.gsub(base, pattern, '')) end diff --git a/lua/lualine/utils/section.lua b/lua/lualine/utils/section.lua index 4231268..00e7721 100644 --- a/lua/lualine/utils/section.lua +++ b/lua/lualine/utils/section.lua @@ -38,6 +38,7 @@ function M.draw_section(section, section_name, is_focused) .options.section_separators[1]) end end + section[component_no].last_component = true end -- Remove component separator when color option is used in next component if strip_next_component then diff --git a/lua/lualine/utils/utils.lua b/lua/lualine/utils/utils.lua index 49bf2d4..59da208 100644 --- a/lua/lualine/utils/utils.lua +++ b/lua/lualine/utils/utils.lua @@ -56,4 +56,14 @@ function M.list_shrink(list) return new_list end +-- Wvaluate a component +function M.lualine_eval(id, ...) + local ok, components = pcall(require, 'lualine.component.components') + if ok and components then + return components[id]:draw(...) + else + return '' + end +end + return M