From d971d87f45886bf773e7be1370b7eeae59767601 Mon Sep 17 00:00:00 2001 From: SL1900 <43700351+SL1900@users.noreply.github.com> Date: Sat, 30 May 2026 13:44:07 +0900 Subject: [PATCH] Added window movement script using window-picker plugin --- init.lua | 3 ++ window_movement.lua | 111 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 window_movement.lua diff --git a/init.lua b/init.lua index 4ef3519..b759f7e 100644 --- a/init.lua +++ b/init.lua @@ -151,6 +151,9 @@ highlight.setup() local quickCommand = require("quick-command/quick-command") quickCommand.setup() +local windowMovement = require("window_movement") +windowMovement.setup() + vim.api.nvim_create_autocmd({ 'VimLeavePre' }, { group = vim.api.nvim_create_augroup('fuck_shada_temp', { clear = true }), pattern = { '*' }, diff --git a/window_movement.lua b/window_movement.lua new file mode 100644 index 0000000..4475995 --- /dev/null +++ b/window_movement.lua @@ -0,0 +1,111 @@ +local window_picker = require("window-picker") + +local M = {} + +M.setup = function () + vim.api.nvim_create_user_command( + "WindowMove", + function () + M.run() + end, + { desc = "Move window close to another one" } + ) + vim.keymap.set("n", "m", M.run, { desc = "Move window"}) +end + +local function OpenActionSelectionWindow(target_win_id) + local buf = vim.api.nvim_create_buf(false, true) + + local lines = { + "", + "Select direction to attach current buffer to", + "K/↑ - Up ", + "J/↓ - Down ", + "H/← - Left ", + "L/→ - Right", + } + local max_width = 0 + for _,value in ipairs(lines) do + if max_width < #value then + max_width = #value + end + end + max_width = max_width + 2 + for index,value in ipairs(lines) do + lines[index] = string.rep(" ", max_width / 2 - math.floor(#value / 2)) .. value + end + + local window_size = { + width = max_width, + height = #lines + 1, + } + + local opts = { + relative = "editor", + width = window_size.width, + height = window_size.height, + col = (vim.o.columns - window_size.width) / 2, + row = (vim.o.lines - window_size.height) / 2, + anchor = "NW", + style = "minimal", + border = "rounded", + } + + local win = vim.api.nvim_open_win(buf, true, opts) + + vim.api.nvim_buf_set_lines(buf, 0, -1, false, lines) + + local keymap_opts = { noremap = true, silent = true, buffer = buf } + + vim.keymap.set("n", "q", "close", keymap_opts) + vim.keymap.set("n", "", "close", keymap_opts) + + -- vim.keymap.set("n", "", function () + -- vim.api.nvim_win_close(win, true) + -- end, keymap_opts) + + local function CloseCurrentBuffer() + local current_buffer = vim.api.nvim_get_current_buf() + vim.api.nvim_win_close(vim.api.nvim_get_current_win(), true) + return current_buffer + end + + ---@param direction "left" | "right" | "above" | "below" + local function SplitWindow(direction) + vim.api.nvim_win_close(vim.api.nvim_get_current_win(), true) + local buf_id = CloseCurrentBuffer() + vim.api.nvim_open_win(buf_id, true, { + win = target_win_id, + split = direction, + }) + end + + local function MoveToDown() + SplitWindow("below") + end + local function MoveToUp() + SplitWindow("above") + end + local function MoveToLeft() + SplitWindow("left") + end + local function MoveToRight() + SplitWindow("right") + end + vim.keymap.set("n", "j", MoveToDown, keymap_opts) + vim.keymap.set("n", "", MoveToDown, keymap_opts) + vim.keymap.set("n", "k", MoveToUp, keymap_opts) + vim.keymap.set("n", "", MoveToUp, keymap_opts) + vim.keymap.set("n", "h", MoveToLeft, keymap_opts) + vim.keymap.set("n", "", MoveToLeft, keymap_opts) + vim.keymap.set("n", "l", MoveToRight, keymap_opts) + vim.keymap.set("n", "", MoveToRight, keymap_opts) +end + +M.run = function () + local win_id = window_picker.pick_window() + if not win_id then return end + OpenActionSelectionWindow(win_id) +end + +return M;