Skip to content

Commit 487b28f

Browse files
Iraq JaberIraq Jaber
authored andcommitted
feat(qfwin): change to make opening item location consistent and predicable
1 parent 7751b6e commit 487b28f

File tree

1 file changed

+49
-7
lines changed

1 file changed

+49
-7
lines changed

lua/bqf/qfwin/handler.lua

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ function M.signVMToggle(bufnr)
7474
vim.validate({
7575
mode = {
7676
mode, function(m)
77-
-- ^V = 0x16
78-
return m:lower() == 'v' or m == ('%c'):format(0x16)
79-
end, 'visual mode'
77+
-- ^V = 0x16
78+
return m:lower() == 'v' or m == ('%c'):format(0x16)
79+
end, 'visual mode'
8080
}
8181
})
8282
-- ^[ = 0x1b
@@ -243,6 +243,48 @@ function M.open(close, jumpCmd, qwinid, idx)
243243
end
244244
cmd(('%s %s'):format(jumpCmd, fname))
245245
else
246+
local current_tabnr = vim.api.nvim_win_get_tabpage(vim.api.nvim_get_current_win())
247+
local winnr
248+
local winid
249+
local bufInfos = fn.getbufinfo(bufnr)
250+
for key, buffinfo in pairs(bufInfos) do
251+
local windows = buffinfo.windows
252+
for i = 1, #windows do
253+
local window = windows[i]
254+
local wininfo = vim.fn.getwininfo(window)[1]
255+
256+
-- if wininfo.tabnr ~= current_tabnr then
257+
-- print('break')
258+
-- -- continue
259+
-- do break end
260+
-- end
261+
262+
local winnr_ = wininfo.winnr
263+
local winid_ = wininfo.winid
264+
265+
if not (winid) then
266+
winnr = winnr_
267+
winid = winid_
268+
else
269+
if winnr_ < winnr then
270+
winnr = winnr_
271+
winid = winid_
272+
end
273+
end
274+
275+
if winnr == 1 then
276+
break
277+
end
278+
end
279+
end
280+
281+
if not (winid) then
282+
local buffnr = vim.fn.winbufnr(1)
283+
local winid = vim.fn.bufwinid(buffnr)
284+
vim.api.nvim_set_current_win(winid)
285+
else
286+
vim.api.nvim_set_current_win(winid)
287+
end
246288
api.nvim_set_current_buf(bufnr)
247289
end
248290
end)
@@ -257,10 +299,10 @@ function M.tabedit(stay, qwinid, idx)
257299
qwinid = qwinid or api.nvim_get_current_win()
258300
local unnameBuf = true
259301
if doEdit(qwinid, idx, false, function(bufnr)
260-
unnameBuf = false
261-
local fname = fn.fnameescape(api.nvim_buf_get_name(bufnr))
262-
cmd(('tabedit %s'):format(fname))
263-
end) then
302+
unnameBuf = false
303+
local fname = fn.fnameescape(api.nvim_buf_get_name(bufnr))
304+
cmd(('tabedit %s'):format(fname))
305+
end) then
264306
local curTabPage = api.nvim_get_current_tabpage()
265307
if not unnameBuf then
266308
api.nvim_set_current_win(qwinid)

0 commit comments

Comments
 (0)