From fb004d62779233cd282535aea6f463f1253edc00 Mon Sep 17 00:00:00 2001 From: Jordan Mandel Date: Sat, 23 Mar 2024 12:19:15 -0400 Subject: [PATCH 1/2] explicitly make exchanged windows not change sizes there is probably a more elegant way to do this but this works --- lua/winshift/lib.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lua/winshift/lib.lua b/lua/winshift/lib.lua index de889ed..ebb0955 100644 --- a/lua/winshift/lib.lua +++ b/lua/winshift/lib.lua @@ -90,9 +90,21 @@ function M.find_leaf(tree, winid) return recurse(tree) end +local function get_window_dimensions(winid) + return { width = api.nvim_win_get_width(winid), height = api.nvim_win_get_height(winid) } +end + +local function set_window_dimensions(winid, dimensions) + api.nvim_win_set_width(winid, dimensions.width) + api.nvim_win_set_height(winid, dimensions.height) +end + ---@param a Node ---@param b Node function M.swap_leaves(a, b) + local dimensions_a = get_window_dimensions(a.winid) + local dimensions_b = get_window_dimensions(b.winid) + vim.cmd( string.format( "noautocmd keepjumps %dwindo belowright %s", @@ -103,6 +115,7 @@ function M.swap_leaves(a, b) local temp_a = api.nvim_get_current_win() local opt_a = { vertical = a.parent.type == "col", rightbelow = false } + vim.cmd( string.format( "noautocmd keepjumps %dwindo belowright %s", @@ -115,8 +128,13 @@ function M.swap_leaves(a, b) vim.fn.win_splitmove(a.winid, temp_b, opt_b) vim.fn.win_splitmove(b.winid, temp_a, opt_a) + + api.nvim_win_close(temp_a, true) api.nvim_win_close(temp_b, true) + + set_window_dimensions(a.winid, dimensions_b) + set_window_dimensions(b.winid, dimensions_a) end ---Move a row into a target window, replacing the target. @@ -657,3 +675,4 @@ function M.highlight_win(winid) end return M + From 6c4a1ba468ac603762cc4ecab3c7add0f8f70cb1 Mon Sep 17 00:00:00 2001 From: Jordan Mandel Date: Sat, 23 Mar 2024 12:22:48 -0400 Subject: [PATCH 2/2] Update lib.lua: deleted whitespace deleted extra whitespace --- lua/winshift/lib.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/lua/winshift/lib.lua b/lua/winshift/lib.lua index ebb0955..e70e312 100644 --- a/lua/winshift/lib.lua +++ b/lua/winshift/lib.lua @@ -115,7 +115,6 @@ function M.swap_leaves(a, b) local temp_a = api.nvim_get_current_win() local opt_a = { vertical = a.parent.type == "col", rightbelow = false } - vim.cmd( string.format( "noautocmd keepjumps %dwindo belowright %s", @@ -129,7 +128,6 @@ function M.swap_leaves(a, b) vim.fn.win_splitmove(a.winid, temp_b, opt_b) vim.fn.win_splitmove(b.winid, temp_a, opt_a) - api.nvim_win_close(temp_a, true) api.nvim_win_close(temp_b, true) @@ -675,4 +673,3 @@ function M.highlight_win(winid) end return M -