mirror of https://github.com/folke/lazy.nvim.git
feat(float): floats can now be persistent
This commit is contained in:
parent
e6bf3a0d9c
commit
94472b8303
|
@ -112,7 +112,7 @@ function M.float_term(cmd, opts)
|
||||||
once = true,
|
once = true,
|
||||||
buffer = float.buf,
|
buffer = float.buf,
|
||||||
callback = function()
|
callback = function()
|
||||||
float:close()
|
float:close({ wipe = true })
|
||||||
vim.cmd.checktime()
|
vim.cmd.checktime()
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
|
@ -11,6 +11,9 @@ local ViewConfig = require("lazy.view.config")
|
||||||
---@field border? "none" | "single" | "double" | "rounded" | "solid" | "shadow"
|
---@field border? "none" | "single" | "double" | "rounded" | "solid" | "shadow"
|
||||||
---@field title? string
|
---@field title? string
|
||||||
---@field title_pos? "center" | "left" | "right"
|
---@field title_pos? "center" | "left" | "right"
|
||||||
|
---@field persistent? boolean
|
||||||
|
---@field ft? string
|
||||||
|
---@field noautocmd? boolean
|
||||||
|
|
||||||
---@class LazyFloat
|
---@class LazyFloat
|
||||||
---@field buf number
|
---@field buf number
|
||||||
|
@ -51,7 +54,7 @@ function M:init(opts)
|
||||||
style = self.opts.style ~= "" and self.opts.style or nil,
|
style = self.opts.style ~= "" and self.opts.style or nil,
|
||||||
border = self.opts.border,
|
border = self.opts.border,
|
||||||
zindex = self.opts.zindex,
|
zindex = self.opts.zindex,
|
||||||
noautocmd = true,
|
noautocmd = self.opts.noautocmd,
|
||||||
title = self.opts.title,
|
title = self.opts.title,
|
||||||
title_pos = self.opts.title and self.opts.title_pos or nil,
|
title_pos = self.opts.title and self.opts.title_pos or nil,
|
||||||
}
|
}
|
||||||
|
@ -94,27 +97,32 @@ function M:layout()
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:mount()
|
function M:mount()
|
||||||
if self.opts.file then
|
if self:buf_valid() then
|
||||||
|
-- keep existing buffer
|
||||||
|
self.buf = self.buf
|
||||||
|
elseif self.opts.file then
|
||||||
self.buf = vim.fn.bufadd(self.opts.file)
|
self.buf = vim.fn.bufadd(self.opts.file)
|
||||||
vim.fn.bufload(self.buf)
|
vim.fn.bufload(self.buf)
|
||||||
vim.bo[self.buf].modifiable = false
|
vim.bo[self.buf].modifiable = false
|
||||||
elseif self.opts.buf then
|
elseif self.opts.buf then
|
||||||
self.buf = self.opts.buf
|
self.buf = self.opts.buf
|
||||||
else
|
else
|
||||||
self.buf = vim.api.nvim_create_buf(false, false)
|
self.buf = vim.api.nvim_create_buf(false, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
self:layout()
|
self:layout()
|
||||||
self.win = vim.api.nvim_open_win(self.buf, true, self.win_opts)
|
self.win = vim.api.nvim_open_win(self.buf, true, self.win_opts)
|
||||||
self:focus()
|
self:focus()
|
||||||
|
|
||||||
|
if vim.bo[self.buf].buftype == "" then
|
||||||
vim.bo[self.buf].buftype = "nofile"
|
vim.bo[self.buf].buftype = "nofile"
|
||||||
|
end
|
||||||
if vim.bo[self.buf].filetype == "" then
|
if vim.bo[self.buf].filetype == "" then
|
||||||
vim.bo[self.buf].filetype = "lazy"
|
vim.bo[self.buf].filetype = self.opts.ft or "lazy"
|
||||||
end
|
end
|
||||||
|
|
||||||
local function opts()
|
local function opts()
|
||||||
vim.bo[self.buf].bufhidden = "wipe"
|
vim.bo[self.buf].bufhidden = self.opts.persistent and "hide" or "wipe"
|
||||||
vim.wo[self.win].conceallevel = 3
|
vim.wo[self.win].conceallevel = 3
|
||||||
vim.wo[self.win].foldenable = false
|
vim.wo[self.win].foldenable = false
|
||||||
vim.wo[self.win].spell = false
|
vim.wo[self.win].spell = false
|
||||||
|
@ -179,22 +187,64 @@ function M:on_key(key, fn, desc)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:close()
|
---@param opts? {wipe:boolean}
|
||||||
|
function M:close(opts)
|
||||||
local buf = self.buf
|
local buf = self.buf
|
||||||
local win = self.win
|
local win = self.win
|
||||||
|
local wipe = opts and opts.wipe
|
||||||
|
if wipe == nil then
|
||||||
|
wipe = not self.opts.persistent
|
||||||
|
end
|
||||||
|
|
||||||
self.win = nil
|
self.win = nil
|
||||||
|
if wipe then
|
||||||
self.buf = nil
|
self.buf = nil
|
||||||
|
end
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
if win and vim.api.nvim_win_is_valid(win) then
|
if win and vim.api.nvim_win_is_valid(win) then
|
||||||
vim.api.nvim_win_close(win, true)
|
vim.api.nvim_win_close(win, true)
|
||||||
end
|
end
|
||||||
if buf and vim.api.nvim_buf_is_valid(buf) then
|
if wipe and buf and vim.api.nvim_buf_is_valid(buf) then
|
||||||
vim.diagnostic.reset(Config.ns, buf)
|
vim.diagnostic.reset(Config.ns, buf)
|
||||||
vim.api.nvim_buf_delete(buf, { force = true })
|
vim.api.nvim_buf_delete(buf, { force = true })
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M:win_valid()
|
||||||
|
return self.win and vim.api.nvim_win_is_valid(self.win)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:buf_valid()
|
||||||
|
return self.buf and vim.api.nvim_buf_is_valid(self.buf)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:hide()
|
||||||
|
if self:win_valid() then
|
||||||
|
self:close({ wipe = false })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:toggle()
|
||||||
|
if self:win_valid() then
|
||||||
|
self:hide()
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
self:show()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:show()
|
||||||
|
if self:win_valid() then
|
||||||
|
self:focus()
|
||||||
|
elseif self:buf_valid() then
|
||||||
|
self:mount()
|
||||||
|
else
|
||||||
|
error("LazyFloat: buffer closed")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function M:focus()
|
function M:focus()
|
||||||
vim.api.nvim_set_current_win(self.win)
|
vim.api.nvim_set_current_win(self.win)
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@ function M.create()
|
||||||
Float.init(self, {
|
Float.init(self, {
|
||||||
title = Config.options.ui.title,
|
title = Config.options.ui.title,
|
||||||
title_pos = Config.options.ui.title_pos,
|
title_pos = Config.options.ui.title_pos,
|
||||||
|
noautocmd = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
if Config.options.ui.wrap then
|
if Config.options.ui.wrap then
|
||||||
|
|
Loading…
Reference in New Issue