Skip to content

Commit

Permalink
feat(title): implement dynamic view title feature (#90)
Browse files Browse the repository at this point in the history
## What is this PR for?
Accept and use function as view title. This provides option to implement
per view dynamic/context based title.

## Does this PR fix an existing issue?
Fixes #59

Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
  • Loading branch information
gj86 and folke committed Jul 7, 2024
1 parent a781db1 commit cdb740f
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 9 deletions.
6 changes: 3 additions & 3 deletions lua/edgy/edgebar.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lua/edgy/editor.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 11 additions & 4 deletions lua/edgy/view.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion lua/edgy/window.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit cdb740f

Please sign in to comment.