aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2026-03-15 01:25:10 +0100
committerLuuk van Baal <luukvbaal@gmail.com>2026-03-19 16:38:44 +0100
commitdff3028fe7dfbfc82c57e0130a43795f645a148c (patch)
tree999c68fd7dd4bdce10bc8e0abbf56af898420ac2 /runtime/lua/vim
parente406c4efd6209e093d2d2caff7e3c9a0847ee030 (diff)
downloadrneovim-dff3028fe7dfbfc82c57e0130a43795f645a148c.tar.gz
rneovim-dff3028fe7dfbfc82c57e0130a43795f645a148c.tar.bz2
rneovim-dff3028fe7dfbfc82c57e0130a43795f645a148c.zip
fix(ui2): move windows to current tabpage
Problem: Windows are closed and re-opened after changing tabpage (and might be removed from the current tabpage after 094b297a). Solution: Ensure windows are on the current tabpage by moving them.
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/_core/ui2.lua36
1 files changed, 11 insertions, 25 deletions
diff --git a/runtime/lua/vim/_core/ui2.lua b/runtime/lua/vim/_core/ui2.lua
index 1414eb75e7..b495b7355c 100644
--- a/runtime/lua/vim/_core/ui2.lua
+++ b/runtime/lua/vim/_core/ui2.lua
@@ -51,22 +51,17 @@ local M = {
},
}
-local tab = 0
---Ensure target buffers and windows are still valid.
function M.check_targets()
local curtab = api.nvim_get_current_tabpage()
for i, type in ipairs({ 'cmd', 'dialog', 'msg', 'pager' }) do
- local oldbuf = api.nvim_buf_is_valid(M.bufs[type]) and M.bufs[type]
- local oldwin, setopt = api.nvim_win_is_valid(M.wins[type]) and M.wins[type], not oldbuf
- M.bufs[type] = oldbuf or api.nvim_create_buf(false, false)
+ local buf = api.nvim_buf_is_valid(M.bufs[type]) and M.bufs[type]
+ local win = api.nvim_win_is_valid(M.wins[type]) and M.wins[type]
+ local floating = win and api.nvim_win_get_config(win).zindex
+ local setopt = not buf or not win or not floating
+ M.bufs[type] = buf or api.nvim_create_buf(false, false)
- if tab ~= curtab and oldwin then
- -- Ensure dynamically set window configuration (M.msg.set_pos()) is copied
- -- over when switching tabpage. TODO: move to tabpage instead after #35816.
- M.wins[type] = api.nvim_open_win(M.bufs[type], false, api.nvim_win_get_config(oldwin))
- api.nvim_win_close(oldwin, true)
- setopt = true
- elseif not oldwin or not api.nvim_win_get_config(M.wins[type]).zindex then
+ if not win or not floating then
-- Open a new window when closed or no longer floating (e.g. wincmd J).
local cfg = { col = 0, row = 1, width = 10000, height = 1, mouse = false, noautocmd = true }
cfg.focusable = false
@@ -80,9 +75,11 @@ function M.check_targets()
-- kZIndexMessages < cmd zindex < kZIndexCmdlinePopupMenu (grid_defs.h), pager below others.
cfg.zindex = 201 - i
M.wins[type] = api.nvim_open_win(M.bufs[type], false, cfg)
- setopt = true
- elseif api.nvim_win_get_buf(M.wins[type]) ~= M.bufs[type] then
- api.nvim_win_set_buf(M.wins[type], M.bufs[type])
+ elseif api.nvim_win_get_tabpage(M.wins[type]) ~= curtab then
+ api.nvim_win_set_config(M.wins[type], { win = api.nvim_tabpage_get_win(curtab) })
+ end
+ if win and floating and api.nvim_win_get_buf(win) ~= M.bufs[type] then
+ api.nvim_win_set_buf(win, M.bufs[type])
setopt = true
end
@@ -125,7 +122,6 @@ function M.check_targets()
end
end
end
- tab = curtab
end
local function ui_callback(redraw_msg, event, ...)
@@ -221,16 +217,6 @@ function M.enable(opts)
end,
desc = 'Set cmdline and message window dimensions after shell resize or tabpage change.',
})
-
- api.nvim_create_autocmd('WinEnter', {
- callback = function()
- local win = api.nvim_get_current_win()
- if vim.tbl_contains(M.wins, win) and api.nvim_win_get_config(win).hide then
- vim.cmd.wincmd('p')
- end
- end,
- desc = 'Make sure hidden UI window is never current.',
- })
end
return M