diff --git a/lua/edgy/edgebar.lua b/lua/edgy/edgebar.lua index 0ec7e53..60ebb1e 100644 --- a/lua/edgy/edgebar.lua +++ b/lua/edgy/edgebar.lua @@ -157,7 +157,7 @@ function M:update(wins) -- check if the layout changed for _, view in ipairs(self.views) do if not vim.deep_equal(current[view], view.wins) then - -- dd(view.title, vim.tbl_map(tostring, view.wins), vim.tbl_map(tostring, current[view])) + -- dd(view.get_title(), vim.tbl_map(tostring, view.wins), vim.tbl_map(tostring, current[view])) -- vim.notify(before .. "\n---\n" .. tostring(self)) return true end @@ -274,9 +274,9 @@ function M:resize() elseif self.vertical then win[long] = 1 else - local title_width = vim.fn.strdisplaywidth(win.view.title) + local title_width = vim.fn.strdisplaywidth(win.view.get_title()) -- if vim.api.nvim_eval_statusline then - -- title_width = vim.api.nvim_eval_statusline(win.view.title, { + -- title_width = vim.api.nvim_eval_statusline(win.view.get_title(), { -- use_winbar = true, -- winid = win.win, -- }).width diff --git a/lua/edgy/editor.lua b/lua/edgy/editor.lua index ce83628..f0c97fe 100644 --- a/lua/edgy/editor.lua +++ b/lua/edgy/editor.lua @@ -127,7 +127,7 @@ function M.select(pos, filter) prompt = "Select Edgy Window:", ---@param w Edgy.Window format_item = function(w) - local title = w.view.title + local title = w.view.get_title() if pos == nil then title = "[" .. w.view.edgebar.pos .. "] " .. title end diff --git a/lua/edgy/view.lua b/lua/edgy/view.lua index 5b67980..7ab9c57 100644 --- a/lua/edgy/view.lua +++ b/lua/edgy/view.lua @@ -5,7 +5,7 @@ local Window = require("edgy.window") ---@class Edgy.View.Opts ---@field ft string ---@field filter? fun(buf:number, win:number):boolean? ----@field title? string +---@field title? fun():string|string ---@field size? Edgy.Size -- When a view is pinned, it will always be shown -- in the edgebar, even if it has no windows. @@ -15,7 +15,8 @@ local Window = require("edgy.window") ---@field wo? vim.wo View specific window options ---@class Edgy.View: Edgy.View.Opts ----@field title string +---@field title fun():string|string +---@field get_title fun():string ---@field wins Edgy.Window[] ---@field size Edgy.Size ---@field pinned_win? Edgy.Window @@ -30,13 +31,19 @@ function M.new(opts, edgebar) self.edgebar = edgebar self.wins = {} self.title = self.title or self.ft:sub(1, 1):upper() .. self.ft:sub(2) + self.get_title = function() + if type(self.title) == "function" then + return self.title() + end + return self.title + end self.size = self.size or {} self.opening = false return self end function M:__tostring() - local lines = { "Edgy.View(" .. self.title .. ")" } + local lines = { "Edgy.View(" .. self.get_title() .. ")" } for _, win in ipairs(self.wins) do table.insert(lines, " " .. tostring(win)) end @@ -88,7 +95,7 @@ function M:show_pinned(opts) vim.bo[buf].bufhidden = "wipe" vim.bo[buf].swapfile = false vim.bo[buf].filetype = "edgy" - vim.api.nvim_buf_set_name(buf, "edgy://" .. self.title) + vim.api.nvim_buf_set_name(buf, "edgy://" .. self.get_title()) local win = vim.api.nvim_open_win(buf, false, { relative = "editor", width = 1, diff --git a/lua/edgy/window.lua b/lua/edgy/window.lua index cfa17d0..6ef5d50 100644 --- a/lua/edgy/window.lua +++ b/lua/edgy/window.lua @@ -191,7 +191,7 @@ function M:winbar() end parts[#parts + 1] = "%#" .. icon_hl .. "#" .. icon .. "%*%<" - parts[#parts + 1] = "%#EdgyTitle# " .. self.view.title .. "%*" + parts[#parts + 1] = "%#EdgyTitle# " .. self.view.get_title() .. "%*" parts[#parts + 1] = "%T" return table.concat(parts)