Skip to content

Commit da0341d

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

File tree

1 file changed

+50
-7
lines changed

1 file changed

+50
-7
lines changed

lua/bqf/qfwin/handler.lua

Lines changed: 50 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
@@ -244,6 +244,49 @@ function M.open(close, jumpCmd, qwinid, idx)
244244
cmd(('%s %s'):format(jumpCmd, fname))
245245
else
246246
api.nvim_set_current_buf(bufnr)
247+
local current_tabnr = vim.api.nvim_win_get_tabpage(vim.api.nvim_get_current_win())
248+
local winnr
249+
local winid
250+
local bufInfos = fn.getbufinfo(bufnr)
251+
for key, buffinfo in pairs(bufInfos) do
252+
local windows = buffinfo.windows
253+
for i = 1, #windows do
254+
local window = windows[i]
255+
local wininfo = vim.fn.getwininfo(window)[1]
256+
257+
-- if wininfo.tabnr ~= current_tabnr then
258+
-- print('break')
259+
-- -- continue
260+
-- do break end
261+
-- end
262+
263+
local winnr_ = wininfo.winnr
264+
local winid_ = wininfo.winid
265+
266+
if not (winnr) then
267+
winnr = winnr_
268+
winid = winid_
269+
else
270+
if winnr_ < winnr then
271+
winnr = winnr_
272+
winid = winid_
273+
end
274+
end
275+
276+
if winnr_ == 1 then
277+
break
278+
end
279+
end
280+
end
281+
282+
if not (winid) then
283+
local buffnr = vim.fn.winbufnr(1)
284+
local winid = vim.fn.bufwinid(buffnr)
285+
vim.api.nvim_set_current_win(winid)
286+
else
287+
vim.api.nvim_set_current_win(winid)
288+
end
289+
api.nvim_set_current_buf(bufnr)
247290
end
248291
end)
249292
end
@@ -257,10 +300,10 @@ function M.tabedit(stay, qwinid, idx)
257300
qwinid = qwinid or api.nvim_get_current_win()
258301
local unnameBuf = true
259302
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
303+
unnameBuf = false
304+
local fname = fn.fnameescape(api.nvim_buf_get_name(bufnr))
305+
cmd(('tabedit %s'):format(fname))
306+
end) then
264307
local curTabPage = api.nvim_get_current_tabpage()
265308
if not unnameBuf then
266309
api.nvim_set_current_win(qwinid)

0 commit comments

Comments
 (0)