added option to update the fzf command in window (issue #144)

main
bhagwan 3 years ago
parent 5ba790c392
commit dcc8eaf295

@ -43,7 +43,9 @@ M.fzf = function(opts, contents)
fzf_win:create() fzf_win:create()
local selected = fzf.raw_fzf(contents, M.build_fzf_cli(opts), local selected = fzf.raw_fzf(contents, M.build_fzf_cli(opts),
{ fzf_binary = opts.fzf_bin }) { fzf_binary = opts.fzf_bin })
fzf_win:close() if not opts.no_win_close then
fzf_win:close()
end
return selected return selected
end end

@ -172,14 +172,16 @@ end
function FzfWin:new(o) function FzfWin:new(o)
if _self then if _self then
utils.warn("Please close fzf-lua before starting a new instance") -- utils.warn("Please close fzf-lua before starting a new instance")
return nil _self._reuse = true
return _self
end end
o = o or {} o = o or {}
self = setmetatable({}, { __index = self }) self = setmetatable({}, { __index = self })
self.winopts = normalize_winopts(o) self.winopts = normalize_winopts(o)
self.previewer = o.previewer self.previewer = o.previewer
self.previewer_type = o.previewer_type self.previewer_type = o.previewer_type
self._orphaned_bufs = {}
_self = self _self = self
return self return self
end end
@ -401,7 +403,35 @@ function FzfWin:redraw()
end end
end end
function FzfWin:set_winleave_autocmd()
vim.cmd("augroup FzfLua")
vim.cmd("au!")
vim.cmd(('au WinLeave <buffer> %s'):format(
[[lua require('fzf-lua.win').win_leave()]]))
vim.cmd("augroup END")
end
function FzfWin:set_tmp_buffer()
if not self:validate() then return end
local tmp_buf = api.nvim_create_buf(false, true)
vim.api.nvim_win_set_buf(self.fzf_winid, tmp_buf)
self:set_winleave_autocmd()
-- closing the buffer here causes the win to close
-- shouldn't happen since the win is already associated
-- with tmp_buf... use this table instead
table.insert(self._orphaned_bufs, self.fzf_bufnr)
self.fzf_bufnr = tmp_buf
return self.fzf_bufnr
end
function FzfWin:create() function FzfWin:create()
if self._reuse then
-- we can't reuse the fzf term buffer
-- create a new tmp buffer for the fzf win
self:set_tmp_buffer()
return
end
if not self.winopts.split and self.previewer_is_builtin then if not self.winopts.split and self.previewer_is_builtin then
self.layout = generate_layout(self.winopts) self.layout = generate_layout(self.winopts)
end end
@ -422,8 +452,7 @@ function FzfWin:create()
-- when running async LSP with 'jump_to_single_result' -- when running async LSP with 'jump_to_single_result'
-- should also close issue #105 -- should also close issue #105
-- https://github.com/ibhagwan/fzf-lua/issues/105 -- https://github.com/ibhagwan/fzf-lua/issues/105
vim.cmd(('au WinLeave <buffer> %s'):format( self:set_winleave_autocmd()
[[lua require('fzf-lua.win').win_leave()]]))
self:reset_win_highlights(self.fzf_winid) self:reset_win_highlights(self.fzf_winid)
@ -479,15 +508,22 @@ function FzfWin:close()
if vim.api.nvim_buf_is_valid(self.fzf_bufnr) then if vim.api.nvim_buf_is_valid(self.fzf_bufnr) then
vim.api.nvim_buf_delete(self.fzf_bufnr, {force=true}) vim.api.nvim_buf_delete(self.fzf_bufnr, {force=true})
end end
if vim.api.nvim_win_is_valid(self.src_winid) then if self._orphaned_bufs then
vim.api.nvim_set_current_win(self.src_winid) for _, b in ipairs(self._orphaned_bufs) do
if vim.api.nvim_buf_is_valid(b) then
vim.api.nvim_buf_delete(b, {force=true})
end
end
end end
self.closing = nil self.closing = nil
self._reuse = nil
self._orphaned_bufs = nil
_self = nil _self = nil
end end
function FzfWin.win_leave() function FzfWin.win_leave()
local self = _self local self = _self
if not self then return end
if self._previewer and self._previewer.win_leave then if self._previewer and self._previewer.win_leave then
self._previewer:win_leave() self._previewer:win_leave()
end end

Loading…
Cancel
Save