diff options
| author | Luuk van Baal <luukvbaal@gmail.com> | 2026-03-15 01:25:10 +0100 |
|---|---|---|
| committer | Luuk van Baal <luukvbaal@gmail.com> | 2026-03-19 16:38:44 +0100 |
| commit | dff3028fe7dfbfc82c57e0130a43795f645a148c (patch) | |
| tree | 999c68fd7dd4bdce10bc8e0abbf56af898420ac2 /runtime/lua/vim | |
| parent | e406c4efd6209e093d2d2caff7e3c9a0847ee030 (diff) | |
| download | rneovim-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.lua | 36 |
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 |