@@ -246,45 +246,53 @@ function M.open(close, jumpCmd, qwinid, idx)
246246 local current_tabnr = vim .api .nvim_win_get_tabpage (vim .api .nvim_get_current_win ())
247247 local winnr
248248 local winid
249+ local tabnr
250+ local current_tab = false
249251 local bufInfos = fn .getbufinfo (bufnr )
250252 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 ]
253+ for i = 1 , # buffinfo .windows do
254+ local wininfo = vim .fn .getwininfo (windows [i ])[1 ]
255255
256- -- if wininfo.tabnr ~= current_tabnr then
257- -- print('break')
258- -- -- continue
259- -- do break end
260- -- end
256+ local tabnr_ = wininfo .tabnr
257+
258+ if tabnr and tabnr_ > tabnr then
259+ do break end
260+ end
261261
262262 local winnr_ = wininfo .winnr
263263 local winid_ = wininfo .winid
264264
265265 if not (winid ) then
266266 winnr = winnr_
267267 winid = winid_
268- else
269- if winnr_ < winnr then
268+ tabnr = tabnr_
269+ elseif tabnr_ == current_tabnr then
270+ if current_tab == false or winnr_ < winnr then
270271 winnr = winnr_
272+ if winnr == 1 then
273+ goto finish
274+ end
271275 winid = winid_
276+ tabnr = tabnr_
277+ current_tab = true
272278 end
273- end
274-
275- if winnr == 1 then
276- break
279+ elseif tabnr_ < tabnr then
280+ winnr = winnr_
281+ winid = winid_
282+ tabnr = tabnr_
283+ elseif winnr_ < winnr then
284+ winnr = winnr_
285+ winid = winid_
277286 end
278287 end
279288 end
280289
281290 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 )
291+ local bufnr = vim .fn .winbufnr (1 )
292+ winid = vim .fn .bufwinid (bufnr )
287293 end
294+ :: finish ::
295+ vim .api .nvim_set_current_win (winid )
288296 api .nvim_set_current_buf (bufnr )
289297 end
290298 end )
0 commit comments