Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions lua/bqf/qfwin/handler.lua
Original file line number Diff line number Diff line change
Expand Up @@ -225,12 +225,51 @@ local function doEdit(qwinid, idx, close, action)
return true
end

local function doNativeOpen(qwinid, idx, close)
qwinid = qwinid or api.nvim_get_current_win()
local qs = qfs:get(qwinid)
local pwinid = qs:previousWinid()
local qlist = qs:list()
local size = qlist:getQfList({size = 0}).size
if size <= 0 then
api.nvim_err_writeln('E42: No Errors')
return false
end
if not utils.isWinValid(pwinid) then
vim.notify('file window is invalid', vim.log.levels.WARN)
cmd([[exe "norm! \<CR>"]])
api.nvim_win_set_height(qwinid, math.min(10, size))
return false
end

idx = idx or api.nvim_win_get_cursor(qwinid)[1]
qlist:changeIdx(idx)
local entry = qlist:item(idx)
if entry.bufnr == 0 then
api.nvim_err_writeln('Buffer not found')
return false
end

utils.winCall(qwinid, function()
pcall(api.nvim_win_set_cursor, qwinid, {idx, 0})
cmd(('silent keepjumps %s'):format(qlist.type == 'loc' and '.ll' or '.cc'))
end)

if close and utils.isWinValid(qwinid) then
pcall(api.nvim_win_close, qwinid, true)
end
return true
end

---
---@param close boolean
---@param jumpCmd boolean
---@param qwinid number
---@param idx number
function M.open(close, jumpCmd, qwinid, idx)
if not jumpCmd then
return doNativeOpen(qwinid, idx, close)
end
doEdit(qwinid, idx, close, function(bufnr)
if jumpCmd then
local fname = fn.fnameescape(api.nvim_buf_get_name(bufnr))
Expand Down